diff --git a/.gitignore b/.gitignore
index 4e5e562156abbd7de31a8a946c4c03a2666d5610..84abb7e3ea0b875070c916bb610d3d5eb541a870 100644
--- a/.gitignore
+++ b/.gitignore
@@ -98,6 +98,7 @@ sflphone-client-gnome/stamp-h1
 /sflphone-client-gnome/src/widget/Makefile
 /sflphone-client-gnome/doc/Makefile
 /sflphone-client-gnome/po/Makefile
+/sflphone-client-gnome/webkit/Makefile
 
 
 # Ignore sflphone-client-gnome stuff
@@ -125,11 +126,11 @@ sflphone-client-gnome/stamp-h1
 /sflphone-client-kde/*.moc
 /sflphone-client-kde/src/moc_*.cpp
 /sflphone-client-kde/src/ui_*.h
-/sflphone-client-kde/po/
-/sflphone-client-kde/po/* 
-/sflphone-client-kde/doc/
-/sflphone-client-kde/man/
-/sflphone-client-kde/data/
+#/sflphone-client-kde/po/
+#/sflphone-client-kde/po/* 
+#/sflphone-client-kde/doc/
+#/sflphone-client-kde/man/
+#/sflphone-client-kde/data/
 /sflphone-client-kde/CMakeCache.txt
 /sflphone-client-kde/CMakeLists.txt.user
 /sflphone-client-kde/CTestTestfile.cmake
@@ -168,7 +169,7 @@ sflphone-client-gnome/stamp-h1
 /sflphone-common/libs/libiax2/Makefile
 /sflphone-common/libs/libiax2/iax2-config
 /sflphone-common/libs/libiax2/src/Makefile
-/sflphone-common
+
 ## dbus-c++
 /sflphone-common/libs/dbus-c++/Makefile
 /sflphone-common/libs/dbus-c++/autom4te.cache/requests
diff --git a/astylerc b/astylerc
index 14177d0fa0ef4086ca0e03957f3f17361d80b493..460124f66d7a1f71a6c4d0a168f9502e4755a059 100644
--- a/astylerc
+++ b/astylerc
@@ -5,11 +5,12 @@
 #           Savoir-faire Linux Inc
 #          http://www.sflphone.org 
 
-style=kr                # Kernighan & Ritchie style formatting/indenting uses linux bracket
+style=k&r                # Kernighan & Ritchie style formatting/indenting uses linux bracket
 indent=spaces=4         # Use spaces instead of tabs for indentation
 indent-classes          # Indent 'class' and 'struct' blocks so that the blocks 'public:', 'protected:' and 'private:' are indented
 indent-switches         # Indent 'switch' blocks so that the 'case X:' statements are indented in the switch block
 break-blocks            # Pad empty lines around header blocks (e.g. 'if', 'while'...).
 brackets=linux
 unpad=paren
+formatted
 -d
diff --git a/hudson-sflphone-script.sh b/hudson-sflphone-script.sh
new file mode 100755
index 0000000000000000000000000000000000000000..b406027be3b5b3c07033a825828056d9840c32bc
--- /dev/null
+++ b/hudson-sflphone-script.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# Script used by Hudson continious integration server to build SFLphone
+#
+# Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
+
+XML_RESULTS="cppunitresults.xml"
+
+set -x
+ 
+# Compile the daemon
+pushd sflphone-common
+./autogen.sh
+ Compile pjproject first
+pushd libs/pjproject
+./autogen.sh
+./configure
+make && make dep
+popd
+./configure --prefix=/usr
+make clean
+make
+make doc
+popd
+
+# Run the unit tests for the daemon
+pushd sflphone-common/test
+# Remove the previous XML test file
+rm -rf $(XML_RESULTS)
+make check
+# if at least one test failed, exit
+./test --xml || exit 1
+popd
+
+# Compile the client
+pushd sflphone-client-gnome
+./autogen.sh
+./configure --prefix=/usr
+make clean
+make
+popd
+
+# SUCCESS
+exit 0
diff --git a/lang/ar/ar.po b/lang/ar/ar.po
index a72b341b4f5f259c34509857f58eb37273c38e1e..f0094d4da1a2c05e6dec2b5dbf4541f8ac1328a8 100644
--- a/lang/ar/ar.po
+++ b/lang/ar/ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-15 16:06+0000\n"
 "Last-Translator: Zied ABID <ziedabid@gmail.com>\n"
 "Language-Team: Arabic <ar@li.org>\n"
@@ -16,578 +16,578 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
 "3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "مُسجّل"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "غير مُسجّل"
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "خلل"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "غير صحيح"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -640,479 +640,452 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+msgid "Voice enhancement settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1121,81 +1094,109 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
diff --git a/lang/ast/ast.po b/lang/ast/ast.po
index 665d9180fbb878dcf384753669365c922097e8b9..23f9a99f1a5a4e20868a6d48552a718180705f3e 100644
--- a/lang/ast/ast.po
+++ b/lang/ast/ast.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-17 01:18+0000\n"
 "Last-Translator: Xuacu Saturio <xuacusk8@gmail.com>\n"
 "Language-Team: Asturian <ast@li.org>\n"
@@ -15,64 +15,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Rexistráu"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Non rexistráu"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Probando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Fallu"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Falló n'autenticación"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Rede nun alcanzable"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Host nun alcanzable"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Error na configuración STUN"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Sirvidor STUN inválidu"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Inválidu"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Usando la cuenta"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Nun hai cuentes rexistráes"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,28 +80,28 @@ msgstr ""
 "Nun se puede coneutar col sirvidor SFLphone.\n"
 "Compruebe qu'el daemon tea funcionando."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Llamada SIP direuta"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -111,7 +111,7 @@ msgstr ""
 "\n"
 "Error al abrir el preséu de reproducción"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -121,7 +121,7 @@ msgstr ""
 "\n"
 "Error al abrir el preséu de captura"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -131,43 +131,43 @@ msgstr ""
 "\n"
 "Pulseaudio nun ta funcionando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Hai una llamada en cursu."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Hai llamaes en cursu."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "¿Entá quier salir?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Error SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "El par %s nun sofita ZRTP\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "La comunicación segura nun ta disponible"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Siguir"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Terminar llamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -176,11 +176,11 @@ msgstr ""
 "Un error de %s fizo que la llamada con %s pasara a mou ensin encriptar.\n"
 "Razón esauta: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Falló la negociación ZRTP"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -189,50 +189,50 @@ msgstr ""
 "%s quier dexar d'usar comunicación segura. Confirmar reaniciará la "
 "conversación ensin SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmar mou en claro"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s cuenta : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d mensaxe de voz"
 msgstr[1] "%d mensaxes de voz"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Llamando cola cuenta %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Cuenta actual"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Nun hai cuentes configuraes"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Nun tien denguna cuenta rexistrada"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -241,370 +241,370 @@ msgstr ""
 "<i>Con:</i> %s\n"
 "usando %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s nun tien sofitu pa ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Falló la negociación ZRTP con %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Con:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume d'altavoces"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume del micrófonu"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "Amo_sar ventana principal"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Colgar"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Buzón de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Nun s'escoyó una llibreta de direiciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Llibreta de direiciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Buzón de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 "SFLphone ye un programa de VoIP compatible colos protocolos SIP ya IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Tocante a SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "Llamada _Nueva"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Facer una llamada nueva"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Descolgar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Contestar la llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Finar la llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "_N'espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Poner la llamada n'espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "_Salir d'espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Sacar la llamada d'espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "_Asistente de configuración"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Executar l'asistente de configuración"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "Llamar al buzón de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Zarrar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Minimizar na bandexa de sistema"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Colar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Colar del programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Copiar la seleición"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "A_pegar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Pegar el conteníu del cartafueyu"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Llimpiar _hestorial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Llimpiar l'hestorial de llamáes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Cuentes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Editar les sos cuentes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "_Preferencies"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Camudar les sos preferencies"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Ver"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Aida"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Conteníu"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Abrir el manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Tocante a esta aplicación"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "_Tresferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Tresferir la llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "G_rabar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Grabar la conversación actual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "Amo_sar ferramientes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Amuesa la barra de ferramientes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Tecláu"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Amosar el tecláu pa marcar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "_Controles de volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Amuesa los controles de volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "_Hestorial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Hestorial de llamáes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Llibret_a de direiciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "_N'espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "Tornar _Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Editar númberu de teléfonu"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Editar el númberu de teléfonu enantes de llamar"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parámetros de cuenta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "Nom_atu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocolu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Desconocíu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "Nome del _host"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Nome d'_usuariu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "Cont_raseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Amosar contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "Númberu del buzón de _voz"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Autenticación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Secretu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Credencial"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nome d'autenticación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Seguridá"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Usar tresporte TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Intercambéu de clave SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Desactiváu"
 
@@ -657,40 +657,40 @@ msgstr "Afitar direición y puertu espublizaos:"
 msgid "Published port"
 msgstr "Puertu espublizáu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Códecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Axustes de la cuenta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Básicu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avanzáu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -700,95 +700,95 @@ msgstr ""
 "URI sip  como <b>sip:parremotu</b>. Los parámetros que conseñe equí, tamién "
 "van usase si una llamada entrante o saliente nun concasa con cuenta dala."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "El sirvidor devolvió \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocolu"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Estáu"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Cuentes"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Cuentes Configuraes"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "Hai %d cuenta activa"
 msgstr[1] "Hai %d cuentes actives"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Nun hai denguna cuenta activada"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Xeneral"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Usar llibreta de direiciones d'Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Llende de descarga:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "tarxetes"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Amosar foto _del contautu, si ta disponible"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Campos de les llibretes de direiciones d'Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Trabayu"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Casa"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Movil"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Llibretes de direiciones"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Esbille les llibretes de direiciones d'Evolution a usar"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nome"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Esti asistente yá finó."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -796,347 +796,322 @@ msgstr ""
 "Puede comprobar en cualisquier momentu l'estáu del rexistru, o camudar los "
 "parámetros de les cuentes de so, na ventana Opciones/Cuentes."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Nomatu"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Sirvidor"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nome d'usuariu"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Seguridá: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Denguna"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Asistente SFLphone de creación de cuentes"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "¡Bienllegáu al asistente de creación de cuentes de SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 "Esti asistente d'instalación echara-y un gabitu pa configurar una cuenta."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Escueya una triba de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Escueya una de les siguientes opciones"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Crear una cuenta SIP/IAX2 de baldre en sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Rexistrar una cuenta SIP o IAX2 esistente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Axustes de cuenta SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Conseñe la información siguiente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Comunicación segura con _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Corréu ellectrónicu opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "Estes señes de corréu van usase pa unviar los mensaxes del buzón de voz."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Corréu"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Axustes de cuenta IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Conversión de Direición de Rede (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Seique tenga qu'activar esto si ta tres d'un torgafueos."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "A_ctivar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_Sirvidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Rexistru de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "¡Norabona!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frecuencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Tasa de bits"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Anchor de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Complementu ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Salida"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "Detección d'actividá de _voz"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Tonos de llamada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "Ame_norgar ruíu (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Xestor de soníu"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Axustes de ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Grabaciones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Carpeta de destín"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Seleicione una carpeta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Activar tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Escueya un tono de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Ficheros de soníu"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Axustes de la cuenta"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL Argumentu"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Ordes personalizáes pa llamáes entrantes con URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s va trocase pola URL pasada."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Disparador pa una cabecera _SIP determinada"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Disparador pa una URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "O_rde a executar"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Reescritura de númberu telefónicu"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Prefixar los númberos marcaos con"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notificaciones nel escritoriu"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Activar notificaciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Iconu de la bandexa del sistema"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Estenderexar ventana principal al recibir llamada"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "_Nunca estenderexar ventana principal"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Anubrir _ventana SFLphone nel entamu"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Hestóricu de llamaes"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Guardar el mio hestóricu polo menos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "díes"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferencies"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Soníu"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Llibreta de direiciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Enganches"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "Opciones ZRTP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "Unviar Hash de Hello en S_DP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "Pidir al usuariu que confirme SAS"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "A_visar si nun hai sofitu ZRTP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "Amosar SAS una vegada pa eventos n'espera"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Opciones avanzaes pa TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Tresporte TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1150,81 +1125,115 @@ msgstr ""
 "pa cada cuenta. Por embargu, caún d'ellos va executase nun puertu dedicáu,\n"
 "diferentes ente sigo.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Llista de Certificaos d'Autoridá"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Escueya un ficheru de llista de CA (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Ficheru de certificáu de par públicu"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Escueye un certificáu públicu de par (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Escueye un ficheru de clave privada (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Contraseña de la clave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Métodu del protocolu TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Llista de cifráu TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Nome de sirvidor pa la conexón TLS saliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Tiempu de negociación (seg:mseg)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Comprobar certificaos entrantes, como un sirvidor"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Comprobar certificaos de la respuesta, como un cliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Requerir certificáu pa les conexones TLS entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "Opciones ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "Unviar Hash de Hello en S_DP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "Pidir al usuariu que confirme SAS"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "A_visar si nun hai sofitu ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "Amosar SAS una vegada pa eventos n'espera"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Guetar todos"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Calque equí pa camudar el tipu de gueta"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Guetar por llamaes perdíes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Guetar por llamaes entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Guetar por llamaes salientes"
+
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "Detección d'actividá de _voz"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "Ame_norgar ruíu (Narrow-Band Companding)"
diff --git a/lang/copy-in-gnome.sh b/lang/copy-in-gnome.sh
index f5e961f6ad4fb554a3694cf84de76dea04822929..6b3e3e6352877562beab5c8aa8b58b360cb63a25 100755
--- a/lang/copy-in-gnome.sh
+++ b/lang/copy-in-gnome.sh
@@ -1,6 +1,6 @@
-for fichier in `find  .  -name sflphone.po `
+for fichier in `find  .  -name *.po `
 do
 locale=`echo $fichier | cut -d / -f2`
-cp $fichier ../sflphone-client-gnome/po/$locale/sflphone-client-gnome.po
-echo "$fichier	copied to	../sflphone-client-gnome/po/$locale/sflphone-client-gnome.po"
+cp $fichier ../sflphone-client-gnome/po/$locale/$locale.po
+echo "$fichier	copied to	../sflphone-client-gnome/po/$locale/$locale.po"
 done
diff --git a/lang/da/da.po b/lang/da/da.po
index 80b4a05279dd4f2b8024bec280b83c022b01ecae..df489d7787b3447b374f85f4b6ea04565bd918cf 100644
--- a/lang/da/da.po
+++ b/lang/da/da.po
@@ -7,72 +7,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: 2010-03-30 20:01+0000\n"
-"Last-Translator: AJenbo <anders@jenbo.dk>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-05-01 01:15+0000\n"
+"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
 "Language-Team: Danish <da@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registreret"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Ikke registreret"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Forsøger..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Fejl"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Godkendelse mislykkedes"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Netværk kan ikke nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Vært kan ikke nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun konfigureringsfejl"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Stun server ugyldig"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Ugyldig"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Benytter konto"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Ingen registrerede konti"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,28 +80,28 @@ msgstr ""
 "Forbindelse til SFLphone serveren kan ikke oprettes.\n"
 "Sørg for at server-dæmonen kører."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Direkte IP opkald"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -111,7 +111,7 @@ msgstr ""
 "\n"
 "Fejl opstod mens afspilningsenhed blev åbnet"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -121,7 +121,7 @@ msgstr ""
 "\n"
 "Fejl opstod mens optageenhed blev åbnet"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -131,43 +131,43 @@ msgstr ""
 "\n"
 "PulseAudio er tilgængelig"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Et igangværende opkald eksisterer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Igangværende opkald eksisterer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Ønsker du stadig at afslutte"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone fejl"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP er ikke understøttet af modtageren %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Sikker kommunikation ikke tilgængelig"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Fortsæt"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Afslut opkald"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -177,11 +177,11 @@ msgstr ""
 "tilstand.\n"
 "Den præcise årsag: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "ZRTP-forhandling mislykkedes"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -190,50 +190,50 @@ msgstr ""
 "%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil "
 "samtalen fortætte uden SRTP\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Godkend sikkerhedsændring"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Godkend"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s konto : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Fra</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d indtalt besked"
 msgstr[1] "%d indtalte beskeder"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Kalder op med %s konto <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Nuværende konto"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Du har ingen oprettede konti"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Du har ingen registrerede konti"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -242,369 +242,369 @@ msgstr ""
 "<i>Med:</i> %s \n"
 "benyttende %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s understøtter ikke ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "ZRTP forhandling mislykkedes med %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Med:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Højtaler lydstyrke"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Mikrofon lydstyrke"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Vis hovedvindue"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Læg på"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Talebesked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Ingen adressebog er valgt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Talebesked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller"
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Om SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Afslut opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nyt opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Lav et nyt opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Svar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Besvar opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Afslut opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "I _venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Sæt opkaldet i venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "F_jern fra venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Fjern opkaldet fra venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Konfigurationsfil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun konfigureringsfejl"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d indtalt besked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Luk"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Minimere til systembakken"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Afslut"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Afslut programmet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Rediger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Kopier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Kopier det valgte"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "Inds_æt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Indsæt indholdet af udklipsholderen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "Konti"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Nuværende konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Ændr dine indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Vis"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Hjælp"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Fortsæt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Åbn manualen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Godkendelse"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "_Overfør"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Overfør opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Optag"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Optag den aktuelle samtale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "_Vis værktøjslinie"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Vis værktøjslinien"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Nummertastatur"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Vis nummertastaturet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Vis _lydstyrke indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Vis lydstyrke indstillingerne"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "I _venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Besvar opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Ændre telefonnummer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Ændre telefonnummeret før opkald"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Kontoparametre"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protokol"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Ukendt"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Værtsnavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Brugernavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Adgangskode"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Adgangskode"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Nummer for talebesked"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Godkendelse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Hemmelig"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Legitimationsoplysning"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Godkendelsesnavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Adgangskode"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Sikkerhed"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Benyt TLS transport (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "SRTP-nøgleudveksling"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Deaktiveret"
 
@@ -657,40 +657,40 @@ msgstr "Konfigurer offentliggjort adresse og port:"
 msgid "Published port"
 msgstr "Offentliggjort port"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
-msgstr ""
+msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Grundlæggende"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
-msgstr "Advanceret"
+msgstr "Avanceret"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Netværk"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -701,95 +701,95 @@ msgstr ""
 "du definerer her vil også benyttes hvis ingen konto kan tilknyttes et "
 "indgående eller udgående opkald."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "Server svarede \""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protokol"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Status"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Konti"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Oprettede konti"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "aktiv konto"
 msgstr[1] "aktiv konto"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Der er ingen aktive konti"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Generelt"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Benyt Evolution adressekartotek"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Download begrænsning :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "kort"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Vis _kontaktbillede hvis tilgængeligt"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Felter fra Evolutions adressekartotek"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Arbejde"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Hjem"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Mobil"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Adressekartoteker"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Navn"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Denne vejledning er nu fuldført"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -797,346 +797,321 @@ msgstr ""
 "Du kan til enhver tid undersøge din registrering eller ændre dine kontis "
 "parametre i vinduet Indstillinger/Konti"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Brugernavn"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Sikkerhed: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Ingen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone-guiden til oprettelse af konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Velkommen til kontooperettelsesvejledning for SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 "Denne installeringsvejledning vil hjælpe dig med at konfigurere en konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP protokoller"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Vælg en kontotype"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Vælg en af følgende indstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Opret en gratis SIP/IAX2 konto hos sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrer en eksisterende SIP eller IAX2 konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIP kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Udfyld venligst følgende information"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Sikker kommunikation med _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Valgfri emailadresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "Denne emailadresse vil blive brugt til at sende dig indtalte beskeder"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Emailadresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2 kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "_Benyt STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_STUN server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Kontoregistrering"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Tillykke!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frekvens"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bithastighed"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Båndbredde"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA plugin"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Uddata"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Inddata"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "_Detektering af taleaktivitet"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Ringetoner"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Støjreducering (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Lydhåndtering"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_PulseAudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA indstillinger"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Optagelser"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Destinationsmappe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Vælg en mappe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Aktiver _ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Vælg en ringetone"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Lydfiler"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Kontoindstillinger"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Adresseargument"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Brugerdefinerede kommandoer ved indgående opkald med webadresse"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s vil blive erstattet med den givne webadresse."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Udløse ved specifik _SIP protokolhoved"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Udløse ved _IAX2 webadresse"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Kommando som skal _kaldes"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Omskrivning af telefonnummer"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Præfiks for indtastede numre"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Meddelelser"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Aktiver meddelelser"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Systembakke-ikon"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Vis hovedvindue ved indgående opkald"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Aldrig _pop-op hovedvindue"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Skjul SFLphone vinduet ved _start"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Gem min historik i mindst"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "dage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Indstillinger"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Hooks"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "ZRTP indstillinger"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "Send \"Hello Hash\" i S_DP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "_Spørg bruger om at godkende SAS"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "_Advar hvis ZRTP ikke understøttes"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "_Vis SAS en enkelt gang for vente-hændelser"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Advancerede indstillinger for TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "TLS transport"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1149,85 +1124,119 @@ msgstr ""
 "TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n"
 "en dedikeret port forskellig fra hinanden.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Autoritetscertifikatsliste"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Offentlig endpoint certifikatsfil"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Vælg et offentligt endpoint-certifikat (valgfri)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Vælg en privat nøglefil (valgfri)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Adgangskode for den private nøgle"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "TLS protokolmetode"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "TLS cifferliste"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Server navneinstans for udgående TLS forbindelse"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Forhandlingstimeout"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Udfør kontrol af indgående certifikater, som en server"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Udfør kontrol af certifikater fra svar, som en klient"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Kræv certifikat for indgående TLS forbindelser"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "ZRTP indstillinger"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "Send \"Hello Hash\" i S_DP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "_Spørg bruger om at godkende SAS"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "_Advar hvis ZRTP ikke understøttes"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "_Vis SAS en enkelt gang for vente-hændelser"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Søg alle"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Klik her for at ændre søgningstypen"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Søg i ubesvarede opkald"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Søg i indgående opkald"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Søg i udgående opkald"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "_Detektering af taleaktivitet"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Støjreducering (Narrow-Band Companding)"
+
 #~ msgid "SIP Port"
 #~ msgstr "SIP Port"
 
diff --git a/lang/de/de.po b/lang/de/de.po
index 7c3122b07bf95223c8f5d0b93ce5fbe32dfdf262..1ef5bedaa91c13f31af20adee8d3efdd1c82422d 100644
--- a/lang/de/de.po
+++ b/lang/de/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2010-04-03 16:49+0000\n"
 "Last-Translator: Jakob Kramer <Unknown>\n"
 "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n"
@@ -15,64 +15,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registriert"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Nicht registriert"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Am versuchen..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Fehler"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Authentifizierung fehlgeschlagen"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Kein netzwerk"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Host unerreichbar"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun: Konfigurationsfehler"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Ungültiger Stun server"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Ungültig"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Mit Konto"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Kein registriertes Konto"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,28 +80,28 @@ msgstr ""
 "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der "
 "Dämon läuft."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Direkter SIP-Anruf"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr "heute um %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr "gestern um %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -111,7 +111,7 @@ msgstr ""
 "\n"
 "Fehler während Öffnen des \"playback device\""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -121,7 +121,7 @@ msgstr ""
 "\n"
 "Fehler während Öffnen des \"capture device\""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -131,43 +131,43 @@ msgstr ""
 "\n"
 "Pulseaudio nicht gestartet"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Laufender Anruf."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Laufende Anrufe."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone Fehler"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP wird vom Nutzer %s nicht unterstützt\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Sichere Verbindung nicht verfügbar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Weiter"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Anruf beenden"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -176,11 +176,11 @@ msgstr ""
 "Ein %s Fehler verhinderte die Verschlüsselung des Telefonats mit %s.\n"
 "Genauer Grund: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "ZRTP Übertragung fehlgeschlagen"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -189,50 +189,50 @@ msgstr ""
 "%s will die sichere Kommunikation beenden. Das Gespräch wird dann ohne SRTP "
 "fortgesetzt.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Bestätigen"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "Konto %s : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Von</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d Voice Nachricht"
 msgstr[1] "%d Voice Nachricht"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Mit %s Konto <i>%s</i> anrufen"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Aktuelles Konto"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Sie haben noch kein Konto eingestellt"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Sie haben noch kein registriertes Konto"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -241,369 +241,369 @@ msgstr ""
 "<i>Mit:</i> %s \n"
 "unter Verwendung von %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s unterstützt ZRTP nicht."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "ZRTP-Übertragung mit %s schlug fehl"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Mit:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Lautsprecher Lautstärke"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Mikro Lautstärke"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Hauptfenster anzeigen"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "A_uflegen"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] "%i aktiver Account"
 msgstr[1] "%i aktive Accounts"
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Voicemail"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Voicemail (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Über SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Anruf"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Neuer Anruf"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Einen neuen Anruf tätigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Abnehmen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Auf den Anruf antworten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Den Anruf beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "in _Warteschleife"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Einrichtungsdatei"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun: Konfigurationsfehler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d Voice Nachricht"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Das Programm beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Entfernen Sie das ausgewählte Konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Liste der vorherigen Anrufen _leeren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Vorherigen Anrufen leeren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Konten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Aktuelles Konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Einstellungen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Ihre Einstellungen ändern"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Hilfe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Weiter"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Authentifizierung"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Weiterleiten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Weiterleiten zu :"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Gespräch aufzeichnen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Das momentane Gespräch aufnehmen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "_Zeige Werkzeugleiste"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Wählscheibe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Lautstärke-Regler anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Lautstärke-Regler anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Vorherige Anrufe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Liste der vorherigen Anrufen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "in _Warteschleife"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Zurückrufen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Nummer editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Nummer vor dem Anruf editieren"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Konto parameter"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protokoll"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Hostname"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Benutzername"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Passwort"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Passwort"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Voicemail Nummer"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Authentifizierung"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Geheim"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Authentifizierung Name"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Passwort"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Sicherheit"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Deaktiviert"
 
@@ -656,135 +656,135 @@ msgstr ""
 msgid "Published port"
 msgstr "Veröffentlichter Port"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Kontoeinstellungen"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Allgemein"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Erweitert"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Netzwerk"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protokoll"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Status"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Konfigurierten Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "aktive Konten"
 msgstr[1] "aktive Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Sie haben kein aktives Konto"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Allgemein"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "Addressbuch von Evolution verwenden"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Herunterladen Grenze :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "Karten"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Wenn verfügbar, _Bild anzeigen"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Felder vom Evolution Adressbuch"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Arbeit"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Heim"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Handy"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Adressbücher"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Adressbücher von Evolution zum verwenden auswählen"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Name"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Assistent beendet."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -792,347 +792,322 @@ msgstr ""
 "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder "
 "IhreKontoparameter ändern (Optionen/Konten)."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Benutzername"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Sicherheit: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Nichts"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone Konto (Konfigurationsassistent)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Wilkommen zu SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP Protokoll"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Kontotyp auswählen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterisk Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Bitte eine Option auswählen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Existierendes SIP/IAX2 Konto registrieren"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Konfiguration des SIP Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Folgende Informationen bitte ausfühlen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Sichere Kommunikation mit _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Fakultative E-mail-Adresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Konfiguration des IAX2 Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "STUN Ei_nschalten"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_STUN Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Konto Registrierung"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Gratulation!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequenz"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Bandbreite"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA Plugin"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Ausgabe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Eingabe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "\"Voice Activity\" Erkennung"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Klingeltöne"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Geräuschreduzierung (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Sound Manager"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA Konfiguration"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Aufnahmen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Zielverzeichnis"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Verzeichnis auswählen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Klingeltöne"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Klingeltöne _einschalten"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Klingelton auswählen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Audio Dateien"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Kontoeinstellungen"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL Argument"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Spezielle Befehle bei eingehender Anrufen mit URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s wird mit gegebener URL ersetzt."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Bewirkung beim spezifischen _SIP Header"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Bewirkung bei _IAX2 URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Befehl _auszuführen"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Telefonnummer umformen"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Präfix vor Nummern einfügen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Desktopbenachrichtigungen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "Benachrichtigungen _einschalten"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Benachrichtigungsfeld (\"System Tray\") Icon"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "_Hauptfenster nie anzeigen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "_Unsichtbar beim Start"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Liste der vorherigen Anrufen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "Tage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Hooks"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "ZRTP Optionen"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "Den Benutzer bitten, SAS zu bestätigen"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "_Warnung wenn ZRTP nicht unterstüzt"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr "SDES Optionen"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Erweiterte Optionen für TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "TLS Transport"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1141,85 +1116,119 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "TLS-Protokol-Methode"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Bestätige eingehende Zertifikate als einen Server"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Bestätige eingehende Zertifikate als einen Client"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Benötige Zertifikat für eingehende TLS-Verbindungen"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "ZRTP Optionen"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "Den Benutzer bitten, SAS zu bestätigen"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "_Warnung wenn ZRTP nicht unterstüzt"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "SDES Optionen"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Suche alle"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Klicken Sie hier, um Suchtyp zu wechseln"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Suche nach Anruf in Abwesenheit"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Suche nach eingehenden Anruf"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Suche nach ausgehenden Anru"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "\"Voice Activity\" Erkennung"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Geräuschreduzierung (Narrow-Band Companding)"
+
 #~ msgctxt "account state"
 #~ msgid "Error"
 #~ msgstr "Fehler"
diff --git a/lang/el/el.po b/lang/el/el.po
index 968ee7bb5bf9803429707491de727ebc895dd8f0..14bd861c861624892b84bca4b847abd5ae7d5a88 100644
--- a/lang/el/el.po
+++ b/lang/el/el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2010-01-13 02:45+0000\n"
 "Last-Translator: jarlaxl lamat <sztaasz@gmail.com>\n"
 "Language-Team: Greek <el@li.org>\n"
@@ -15,64 +15,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Εγγεγραμμένος"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Μη εγγεγραμμένος"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Προσπαθώ..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Σφάλμα"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Αποτυχία πιστοποίησης"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Μη προσβάσιμο δίκτυο"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Μη προσβάσιμος υπολογιστής"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Σφάλμα ρύθμισης εξυπηρετητή STUN"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Ακυρος εξυπηρετητής STUN"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Μη έγκυρο"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Χρήση λογαριασμού"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Μη πιστοποιημένοι λογαριασμοί"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,28 +80,28 @@ msgstr ""
 "Αδυναμία σύνδεσης στον εξυπηρετητη του  SFLphone\n"
 "Σιγουρευτείτε οτι τρέχει ο daemon"
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Κλήση κατευθείαν SIP"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -111,7 +111,7 @@ msgstr ""
 "\n"
 "Σφάλμα κατα το άνοιγμα της συσκευής αναπαραγωγής"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -121,7 +121,7 @@ msgstr ""
 "\n"
 "Σφάλμα κατα το άνοιγμα της συσκευής λήψης ήχου"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -131,43 +131,43 @@ msgstr ""
 "\n"
 "Tο Pulseaudio δεν τρέχει"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Υπάρχει μια κλήση εν εξελίξει"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Υπάρχουν κλήσεις εν εξελίξει"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Να κλείσω σιγουρα;"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Σφάλμα SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "Το πρωτόκολλο ZRTP δεν υποσττηρίζεται απο το peer %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Κρυπτογραφημένη επικοινωνια μη διαθέσιμη"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Συνέχεια"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Τερματισμός κλήσης"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -177,11 +177,11 @@ msgstr ""
 "μορφή.\n"
 "Ακριβής λόγος: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Η διαπραγμάτευση ZRTP απέτυχε"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -190,50 +190,50 @@ msgstr ""
 "Ο/Η %s θέλει να σταματησει να χρησιμοποιεί κρυπτογραφημένη επικοινωνία. Η "
 "επιβεβαιωση θα συνεχίσει τη συζήτηση αλλα χωρις κρυπτογράφηση\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Επιβεβαίωση Φύγε Καθαρισμός"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Επιβεβαίωση"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s λογαριασμός %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Από</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d Μηνυμα τηλεφωνητή"
 msgstr[1] "%d Μηνυματα τηλεφωνητή"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Κλήση μέ %s λογαριασμό <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Τρέχων λογαριασμός"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Δεν έχετε θέσει λογαριασμούς"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Δεν έχετε κατοχυρομένους λογαριασμούς"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -242,371 +242,371 @@ msgstr ""
 "<i>Με:</i> %s \n"
 "χρηση: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "Ο %s δεν υποστηρίζει ZRTP"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Η ZRTP διαπραγμάτευση απέτυχε με %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Με:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Ένταση ηχείων"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Ενταση μικροφώνου"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "Δείξε το βα_σικό παράθυρο"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "Κλείστο _Η"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Τηλεφωνητής"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Κανένα βιβλίο διευθύνσεω δεν έχει επιλεχθεί"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Βιβλίο διευθύνσεων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Τηλεφωνητής (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 "Το SFLphone ειναι ένα προγραμμα πελάτης VoIP συμβατό με SIP και ΙΑΧ2 "
 "πρωτόκολλα"
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Σχετικά με το SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Κλήση"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Νέα κλήση"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Κάντε μια νέα κλήση"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "Σήκωστο  _Π"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Σηκώστε το τηλέφωνο"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Κλέιστε το τηλέφωνο"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Σε α_ναμονή"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Βάλτε την κλήση σε αναμονή"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "Επανα_φορά"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Επαναφέρετε την κλήση σε αναμονή"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Οδηγός Ρυθμίσεων _Α"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Εκτέλεση του οδηγού ρύθμισης"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "Κλήση προς τον τηλεφωνητή σας"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Κλείσιμο"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Ελαχιστοποίηση στη περιοχή ειδοποιήσεων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "Έξοδος"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Τερματισμός του προγράμματος"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Επεξεργασία"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "Αντέγρα_ψε"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Αντιγραφή της επιλογής"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "Ε_πικόλληση"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Επικόλληση των περιεχομένων του προχείρου (clipboard)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Καθαρισμός ιστορικού κλ_ησεων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Καθαρισμός του ιστορικού κλησεων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "Λογαρι_ασμοί"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Επεξεργασία των λογαριασμών σας"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "_Προτιμήσεις"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Αλλαγή των προτιμήσεων σας"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Προβολή"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Βο_ηθεια"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Περιεχόμενα"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Άνοιγμα του εγχειριδίου"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Περί αυτής της εφαρμογής"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Με_ταφορά"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Μεταφορά της κλήσης"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "Καταγ_ραφή"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Καταγραψτε τη τρέχουσα συνομιλία"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "Εμφάνι_ση γραμμής εργαλείων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Εμφάνιση της γραμμής εργαλείων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "Πληκτρολόγιο _δ"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Εμφάνιση του πληκτρολογίου"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Ένταση ήχων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Δείξε τις ρυθμίσεις για την ένταση ήχων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Ιστορικό _Η"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Ιστορικό κλήσεων"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Βιβλίο διευθύνσεων _Α"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "Κλ_ηση σε αναμονή"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "Κλήση"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Επεξεργσία τηελφωνικού αριθμού"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Επεξεργσία τηελφωνικού αριθμού προ της κλήσης"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Παράμετροι λογαρισμού"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "Ψευδώνυμο"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Πρωτοκολλο"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "'Αγνωστο"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "Εξυπηρετητής παρόχου"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Ονομα χρήστη"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "Συνθηματικό"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Εμφάνιση συνθηματικού"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "Αριθμός τηλεφωνητή"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Ταυτοποίηση"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Απόρρητο"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Πιστοποιητικό"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Όνομα εξακρίβωσης"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Συνθηματικό"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Ασφάλεια"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Χρήση TLS"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Ανταλλαγή κλειδιών SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Απενεργοποιημένο"
 
@@ -659,479 +659,452 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+msgid "Voice enhancement settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1140,81 +1113,109 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
diff --git a/lang/es/es.po b/lang/es/es.po
index 7313bad08d7a3c970457961ee3ebdecae5baf346..75d66eafa6bfb3bb67339cf6dc7d051cc0af6e91 100644
--- a/lang/es/es.po
+++ b/lang/es/es.po
@@ -9,180 +9,180 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: 2009-12-17 23:18+0000\n"
-"Last-Translator: Jorge E. Gómez <jorge@jorgee.net>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-06-17 16:12+0000\n"
+"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "No registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Intentando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Error"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Falló la autenticación"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
-msgstr "Red Inaccesible"
+msgstr "Red inaccesible"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
-msgstr "_Parte del servidor"
+msgstr "Servidor inaccesible"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
-msgstr "Error de configuración Stun"
+msgstr "Error de configuración de Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
-msgstr "Servidor stun inválido"
+msgstr "Servidor Stun no válido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
-msgstr ""
+msgstr "Listo"
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
-msgstr "Inválido"
+msgstr "No válido"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Usando la cuenta"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
-msgstr "Ninguna cuenta registrada"
+msgstr "No hay ninguna cuenta registrada"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
-"Incapaz de conectar con el servidor SFLphone.\n"
-" Asegúrese que el demonio esté funcionando."
+"No se pudo conectar con el servidor de SFLphone.\n"
+"Asegúrese de que el demonio está en ejecución."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
-msgstr "Llamadas IP directas"
+msgstr "Llamada SIP directa"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
-msgstr ""
+msgstr "hoy a las %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
-msgstr ""
+msgstr "ayer a las %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
-msgstr ""
+msgstr "%A a las %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
-msgstr ""
+msgstr "%x a las %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
-"<b>Notificación ALSA</b>\n"
+"Notificación ALSA\n"
 "\n"
 "Error al abrir el dispositivo de reproducción"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
-"<b>Notificación ALSA</b>\n"
+"Notificación ALSA\n"
 "\n"
 "Error al abrir el dispositivo de captura"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
-"<b>Notificación de Pulseaudio</b>\n"
+"Notificación de Pulseaudio\n"
 "\n"
 "Pulseaudio no está funcionando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
-msgstr "Hay una llamada en curso"
+msgstr "Hay una llamada en curso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Hay llamadas en curso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "¿Aún quiere salir?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
-msgstr "Error SFLphone"
+msgstr "Error de SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
-msgstr "ZRTP no es compatible con %s\n"
+msgstr "El nodo %s no soporta ZRTP\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Comunicación segura no disponible"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
-msgstr "Seguir"
+msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Terminar llamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
-"Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n"
+"Un error de %s obliga a la llamada con %s a realizarse en modo no cifrado.\n"
 "Razón exacta: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
-msgstr "Negociación ZRTP fracasada"
+msgstr "Falló la negociación ZRTP"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -191,50 +191,50 @@ msgstr ""
 "%s quiere parar la comunicación segura. Confirmar reanudará la conversación "
 "sin SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s cuenta : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d mensaje de voz"
 msgstr[1] "%d mensajes de voz"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Llamando con la cuenta %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Cuenta actual"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
-msgstr "Ninguna cuenta configurada"
+msgstr "No tiene configurada ninguna cuenta"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "No tiene ninguna cuenta registrada"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -243,369 +243,369 @@ msgstr ""
 "<i>Con:</i> %s\n"
 "usando %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr "%s no es compatible con ZRTP."
+msgstr "%s no soporta ZRTP"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr "Negociación ZRTP fracasada con %s"
+msgstr "La negociación ZRTP ha fracasado con %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Con:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
-msgstr "Volumen de altavoces"
+msgstr "Volumen de los altavoces"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volumen del micrófono"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
-msgstr "Mostrar ventana principal"
+msgstr "Mostrar _ventana principal"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Colgar"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%i cuenta activa"
+msgstr[1] "%i cuentas activas"
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Mensaje de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
-msgstr "Libreta de contactos"
+msgstr "No se ha seleccionado ninguna libreta de direcciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
-msgstr "Libreta de contactos"
+msgstr "Libreta de direcciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Mensaje de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
-msgstr "SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2"
+msgstr "SFLphone es un cliente VoIP compatible con los protocolos SIP e IAX2"
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
-msgstr "Sobre SFLphone"
+msgstr "Acerca de SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
-msgstr "_Llamar"
+msgstr "Llamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nueva llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Realizar un nuevo llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Descolgar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Responder el llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Finalizar el llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "En _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Poner el llamado en espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "Seguir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Sacar el llamado de espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Archivo de configuración"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Error de configuración Stun"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d mensaje de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Cerrar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Minimizar al área de notificación"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "_Editar"
+msgstr "_Salir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Salir del programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Eliminar la cuenta seleccionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "_Pegar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Pegar el contenido del portapapeles"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "_Limpiar historial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Limpiar historial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Cuentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Cuenta actual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Preferencias"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Cambiar sus preferencias"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Ver"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Ayuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Seguir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Abrir el manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Autentificación"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Transferir a :"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "G_rabar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Grabar la conversación actual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "_Mostrar barra de herramientas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Mostrar barra de herramientas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
-msgstr "Desactivado"
+msgstr "_Teclado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Mostrar el teclado de marcado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "_Controles de volumen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "_Controles de volumen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Historia de Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Historia de Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Libreta de contactos"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "En _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Llamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Editar número de teléfono"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Editar el número de teléfono antes de llamar"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parámetros de cuenta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Nombre de equipo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Usuario"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Número de buzón de voz"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
-msgstr ""
+msgstr "Agente de _usuario"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Autentificación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Secreto"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Informaciónes"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nombre de autentificación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Seguridad"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Usa transporte TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Intercambió de clave SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Desactivado"
 
@@ -658,40 +658,40 @@ msgstr "Publicar dirección y puerto:"
 msgid "Published port"
 msgstr "Puerto publicado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Códecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
-msgstr ""
+msgstr "DTMF"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
-msgstr ""
+msgstr "RTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Configuración de cuentas"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avanzado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Red"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -702,95 +702,95 @@ msgstr ""
 "usted define aqui serán también utilizados si ninguná cuenta puede ser "
 "igualada a una llamada entrante o saliente."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
-msgstr "El servidor contesta \"%s\" (%d)"
+msgstr "El servidor ha devuelto «%s» (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Cuentas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Cuentas Configuradas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "Hay %d cuenta activada"
 msgstr[1] "Hay %d cuentas activadas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "No tienes ninguna cuenta activada"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "General"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Usar libreta de contactos de Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Limite de descarga :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "tarjetas"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Mostrar fotos de contactos, si están disponibles"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "P_rofesional"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Personal"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Movil"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Libretas de contactos"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Seleccione la libreta de contactos de Evolution a usar"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nombre"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "El asistente ha finalizado"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -798,345 +798,322 @@ msgstr ""
 "Puede comprobar en cualquier momento su estado de registro o modificar la "
 "configuración de sus cuentas en la ventana de Opciones/Cuentas."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Servidor"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Usuario"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Seguridad: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Ninguno"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Asistente de creación de cuentas"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "¡Bienvenido al asistente de creación de cuentas de SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Este asistente de instalación le ayudará a configurar una cuenta."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Escoja un tipo de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Por favor, elija una de las siguientes opciones"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrar una cuenta SIP o IAX2 existente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Configuración de cuenta SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Por favor, ingrese la siguiente información"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Comunicación segura con _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Dirección de correo opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Correo"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Configuración de cuenta IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Conversión de Dirección de Red (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "A_ctivar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Registro de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "¡Enhorabuena!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frecuencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Tasa de transferencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Ancho de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Salida"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "_Detección de actividad de voz"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Reducción de ruido"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Gestor de audio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Configuración de ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Grabaciones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Carpeta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Seleccione una carpeta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Habilitar tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Elija un tono de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Archivos de Audio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Configuración de cuentas"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Argumento de URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Comandos personalizados en llamada entrante con URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s se remplazará por la URL."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Disparador en una cabecera _SIP específica"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Disparador con una URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "_Comando a ejecutar"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Reescritura de número de teléfono"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Prefijar los números marcados con"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notificación de escritorio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Activar notificaciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Icono de bandeja del sistema"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
-msgstr ""
+msgstr "Mostrar SFLphone en la barra de tareas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Popup ventana principal al recibir llamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "_Nunca mostrar ventana principal"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Esconder SFLphone al principio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Historia de llamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Guardar mi historia por lo menos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "días"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferencias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Sonido"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Libreta de Direcciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Disparadores"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
-msgstr ""
+msgstr "Accesos directos"
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
+"Tenga cuidado: estos accesos directos podrían reemplazar los accesos "
+"directos de todo sistema."
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "Opciones ZRTP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "Enviar Hello Hash en S_DP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "Preguntar al usuario de confirmar SAS"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "_Prevenir si ZRTP no es compatible"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "Presentar SAS una vez para eventos en espera"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Opciones avanzadas para TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Transporte TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1149,85 +1126,119 @@ msgstr ""
 "diferente transporte TLS para cada cuenta. De cualquier forma, cada uno de "
 "ellos usará un puerto dedicado, diferente el uno del otro.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
-msgstr ""
+msgstr "Escuchador TLS global (todas cuentas)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Lista de Certificados de Autoridad"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Escoge un archivo de lista de CA (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Archivo del certificado del par público"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Escoge un certificado de par público (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Escoge un archivo de clave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Contraseña de clave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Método de protocolo TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Lista de cifrado TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Nombre del servidor para la conexión TLS saliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Negociación expirada (seg:mseg)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Checar certificados entrantes, como un servidor"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Checar certificados de la respuesta, como cliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Requiere certificado para conexiones TLS entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "Opciones ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "Enviar Hello Hash en S_DP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "Preguntar al usuario de confirmar SAS"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "_Prevenir si ZRTP no es compatible"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "Presentar SAS una vez para eventos en espera"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Opciones SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Buscar todos"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
-msgstr "Pulse aqui para cambiar el tipo de busqueda"
+msgstr "Pulse aquí para cambiar el tipo de búsqueda"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Buscar en llamadas pérdidas"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Buscar en llamadas entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Buscar en llamadas salientes"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "_Detección de actividad de voz"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Reducción de ruido"
+
 #~ msgctxt "account state"
 #~ msgid "Registered"
 #~ msgstr "Registrado"
@@ -1843,8 +1854,8 @@ msgstr "Buscar en llamadas salientes"
 #~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,"
 #~ "Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad "
 #~ "Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad Contributions:,"
-#~ "Andres Mujica,Jorge E. Gómez,Maxime Chambreuil,Nicolás M. Zahlut,Xuacu "
-#~ "Saturio"
+#~ "Andres Mujica,Daniel Mustieles,Jorge E. Gómez,Maxime Chambreuil,Nicolás "
+#~ "M. Zahlut,Xuacu Saturio"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1853,5 +1864,5 @@ msgstr "Buscar en llamadas salientes"
 #~ "chambreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail."
 #~ "com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres."
 #~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres.mujica@seaq.com."
-#~ "co,jorge@jorgee.net,maxime.chambreuil@gmail.com,nzahlut@live.com,"
-#~ "xuacusk8@gmail.com"
+#~ "co,daniel.mustieles@gmail.com,jorge@jorgee.net,maxime.chambreuil@gmail."
+#~ "com,nzahlut@live.com,xuacusk8@gmail.com"
diff --git a/lang/fr/fr.po b/lang/fr/fr.po
index a6001b51c95f7cce0d8f1ec39fa867ab7b9dbe1e..f790d7fe8a901cf472cda6a07f34b95d758f348e 100644
--- a/lang/fr/fr.po
+++ b/lang/fr/fr.po
@@ -7,74 +7,74 @@
 # POT-Creation-Date: 2008-01-13 01:39+0100\n
 msgid ""
 msgstr ""
-"Project-Id-Version: SFLphone 0.9.4\n"
+"Project-Id-Version: SFLphone 0.9.8\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: 2010-04-19 19:52+0000\n"
-"Last-Translator: Alexandre Savard <alexandre.savard@savoirfairelinux.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-04-29 08:48+0000\n"
+"Last-Translator: Christophe CATARINA <Unknown>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Enregistré"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Non Enregistré"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "En cours..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Erreur"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Erreur d'authentification"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Réseau non trouvé"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Serveur introuvable"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Erreur de configuration Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Serveur Stun invalide"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
-msgstr ""
+msgstr "Prêt"
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Non valide"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Utilise le compte"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Pas de compte enregistré"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -82,28 +82,28 @@ msgstr ""
 "Impossible de se connecter au serveur SFLphone.\n"
 " Assurez-vous que le démon est lancé."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Appel direct SIP"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
-msgstr ""
+msgstr "Aujourd'hui, à %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
-msgstr ""
+msgstr "Hier, à %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
-msgstr ""
+msgstr "%A, à %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
-msgstr ""
+msgstr "%x, à %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -113,7 +113,7 @@ msgstr ""
 "\n"
 "Erreur lors de l'ouverture du périphérique de sortie"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -123,7 +123,7 @@ msgstr ""
 "\n"
 "Erreur lors de l'ouverture du périphérique d'entrée"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -133,43 +133,43 @@ msgstr ""
 "\n"
 "Pulseaudio n'est pas lancé"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Vous avez un appel en cours."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Vous avez des appels en cours."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Voulez-vous quitter?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Erreur SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP n'est pas supporté par %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Communications sécurisées non disponibles"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Continuer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Arrêter l'appel"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -178,11 +178,11 @@ msgstr ""
 "L'appel avec %s est passé en mode non-crypté à cause d'une erreur %s.\n"
 "Raison exacte: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Erreur d'authentification"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -191,50 +191,50 @@ msgstr ""
 "%s ne désire plus utiliser la communication sécurisée. Confirmer que vous "
 "voulez continuer sans ZRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmer Communication en clair"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmer"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s account : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d message vocal"
 msgstr[1] "%d messages vocaux"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Appel avec le compte %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Compte courant"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Vous n'avez pas configuré de compte"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Vous n'avez aucun compte enregistré"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -243,370 +243,370 @@ msgstr ""
 "<i>Avec:</i> %s\n"
 "using %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s ne supporte pas ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "La négociation ZRTP avec %s a échoué"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>De:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume des hauts-parleurs"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume du micro"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Afficher la fenêtre principale"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Raccrocher"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%i compte actif"
+msgstr[1] "%i comptes actifs"
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Boite vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Aucun carnet d'adresses sélectionné"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Carnet d'adresses"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Boite vocale (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "A propos de SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Actions"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nouvel appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Appeler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Décrocher"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Répondre à l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Terminer l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Mettre en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Mettre l'appel en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "Reprendre"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Reprendre l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "_Assistant de configuration"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Lancer l'assistant de configuration"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "Appeler la boite vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Fermer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Minimiser dans la barre des tâches"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Quitter"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Quitter le programme"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Copier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Copier la sélection"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "C_oller"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Coller le contenu du presse-papiers"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Effacer l'_historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Effacer l'historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "Co_mptes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Éditer les comptes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Préférences"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Modifier les préférences"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "A_ffichage"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "A_ide"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Sommaire"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Ouvrir le manuel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "À propos de cette application"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transférer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Transférer à :"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "Enregistrer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Enregistrer la conversation courante"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "Afficher la _barre d'outil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Afficher la barre d'outil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Clavier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Afficher le clavier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Contrôle du _volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Afficher les controles du volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Historique d'appels"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Carnet d'adresses"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "_Mettre en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Rappeler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Éditer le numéro"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Éditer le numéro de téléphone avant d'appeler"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Paramètres du Compte"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "A_lias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "P_rotocole"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Serveur"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Usa_ger"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Afficher le mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Boite vocale #"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
-msgstr ""
+msgstr "_User-agent"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Identification"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Informations"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nom d'authentification"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Sécurité"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Utiliser un transport TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Échange de clé SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Désactivé"
 
@@ -659,40 +659,40 @@ msgstr "Configurer l'adresse et le port à publier"
 msgid "Published port"
 msgstr "Port de publication"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
-msgstr ""
+msgstr "DTMF"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
-msgstr ""
+msgstr "RTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Paramètre des comptes"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Général"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avancé"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Réseau"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -703,95 +703,95 @@ msgstr ""
 "sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant "
 "ou sortant."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "Le serveur a répondu \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocole"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Statut"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Comptes"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Comptes Configurés"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "%d compte actif"
 msgstr[1] "%d comptes actifs"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Vous n'avez aucun compte actif"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Général"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Utiliser les carnets d'adresse d'Évolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Limite de téléchargement :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "entrées"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Afficher la photo si disponible"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Utiliser les champs suivants des carnets d'adresse d'Évolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Professionnels"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "P_ersonnels"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Mobiles"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Carnets d'adresses"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nom"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Cet assistant est maintenant terminé."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -799,347 +799,322 @@ msgstr ""
 "Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier "
 "les paramètres de vos comptes dans la fenêtre Options/Comptes."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Serveur"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Sécurité: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Aucun"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Assistant de création de compte de SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Cet assistant vous guidera dans la configuration d'un compte."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocoles VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Sélectionnez un type de compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Veuillez sélectionner une des options suivantes"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Enregistrer un compte SIP ou IAX2 existant"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Paramètres de compte SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Veuillez remplir les champs suivants"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Communications sécurisées avec _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Adresse courriel optionnelle"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "A_dresse courriel"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Paramètres de compte IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 "Vous devriez probablement activer cette option si vous vous trouvez derrière "
 "un pare-feu."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "A_ctiver STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "S_erveur STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Enregistrement du compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Félicitations!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Fréquence"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Bande passante"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Greffon ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Sortie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrée"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "Détection de l'activité de la voix"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr "Sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "Réduction du bruit (Compresseur extenseur LBR)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Interface Audio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Paramètres ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Enregistrements"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Dossier de destination"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Choisissez un dossier"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Activer les sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Sélectionner une sonnerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Fichier Audio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Paramètre des comptes"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Argument URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Commandes personnalisées lors d'appels entrants avec une URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s sera remplacé par l'URL passé en argument."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Déclencher sur un entête _SIP spécifique"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Déclencher en _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Commande à e_xécuter"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Réécriture des numéros appelés"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Préfixer les numéros composés par"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notifications de Bureau"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Activer les notifications"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Icône dans la barre des tâches"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr "Montrer SFLphone dans la barre des tâches"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Ne _jamais afficher la fenêtre principale"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "_Cacher la fenêtre de SFLphone au démarrage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Historique des appels"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "Garder mon historique au moins"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "jours"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Préférences"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Carnet d'adresse"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Ancrage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
-msgstr ""
+msgstr "Raccourcis claviers"
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
+"Soyez prudent; ces raccourcis peuvent entrer en conflit avec ceux du système."
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "Options de ZRTP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "Envoyer le hash de Hello dans S_DP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "Demander à l'utilisateur de confirmer le SAS"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "_Avertir si ZRTP n'est pas supporté"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "Afficher le SAS seulement une fois sur les mises en attente"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Options avancées TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Transport TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1152,85 +1127,119 @@ msgstr ""
 "TLS différent pour chaque compte. Cependant, chacun écoutera sur un port "
 "différent.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
-msgstr ""
+msgstr "Port TLS global (pour tous les comptes)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Liste des autorités de certification"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Choisir une liste d'AC (optionnel)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Fichier de certificats de l'extrémité public"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Sélectionner le certificat de l'extrémité public"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Choisir une clé privée (optionnel)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Mot de passe pour la clé privée"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Méthode pour TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Liste de cryptogramme TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Instance du serveur pour les connections TLS sortantes"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Expiration de la négociation"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "En tant que serveur, vérifier les certificats entrants"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "En tant que client, vérifier les certificats dans les réponses"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Exiger un certificat pour les connexions TLS entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "Options de ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "Envoyer le hash de Hello dans S_DP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "Demander à l'utilisateur de confirmer le SAS"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "_Avertir si ZRTP n'est pas supporté"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "Afficher le SAS seulement une fois sur les mises en attente"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Options SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr "Recourrir à RTP si SDES échoue"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Rechercher dans tous"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Cliquez ici pour changer le type de recherche"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Rechercher dans les appels manqués"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Rechercher dans les appels entrants"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Rechercher dans les appels sortants"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "Détection de l'activité de la voix"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "Réduction du bruit (Compresseur extenseur LBR)"
+
 #~ msgctxt "account state"
 #~ msgid "Registered"
 #~ msgstr "Enregistré"
@@ -1885,8 +1894,8 @@ msgstr "Rechercher dans les appels sortants"
 #~ "Jérémy Quentin, ,Launchpad Contributions:,Emmanuel Milou,Maxime "
 #~ "Chambreuil, ,Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ,"
 #~ "Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ,Launchpad "
-#~ "Contributions:,Alexandre Savard,Emmanuel Milou,Maxime Chambreuil,Pierre "
-#~ "Slamich"
+#~ "Contributions:,Alexandre Savard,Christophe CATARINA,Emmanuel Milou,Maxime "
+#~ "Chambreuil,Pierre Slamich"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1894,6 +1903,6 @@ msgstr "Rechercher dans les appels sortants"
 #~ "jeremy.quentin@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux.com,"
 #~ "maxime.chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime."
 #~ "chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime."
-#~ "chambreuil@gmail.com,,,alexandre.savard@savoirfairelinux.com,emmanuel."
+#~ "chambreuil@gmail.com,,,alexandre.savard@savoirfairelinux.com,,emmanuel."
 #~ "milou@savoirfairelinux.com,maxime.chambreuil@gmail.com,pierre."
 #~ "slamich@gmail.com"
diff --git a/lang/it/it.po b/lang/it/it.po
index 25652db0e7b3a9aff0b0a6791c0bf78357b490a1..f9e4a8ddbc573b6a4541039a465d08386cc36435 100644
--- a/lang/it/it.po
+++ b/lang/it/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2010-03-21 18:30+0000\n"
 "Last-Translator: Milo Casagrande <milo@casagrande.name>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,64 +15,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrato"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Non registrato"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Registrazione in corso..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Errore"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Autenticazione fallita"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Rete irraggiungibile"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Host non raggiungibile"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Errore di configurazione STUN"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Server STUN non valido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Non valido"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Account in uso:"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Nessun account registrato"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,28 +80,28 @@ msgstr ""
 "Impossibile connettersi al server SFLphone.\n"
 "Accertarsi che il demone sia in esecuzione."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Chiamata SIP diretta"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -110,7 +110,7 @@ msgstr ""
 "Notifica ALSA\n"
 "Errore nell'apertura del dispositivo di riproduzione"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -119,7 +119,7 @@ msgstr ""
 "Notifica ALSA\n"
 "Errore nell'apertura del dispositivo di registrazione"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -128,473 +128,473 @@ msgstr ""
 "Notifica PulseAudio\n"
 "PulseAudio non è in esecuzione"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "C'è una chiamata in corso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Ci sono chiamate in corso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Vuoi veramente uscire?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Errore SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Termina la chiamata"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Negoziazione ZRTP fallita"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "Account %s: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Da</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d messaggio vocale"
 msgstr[1] "%d messaggi vocali"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Chiamata tramite account %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Account attivo"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Nessun account configurato"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Nessun account registrato"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s non supporta ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Negoziazione ZRTP fallita con %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Con:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume altoparlante"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume microfono"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "Mostra la finestra principale"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Chiudi"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Segreteria telefonica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Segreteria telefonica (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Informazioni su SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Chiama"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "Chiama"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Effettua una nuova chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "Rispondi"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Rispondi alla chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Termina la chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Attesa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Metti in attesa la chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Errore di configurazione STUN"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d messaggio vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Esci"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Esce dal programma"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Modifica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Elimina l'account selezionato"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Cancella la cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Cancella la cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Account"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Account attivo"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Preferen_ze"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Modifica le preferenze"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Visualizza"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Aiuto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Inoltra"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Inoltra a:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Registra"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Regista la conversazione in corso"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "Mostra tastiera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Mostra la tastiera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Mostra i controlli del volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Mostra i controlli del volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Cronologia chiamate"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "Attesa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parametri account"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Pseudonimo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocollo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "Nome _host"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Nome _utente"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Password"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Password"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "Numero segreteria telefonica"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Autenticazione"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Password"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -647,482 +647,457 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codec"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Impostazioni dell'account"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Generale"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avanzate"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Rete"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocollo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Stato"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Account"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Account configurati"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Usa la rubrica di Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "tessere"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Mostra la foto del contatto se disponibile"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Campi dalla rubrica di Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Lavoro"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Home"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "Cellulare"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Rubriche indirizzi"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Selezionare la rubrica di Evolution da usare"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nome"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "La procedura guidata è terminata."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Pseudonimo"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nome utente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 "Benvenuti alla procedura guidata per la creazione di un account SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Questa procedura permetterà di configurare un account."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolli VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Selezionare un tipo di account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Scegliere una delle seguenti opzioni"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Creare un account SIP/IAX2 gratuito  su sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrare un account SIP o IAX2 esistente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Impostazioni account SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Indirizzo email opzionale"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "L'indirizzo email sarà usato per l'invio dei messaggi della segreteria "
 "telefonica."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "Indirizzo _email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Impostazioni account IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Dovrebbe essere abilitato se ci si trova dietro ad un firewall."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "Abilita STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "Server STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Registrazione account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Congratulazioni!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequenza"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Uscita"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Ingresso"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Suonerie"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Impostazioni ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Registrazioni"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Cartella di destinazione"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Seleziona una cartella"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Suonerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Abilita suonerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Selezionare una suoneria"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "File audio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Impostazioni dell'account"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Rileva header SIP specifico"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Rileva URL su IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Comando da eseguire"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Riscrittura numero telefonico"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "Prefisso da aggiungere ai numeri da chiamare"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notifiche"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "Abilita notifiche"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Icona per area di notifica"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "Mostra la finestra principale all'arrivo delle chiamate"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Non mostrare mai la finestra principale"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Nascondi la finestra di SFLphone all'avvio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Cronologia chiamate"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "Mantieni la cronologia per almeno"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "giorni"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1131,82 +1106,110 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Cerca tra tutte le chiamate"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Fare clic qui per cambiare il tipo di ricerca"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Cerca tra le chiamate perse"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Cerca tra le chiamate ricevute"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Cerca tra le chiamate effettuate"
 
diff --git a/lang/ja/ja.po b/lang/ja/ja.po
index 3559bb0c70a4bf87d420d9f55b13c10c2ac1714f..a435c05234b9314a985ba7265af3976bd12d2384 100644
--- a/lang/ja/ja.po
+++ b/lang/ja/ja.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-23 22:50+0000\n"
 "Last-Translator: Launchpad Translations Administrators <rosetta@launchpad."
 "net>\n"
@@ -16,64 +16,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "登録しました"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "登録できません"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "検索中..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "エラー"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "認証に失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "ネットワークに接続できません"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "ホストに接続できません"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "構成エラー"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "サーバー無効"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "無効"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "アカウント使用中"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "アカウント登録されていません"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -81,28 +81,28 @@ msgstr ""
 "SFLphoneサーバに接続できません\n"
 "デーモンを確認してください。"
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "ダイレクトSIPコール"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -112,7 +112,7 @@ msgstr ""
 "\n"
 "再生デバイスエラー"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -122,7 +122,7 @@ msgstr ""
 "\n"
 "再生ディバイスエラー"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -132,43 +132,43 @@ msgstr ""
 "\n"
 "Pulseaudioが動いていません。"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "呼び出し中"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "呼び出し中"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "キャンセルしますか?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphoneエラー"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTPが%sにサポートされていません。\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "安全なコミュニケーションが利用できません。"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "次へ"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "電話をやめてください"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -177,11 +177,11 @@ msgstr ""
 "A %s エラーは非暗号化されているため%sの呼び出しを強制終了しました。\n"
 "正確な理由:%s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "ZRTP交渉失敗"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -190,49 +190,49 @@ msgstr ""
 "%sはセキュリティーで保護された通信を使うのをやめてください。SRTPなしで会話が"
 "再開するのを確認してください。\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "クリアを確認してください。"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "確認"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s アカウント: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "</i> %sから <i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d ボイスメール"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "%s アカウント<i>%s</i>を呼び出し中"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "現在のアカウント"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "アカウントが設定されていません"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "アカウント登録されていません"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -241,369 +241,369 @@ msgstr ""
 "<i>で:</i> %s\n"
 " %sを使ってください。"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s はZRTPをサポートできていません。"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "ZRTP交渉%sで失敗しました"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>With:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "スピーカーの音量"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "マイク音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "メインウィンドウを開く"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "通話を切る(_H)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLフォン"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "ボイスメール"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "アドレス帳が選択されていません"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "アドレス帳"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "ボイスメール(%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLフォンはVoIPクライアントとSIP、IAX2プロトコルと互換性があります"
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "SFLフォンに関して"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "呼び出し"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "通話先"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "発信します"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "選択"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "応答する"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "通話終了"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "保留"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "保留中"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "保留解除"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "保留を解除する"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "構成アシスタント"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "構成アシスタントを起動します"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "ボイスメールに電話をしてください"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "閉じる(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "システムトレイを最小化する"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "終了(_Q)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "プログラムの終了"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "編集(_E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "コピー(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "選択範囲をコピー"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "貼り付け(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "クリップボードに貼り付け"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "履歴消去"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "通話履歴消去"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "アカウント(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "アカウント編集"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "基本設定"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "基本設定の変更"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "表示(_V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "ヘルプ(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "目次"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "手動で開く"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "アプリケーションについて"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "転送"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "通話転送"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "録音(_R)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "現在の会話を録音中"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "ツールバーの表示"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "ツールバーの表示"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "ダイアルパッド(_D)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "ダイヤルパッドの表示"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "ボリュームコントロール"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "音量調整の表示"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "履歴(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "通話履歴"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "アドレス帳"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "保留中"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "折り返し電話をする"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "電話番号の編集"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "電話をする前に電話番号の編集をする"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "アカウントパラメーター"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "別名(_A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "プロトコル"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "不明"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "ホスト名"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "ユーザー名"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "パスワード(_P):"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "パスワードを表示"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "ボイスメールの番号"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "認証"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "シークレット"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "資格情報"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "名前の認証"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "パスワード"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "セキュリティ"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "TLS トランスポートを使用"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "SRTP キー交換"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "無効"
 
@@ -656,40 +656,40 @@ msgstr "公開アドレスとポートの設定"
 msgid "Published port"
 msgstr "公開ポート"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "コーデック"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "アカウントの設定"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "基本設定"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "詳細設定"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -699,94 +699,94 @@ msgstr ""
 "にこのプロファイルが使用可能\r\n"
 "着信通話または発信通話を照合できないアカウントであれば設定も可能"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "サーバーが\"%s\" (%d)を返しました"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "プロトコル"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "状態"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "アカウント"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "アカウント設定済み"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "%dアクティブアカウント"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "アクティブアカウントが存在しません"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "全般"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "展開アドレス帳の使用"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "ダウンロードの制限"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "カード"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "可能であれば連絡先の写真を表示"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "展開アドレス帳の項目"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "勤務先"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "自宅"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "携帯"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "アドレス帳"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "展開アドレス帳使用の選択"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "名前"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "アシスタントは現在終了"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -794,345 +794,320 @@ msgstr ""
 "登録状況の確認またはオプション/アカウントウィンドウでアカウントパラメータを変"
 "更できます"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "別名"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "サーバー"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "ユーザー名"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "セキュリティー "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP草稿"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "なし"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLフォンアカウント作成ウィザード"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "SFLフォンのアカウント作成ウィザードへようこそ"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "このインストールウィザードはアカウント作成を助けます"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIPプロトコル"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "勘定タイプの選択"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(セッション開始プロトコル)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(アスタリスク変換)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "アカウント"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "オプションに従い1つ選択してください"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "無料SIP/IAX2アカウントをsflフォン組織に作成"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "SIPまたは IAX2アカウントの存在を登録"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIPアカウント設定"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "情報を入力してください"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "ZRTPセキュリティーで保護された通信"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "任意のメールアドレス"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "このメールアドレスはボイスメールメッセージに送られます"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "Eメールアドレス"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2アカウント設定"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "ネットワークアドレス変換(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "ファイアウォールの内側であれば接続できます"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "STUN有効(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "STUNサーバー"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "アカウント登録"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "設定完了"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "周波数"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "ビットレート"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "帯域幅"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSAプラグイン"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "出力"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "入力"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "ボイスアクティビティ検出"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "着信音"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "ノイズ除去"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "サウンドマネージャー"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "パルスオーディオ"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA設定"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "録音"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "インストール先フォルダ"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "フォルダの選択"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "着信音"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "着信音可能"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "着信音選択"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "音声ファイル"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "アカウントの設定"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL 引数"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "URL着信履歴ユーザー設定コマンド"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%sはURLに置き換え"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "特定SIPヘッダーのトリガ"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "IAX2 URLのトリガ"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "実行するコマンド"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "電話番号書き換え"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "プレフィックス番号"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "デスクトップ通知"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "通知可能"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "システムトレイアイコン"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "着信通話のポップアップメインウィンドウ"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "ポップアップメインウィンドウ非表示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "起動SFLphoneウィンドウ非表示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "着信履歴"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "最後の着信履歴の保護"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "曜日"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "基本設定"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "音声"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "アドレス帳"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "フック"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "ZRTPオプション"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "SDPでハローハッシュ送信"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "ユーザーへSAS確認"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "ZRTPがサポートされているかどうか警告"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "イベント管理のためSAS表示"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "TLSの詳細設定オプション"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "TLS転送"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1145,85 +1120,119 @@ msgstr ""
 "それぞれのアカウントでTLS転送を確認してください。そうするとそれぞれ専用ポー"
 "ト、異なったものに実行できます。\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "j証明機関の一覧"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "CAリストファイルの選択"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "公式エンドポイント証明ファイル"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "公式エンドポイント証明の選択"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "個人キーファイルの選択"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "プライベートキーのパスワード"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "TLSプロトコルメソッド"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "TLS暗号一覧"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "TLS接続発信サーバー名インスタンス"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "ネゴシエーションタイムアウト"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "サーバーの証明受信の確認"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "クライアント応答証明の確認"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "受信tls接続のための証明要求"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "ZRTPオプション"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "SDPでハローハッシュ送信"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "ユーザーへSAS確認"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "ZRTPがサポートされているかどうか警告"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "イベント管理のためSAS表示"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "すべて検索"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "検索の種類を変更するにはここをクリックしてください"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "不在着信の検索"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "受信通話の検索"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "発信通話の検索"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "ボイスアクティビティ検出"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "ノイズ除去"
+
 #~ msgid "IP call - %s"
 #~ msgstr "IP 電話 -%s"
 
diff --git a/lang/ko/ko.po b/lang/ko/ko.po
index c4a7dd1f6179cc67e3e81f28c0a59885b0271b3e..295226ea7a3c9cac5cc2b3b94dcc8d62548ba4a0 100644
--- a/lang/ko/ko.po
+++ b/lang/ko/ko.po
@@ -7,1111 +7,1103 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: 2009-12-03 18:10+0000\n"
-"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-05-18 03:37+0000\n"
+"Last-Translator: Bundo <bundo@bundo.biz>\n"
 "Language-Team: Korean <ko@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "등록했습니다"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
-msgstr ""
+msgstr "등록되지 않았습니다"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
-msgstr ""
+msgstr "시도중..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
-msgstr ""
+msgstr "오류"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
-msgstr ""
+msgstr "인증이 실패했습니다"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
-msgstr ""
+msgstr "네트워크에 접근할 수 없습니다"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
-msgstr ""
+msgstr "호스트에 접근할 수 없습니다"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
-msgstr ""
+msgstr "Stun 구성 오류"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
-msgstr ""
+msgstr "Stun 서버 사용"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
-msgstr ""
+msgstr "준비"
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
-msgstr ""
+msgstr "무효"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
-msgstr ""
+msgstr "사용중인 계정"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
-msgstr ""
+msgstr "등록되지 않은 계정"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
+"SFLphone 서버에 연결할 수 없습니다.\n"
+"데몬이 실행중인지 확인하십시오."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
-msgstr ""
+msgstr "직접 SIP 호출"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
-msgstr ""
+msgstr "%R 오늘"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
-msgstr ""
+msgstr "%R 어제"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
-msgstr ""
+msgstr "%A at %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
-msgstr ""
+msgstr "%x 에 %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
+"ALSA 알림\n"
+"\n"
+"재생 장치 오류"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
+"ALSA 알림\n"
+"\n"
+"캡쳐 장치 열기 중 오류"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
+"Pulseaudio 알림\n"
+"\n"
+"펄스오디오가 실행중이지 않습니다"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
-msgstr ""
+msgstr "호출 진행중"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
-msgstr ""
+msgstr "호출 진행중"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
-msgstr ""
+msgstr "종료 하시겠습니까?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
-msgstr ""
+msgstr "SFLphone 오류"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
-msgstr ""
+msgstr "ZRTP %s에서 지원되지 않습니다\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
-msgstr ""
+msgstr "안전한 커뮤니케이션을 사용할 수 없습니다."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
-msgstr ""
+msgstr "계속"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
-msgstr ""
+msgstr "호출 정지"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
+"A %s 오류가 아닌 암호화된있어 %s에 대한 호출을 종료했습니다.\n"
+"정확한 이유 : %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
-msgstr ""
+msgstr "ZRTP 협상 실패"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
+"%s는 보안으로 보호되는 통신을 사용하는 것을 금합니다. SRTP 없이 대화를 재개"
+"할 것인지 확인하십시오.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
-msgstr ""
+msgstr "삭제를 확인하십시오."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
-msgstr ""
+msgstr "확인"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
-msgstr ""
+msgstr "%s 계정 : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
-msgstr ""
+msgstr "<i>From</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d 음성 메일"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
-msgstr ""
+msgstr "%s 계정 <i> %s </i>를 호출하는 동안"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
-msgstr ""
+msgstr "현재 계정"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
-msgstr ""
+msgstr "계정이 설정되지 않았습니다"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
-msgstr ""
+msgstr "계정이 등록되어 있지 않습니다"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
+"<i>작성자:</i> %s\n"
+"%s을(를) 사용하세요."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr ""
+msgstr "%s ZRTP를 지원하지 않습니다."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr ""
+msgstr "ZRTP 협상 %s에서 실패했습니다."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
-msgstr ""
+msgstr "<i>With:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
-msgstr ""
+msgstr "스피커 볼륨"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
-msgstr ""
+msgstr "마이크 볼륨"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
-msgstr ""
+msgstr "메인 창 보기(_S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
-msgstr ""
+msgstr "통화 끊기(_H)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
-msgstr ""
+msgstr "SFL폰"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%i 활성된 계정"
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
-msgstr ""
+msgstr "음성 메일"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
-msgstr ""
+msgstr "주소록이 선택되어 있지 않습니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
-msgstr ""
+msgstr "주소록"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
-msgstr ""
+msgstr "음성 메일 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
-msgstr ""
+msgstr "SFL폰은 VoIP클라이언트와 SIP, IAX2 프로토콜과 호환 가능합니다."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
-msgstr ""
+msgstr "SFL폰 정보"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
-msgstr ""
+msgstr "호출"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
-msgstr ""
+msgstr "새 통화(_N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr ""
+msgstr "새로 호출합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
-msgstr ""
+msgstr "선택(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr ""
+msgstr "호출 응답"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr ""
+msgstr "호출 끝내기"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
-msgstr ""
+msgstr "보류(_N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
-msgstr ""
+msgstr "호출을 보류합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
-msgstr ""
+msgstr "보류 해제(_F)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
-msgstr ""
+msgstr "보류를 해제합니다."
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
-msgstr ""
+msgstr "설정 도우미(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
-msgstr ""
+msgstr "설정 도우미를 실행합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
-msgstr ""
+msgstr "음성 전화를 합니다."
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
-msgstr ""
+msgstr "닫기(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
-msgstr ""
+msgstr "시스템 트레이에 최소화"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr ""
+msgstr "끝내기(_Q)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
-msgstr ""
+msgstr "프로그램을 끝냅니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
-msgstr ""
+msgstr "편집(_E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
-msgstr ""
+msgstr "복사(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
-msgstr ""
+msgstr "선택한 사항을 복사합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
-msgstr ""
+msgstr "붙여넣기(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "클립보드의 내용을 붙여넣습니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
-msgstr ""
+msgstr "기록 지우기(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
-msgstr ""
+msgstr "호출 기록을 지웁니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
-msgstr ""
+msgstr "계정(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
-msgstr ""
+msgstr "계정을 편집합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
-msgstr ""
+msgstr "기본 설정(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "기본 설정을 바꿉니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
-msgstr ""
+msgstr "보기(_V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
-msgstr ""
+msgstr "도움말(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
-msgstr ""
+msgstr "차례"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
-msgstr ""
+msgstr "설명서를 엽니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
-msgstr ""
+msgstr "이 프로그램 정보"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
-msgstr ""
+msgstr "전송(_T)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr ""
+msgstr "호출 전송"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
-msgstr ""
+msgstr "녹음(_R)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
-msgstr ""
+msgstr "현재 대화를 녹음합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
-msgstr ""
+msgstr "도구모음 표시(_S)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
-msgstr ""
+msgstr "도구모음 표시합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
-msgstr ""
+msgstr "다이얼패드(_D)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
-msgstr ""
+msgstr "숫자키패드 표시"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
-msgstr ""
+msgstr "볼륨 조정(_V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
-msgstr ""
+msgstr "볼륨 조정을 표시 합니다"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
-msgstr ""
+msgstr "기록(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
-msgstr ""
+msgstr "호출 기록"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
-msgstr ""
+msgstr "주소록(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
-msgstr ""
+msgstr "보류(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
-msgstr ""
+msgstr "다시 호출(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
-msgstr ""
+msgstr "폰  번호 편집"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
-msgstr ""
+msgstr "전화를 하기 전에 전화 번호를 편집합니다"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
-msgstr ""
+msgstr "계정 매개 변수"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
-msgstr ""
+msgstr "별칭(_A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
-msgstr ""
+msgstr "프로토콜(_P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
-msgstr ""
+msgstr "알 수 없음"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
-msgstr ""
+msgstr "호스트 이름(_H)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
-msgstr ""
+msgstr "사용자 이름(_U)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
-msgstr ""
+msgstr "암호(_P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
-msgstr ""
+msgstr "암호 보기"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
-msgstr ""
+msgstr "음성메일 번호(_V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
-msgstr ""
+msgstr "인증"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
-msgstr ""
+msgstr "비밀"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
-msgstr ""
+msgstr "자격 증명"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
-msgstr ""
+msgstr "이름 인증"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
-msgstr ""
+msgstr "암호"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
-msgstr ""
+msgstr "보안"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
-msgstr ""
+msgstr "TLS 전송을 사용"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
-msgstr ""
+msgstr "SRTP 키 교환"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
-msgstr ""
+msgstr "사용 안 함"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
-msgstr ""
+msgstr "등록"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
-msgstr ""
+msgstr "등록 기간 없음"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
-msgstr ""
+msgstr "RFC 3263 준수(_C)"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
-msgstr ""
+msgstr "네트워크 인터페이스"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
-msgstr ""
+msgstr "로컬 주소"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
-msgstr ""
+msgstr "로컬 포트"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
-msgstr ""
+msgstr "주소 공개"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr ""
+msgstr "STUN 사용"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
-msgstr ""
+msgstr "STUN 서버 URL"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
-msgstr ""
+msgstr "몇개의 로컬 매개 변수"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
-msgstr ""
+msgstr "공개 주소 및 포트 설정:"
 
 #: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
-msgstr ""
+msgstr "공개된 포트"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
-msgstr ""
+msgstr "코덱"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
-msgstr ""
+msgstr "DTMF"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
-msgstr ""
+msgstr "RTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
-msgstr ""
+msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
-msgstr ""
+msgstr "계정 설정"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
-msgstr ""
+msgstr "기본 설정"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
-msgstr ""
+msgstr "고급 설정"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
-msgstr ""
+msgstr "네트워크"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
+"<b>sip:remotepeer</b>. 같은 sip URI를 입력하여 간단하게 원격 피어를 달성하고 "
+"싶을 때 이 프로필 사용 가능합니다. 걸려오는 전화 또는 발신 통화가 일치되지 않"
+"는 계정이라도 설정이 가능합니다."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
-msgstr ""
+msgstr "서버에 \"%s\" (%d)가 발생했습니다"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
-msgstr ""
+msgstr "프로토콜"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
-msgstr ""
+msgstr "상태"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
-msgstr ""
+msgstr "계정"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
-msgstr ""
+msgstr "계정을 설정했습니다"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d 활성 계정"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
-msgstr ""
+msgstr "현재 계정이 존재하지 않습니다"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
-msgstr ""
+msgstr "일반"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
-msgstr ""
+msgstr "에볼류션 주소록 사용(_U)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
-msgstr ""
+msgstr "다운로드 제한 :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
-msgstr ""
+msgstr "카드"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
-msgstr ""
+msgstr "가능하면 연락처의 사진보기(_D)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
-msgstr ""
+msgstr "에볼류션 주소록에서의 항목"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
-msgstr ""
+msgstr "업무(_W)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
-msgstr ""
+msgstr "홈(_H)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
-msgstr ""
+msgstr "핸드폰(_M)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
-msgstr ""
+msgstr "주소록"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
-msgstr ""
+msgstr "에볼류션 주소록 사용하여 선택"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
-msgstr ""
+msgstr "이름"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
-msgstr ""
+msgstr "지원자는 현재 종료되었습니다."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
-msgstr ""
+msgstr "등록 상황을 확인하거나 옵션/계정 창에서 계정 매개 변수를 변경합니다."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
-msgstr ""
+msgstr "별명"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
-msgstr ""
+msgstr "서버"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
-msgstr ""
+msgstr "사용자 이름"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
-msgstr ""
+msgstr "보안: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
-msgstr ""
+msgstr "SRTP/ZRTP 초안"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
-msgstr ""
+msgstr "없음"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
-msgstr ""
+msgstr "SFL폰 계정 만들기 마법사"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
-msgstr ""
+msgstr "SFL폰 계정 만들기 마법사에 오신걸 환영합니다!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
-msgstr ""
+msgstr "이 설치 마법사는 계정 생성을 돕습니다"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
-msgstr ""
+msgstr "VoIP 프로토콜"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
-msgstr ""
+msgstr "계정 유형 선택"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
-msgstr ""
+msgstr "SIP (세션 초기화 프로토콜)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
-msgstr ""
+msgstr "IAX2 (별표 변환)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
-msgstr ""
+msgstr "계정"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
-msgstr ""
+msgstr "옵션에 따라서 1개를 선택"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
-msgstr ""
+msgstr "무료 SIP/IAX2 계정을 sflphone.org에 만들기"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
-msgstr ""
+msgstr "SIP 또는 IAX2 계정이 등록되어 있습니다"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
-msgstr ""
+msgstr "SIP 계정 설정"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
-msgstr ""
+msgstr "정보를 입력하세요."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
-msgstr ""
+msgstr "ZRTP 보안으로 보호된 통신(_Z)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
-msgstr ""
+msgstr "임의의 이메일 주소"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
-msgstr ""
+msgstr "이 이메일 주소는 음성메일 메시지로 보내집니다"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
-msgstr ""
+msgstr "이메일 주소(_E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
-msgstr ""
+msgstr "IAX2 계정 설정"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
-msgstr ""
+msgstr "네트워크 주소 변환 (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
-msgstr ""
+msgstr "방화벽을 하고 있으면 연결할 수 있습니다"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
-msgstr ""
+msgstr "STUN 가능(_N)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
-msgstr ""
+msgstr "STUN 서버(_S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
-msgstr ""
+msgstr "계정 등록"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
-msgstr ""
+msgstr "축하합니다!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
-msgstr ""
+msgstr "주파수"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
-msgstr ""
+msgstr "전송률"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
-msgstr ""
+msgstr "대역폭"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
-msgstr ""
+msgstr "ALSA 플러그인"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
-msgstr ""
+msgstr "출력"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
-msgstr ""
+msgstr "입력"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "착신음"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
-msgstr ""
+msgstr "사운드 관리자"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
-msgstr ""
+msgstr "펄스오디오(_P)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
-msgstr ""
+msgstr "알사(_A)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
-msgstr ""
+msgstr "알사 설정"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
-msgstr ""
+msgstr "녹화"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
-msgstr ""
+msgstr "대상 폴더"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
-msgstr ""
+msgstr "폴더 선택"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
-msgstr ""
+msgstr "착신음"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
-msgstr ""
+msgstr "착신음 가능(_E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
-msgstr ""
+msgstr "착신음 선택"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
-msgstr ""
+msgstr "오디오 파일"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "계정 설정"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
-msgstr ""
+msgstr "URL 인수"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
-msgstr ""
+msgstr "URL 수신 기록 사용자 지정 명령"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
-msgstr ""
+msgstr "%s  URL로 바꿉니다."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
-msgstr ""
+msgstr "특정 SIP 헤더 트리거(_S)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
-msgstr ""
+msgstr "IAX2 URL 트리거(_I)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
-msgstr ""
+msgstr "실행 명령(_R)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
-msgstr ""
+msgstr "전화 번호 재작성 중"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
-msgstr ""
+msgstr "접두사와 전화 번호를 다이얼(_P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
-msgstr ""
+msgstr "바탕 화면 알림"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
-msgstr ""
+msgstr "알림 사용가능(_E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
-msgstr ""
+msgstr "시스템 트레이 아이콘"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
-msgstr ""
+msgstr "SFL폰을 시스탬 트레이에 보여줍니다"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
-msgstr ""
+msgstr "착신 통화 메인 창 띄움(_P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
-msgstr ""
+msgstr "메인창을 절대 띄우지 않음(_V)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
-msgstr ""
+msgstr "시작 시에 SFL폰 창 숨기기(_S)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
-msgstr ""
+msgstr "호출 기록"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
-msgstr ""
+msgstr "마지막 통화 기록을 보호(_K)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
-msgstr ""
+msgstr "일"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
-msgstr ""
+msgstr "기본 설정"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
-msgstr ""
+msgstr "오디오"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
-msgstr ""
+msgstr "주소록"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
-msgstr ""
+msgstr "후크"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
-msgstr ""
+msgstr "바로 가기"
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
+msgstr "주의: 이 단축키는 시스템-전체의 단축키를 무시할 수 있습니다."
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
-msgstr ""
+msgstr "TLS의 고급설정"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
-msgstr ""
+msgstr "TLS 전송"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1119,97 +1111,135 @@ msgid ""
 "dedicated\n"
 "port, different one from each other\n"
 msgstr ""
+"통화는 보안으로 보호되는 SIP 트랜잭션의 요구에 따라\n"
+"TLS 전송은 UDP를 사용할 수 있습니다.\n"
+"각각의 계정에서 TLS 전송을 확인합니다.\n"
+"그러면 각각 전용 포트, 다른 한개에 수행할 수 있습니다.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
-msgstr ""
+msgstr "글로벌 TLS를 수신기 (모든 계정)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
-msgstr ""
+msgstr "인증 기관 목록"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
-msgstr ""
+msgstr "CA 목록 파일 선택 (임의의)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
-msgstr ""
+msgstr "공공의 끝점 인증서 파일"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
-msgstr ""
+msgstr "공공의 끝점 인증서 파일을 선택 (임의의)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
-msgstr ""
+msgstr "개인 키 파일 선택(임의의)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
-msgstr ""
+msgstr "개인키를 위한 암호"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
-msgstr ""
+msgstr "TLS 프로토콜 방법"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
-msgstr ""
+msgstr "TLS 암호화 목록"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
-msgstr ""
+msgstr "TLS 연결 발신 서버 네임 인스턴스"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
-msgstr ""
+msgstr "협상 시간 초과(초:밀리초)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
-msgstr ""
+msgstr "서버에서 인증서 수신 확인"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
-msgstr ""
+msgstr "클라이언트에서 응답 증명서 확인"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
+msgstr "수신 tls 연결에 대한 인증 요청"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "ZRTP 설정"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "사용자에 SAS 확인 질문"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "ZRTP을 지원하는지 여부 경고(_W)"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "이벤트 관리를위한 SAS보기"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "SDES 설정"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr "RTP에 SDES 대체 실패"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
-msgstr ""
+msgstr "전체 검색"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
-msgstr ""
+msgstr "검색 종류를 바꾸려면 여기를 누르십시오"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
-msgstr ""
+msgstr "부재중 온 전화 검색"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
-msgstr ""
+msgstr "수신 통화 검색"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
-msgstr ""
+msgstr "발신 통화 검색"
+
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "음성 활성화 검색(_V)"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "노이즈 제거 (Narrow-Band Companding)(_N)"
 
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
 #~ ",Launchpad Contributions:, ,Launchpad Contributions:,Emmanuel Milou,"
 #~ "Scion, ,Launchpad Contributions:,Emmanuel Milou,Scion, ,Launchpad "
-#~ "Contributions:,Emmanuel Milou,Scion, ,Launchpad Contributions:,Emmanuel "
-#~ "Milou,Scion"
+#~ "Contributions:,Emmanuel Milou,Scion, ,Launchpad Contributions:,Bundo,"
+#~ "Emmanuel Milou,Scion"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ ",,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel."
 #~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com,,,,"
-#~ "emmanuel.milou@savoirfairelinux.com,"
+#~ "bundo@bundo.biz,emmanuel.milou@savoirfairelinux.com,"
diff --git a/lang/oc/oc.po b/lang/oc/oc.po
new file mode 100644
index 0000000000000000000000000000000000000000..16dce26f07b511edf40f79afc3ba7c4ed1352dcf
--- /dev/null
+++ b/lang/oc/oc.po
@@ -0,0 +1,1205 @@
+# Occitan (post 1500) translation for sflphone
+# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
+# This file is distributed under the same license as the sflphone package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: sflphone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-04-21 19:31+0000\n"
+"Last-Translator: Cédric VALMARY (Tot en òc) <cvalmary@yahoo.fr>\n"
+"Language-Team: Occitan (post 1500) <oc@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgid "Registered"
+msgstr "Enregistrat"
+
+#: ../sflphone-client-gnome/src/accountlist.c:184
+msgid "Not Registered"
+msgstr "Pas Enregistrat"
+
+#: ../sflphone-client-gnome/src/accountlist.c:187
+msgid "Trying..."
+msgstr "En cors..."
+
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
+msgid "Error"
+msgstr "Error"
+
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgid "Authentication Failed"
+msgstr "Fracàs de l'autentificacion"
+
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgid "Network unreachable"
+msgstr "Ret inaccessibla"
+
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgid "Host unreachable"
+msgstr "Òste inaccessible"
+
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgid "Stun configuration error"
+msgstr "Error de configuracion Stun"
+
+#: ../sflphone-client-gnome/src/accountlist.c:205
+msgid "Stun server invalid"
+msgstr "Servidor Stun invalid"
+
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr "Prèst"
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
+msgid "Invalid"
+msgstr "Invalid"
+
+#: ../sflphone-client-gnome/src/actions.c:125
+msgid "Using account"
+msgstr "Utiliza lo compte"
+
+#: ../sflphone-client-gnome/src/actions.c:132
+msgid "No registered accounts"
+msgstr "Pas de compte enregistrat"
+
+#: ../sflphone-client-gnome/src/actions.c:319
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
+msgid "Direct SIP call"
+msgstr "Sonada dirècta SIP"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:40
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:43
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:46
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:105
+msgid "There is one call in progress."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:109
+msgid "There are calls in progress."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:114
+msgid "Do you still want to quit?"
+msgstr "Volètz quitar ?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:337
+msgid "SFLphone Error"
+msgstr "Error SFLphone"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:456
+#, c-format
+msgid "ZRTP is not supported by peer %s\n"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:458
+msgid "Secure Communication Unavailable"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
+msgid "Continue"
+msgstr "Contunhar"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
+msgid "Stop Call"
+msgstr "Arrestar la sonada"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:486
+#, c-format
+msgid ""
+"A %s error forced the call with %s to fall under unencrypted mode.\n"
+"Exact reason: %s\n"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:488
+msgid "ZRTP negotiation failed"
+msgstr "Error d'autentificacion"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:506
+#, c-format
+msgid ""
+"%s wants to stop using secure communication. Confirm will resume "
+"conversation without SRTP.\n"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:508
+msgid "Confirm Go Clear"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/mainwindow.c:510
+msgid "Confirm"
+msgstr "Confirmar"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
+#, c-format
+msgid "%s account : %s"
+msgstr "%s account : %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:86
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>De</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:105
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d messatge vocal"
+msgstr[1] "%d messatges vocals"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:122
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:126
+msgid "Current account"
+msgstr "Compte corrent"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:141
+msgid "You have no accounts set up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:158
+msgid "You have no registered accounts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:201
+#, c-format
+msgid ""
+"<i>With:</i> %s \n"
+"using %s"
+msgstr ""
+"<i>Amb :</i> %s\n"
+"using %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:216
+#, c-format
+msgid "%s does not support ZRTP."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:231
+#, c-format
+msgid "ZRTP negotiation failed with %s"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sflnotify.c:246
+#, c-format
+msgid "<i>With:</i> %s"
+msgstr "<i>De :</i> %s"
+
+#: ../sflphone-client-gnome/src/sliders.c:173
+msgid "Speakers volume"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/sliders.c:175
+msgid "Mic volume"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:139
+msgid "_Show main window"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-gnome/src/statusicon.c:201
+#, c-format
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
+msgid "Voicemail"
+msgstr "Messatjariá Vocala"
+
+#: ../sflphone-client-gnome/src/uimanager.c:133
+msgid "No address book selected"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
+msgid "Address book"
+msgstr "Quasernet d'adreças"
+
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
+msgid "Voicemail (%i)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:406
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:408
+msgid "About SFLphone"
+msgstr "A prepaus de SFLphone"
+
+#: ../sflphone-client-gnome/src/uimanager.c:817
+msgid "Call"
+msgstr "Sonar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
+msgid "_New call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:819
+msgid "Place a new call"
+msgstr "Efectuar una sonada novèla"
+
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
+msgid "_Pick up"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:821
+msgid "Answer the call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:823
+msgid "Finish the call"
+msgstr "Acabar la sonada"
+
+#: ../sflphone-client-gnome/src/uimanager.c:824
+msgid "O_n hold"
+msgstr "Metre en espèra"
+
+#: ../sflphone-client-gnome/src/uimanager.c:825
+msgid "Place the call on hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:826
+msgid "O_ff hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:827
+msgid "Place the call off hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:828
+msgid "Configuration _Assistant"
+msgstr "_Assistent de configuracion"
+
+#: ../sflphone-client-gnome/src/uimanager.c:829
+msgid "Run the configuration assistant"
+msgstr "Aviar l'assistent de configuracion"
+
+#: ../sflphone-client-gnome/src/uimanager.c:832
+msgid "Call your voicemail"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:833
+msgid "_Close"
+msgstr "_Tampar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:834
+msgid "Minimize to system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:835
+msgid "_Quit"
+msgstr "_Quitar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:836
+msgid "Quit the program"
+msgstr "Quitar lo programa"
+
+#: ../sflphone-client-gnome/src/uimanager.c:839
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:840
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:841
+msgid "Copy the selection"
+msgstr "Copiar la seleccion"
+
+#: ../sflphone-client-gnome/src/uimanager.c:842
+msgid "_Paste"
+msgstr "Em_pegar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:843
+msgid "Paste the clipboard"
+msgstr "Empegar lo contengut del quichapapièr"
+
+#: ../sflphone-client-gnome/src/uimanager.c:844
+msgid "Clear _history"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:845
+msgid "Clear the call history"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:846
+msgid "_Accounts"
+msgstr "_Comptes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:846
+msgid "Edit your accounts"
+msgstr "Modificar vòstres comptes"
+
+#: ../sflphone-client-gnome/src/uimanager.c:848
+msgid "_Preferences"
+msgstr "_Preferéncias"
+
+#: ../sflphone-client-gnome/src/uimanager.c:849
+msgid "Change your preferences"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:852
+msgid "_View"
+msgstr "_Afichatge"
+
+#: ../sflphone-client-gnome/src/uimanager.c:855
+msgid "_Help"
+msgstr "_Ajuda"
+
+#: ../sflphone-client-gnome/src/uimanager.c:856
+msgid "Contents"
+msgstr "Ensenhador"
+
+#: ../sflphone-client-gnome/src/uimanager.c:857
+msgid "Open the manual"
+msgstr "Dobrir lo manual"
+
+#: ../sflphone-client-gnome/src/uimanager.c:858
+msgid "About this application"
+msgstr "A prepaus d'aquesta aplicacion"
+
+#: ../sflphone-client-gnome/src/uimanager.c:866
+msgid "_Transfer"
+msgstr "_Transferir"
+
+#: ../sflphone-client-gnome/src/uimanager.c:867
+msgid "Transfer the call"
+msgstr "Transferir a :"
+
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "En_registrar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
+msgid "_Show toolbar"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:871
+msgid "Show the toolbar"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:872
+msgid "_Dialpad"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:873
+msgid "Show the dialpad"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:874
+msgid "_Volume controls"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:875
+msgid "Show the volume controls"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:876
+msgid "_History"
+msgstr "_Istoric"
+
+#: ../sflphone-client-gnome/src/uimanager.c:877
+msgid "Calls history"
+msgstr "Istoric de las sonadas"
+
+#: ../sflphone-client-gnome/src/uimanager.c:878
+msgid "_Address book"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
+msgid "On _Hold"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:1251
+msgid "_Call back"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:1407
+msgid "Edit phone number"
+msgstr "Editar lo numèro"
+
+#: ../sflphone-client-gnome/src/uimanager.c:1419
+msgid "Edit the phone number before making a call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
+msgid "Account Parameters"
+msgstr "Paramètres del Compte"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
+msgid "_Alias"
+msgstr "_Aliàs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
+msgid "_Protocol"
+msgstr "P_rotocòl"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
+msgid "Unknown"
+msgstr "Desconegut"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
+msgid "_Host name"
+msgstr "_Servidor"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
+msgid "_User name"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
+msgid "_Password"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
+msgid "Show password"
+msgstr "Afichar lo senhal"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
+msgid "_Voicemail number"
+msgstr "_Bóstia vocala #"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
+msgid "Authentication"
+msgstr "Autentificacion"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
+msgid "Secret"
+msgstr "Secret"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
+msgid "Credential"
+msgstr "Informacions"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
+msgid "Authentication name"
+msgstr "Nom d'autentificacion"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+msgid "Password"
+msgstr "Senhal"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
+msgid "Security"
+msgstr "Seguretat"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
+msgid "Use TLS transport (sips)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
+msgid "SRTP key exchange"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
+msgid "Disabled"
+msgstr "Desactivat"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
+msgid "Registration"
+msgstr "Enregistrament"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
+msgid "Registration expire"
+msgstr "Expiracion d'enregistrament"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
+msgid "_Comply with RFC 3263"
+msgstr "Respectar RFC 3263"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
+msgid "Network Interface"
+msgstr "Interfàcia de ret"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
+msgid "Local address"
+msgstr "Adreça locala"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
+msgid "Local port"
+msgstr "Pòrt local"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
+msgid "Published address"
+msgstr "Adreça de publicacion"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
+msgid "Using STUN"
+msgstr "Utilizar STUN"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
+msgid "STUN server URL"
+msgstr "URL del servidor STUN"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
+msgid "Same as local parameters"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
+msgid "Set published address and port:"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
+msgid "Published port"
+msgstr "Pòrt de publicacion"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
+msgid "Account settings"
+msgstr "Configuracion del compte"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+msgid "Basic"
+msgstr "Basic"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
+msgid "Advanced"
+msgstr "Avançat"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Ret"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
+#, c-format
+msgid "Server returned \"%s\" (%d)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
+msgid "Protocol"
+msgstr "Protocòl"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
+msgid "Status"
+msgstr "Estatut"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
+msgid "Accounts"
+msgstr "Comptes"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
+msgid "Configured Accounts"
+msgstr "Comptes Configurats"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
+#, c-format
+msgid "There is %d active account"
+msgid_plural "There are %d active accounts"
+msgstr[0] "%d compte actiu"
+msgstr[1] "%d comptes actius"
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
+msgid "You have no active account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
+msgid "General"
+msgstr "General"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
+msgid "_Use Evolution address books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
+msgid "Download limit :"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
+msgid "cards"
+msgstr "cartas"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
+msgid "_Display contact photo if available"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
+msgid "Fields from Evolution's address books"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
+msgid "_Work"
+msgstr "_Trabalh"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
+msgid "_Home"
+msgstr "_Dorsièr personal"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "_Mobile"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
+msgid "Address Books"
+msgstr "Quasernets d'adreças"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
+msgid "Select which Evolution address books to use"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
+msgid "Name"
+msgstr "Nom"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:86
+#, c-format
+msgid "This assistant is now finished."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:88
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:91
+msgid "Alias"
+msgstr "Aliàs"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:95
+msgid "Server"
+msgstr "Servidor"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:99
+msgid "Username"
+msgstr "Nom d'utilizaire"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:103
+msgid "Security: "
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:105
+msgid "SRTP/ZRTP draft-zimmermann"
+msgstr "SRTP/ZRTP draft-zimmermann"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:107
+msgid "None"
+msgstr "Pas cap"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:241
+msgid "SFLphone account creation wizard"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:267
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:268
+msgid "This installation wizard will help you configure an account."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:282
+msgid "VoIP Protocols"
+msgstr "Protocòls VoIP"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:282
+msgid "Select an account type"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:284
+msgid "SIP (Session Initiation Protocol)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:286
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2 (InterAsterix Exchange)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:300
+msgid "Account"
+msgstr "Compte"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:300
+msgid "Please select one of the following options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:302
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:304
+msgid "Register an existing SIP or IAX2 account"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+msgid "SIP account settings"
+msgstr "Paramètres de compte SIP"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
+msgid "Please fill the following information"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
+msgid "Secure communications with _ZRTP"
+msgstr "Comunicacions securizadas amb _ZRTP"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:401
+msgid "Optional email address"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:401
+msgid "This email address will be used to send your voicemail messages."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:409
+msgid "_Email address"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:431
+msgid "IAX2 account settings"
+msgstr "Paramètres de compte IAX2"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:508
+msgid "Network Address Translation (NAT)"
+msgstr "Network Address Translation (NAT)"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:508
+msgid "You should probably enable this if you are behind a firewall."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/assistant.c:517
+msgid "E_nable STUN"
+msgstr "A_ctivar STUN"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:524
+msgid "_STUN server"
+msgstr "S_ervidor STUN"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:538
+msgid "Account Registration"
+msgstr "Enregistrament del compte"
+
+#: ../sflphone-client-gnome/src/config/assistant.c:538
+msgid "Congratulations!"
+msgstr "Òsca !"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
+msgid "Frequency"
+msgstr "Frequéncia"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
+msgid "Bitrate"
+msgstr "Debit"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
+msgid "Bandwidth"
+msgstr "Benda passanta"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
+msgid "ALSA plugin"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
+msgid "Output"
+msgstr "Sortida"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
+msgid "Input"
+msgstr "Entrada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Sonariás"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
+msgid "Sound Manager"
+msgstr "Interfàcia Àudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
+msgid "_Pulseaudio"
+msgstr "_Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
+msgid "_ALSA"
+msgstr "_ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
+msgid "ALSA settings"
+msgstr "Paramètres ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
+msgid "Recordings"
+msgstr "Enregistraments"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
+msgid "Destination folder"
+msgstr "Dorsièr de destinacion"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
+msgid "Select a folder"
+msgstr "Seleccionar un dorsièr"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
+msgid "Ringtones"
+msgstr "Sonariás"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
+msgid "_Enable ringtones"
+msgstr "_Activar las sonariás"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
+msgid "Choose a ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
+msgid "Audio Files"
+msgstr "Fichièrs àudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Configuracion del compte"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "URL Argument"
+msgstr "Argument URL"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
+msgid "Custom commands on incoming calls with URL"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
+msgid "Trigger on specific _SIP header"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
+msgid "Trigger on _IAX2 URL"
+msgstr "Desenclavar en _IAX2"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
+msgid "Command to _run"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
+msgid "Phone number rewriting"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
+msgid "_Prefix dialed numbers with"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
+msgid "Desktop Notifications"
+msgstr "Notificacions de Burèu"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
+msgid "_Enable notifications"
+msgstr "_Activar las notificacions"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
+msgid "System Tray Icon"
+msgstr "Icòna de la barra d'estat sistèma"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
+msgid "_Popup main window on incoming call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
+msgid "Ne_ver popup main window"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
+msgid "Hide SFLphone window on _startup"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
+msgid "Calls History"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
+msgid "_Keep my history for at least"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
+msgid "days"
+msgstr "jorns"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
+msgid "Preferences"
+msgstr "Preferéncias"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
+msgid "Audio"
+msgstr "Àudio"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+msgid "Address Book"
+msgstr "Quasernet d'adreças"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+msgid "Hooks"
+msgstr "Ancoratge"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
+msgid "Advanced options for TLS"
+msgstr "Opcions avançadas TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
+msgid "TLS transport"
+msgstr "Transpòrt TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
+msgid ""
+"TLS transport can be used along with UDP for those calls that would\n"
+"require secure sip transactions (aka SIPS). You can configure a different\n"
+"TLS transport for each account. However, each of them will run on a "
+"dedicated\n"
+"port, different one from each other\n"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
+msgid "Certificate of Authority list"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
+msgid "Choose a CA list file (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
+msgid "Public endpoint certificate file"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
+msgid "Choose a public endpoint certificate (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
+msgid "Choose a private key file (optional)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
+msgid "Password for the private key"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
+msgid "TLS protocol method"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
+msgid "TLS cipher list"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+msgid "Server name instance for outgoing TLS connection"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
+msgid "Negotiation timeout (sec:msec)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
+msgid "Verify incoming certificates, as a server"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
+msgid "Verify certificates from answer, as a client"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
+msgid "Require certificate for incoming tls connections"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "Opcions de ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Opcions SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search all"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
+msgid "Click here to change the search type"
+msgstr "Clicatz aicí per modificar lo tipe de recèrca"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+msgid "Search by missed call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Search by incoming call"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
+msgid "Search by outgoing call"
+msgstr ""
diff --git a/lang/pl/pl.po b/lang/pl/pl.po
index ad0446933f5bd42401c66b001c817ed926799853..dc2d030d0efef859004109ea3fa1a546aa0d5d3f 100644
--- a/lang/pl/pl.po
+++ b/lang/pl/pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-03 18:09+0000\n"
 "Last-Translator: Mariusz Bednarz <mbednarz@bedmar.pl>\n"
 "Language-Team: Polish <pl@li.org>\n"
@@ -16,64 +16,64 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Zarejestrowany"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Nie zarejestrowany"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Próbuję ..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Błąd"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Autoryzacja nie powiodła się"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Sieć niedostępna"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Wybrany host jest niedostępny"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Niepoprawny"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Używane konto"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Brak zarejestrowanych kont"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -81,28 +81,28 @@ msgstr ""
 "Nie można połączyć się z serwerem SFLphone.\n"
 "Upewnij się, że został uruchomiony daemon SFLphone"
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -111,7 +111,7 @@ msgstr ""
 "Informacja ALSA\n"
 "Błąd otwarcia urządzenia do odtwarzania dźwięku"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -120,7 +120,7 @@ msgstr ""
 "Informacja ALSA\n"
 "Błąd otwarcia urządzenia do przechwytywania"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -129,473 +129,473 @@ msgstr ""
 "Informacja Pulseaudio\n"
 "Pulseaudio nie zostało uruchomione"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d głosowa wiadomość"
 msgstr[1] "%d głosowych wiadomości"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d głosowa wiadomość"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Brak zarejestrowanych kont"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -648,479 +648,452 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+msgid "Voice enhancement settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1129,82 +1102,110 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
 
diff --git a/lang/pt/pt.po b/lang/pt/pt.po
index 9e6550c474def750acd0fb9960e89dcd86d0265d..949459ff96648a4eea4a602f50f185138d515768 100644
--- a/lang/pt/pt.po
+++ b/lang/pt/pt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-03 18:09+0000\n"
 "Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -15,578 +15,578 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Não Registado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Erro"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Autenticação Falhou"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "A rede está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "A máquina está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Inválido"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "conta %s : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Desligar"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Correio de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Livro de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Livro de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Correio de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Chamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Remover a conta seleccionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Contas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Ver"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Ajuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Gravar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "Marca_dor"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Livro de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Nomear"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -639,479 +639,453 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Configurações da conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Rede"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Contas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Geral"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "cartões"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Emprego"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Livros de Endereços"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nome"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Nome Alternativo"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Servidor"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Utilizador"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Endereço de email opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Parabéns!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequência"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Taxa de Dados"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Largura de Banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Saída"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Gravações"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Pasta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Seleccione uma pasta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Ficheiros Áudio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Configurações da conta"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Ícone de Notificação"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Histórico de Chamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "dias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Áudio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Livro de Endereços"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1120,82 +1094,110 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Clique aqui para alterar o tipo de procura"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
 
@@ -1289,7 +1291,7 @@ msgstr ""
 #~ ",Launchpad Contributions:,Maxime Chambreuil, ,Launchpad Contributions:,"
 #~ "Maxime Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime "
 #~ "Chambreuil,Tiago Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago "
-#~ "Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago Silva"
+#~ "Silva, ,Launchpad Contributions:,Maxime Chambreuil,Tiago"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
diff --git a/lang/pt_BR/pt_BR.po b/lang/pt_BR/pt_BR.po
index 137970db2a820de43ec78283e2802bb154783a0e..42a553a175d85f07feb573e84d017da5d38c1928 100644
--- a/lang/pt_BR/pt_BR.po
+++ b/lang/pt_BR/pt_BR.po
@@ -7,72 +7,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: 2010-03-04 13:55+0000\n"
-"Last-Translator: Teylo Laundos Aguiar <teylo.aguiar@gmail.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-06-02 08:31+0000\n"
+"Last-Translator: Gustavo Guidorizzi <Unknown>\n"
 "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Não Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Tentando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Erro"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "A autenticação falhou"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "A rede está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "A máquina está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Erro de configuração no stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Servidor stun inválido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr "Pronto"
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Inválido"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Utilizando conta"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Sem contas registradas"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,28 +80,28 @@ msgstr ""
 "Incapaz de conectar ao servidor SFLphone.\n"
 "Tenha certeza de que o daemon está rodando."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Ligações IP diretas"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr "hoje às %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr "ontem às %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr "%A às %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr "%x às %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -111,7 +111,7 @@ msgstr ""
 "\n"
 "Erro ao abrir o dispositivo de reprodução"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -121,7 +121,7 @@ msgstr ""
 "\n"
 "Erro ao abrir o dispositivo de captura"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -131,43 +131,43 @@ msgstr ""
 "\n"
 "Pulseaudio não está rodando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Existe uma ligação em progresso"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Existem ligações em progresso"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Você ainda deseja sair?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Erro no SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP não é suportado pelo peer %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Comunicação Segura Indisponível"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Finalizar Chamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -176,11 +176,11 @@ msgstr ""
 "Um erro %s forçou a ligação com %s a mudar para um modo não encriptado.\n"
 "Motivo exato: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Negociação ZRTP falhou"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -189,50 +189,50 @@ msgstr ""
 "%s deseja finalizar a utilização de comunicação segura. A confirmação irá "
 "retomar sem SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmar Vá Limpar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s conta : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d mensagem de voz"
 msgstr[1] "%d mensagens de voz"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Ligando com %s conta <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Conta atual"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Você não tem contas configuradas"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Você não tem contas registradas"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -241,369 +241,369 @@ msgstr ""
 "<i>Com:</i>%s \n"
 "utilisando %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s não suporta ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Negociação ZRTP falhou com %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Com:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume dos auto-falantes"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume do microfone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Apresentar janela principal"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Desligar"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] "%i conta ativa"
 msgstr[1] "%i contas ativas"
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Correio de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Correio de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone é um cliente VoIP compatível com os protocolos SIP e IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Sobre o SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Chamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nova ligação"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Faz uma nova chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Atender"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Responder a chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Terminar a chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Em _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Colocar a chamada em espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Encerrar a chamada em espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Arquivo de Configuração"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Erro de configuração no stun"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d mensagem de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Fechar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Minimizar para a bandeja do sistema"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Sair"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Sair do programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Remover a conta selecionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "_Colar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Colar o conteúdo da Área de Transferência"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Limpar _histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Limpar histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Contas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Conta atual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Altera as suas preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Exibir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Ajuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Abrir o manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Autenticação"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Transfirir para:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Gravar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Gravar a conversação atual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "_Exibir barra de ferramentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Mostra a barra de ferramentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "Desabilitado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "_Controle de Volumes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Exibir controles de volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "Em _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Ligar de volta"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Editar número de telefone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Edite o número de telefone antes de fazer uma ligação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parâmetros de conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Apelido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Nome do host"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Nome do usuário"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Senha da caixa postal de voz"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Autenticação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Segredo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Credencial"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nome de autenticação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Segurança"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Use transporte TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Troca de chave SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Desabilitado"
 
@@ -656,40 +656,40 @@ msgstr "Indique endereço e portas publicadas"
 msgid "Published port"
 msgstr "Porta publicada"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codecs"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Configurações da conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Rede"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -700,95 +700,95 @@ msgstr ""
 "configurações que você definir aqui também serão utilizadas se nenhuma conta "
 "puder ser combinada a uma chamada de entrada ou de saída."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "O Servidor retornou \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Contas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Contas Configuradas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] "conta ativa"
 msgstr[1] "conta ativa"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Você não possui uma conta ativa"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Geral"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Use o catálogo de endereços do Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Limite de download :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "cartões"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Apresentar foto de contato caso disponível"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Campos do catálogo de endereços do Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Trabalho"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Casa"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Celular"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Catálogos de endereços"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Selecione qual catálogo de endereços do Evolution deseja utilizar"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nome"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Este assistente está finalizado."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -796,348 +796,325 @@ msgstr ""
 "Você pode a qualquer momento checar seu estado de registro ou modificar seus "
 "parâmetros de conta na janela Opções/Contas."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Apelido"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Servidor"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nome de usuário"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Segurança: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP rascunho-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Nenhum"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Assistente de criação de contas do SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Bem vindo ao assistente de criação de contas do SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Este assistente de instalação irá lhe ajudar a configurar uma conta."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Selecione um tipo de conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Por favor, selecione uma das seguintes opções"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Criar uma conta gratuita SIP/IAX2 em sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrar uma conta SIP ou IAX2 existente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Configurações de conta SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Por favor, preencha as informações a seguir"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Comunicações seguras com _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Endereço de e-mail opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "Este endereço de email será utilizado para enviar as mensagens de voz em sua "
 "caixa postal."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_endereço de email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Configurações de conta IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 "Você provavelmente precise habilitar isto se estiver por trás de um firewall."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "Ha_bilitar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Registro de conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Parabéns!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequência"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Taxa de bits"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Largura de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Saída"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "_Detecção de atividade de voz"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Ringtones"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Redução de ruído (Utilização de banda-estreita)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Gerenciador de Som"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Configurações do ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Gravações"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Pasta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Selecione uma pasta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Ringtones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Habilitar ringtones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Escolha um ringtone"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Arquivos de Áudio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Configurações da conta"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Argumento da URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Comandos padrões de ligações recebidas com URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s será substituído pela URL fornecida."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Gancho em um cabeçalho _SIP específico"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Gancho em uma URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Comando a _executar"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Reescrevendo número do telefone"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Prefixo de números discados com"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notificações de Desktop"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Habilitar notificações"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Ícone da bandeja do sistema"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Popup na janela principal ao receber ligação"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Nu_nca apresentar popup na janela principal"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Esconder o SFLphone na _inicialização"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Histórico de Chamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Manter meu histórico por pelo ao menos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "dias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Áudio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Ganchos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
-msgstr ""
+msgstr "Atalhos"
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
+"Tenha cuidado: estes atalhos podem predominar sobre atalhos definidos "
+"globalmente."
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "Opções ZRTP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "Enviar um Hash Olá no S_DP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "Pergunta ao Usuário para Confirmar SAS"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "_Alerta se o ZRTP não é suportado"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "Apresenta o SAS uma vez para realizar eventos"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr "Opções do SDES"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Opções avançadas para o TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Transporte TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1152,85 +1129,119 @@ msgstr ""
 "funcionar em uma\n"
 "porta dedicada, uma diferente da outra\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Certificado da lista de Autoridades"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Escolha um arquivo de lista CA (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Arquivo certificado endpoint público"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Escolha um certificado endpoint público (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Escolha um arquivo de chave privada (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Senha para a chave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Método do protocolo TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Lista de cifras TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Instância de nome do servidor para saída da conexão TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Tempo de negociação expirado (seg:mseg)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Verificar os certificados de entrada, como um servidor"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Verificar certificados de resposta, como um cliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Requer certificado para conexões tls entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "Opções ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "Enviar um Hash Olá no S_DP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "Pergunta ao Usuário para Confirmar SAS"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "_Alerta se o ZRTP não é suportado"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "Apresenta o SAS uma vez para realizar eventos"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Opções do SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Buscar todos"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Clique aqui para alterar o tipo de pesquisa"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Buscar por ligações perdidas"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Buscar por ligações recebidas"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Buscar por ligações feitas"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "_Detecção de atividade de voz"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Redução de ruído (Utilização de banda-estreita)"
+
 #~ msgid "Stun Server"
 #~ msgstr "Servidor STUN"
 
@@ -1557,8 +1568,8 @@ msgstr "Buscar por ligações feitas"
 #~ ",Launchpad Contributions:,Maxime Chambreuil,kalib, ,Launchpad "
 #~ "Contributions:,Maxime Chambreuil,kalib, ,Launchpad Contributions:,Maxime "
 #~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib, ,"
-#~ "Launchpad Contributions:,André Gondim,Maxime Chambreuil,Ricardo Martins,"
-#~ "Thaynã Moretti,kalib"
+#~ "Launchpad Contributions:,André Gondim,Gustavo Guidorizzi,Maxime "
+#~ "Chambreuil,Ricardo Martins,Thaynã Moretti,kalib"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1566,5 +1577,5 @@ msgstr "Buscar por ligações feitas"
 #~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime."
 #~ "chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,"
 #~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,"
-#~ "andregondim@ubuntu.com,maxime.chambreuil@gmail.com,ricardo.macedo@yahoo."
+#~ "andregondim@ubuntu.com,,maxime.chambreuil@gmail.com,ricardo.macedo@yahoo."
 #~ "com.br,,kalibslack@gmail.com"
diff --git a/lang/ru/ru.po b/lang/ru/ru.po
index 9124d9226be028bdee1ec526d6b7f303532e2da3..ddb79013273d8850c7265b9bb4f3169a6fc0c2b4 100644
--- a/lang/ru/ru.po
+++ b/lang/ru/ru.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: 2010-03-05 12:41+0000\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-05-11 07:48+0000\n"
 "Last-Translator: DMG <Unknown>\n"
 "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
@@ -16,64 +16,64 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Зарегистрирован"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Не зарегистрирован"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Пытаюсь..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Ошибка"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Аутентификация не удалась"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Сеть недоступна"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Узел недоступен"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Ошибка конфигурации Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Неверный сервер Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr "Готово"
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Неверный"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Использовать аккаунт"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "У вас нет зарегистрированных аккаунтов"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -81,28 +81,28 @@ msgstr ""
 "Невозможно подключиться к SFLphone-серверу.\n"
 "Убедитесь что он работает."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Прямые IP-звонки"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr "сегодня в %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr "вчера в %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr "%A в %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr "%x в %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -112,7 +112,7 @@ msgstr ""
 "\n"
 "Ошибка при попытке открытия устройства воспроизведения звука"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -122,7 +122,7 @@ msgstr ""
 "\n"
 "Ошибка при попытке открытия устройства захвата звука"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -132,43 +132,43 @@ msgstr ""
 "\n"
 "Pulseaudio не запущен"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Звонок ещё не окончен."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Несколько звонков ещё не окончены."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Вы уверенны что хотите выйти?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Ошибка SFLphone."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP не поддерживается устройством %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Зашифрованная связь недоступна."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Продолжить"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Завершить вызов"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -178,11 +178,11 @@ msgstr ""
 "режим.\n"
 "Точная причина: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Неудачный обмен информации ZRTP"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -191,26 +191,26 @@ msgstr ""
 "%s хочет отказаться от использования зашифрованной связи. В случае "
 "подтверждения разговор продолжится без SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Подтвердить переход на незашифрованную связь"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Подтвердить"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s аккаунт: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>От:</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
@@ -218,24 +218,24 @@ msgstr[0] "%d голосовое письмо"
 msgstr[1] "%d голосовые письма"
 msgstr[2] "%d голосовые письма"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Вызов %s с помощью аккаунта <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Текущий аккаунт"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "У вас нет настроенных аккаунтов"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "У вас нет зарегистрированных аккаунтов"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -244,45 +244,45 @@ msgstr ""
 "<i>с:</i> %s\n"
 "используя %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s не поддерживает ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Обмен информации ZRTP не удался (%s)"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>с</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Громкость"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Чувствительность микрофона"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Показать главное окно"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "_Положить трубку"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
@@ -290,324 +290,324 @@ msgstr[0] "%i активный аккаунт"
 msgstr[1] "%i активных аккаунтов"
 msgstr[2] "%i active accounts"
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Голосовая почта"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Адресная книга не выбрана"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Голосовая почта (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент"
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "О программе SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Новый вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Сделать новый вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Взять трубку"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Ответить на вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Завершить вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "_Удерживать вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Поставить вызов на удержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "_Снять вызов с удержания"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Поставить вызов на удержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Мастер настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Запустить мастер настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "Прослушивание голосовой почты"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Закрыть"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Свернуть в трей"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "В_ыход"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Выйти из программы"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Правка"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Копировать"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Копировать выделенное"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "В_ставить"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Вставить из буфера обмена"
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Очистить журнал"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Очистить журнал вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Аккаунты"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Нстройка аккаунта"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "_Настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Изменить ваши настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Вид"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Помощь"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Содержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Открыть руководство пользователя"
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "О программе"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Переадресация вызова"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "Переадресовать вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Запись"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr "Записать текущий разговор"
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "Показать _панель инструментов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Показывать панель инструментов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Номеронабиратель"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Показывать _номеронабиратель"
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Настройки _громкости"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Показывать настройки _громкости"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Журнал вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "История вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "_Удерживать звонок"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "Обратный вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Изменить номер телефона"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Изменить номер телефона перед вызовом"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Параметры учетной записи"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Псевдоним"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "Пр_отокол"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Неизвестный"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "Имя или IP-адрес _сервера"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Имя пользователя"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "Па_роль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Показать пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "Номер _голосовой почты"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr "_Агент-пользователя"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Аутентификация"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Параметры доступа"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Имя для аутентификации"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Безопасность"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Использовать протокол TLS"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Обмен ключами SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Отключен"
 
@@ -660,40 +660,40 @@ msgstr "Настроить публичный адрес и порт:"
 msgid "Published port"
 msgstr "Публичный порт"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Кодеки"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
-msgstr ""
+msgstr "DTMF"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
-msgstr ""
+msgstr "RTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Настройки аккаунта"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Основные"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Дополнительно"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "Сеть"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
@@ -704,28 +704,28 @@ msgstr ""
 "будут использованы если не будет подходящего аккаунта для входящего или "
 "исходящего вызова."
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "Ответ сервера \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Протокол"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Статус"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Аккаунты"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Настройка аккаунтов"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
@@ -733,67 +733,67 @@ msgstr[0] "%d активный аккаунт"
 msgstr[1] "%d активных аккаунтов"
 msgstr[2] "действующий аккаунт"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "У вас нет активного аккаунта"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Общие настройки"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Использовать адресную книгу Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Ограничение скорости скачивания:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "карточек"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Показать фотографию контакта (если имеется):"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Использовать следующие поля из адресной книги Evolution:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Рабочий"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Домашний"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Мобильный"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Выбрать адресную книгу Evolution:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Имя"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Мастер закончил настройку."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -801,348 +801,323 @@ msgstr ""
 "Вы можете в любое время проверить статус регистрации или изменить параметры  "
 "ваших аккаунтов в меню Правка / Аккаунты."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Псевдоним"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Сервер"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Имя пользователя"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Безопасность "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Нет"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Мастер создания аккаунта SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Добро пожаловать в мастер создания аккаунта SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Этот мастер установки поможет вам настроить ваш аккаунт."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP-протоколы"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Выберите тип аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Аккаунт"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Выберите одну из следующих возможностей"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Использовать существующий SIP или IAX2 аккаунт"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Настройка SIP-аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Введите пожалуйста следующие данные"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Защищëнная связь с _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "e-mail"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "Этот электронный адрес будет использоваться для отправки сообщений голосовой "
 "почты"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Адрес эл. почты"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Настройка IAX2-аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 "Возможно нужно выбрать эту опцию если вы находитесь за сетевым экраном."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "Включить STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_STUN-сервер"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Регистрация аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Поздравляем!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Частота"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Битрейт"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Полоса пропускания"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA-плагин"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Аудиовыход"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Аудиовход"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "Детектор тишины (VAD)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Рингтоны"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "Шумоподавление"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Менеджер звука"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Настройка ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Записи"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Сохранять в"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Выберите каталог"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Рингтоны"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Включить рингтон"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Выберать рингтон"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Аудио файлы"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Настройки аккаунта"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Передача URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Пользовательская команда при входящих вызовах с URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s будет заменена на переданную URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Запустить при определëнном SIP-заголовке"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Запустить при наличии URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "_Выполнить команду:"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Префикс"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "Добавить префикс перед номером"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Всплывающие уведомления"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "Показывать всплывающие уведомления"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Значок в системном трее"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr "Показывать SFLphone в системном трее"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Показать главное окно при входящем вызове"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "_Никогда не показывать главное окно"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Скрывать SFLphone при запуске в трей"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Журнал вызовов"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Хранить журнал вызовов в течении"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "дней"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Настройка"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Аудио"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Прочее"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
-msgstr ""
+msgstr "Горячие клавиши"
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr "Опции ZRTP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr "Послать hello-хэш в S_DP"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr "Попросить пользователя подтвердить пароль SAS"
+msgstr "ВНИМАНИЕ: эти комбинации могут заменить системные комбинации клавиш"
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr "_Предупредить если ZRTP не пддерживается"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr "Показать SAS один раз"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr "Настройка SDES"
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr "Использовать RTP при сбое SDES"
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Дополнительные настройки для TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Транспорт TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1155,85 +1130,119 @@ msgstr ""
 "каждого аккаунта (но каждый из них будет использовать свой выделенный "
 "порт).\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr "Global TLS listener (для всех аккаунтов)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Список центров сертификации"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Выберите файл Центра сертификации (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Файл с публичным сертификатом"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Выберите публичный сертификат (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Выберите файл с приватным ключом (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Пароль для приватного ключа"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Метод протокола TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Список шифров TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Имя сервера для исходящих TLS-подключений"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Время ожидания соединения (сек:мсек)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Проверять входящие сертификаты как сервер"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Проверять входящие сертификаты как клиент"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Требовать сертификат для входящих TLS-подключений"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr "Опции ZRTP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr "Послать hello-хэш в S_DP"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr "Попросить пользователя подтвердить пароль SAS"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr "_Предупредить если ZRTP не пддерживается"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr "Показать SAS один раз"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Настройка SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr "Использовать RTP при сбое SDES"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Искать все"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Нажмите сюда, чтобы изменить тип поиска"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Поиск в пропущенных вызовах"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Поиск в входящих вызовах"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Поиск в исходящих вызовах"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "Детектор тишины (VAD)"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "Шумоподавление"
+
 #~ msgid "Account creation wizard"
 #~ msgstr "Мастер настройки SFLphone"
 
diff --git a/lang/sflphone.pot b/lang/sflphone.pot
index d98c2e8d7f85988d80fbc2c21018eb42d35d870c..6238be246f3ec52d0b6861c43a0ea1c857891bb2 100644
--- a/lang/sflphone.pot
+++ b/lang/sflphone.pot
@@ -1,591 +1,591 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# SFLphone translation template
+# Copyright (C) Savoir-faire Linux 2005 2006 2007 2008 2009 2010
+# This file is distributed under the same license as the sflphone package.
+# Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>.
 #
-#, fuzzy
+
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: 0.9.8\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-06-17 14:00\n"
+"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
+"Language-Team: SFLphone Team <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -638,479 +638,452 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+msgid "Voice enhancement settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1119,81 +1092,109 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
diff --git a/lang/sv/sv.po b/lang/sv/sv.po
index 562ba5c16dd6cd59ae38ec8f44d36bdc4cc58571..92791abe549fa188ec3c7e69b6442d2faf29adee 100644
--- a/lang/sv/sv.po
+++ b/lang/sv/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2010-04-12 13:20+0000\n"
 "Last-Translator: Gabriel Thörnblad <Unknown>\n"
 "Language-Team: Swedish <sv@li.org>\n"
@@ -15,64 +15,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrerad"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Ej registrerad"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Autentisering misslyckades"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Nätverket kan inte nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Fel i STUN -konfigurering"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "STUN-server ej giltig"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr "Redo"
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Ogiltigt"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Använder konto"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Inga registrerade konton"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -80,515 +80,515 @@ msgstr ""
 "Kan inte ansluta till SFLphone-servern.\n"
 "Se till att daemonen är igång."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr "idag klockan %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr "igår klockan %R"
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -641,479 +641,452 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+msgid "Voice enhancement settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1122,81 +1095,109 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
diff --git a/lang/tr/tr.po b/lang/tr/tr.po
index d4cd322e0ba4623065b61e87087bbb9bc3d47ce2..f2f576438b9e8e7773ecfbf661ce6ba817d1dcf1 100644
--- a/lang/tr/tr.po
+++ b/lang/tr/tr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-30 08:56+0000\n"
 "Last-Translator: zeugma <Unknown>\n"
 "Language-Team: Turkish <tr@li.org>\n"
@@ -15,578 +15,578 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Kayıtlı"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Hata"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Kimlik Doğrulama Başarısız"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Ağ erişilemez durumda"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Geçersiz"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Devam et"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Onayla"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Sesli mesaj"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Adres Defteri"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Çağrı"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Yeni çağrı"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Aramayı sonlandır"
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Yapılandırma sihirbazını çalıştır"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Kapat"
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Sistem çubuğuna küçült"
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Çık"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Programdan çık"
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Düzenle"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Kopyala"
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "_Yapıştır"
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Hesaplar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Hesaplarınızı düzenleyin"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "_Tercihler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Tercihlerinizi değiştirin"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Göster"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Yardım"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "İçerikler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Bu uygulama hakkında"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "_Transfer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "_Kayıt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Araç çubuğunu göster"
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "_Geçmiş"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Arama geçmişi"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "_Adres defteri"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Bilinmiyor"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Kullanıcı adı"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Parola"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Parolayı göster"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Kimlik Doğrulama"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Gizli"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Parola"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Güvenlik"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -639,479 +639,453 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Çözücüler"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Hesap ayarları"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Basit"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Gelişmiş"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "İletişim Kuralları"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Durum"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Hesaplar"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Genel"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_İş"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Başlangıç"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Hareketli"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Adres Defterleri"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "İsim"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Rumuz"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Sunucu"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Kullanıcı adı"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Hiçbiri"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Hesap"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "isteğe bağlı e-posta adresi"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_E-Posta adresi"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Tebrikler!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frekans"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Veri akış hızı"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Band Genişliği"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Çıkış"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Giriş"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Kayıtlar"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Bir klasör seç"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Ses Dosyaları"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Hesap ayarları"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Sistem Tepsisi Simgesi"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "gün"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Tercihler"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Ses"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Adres Defteri"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1120,81 +1094,109 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Arama türünü değiştirmek için buraya tıklayın"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
diff --git a/lang/zh_CN/zh_CN.po b/lang/zh_CN/zh_CN.po
index 543b7ea3de5736c9cb47aeff3f1043c629de7d7f..d2df50e47aeea11bd0d72b693039d1efb8078619 100644
--- a/lang/zh_CN/zh_CN.po
+++ b/lang/zh_CN/zh_CN.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2010-02-28 01:32+0000\n"
 "Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
@@ -16,64 +16,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "已注册"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "未注册"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "正在连接..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "注册失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "认证失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "网络连接失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "服务器连接失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun配置有误"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Stun服务器无效"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "无效"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "使用账户"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "没有已注册帐户"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -81,28 +81,28 @@ msgstr ""
 "连接SFLphone服务器失败.\n"
 "请检查daemon是否还在运行."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -112,7 +112,7 @@ msgstr ""
 "\n"
 "打开回放设备时出错"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -122,7 +122,7 @@ msgstr ""
 "\n"
 "打开采集设备时出错"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -132,472 +132,472 @@ msgstr ""
 "\n"
 "Pulseaudio未运行"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "有一个电话正在处理"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "有电话正在处理中"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "确认要退出?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone出错"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "安全通信不可用"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "继续"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "停止呼叫"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "确认"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s 帐户: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>拨入方</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d 个语音信息"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "使用%s帐户<i>%s</i>呼叫"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "当前帐户"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "你没有设置任何账户"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "未发现已注册帐户"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s 不支持 ZRTP。"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "扬声器音量"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "话筒音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "显示主窗口(S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "挂断(_H)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "语音信箱"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "语音信箱 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "关于SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "电话(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "新电话(_N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "接听(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "保持(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "恢复通话"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun配置有误"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d 个语音信息"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "退出(_Q)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "编辑(_E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "删除所选账户"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "清空历史记录(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "清空历史记录"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "账户(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "当前帐户"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "首选项(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "更改您的首选项"
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "查看(_V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "帮助(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "继续"
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "身份验证"
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "转接"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "转给:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "录音(_R)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "禁用"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "历史"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "呼叫记录"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "保持(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "回叫(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "编辑电话号码"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "拨出电话前编辑电话号码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "帐户相关参数"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "别名(A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "协议(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "未知"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "主机名(H)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "用户名(U)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "密码(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "密码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "语音信箱号码(V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "身份验证"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "密码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "安全"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "禁用"
 
@@ -650,479 +650,455 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "Codecs编码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "帐户设置"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr "网络"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "协议"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "状态"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "帐户"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "已配置帐户"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "常用配置"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "使用Evolution地址薄(U)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "下载上限:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "卡"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "如果可行则显示联系人照片(D)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "使用Evolution地址薄中的如下字段:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "单位电话(W)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "家庭电话(H)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "移动电话(M)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "选择使用如下Evolution地址薄"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "名称"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "配置完成."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "别名"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "服务器"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "用户名"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone账户创建向导"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "欢迎使用SFLphone帐户创建向导!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "安装向导将帮助您配置帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP协议"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "选择帐户类型"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(会话初始化协议)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(Asterisk内部交换协议)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "请选择以下选项中的一个"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "在sflphone.org上创建免费的SIP/IAX2帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "注册已存在的SIP或IAX2帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIP帐户设置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "请填写以下信息"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "可选邮件地址"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "这个邮件地址将被用来发送您的语音邮箱消息"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "邮件地址(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2帐户设置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "网络地址解析(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "使用STUN(n)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "STUN服务器(S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "帐户注册"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "恭喜!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "频率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "比率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "带宽"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA插件"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "输出"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "输入"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "声音状态检测(V)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "铃声"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "降噪处理-窄频压缩(N)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+#, fuzzy
+msgid "_Noise Reduction"
+msgstr "降噪"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "音频管理器"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA设置"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "记录"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "目标文件夹"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "选择文件夹"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "铃声"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "启用铃声(E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "选择铃声"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "音频文件"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "帐户设置"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL参数"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "定制对带有URL的来电的处理"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "传输的URL会被替换成%s."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "激活指定的SIP头(S)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "激活IAX2 URL(I)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "运行命令(r)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "重设电话号码"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "号码前缀(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "桌面提示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "启用提示(E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "系统托盘图标"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "来电时弹出主窗口(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "从不弹出主窗口(v)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "在启动时隐藏SFLphone主窗口"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "拨号历史"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "首选项"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "钩键"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1131,85 +1107,119 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "查询所有"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "请点击此处改变查询方式"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "从未接电话中查询"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "从来电中查询"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "从拨出电话中查询"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "声音状态检测(V)"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "降噪处理-窄频压缩(N)"
+
 #~ msgid "Account creation wizard"
 #~ msgstr "帐户创建向导"
 
@@ -1740,9 +1750,6 @@ msgstr "从拨出电话中查询"
 #~ msgid "%s account- %s"
 #~ msgstr "%s 帐户- %s"
 
-#~ msgid "Noise reduction"
-#~ msgstr "降噪"
-
 #~ msgid "_Destination folder"
 #~ msgstr "目标文件夹(D)"
 
diff --git a/lang/zh_HK/zh_HK.po b/lang/zh_HK/zh_HK.po
index 67a037909ea35451911e2142def8becd3df8edff..ef06d0715a2e23900d35abddfeb11b9638e6740d 100644
--- a/lang/zh_HK/zh_HK.po
+++ b/lang/zh_HK/zh_HK.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-03 18:09+0000\n"
 "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
@@ -16,64 +16,64 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "已註冊"
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "未註冊"
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "正在連接..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "註冊失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "網路連線失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "伺服器連線失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun配置有誤"
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Stun伺服器無效"
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "無效"
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "使用賬戶"
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "沒有已註冊帳戶"
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -81,28 +81,28 @@ msgstr ""
 "連接SFLphone伺服器失敗.\n"
 "請核查daemon是否正在運行."
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -112,7 +112,7 @@ msgstr ""
 "\n"
 "打開回放設備時出錯"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -122,7 +122,7 @@ msgstr ""
 "\n"
 "打開采集設備時出錯"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -132,472 +132,472 @@ msgstr ""
 "\n"
 "Pulseaudio未運行"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "有一個電話正在處理中."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "有電話正在處理中."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "確認要退出?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone 出錯"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s 帳戶 : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>撥入方</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d 個語音郵件"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "使用%s帳戶<i>%s</i>呼叫"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "當前帳戶"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "你沒有設置任何賬戶"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "未發現已註冊帳戶"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "揚聲器音量"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "話筒音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "顯示主窗口(S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr "放下(H)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "語音郵件"
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "語音郵件 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议."
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "有關SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "電話"
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "新電話(N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "撥出(P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "待机"
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "恢复通話"
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun配置有誤"
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d 個語音郵件"
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "編輯(E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "編輯(E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "刪除所選賬戶"
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "清空曆史記錄(C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "清空曆史記錄"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "帳戶(A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "當前帳戶"
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "屬性"
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "查看(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "幫助(H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "轉接"
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr "轉給:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr "記錄(R)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "顯示撥號鍵盤"
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "歷史"
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "呼叫記錄"
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "待机"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "回叫(C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "編輯電話號碼"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "撥出電話前編輯電話號碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "帳戶相關參數"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "別稱(A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "協議(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "未知"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "主机名稱(H)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "使用者名稱(U)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "密碼(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "密碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "語音郵箱(V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "密碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -650,479 +650,455 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr "編碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr "SIP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "帳戶設置"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "協議"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "狀態"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "帳戶"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "已配置帳戶"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "常用配置"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "使用Evolution地址薄(U)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "下載上限:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "卡"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "如果可以則顯示聯繫人照片(D)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "使用Evolution地址薄中的如下字段:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "單位電話(W)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "家庭電話(H)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "移動電話(M)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "選擇使用如下Evolution地址薄"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "名稱"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "配置完成."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "別稱"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "伺服器"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "使用者名稱"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone賬戶創建嚮導"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "歡迎使用SFLphone帳戶創建嚮導!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "安裝向導將幫助您配置帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP協議"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "選擇帳戶類型"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(會話初始化協議)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(Asterisk內部交換協議)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "請選擇以下選項中的一個"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "註冊已存在的SIP或IAX2帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIP帳戶配置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "請填寫如下信息"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "可選郵件地址"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "這個郵件地址將被用來發送您的語音"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "郵件地址(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2帳戶配置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "网络地址解析(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "如果你使用網路防火牆,你很有可能需要設定該項."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "啟用STUN(n)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "STUN伺服器(S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "帳戶註冊"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "恭喜!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "顰律"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "比率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "顰寬"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA插件"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "輸出"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "輸入"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
-msgstr "聲音狀態檢測(V)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "鈴聲"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "降噪處理-窄頻壓縮(N)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+#, fuzzy
+msgid "_Noise Reduction"
+msgstr "降噪"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "聲音管理器"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA 配置"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "記錄"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "目標文件夾"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "選擇文件夾"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "鈴聲"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "啟動鈴聲(E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "鈴聲選擇"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "音訊檔案"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "帳戶設置"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL參數"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "定制對帶有URL的來電的處理"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "傳輸的URL會被替換成%s."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "激活指定的SIP頭(S)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "激活IAX2 URL(I)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "運行命令(r)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "重設電話號碼"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "號碼前綴(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "桌面提示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "啟動提示(E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "系統托盤圖標"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "來電話時彈出主視窗(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "從不彈出主視窗(v)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "在啟動時隱藏SFLphone主窗口"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "打電話歷史"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "屬性"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "鉤鍵"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1131,85 +1107,119 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "查詢所有"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "請點擊此處改變查詢方式"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "從未接電話中查詢"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "從來電中查詢"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "從撥出電話中查詢"
 
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "聲音狀態檢測(V)"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "降噪處理-窄頻壓縮(N)"
+
 #~ msgid "Account creation wizard"
 #~ msgstr "帳戶創建向導"
 
@@ -1742,9 +1752,6 @@ msgstr "從撥出電話中查詢"
 #~ msgid "%s account- %s"
 #~ msgstr "%s 帳戶- %s"
 
-#~ msgid "Noise reduction"
-#~ msgstr "降噪"
-
 #~ msgid "_Destination folder"
 #~ msgstr "目標文件夾(D)"
 
diff --git a/lang/zh_TW/zh_TW.po b/lang/zh_TW/zh_TW.po
index 1e02906fd1ddc4d73497691c3b96f3d809f77b66..f5c1d8098617e1c395946421722134818807dd7d 100644
--- a/lang/zh_TW/zh_TW.po
+++ b/lang/zh_TW/zh_TW.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-19 16:44-0400\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
 "PO-Revision-Date: 2009-12-03 18:12+0000\n"
 "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
 "Language-Team: Traditional Chinese <zh_TW@li.org>\n"
@@ -15,578 +15,578 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2010-04-19 20:04+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:170
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:173
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:176
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:179
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:182
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:185
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:188
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:191
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:194
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:197
+#: ../sflphone-client-gnome/src/accountlist.c:208
 msgid "Ready"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:200
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:114
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:121
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:306
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:607
-#: ../sflphone-client-gnome/src/actions.c:933
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:379
+#: ../sflphone-client-gnome/src/callable_obj.c:390
 msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:382
+#: ../sflphone-client-gnome/src/callable_obj.c:393
 msgid "yesterday at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:384
+#: ../sflphone-client-gnome/src/callable_obj.c:395
 msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/callable_obj.c:388
+#: ../sflphone-client-gnome/src/callable_obj.c:399
 msgid "%x at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:94
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:98
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:103
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:326
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:445
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:447
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:449
-#: ../sflphone-client-gnome/src/mainwindow.c:479
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:450
-#: ../sflphone-client-gnome/src/mainwindow.c:480
-#: ../sflphone-client-gnome/src/mainwindow.c:501
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:475
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:477
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:495
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:497
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:499
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:128
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:135
-#: ../sflphone-client-gnome/src/uimanager.c:811
-#: ../sflphone-client-gnome/src/uimanager.c:1125
-#: ../sflphone-client-gnome/src/uimanager.c:1167
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
 msgid "_Hang up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:189
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/statusicon.c:190
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
 msgid "%i active account"
 msgid_plural "%i active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:776
-#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:122
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:145
-#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:327
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:395
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:397
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:806
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:807
-#: ../sflphone-client-gnome/src/uimanager.c:1317
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:808
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:809
-#: ../sflphone-client-gnome/src/uimanager.c:1113
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:810
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:812
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:813
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:814
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:815
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:816
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:817
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:821
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:823
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:824
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:825
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:828
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:829
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:830
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:831
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:832
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:833
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:834
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:835
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:837
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:838
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:841
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:844
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:845
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:846
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:847
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:855
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:856
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:857
-#: ../sflphone-client-gnome/src/uimanager.c:1149
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
 msgid "_Record"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:858
+#: ../sflphone-client-gnome/src/uimanager.c:869
 msgid "Record the current conversation"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:859
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:860
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:861
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:862
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:863
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:864
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:865
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:866
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:867
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1137
-#: ../sflphone-client-gnome/src/uimanager.c:1179
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1240
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1396
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1408
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:271
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:286
-#: ../sflphone-client-gnome/src/config/assistant.c:315
-#: ../sflphone-client-gnome/src/config/assistant.c:428
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:314
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
-#: ../sflphone-client-gnome/src/config/assistant.c:323
-#: ../sflphone-client-gnome/src/config/assistant.c:436
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:334
-#: ../sflphone-client-gnome/src/config/assistant.c:331
-#: ../sflphone-client-gnome/src/config/assistant.c:444
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:367
-#: ../sflphone-client-gnome/src/config/assistant.c:347
-#: ../sflphone-client-gnome/src/config/assistant.c:459
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:388
-#: ../sflphone-client-gnome/src/config/assistant.c:364
-#: ../sflphone-client-gnome/src/config/assistant.c:474
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:393
-#: ../sflphone-client-gnome/src/config/assistant.c:369
-#: ../sflphone-client-gnome/src/config/assistant.c:479
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:402
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
 msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:490
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:491
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:747
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:781
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:792
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:851
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:862
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:868
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:874
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
@@ -639,479 +639,452 @@ msgstr ""
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1202
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
 msgid "Codecs"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1209
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
 msgid "DTMF"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1219
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
 msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1223
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
 msgid "SIP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1257
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1280
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1296
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1309
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
 msgid "Network"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1488
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
 msgid ""
 "This profile is used when you want to reach a remote peer simply by typing a "
 "sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
 "also be used if no account can be matched to an incoming or outgoing call."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:131
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:421
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:429
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:511
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:521
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:538
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:544
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:292
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:36
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:595
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:230
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:257
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:271
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:273
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:275
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:289
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:291
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:293
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:307
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:377
-#: ../sflphone-client-gnome/src/config/assistant.c:406
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:390
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:398
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:420
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:497
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:506
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:513
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:527
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:600
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:605
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:610
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:688
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:710
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:732
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:767
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:777
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:822
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:826
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:832
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:853
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:857
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:861
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:867
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+msgid "Voice enhancement settings"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:147
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:152
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:159
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:169
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
 msgid "Show SFLphone in the system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:176
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:182
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:192
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:206
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:210
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:271
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:298
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:304
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:310
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
 msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/shortcuts-config.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
 msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:49
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
-msgid "ZRTP Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:69
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
-msgid "Send Hello Hash in S_DP"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:75
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
-msgid "Ask User to Confirm SAS"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:81
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
-msgid "_Warn if ZRTP not supported"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:87
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
-msgid "Display SAS once for hold events"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:132
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:131
-msgid "SDES Options"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/srtpadvanceddialog.c:146
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:156
-msgid "Fallback on RTP on SDES failure"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1120,82 +1093,110 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
 msgid "Global TLS listener (all accounts)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:122
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:126
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:147
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:151
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:174
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:195
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:218
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:252
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:261
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:269
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:286
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:292
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:298
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
+msgid "ZRTP Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
+msgid "Send Hello Hash in S_DP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
+msgid "Ask User to Confirm SAS"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
+msgid "_Warn if ZRTP not supported"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
+msgid "Display SAS once for hold events"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr ""
 
diff --git a/sflphone-client-gnome/INSTALL b/sflphone-client-gnome/INSTALL
index 2550dab75261145b56f3d223673e00bef2aa78df..7d1c323beae76333f523f6df31c47a87f5597edb 100644
--- a/sflphone-client-gnome/INSTALL
+++ b/sflphone-client-gnome/INSTALL
@@ -4,8 +4,10 @@ Installation Instructions
 Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
 
-   This file is free documentation; the Free Software Foundation gives
-unlimited permission to copy, distribute and modify it.
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
 
 Basic Installation
 ==================
@@ -13,7 +15,11 @@ Basic Installation
    Briefly, the shell commands `./configure; make; make install' should
 configure, build, and install this package.  The following
 more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.
+instructions specific to this package.  Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
 
    The `configure' shell script attempts to guess correct values for
 various system-dependent variables used during compilation.  It uses
@@ -42,7 +48,7 @@ may remove or edit it.
 you want to change it or regenerate `configure' using a newer version
 of `autoconf'.
 
-The simplest way to compile this package is:
+   The simplest way to compile this package is:
 
   1. `cd' to the directory containing the package's source code and type
      `./configure' to configure the package for your system.
@@ -53,12 +59,22 @@ The simplest way to compile this package is:
   2. Type `make' to compile the package.
 
   3. Optionally, type `make check' to run any self-tests that come with
-     the package.
+     the package, generally using the just-built uninstalled binaries.
 
   4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the `make install' phase executed with root
+     privileges.
+
+  5. Optionally, type `make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior `make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
      source code directory by typing `make clean'.  To also remove the
      files that `configure' created (so you can compile the package for
      a different kind of computer), type `make distclean'.  There is
@@ -67,8 +83,15 @@ The simplest way to compile this package is:
      all sorts of other programs in order to regenerate files that came
      with the distribution.
 
-  6. Often, you can also type `make uninstall' to remove the installed
-     files again.
+  7. Often, you can also type `make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide `make
+     distcheck', which can by used by developers to test that all other
+     targets like `make install' and `make uninstall' work correctly.
+     This target is generally not run by end users.
 
 Compilers and Options
 =====================
@@ -93,7 +116,8 @@ same time, by placing the object files for each architecture in their
 own directory.  To do this, you can use GNU `make'.  `cd' to the
 directory where you want the object files and executables to go and run
 the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
+source code in the directory that `configure' is in and in `..'.  This
+is known as a "VPATH" build.
 
    With a non-GNU `make', it is safer to compile the package for one
 architecture at a time in the source code directory.  After you have
@@ -120,7 +144,8 @@ Installation Names
    By default, `make install' installs the package's commands under
 `/usr/local/bin', include files under `/usr/local/include', etc.  You
 can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX'.
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
 
    You can specify separate installation prefixes for
 architecture-specific files and architecture-independent files.  If you
@@ -131,15 +156,46 @@ Documentation and other data files still use the regular prefix.
    In addition, if you use an unusual directory layout you can give
 options like `--bindir=DIR' to specify different values for particular
 kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
+you can set and what kinds of files go in them.  In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'.  Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated.  The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the `DESTDIR' variable.  For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names.  The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
 
    If the package supports it, you can cause programs to be installed
 with an extra prefix or suffix on their names by giving `configure' the
 option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
 
-Optional Features
-=================
-
    Some packages pay attention to `--enable-FEATURE' options to
 `configure', where FEATURE indicates an optional part of the package.
 They may also pay attention to `--with-PACKAGE' options, where PACKAGE
@@ -152,6 +208,13 @@ find the X include and library files automatically, but if it doesn't,
 you can use the `configure' options `--x-includes=DIR' and
 `--x-libraries=DIR' to specify their locations.
 
+   Some packages offer the ability to configure how verbose the
+execution of `make' will be.  For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
 Particular systems
 ==================
 
@@ -288,7 +351,7 @@ operates.
      `configure' can determine that directory automatically.
 
 `--prefix=DIR'
-     Use DIR as the installation prefix.  *Note Installation Names::
+     Use DIR as the installation prefix.  *note Installation Names::
      for more details, including other options available for fine-tuning
      the installation locations.
 
diff --git a/sflphone-client-gnome/Makefile.am b/sflphone-client-gnome/Makefile.am
index 47bb88964f5c83a99f19899f9227d279eb1befb8..e738c4d1604c0fd7a8c550433693ebb1a1d0ba4e 100644
--- a/sflphone-client-gnome/Makefile.am
+++ b/sflphone-client-gnome/Makefile.am
@@ -1,19 +1,26 @@
-SUBDIRS = src pixmaps tests man po doc
+SUBDIRS = src pixmaps webkit tests man po doc
+
+CFLAGS=-Wall -Werror -Wextra
 
 ACLOCAL_AMFLAGS = -I m4
 
-GNOME_DOC=gnome-doc-utils.make
+GCONFTOOL=gconftool-2
 
-log4crc_DATA = log4crc
-log4crcdir = $(datadir)/sflphone
+GNOME_DOC=gnome-doc-utils.make
 
 uidir=$(datadir)/sflphone/ui
 ui_DATA=src/ui.xml
 
-EXTRA_DIST   = $(log4crc_DATA) sflphone.desktop.in $(GNOME_DOC) m4 $(UI_DATA)
+schemadir   = @GCONF_SCHEMA_FILE_DIR@
+schema_DATA = sflphone-client-gnome.schemas
+
+EXTRA_DIST   = sflphone.desktop.in $(GNOME_DOC) m4 $(UI_DATA) $(schema_DATA)
 appsdir = $(datadir)/applications
 apps_in_files = sflphone.desktop.in
 apps_DATA = $(apps_in_files:.desktop.in=.desktop)
 #@INTLTOOL_DESKTOP_RULE@
 
-DISTCLEANFILES= sflphone.desktop $(GNOME_DOC)
+DISTCLEANFILES= sflphone.desktop $(GNOME_DOC) 
+
+install-data-local:
+	GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA)
diff --git a/sflphone-client-gnome/configure.ac b/sflphone-client-gnome/configure.ac
index ff7a520e166c96b3aea26f175869c3fe04d064ae..c5f2be88f180d1ed8c1907e5388786c5442851c3 100644
--- a/sflphone-client-gnome/configure.ac
+++ b/sflphone-client-gnome/configure.ac
@@ -24,7 +24,7 @@ AC_ARG_WITH(debug,
 if test "x$with_debug" = "xfull" -o "x$with_debug" = "xyes"; then
 	CFLAGS="-g -O0 -DDEBUG -Wall -Wextra"
 else
-	CFLAGS="$CFLAGS"
+	CFLAGS="$CFLAGS -Wall -Wextra"
 fi
 
 AC_PROG_CC
@@ -32,11 +32,8 @@ AC_PROG_INSTALL
 AC_STDC_HEADERS
 AC_PROG_LIBTOOL
 
-dnl Check for log4c
-AC_CHECK_HEADERS(log4c.h, have_log4c=true, have_log4c=false)
-if ! $have_log4c; then
-    AC_MSG_ERROR(Please install the log4c library)
-fi
+dnl GCONF utilities
+AM_GCONF_SOURCE_2
 
 dnl uninstalled gsr ui dir
 AC_DEFINE_UNQUOTED(SFLPHONE_UIDIR_UNINSTALLED, "`pwd`/src/",
@@ -61,6 +58,7 @@ PKG_CHECK_MODULES(DEPS,     \
     libnotify >= 0.4        \
     gtk+-2.0 >= 2.2         \
     glib-2.0 >= 2.2         \
+    webkit-1.0              \
     libebook-1.2 >= 2.22	\
 	libgnomeui-2.0			\
 	gnome-doc-utils
@@ -87,6 +85,7 @@ src/contacts/addressbook/Makefile
 src/widget/Makefile
 src/icons/Makefile
 pixmaps/Makefile
+webkit/Makefile
 sflphone.desktop
 tests/Makefile
 man/Makefile
diff --git a/sflphone-client-gnome/globals.mak b/sflphone-client-gnome/globals.mak
index 8fe5ee180b5b23c08aaff4dda0927d41bdbdeb32..359696c7dd4c7ba93f1258c56be480121c312a29 100644
--- a/sflphone-client-gnome/globals.mak
+++ b/sflphone-client-gnome/globals.mak
@@ -1,6 +1,9 @@
 # Global variables
 src = $(top_srcdir)
 
+ASTYLERC="$(top_srcdir)/../astylerc"
+indent="/usr/bin/astyle"
+
 # Preprocessor flags
 AM_CPPFLAGS =		$(DEPS_CFLAGS)										\
 					$(LIBSEXY_CFLAGS)									\
@@ -21,3 +24,8 @@ AM_CPPFLAGS =		$(DEPS_CFLAGS)										\
 					-DLOCALEDIR=\""$(localedir)"\"							\
 					-DSFLPHONE_UIDIR=\""$(datadir)/sflphone/ui"\"
 
+indent:
+	@echo "Indenting code:"
+	if [ -f $(ASTYLERC) ] ; then \
+		find $(top_srcdir)/src/ -regex ".*\.\(h\|c\)" -exec $(indent) --options=$(ASTYLERC) {} \; ; \
+	fi
diff --git a/sflphone-client-gnome/log4crc b/sflphone-client-gnome/log4crc
deleted file mode 100644
index e108c9378b0e99e095389c63d029db54a1791290..0000000000000000000000000000000000000000
--- a/sflphone-client-gnome/log4crc
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE log4c SYSTEM "">
-
-<log4c version="1.2.1">
-	<config>
-		<bufsize>0</bufsize>
-		<debug level="2"/>
-		<nocleanup>0</nocleanup>
-		<reread>1</reread>
-	</config>
-
-	<rollingpolicy name="rollingpolicy" type="sizewin" maxsize="1024" maxnum="10" />
-	<appender name="rollingfileappender" type="rollingfile" logdir="." prefix="prefix" layout="dated" rollingpolicy="rollingpolicy" />
-	
-	<appender name="stdout" type="stream" layout="basic"/>
-	<appender name="stderr" type="stream" layout="dated"/>
-	<appender name="syslog" type="syslog" layout="basic"/>
-
-	<layout name="basic" type="basic"/>
-	<layout name="dated" type="dated"/>
-	
- 	<category name="root" priority="warning"/>       
-	<category name="org.sflphone.gtk" priority="warning" appender="stdout" />
-</log4c>
diff --git a/sflphone-client-gnome/pixmaps/Makefile.am b/sflphone-client-gnome/pixmaps/Makefile.am
index ee8fcf97c525a23827e41726a12ebd2bd6be4534..3815497fab4d6fd092e3b6394a5c9c6329201827 100644
--- a/sflphone-client-gnome/pixmaps/Makefile.am
+++ b/sflphone-client-gnome/pixmaps/Makefile.am
@@ -41,7 +41,8 @@ buttons_DATA = current.svg \
 				lock_error.svg \
 				lock_off.svg \
 				lock_unconfirmed.svg \
-				phone.svg
+				phone.svg		\
+				im.svg
 
 buttonsdir   = $(datadir)/sflphone
 EXTRA_DIST   = $(buttons_DATA) $(icon_DATA)
diff --git a/sflphone-client-gnome/pixmaps/im.svg b/sflphone-client-gnome/pixmaps/im.svg
new file mode 100644
index 0000000000000000000000000000000000000000..54508cd07deee435e74e3b4127387b4dbbbdeac4
--- /dev/null
+++ b/sflphone-client-gnome/pixmaps/im.svg
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2886"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="im.svg">
+  <defs
+     id="defs2888">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2894" />
+    <inkscape:perspective
+       id="perspective3678"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3700"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="17.708333"
+     inkscape:cx="10.6089"
+     inkscape:cy="12"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1024"
+     inkscape:window-height="693"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata2891">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1028.3622)">
+    <path
+       sodipodi:type="arc"
+       style="fill:#008000;fill-rule:evenodd;stroke:none;fill-opacity:0.86274511"
+       id="path2896"
+       sodipodi:cx="13.072941"
+       sodipodi:cy="8.1882353"
+       sodipodi:rx="8.8941174"
+       sodipodi:ry="4.6870589"
+       d="m 21.967058,8.1882353 a 8.8941174,4.6870589 0 1 1 -17.7882345,0 8.8941174,4.6870589 0 1 1 17.7882345,0 z"
+       transform="matrix(1.2888889,0,0,1.3554218,-4.7648628,1026.1013)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#008000;fill-rule:evenodd;stroke:none;fill-opacity:0.80392158"
+       id="path2896-0"
+       sodipodi:cx="13.072941"
+       sodipodi:cy="8.1882353"
+       sodipodi:rx="8.8941174"
+       sodipodi:ry="4.6870589"
+       d="m 21.967058,8.1882353 a 8.8941174,4.6870589 0 1 1 -17.7882345,0 8.8941174,4.6870589 0 1 1 17.7882345,0 z"
+       transform="matrix(0.34603172,0,0,0.30120486,3.1845831,1043.0629)" />
+    <path
+       sodipodi:type="arc"
+       style="fill:#008000;fill-rule:evenodd;stroke:none;fill-opacity:0.74509805"
+       id="path2896-0-3"
+       sodipodi:cx="13.072941"
+       sodipodi:cy="8.1882353"
+       sodipodi:rx="8.8941174"
+       sodipodi:ry="4.6870589"
+       d="m 21.967058,8.1882353 a 8.8941174,4.6870589 0 1 1 -17.7882345,0 8.8941174,4.6870589 0 1 1 17.7882345,0 z"
+       transform="matrix(0.22857141,0,0,0.19277113,1.9248407,1046.7461)" />
+  </g>
+</svg>
diff --git a/sflphone-client-gnome/po/da/da.po b/sflphone-client-gnome/po/da/da.po
index 1c011969aca5c2afa3b9a4cc76db3e748bcd6bc2..df489d7787b3447b374f85f4b6ea04565bd918cf 100644
--- a/sflphone-client-gnome/po/da/da.po
+++ b/sflphone-client-gnome/po/da/da.po
@@ -7,68 +7,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-11-03 03:52+0000\n"
-"Last-Translator: Jonas Fonseca <fonseca@diku.dk>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-05-01 01:15+0000\n"
+"Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n"
 "Language-Team: Danish <da@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registreret"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Ikke registreret"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Forsøger..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Fejl"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Godkendelse mislykkedes"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Netværk kan ikke nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Vært kan ikke nås"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun konfigureringsfejl"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Stun server ugyldig"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Ugyldig"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Benytter konto"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Ingen registrerede konti"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,25 +80,28 @@ msgstr ""
 "Forbindelse til SFLphone serveren kan ikke oprettes.\n"
 "Sørg for at server-dæmonen kører."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Direkte IP opkald"
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
 msgstr ""
-"<b>Fejl: Ingen audio-codec fundet\n"
-"\n"
-"</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen <b>."
-"sflphone</b> i dit hjemmekatalog (<i>%s</i>)"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -104,7 +111,7 @@ msgstr ""
 "\n"
 "Fejl opstod mens afspilningsenhed blev åbnet"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -114,7 +121,7 @@ msgstr ""
 "\n"
 "Fejl opstod mens optageenhed blev åbnet"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -124,43 +131,43 @@ msgstr ""
 "\n"
 "PulseAudio er tilgængelig"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Et igangværende opkald eksisterer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Igangværende opkald eksisterer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Ønsker du stadig at afslutte"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone fejl"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP er ikke understøttet af modtageren %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Sikker kommunikation ikke tilgængelig"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Fortsæt"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Afslut opkald"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -170,11 +177,11 @@ msgstr ""
 "tilstand.\n"
 "Den præcise årsag: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "ZRTP-forhandling mislykkedes"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -183,50 +190,50 @@ msgstr ""
 "%s ønsker at afslutte brugen af sikker kommunikation. Ved at godkende vil "
 "samtalen fortætte uden SRTP\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Godkend sikkerhedsændring"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Godkend"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s konto : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Fra</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d indtalt besked"
 msgstr[1] "%d indtalte beskeder"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Kalder op med %s konto <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Nuværende konto"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Du har ingen oprettede konti"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Du har ingen registrerede konti"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -235,520 +242,554 @@ msgstr ""
 "<i>Med:</i> %s \n"
 "benyttende %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s understøtter ikke ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "ZRTP forhandling mislykkedes med %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Med:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Højtaler lydstyrke"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Mikrofon lydstyrke"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Vis hovedvindue"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "_Læg på"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "%i konto oprettet"
-msgstr[1] "%i konti oprettet"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Talebesked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
-msgstr ""
+msgstr "Ingen adressebog er valgt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Talebesked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone er en VoIP-klient kompatibel med SIP og IAX2 protokoller"
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Om SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Afslut opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nyt opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr ""
+msgstr "Lav et nyt opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Svar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "_Læg på"
+msgstr "Besvar opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr ""
+msgstr "Afslut opkaldet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "I _venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
-msgstr ""
+msgstr "Sæt opkaldet i venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
-msgstr ""
+msgstr "F_jern fra venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "_Optag"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
+msgstr "Fjern opkaldet fra venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Konfigurationsfil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun konfigureringsfejl"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d indtalt besked"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
-msgstr ""
+msgstr "_Luk"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
-msgstr ""
+msgstr "Minimere til systembakken"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr ""
+msgstr "_Afslut"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
-msgstr ""
+msgstr "Afslut programmet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
-msgstr ""
+msgstr "_Rediger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
-msgstr ""
+msgstr "_Kopier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
-msgstr ""
+msgstr "Kopier det valgte"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
-msgstr ""
+msgstr "Inds_æt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "Indsæt indholdet af udklipsholderen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "Konti"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Nuværende konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "Ændr dine indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
-msgstr ""
+msgstr "_Vis"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
-msgstr "_Hjem"
+msgstr "_Hjælp"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Fortsæt"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
-msgstr ""
+msgstr "Åbn manualen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Godkendelse"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
-msgstr ""
+msgstr "_Overfør"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr ""
+msgstr "Overfør opkaldet"
+
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "_Optag"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Optag den aktuelle samtale"
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Vis værktøjslinie"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
-msgstr ""
+msgstr "Vis værktøjslinien"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
-msgstr "Deaktiveret"
+msgstr "_Nummertastatur"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
-msgstr ""
+msgstr "Vis nummertastaturet"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
-msgstr ""
+msgstr "Vis _lydstyrke indstillinger"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
-msgstr ""
+msgstr "Vis lydstyrke indstillingerne"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "I _venteposition"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Besvar opkald"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Ændre telefonnummer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Ændre telefonnummeret før opkald"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Kontoparametre"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protokol"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Ukendt"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Værtsnavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Brugernavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Adgangskode"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Adgangskode"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Nummer for talebesked"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Godkendelse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Hemmelig"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Legitimationsoplysning"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Godkendelsesnavn"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Adgangskode"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Sikkerhed"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Benyt TLS transport (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "SRTP-nøgleudveksling"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Deaktiveret"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "Registrering"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr "Forældelse af registrering"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr "_Overhold RFC 3263"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "Netværk kan ikke nås"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr "Lokal adresse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr "Lokal port"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr "Offentliggjort adresse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr "Ved brug af STUN "
+msgstr "Ved brug af STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr "STUN serveradresse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr "Samme som lokale parametre"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr "Konfigurer offentliggjort adresse og port:"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr "Offentliggjort port"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Grundlæggende"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
-msgstr "Advanceret"
+msgstr "Avanceret"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Netværk"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+"Denne profil benyttes når du ønsker at kontakte en ekstern peer ved blot at "
+"indtaste en sip-adresse såsom <b>sip:eksternpeer</b>. De indstillinger som "
+"du definerer her vil også benyttes hvis ingen konto kan tilknyttes et "
+"indgående eller udgående opkald."
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
+#, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "Server svarede \""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protokol"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Status"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Konti"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Oprettede konti"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
+#, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] " aktiv konto"
-msgstr[1] " aktiv konto"
+msgstr[0] "aktiv konto"
+msgstr[1] "aktiv konto"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Der er ingen aktive konti"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Generelt"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Benyt Evolution adressekartotek"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Download begrænsning :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "kort"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Vis _kontaktbillede hvis tilgængeligt"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Felter fra Evolutions adressekartotek"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Arbejde"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Hjem"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Mobil"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Adressekartoteker"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Vælg hvilke af Evolutions adressekartoteker skal benyttes"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Navn"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Denne vejledning er nu fuldført"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -756,318 +797,321 @@ msgstr ""
 "Du kan til enhver tid undersøge din registrering eller ændre dine kontis "
 "parametre i vinduet Indstillinger/Konti"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Brugernavn"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Sikkerhed: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Ingen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone-guiden til oprettelse af konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Velkommen til kontooperettelsesvejledning for SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 "Denne installeringsvejledning vil hjælpe dig med at konfigurere en konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP protokoller"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Vælg en kontotype"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Vælg en af følgende indstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Opret en gratis SIP/IAX2 konto hos sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrer en eksisterende SIP eller IAX2 konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIP kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Udfyld venligst følgende information"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Sikker kommunikation med _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Valgfri emailadresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "Denne emailadresse vil blive brugt til at sende dig indtalte beskeder"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Emailadresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2 kontoindstillinger"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Du opfordres til at aktivere dette hvis du er bag en firewall"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "_Benyt STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_STUN server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Kontoregistrering"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Tillykke!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frekvens"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bithastighed"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Båndbredde"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA plugin"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Uddata"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Inddata"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "_Detektering af taleaktivitet"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Støjreducering (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Lydhåndtering"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_PulseAudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA indstillinger"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Codecs"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Optagelser"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Destinationsmappe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Vælg en mappe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Aktiver _ringetoner"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Vælg en ringetone"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Lydfiler"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Kontoindstillinger"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Adresseargument"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Brugerdefinerede kommandoer ved indgående opkald med webadresse"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s vil blive erstattet med den givne webadresse."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Udløse ved specifik _SIP protokolhoved"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Udløse ved _IAX2 webadresse"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Kommando som skal _kaldes"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Omskrivning af telefonnummer"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Præfiks for indtastede numre"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-"Denne profil benyttes når du ønsker at kontakte en ekstern peer ved blot at "
-"indtaste en sip-adresse såsom <b>sip:eksternpeer</b>. De indstillinger som "
-"du definerer her vil også benyttes hvis ingen konto kan tilknyttes et "
-"indgående eller udgående opkald."
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Meddelelser"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Aktiver meddelelser"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Systembakke-ikon"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Vis hovedvindue ved indgående opkald"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Aldrig _pop-op hovedvindue"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Skjul SFLphone vinduet ved _start"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Opkaldshistorik"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Gem min historik i mindst"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "dage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Indstillinger"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Adressebog"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Hooks"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Direkte IP opkald"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Advancerede indstillinger for TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "TLS transport"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1080,136 +1124,170 @@ msgstr ""
 "TLS transporter for de enkelte konti. Bemærk dog at de hver vil benytte\n"
 "en dedikeret port forskellig fra hinanden.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Autoritetscertifikatsliste"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Vælg en fil med en autoritetscertifikatsliste (valgfri)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Offentlig endpoint certifikatsfil"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Vælg et offentligt endpoint-certifikat (valgfri)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Vælg en privat nøglefil (valgfri)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Adgangskode for den private nøgle"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "TLS protokolmetode"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "TLS cifferliste"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Server navneinstans for udgående TLS forbindelse"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Forhandlingstimeout"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Udfør kontrol af indgående certifikater, som en server"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Udfør kontrol af certifikater fra svar, som en klient"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Kræv certifikat for indgående TLS forbindelser"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr "ZRTP indstillinger"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr "Send \"Hello Hash\" i S_DP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr "_Spørg bruger om at godkende SAS"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr "_Advar hvis ZRTP ikke understøttes"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr "_Vis SAS en enkelt gang for vente-hændelser"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Søg alle"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Klik her for at ændre søgningstypen"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Søg i ubesvarede opkald"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Søg i indgående opkald"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Søg i udgående opkald"
 
-#~ msgid "IP call - %s"
-#~ msgstr "IP opkald - %s"
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "_Detektering af taleaktivitet"
+
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Støjreducering (Narrow-Band Companding)"
+
+#~ msgid "SIP Port"
+#~ msgstr "SIP Port"
 
 #~ msgid "Codec"
 #~ msgstr "Kodning"
 
-#~ msgid "Network"
-#~ msgstr "Netværk"
-
-#~ msgid "Manually"
-#~ msgstr "Manuelt"
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i konto oprettet"
+#~ msgstr[1] "%i konti oprettet"
 
 #~ msgid "There "
 #~ msgstr "Der "
 
-#~ msgid "is "
-#~ msgstr "er "
+#~ msgid "Manually"
+#~ msgstr "Manuelt"
+
+#~ msgid "s"
+#~ msgstr "s"
 
 #~ msgid "are "
 #~ msgstr "er "
 
-#~ msgid "s"
-#~ msgstr "s"
+#~ msgid "is "
+#~ msgstr "er "
 
 #~ msgid "_Mute other applications during a call"
 #~ msgstr "_Dæmp andre programmer ved opkald"
 
-#~ msgid "SIP Port"
-#~ msgstr "SIP Port"
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "Aktiver _talebeskedsmeddelelser"
 
 #~ msgid "UDP Transport"
 #~ msgstr "UDP transport"
 
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Aktiver _talebeskedsmeddelelser"
+#~ msgid "Direct IP calls"
+#~ msgstr "Direkte IP opkald"
+
+#~ msgid "IP call - %s"
+#~ msgstr "IP opkald - %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Fejl: Ingen audio-codec fundet\n"
+#~ "\n"
+#~ "</b>SFL audio-codecs skal installeres i <i>%s</i> eller i mappen <b>."
+#~ "sflphone</b> i dit hjemmekatalog (<i>%s</i>)"
 
 #~ msgid "Store SIP credentials as MD5 hash"
 #~ msgstr "Gem SIP-legitimationsoplysninger som _MD5-hash-værdi"
diff --git a/sflphone-client-gnome/po/de/de.po b/sflphone-client-gnome/po/de/de.po
index ca1afd15a46c3577ef7821d053d5730e495373e1..1ef5bedaa91c13f31af20adee8d3efdd1c82422d 100644
--- a/sflphone-client-gnome/po/de/de.po
+++ b/sflphone-client-gnome/po/de/de.po
@@ -7,68 +7,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-26 20:46+0000\n"
-"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-04-03 16:49+0000\n"
+"Last-Translator: Jakob Kramer <Unknown>\n"
 "Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registriert"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Nicht registriert"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Am versuchen..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Fehler"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Authentifizierung fehlgeschlagen"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Kein netzwerk"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Host unerreichbar"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun: Konfigurationsfehler"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Ungültiger Stun server"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Ungültig"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Mit Konto"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Kein registriertes Konto"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,25 +80,28 @@ msgstr ""
 "SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der "
 "Dämon läuft."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
+msgstr "Direkter SIP-Anruf"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr "heute um %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr "gestern um %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
 msgstr ""
-"<b>Fehler: Kein Audio-Codec gefunden.\n"
-"\n"
-"</b> SFL Audio-Codecs müssen in <i>%s</i> oder <b>.sflphone</b> Ihres HOME-"
-"Verzeichniss ( <i>%s</i> ) gespeichert werden."
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -104,7 +111,7 @@ msgstr ""
 "\n"
 "Fehler während Öffnen des \"playback device\""
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -114,7 +121,7 @@ msgstr ""
 "\n"
 "Fehler während Öffnen des \"capture device\""
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -124,625 +131,660 @@ msgstr ""
 "\n"
 "Pulseaudio nicht gestartet"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Laufender Anruf."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Laufende Anrufe."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone Fehler"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
-msgstr ""
+msgstr "ZRTP wird vom Nutzer %s nicht unterstützt\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Sichere Verbindung nicht verfügbar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Weiter"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Anruf beenden"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
+"Ein %s Fehler verhinderte die Verschlüsselung des Telefonats mit %s.\n"
+"Genauer Grund: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
-msgstr ""
+msgstr "ZRTP Übertragung fehlgeschlagen"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
+"%s will die sichere Kommunikation beenden. Das Gespräch wird dann ohne SRTP "
+"fortgesetzt.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Bestätigen"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "Konto %s : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Von</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d Voice Nachricht"
 msgstr[1] "%d Voice Nachricht"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Mit %s Konto <i>%s</i> anrufen"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Aktuelles Konto"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Sie haben noch kein Konto eingestellt"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Sie haben noch kein registriertes Konto"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
+"<i>Mit:</i> %s \n"
+"unter Verwendung von %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr ""
+msgstr "%s unterstützt ZRTP nicht."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr ""
+msgstr "ZRTP-Übertragung mit %s schlug fehl"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Mit:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Lautsprecher Lautstärke"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Mikro Lautstärke"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Hauptfenster anzeigen"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "A_uflegen"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "%i Konto konfiguriert"
-msgstr[1] "%i Konten konfiguriert"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%i aktiver Account"
+msgstr[1] "%i aktive Accounts"
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Voicemail"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Voicemail (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Über SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Anruf"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Neuer Anruf"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr ""
+msgstr "Einen neuen Anruf tätigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Abnehmen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr ""
+msgstr "Auf den Anruf antworten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "A_uflegen"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr ""
+msgstr "Den Anruf beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "in _Warteschleife"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "_Gespräch aufzeichnen"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Einrichtungsdatei"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun: Konfigurationsfehler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d Voice Nachricht"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "_Editieren"
+msgstr "_Beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
-msgstr ""
+msgstr "Das Programm beenden"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Entfernen Sie das ausgewählte Konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Liste der vorherigen Anrufen _leeren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Vorherigen Anrufen leeren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Konten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Aktuelles Konto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Einstellungen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "Ihre Einstellungen ändern"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Hilfe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Weiter"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Authentifizierung"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Weiterleiten"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "Weiterleiten zu : "
+msgstr "Weiterleiten zu :"
+
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "_Gespräch aufzeichnen"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Das momentane Gespräch aufnehmen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Zeige Werkzeugleiste"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Wählscheibe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Lautstärke-Regler anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Lautstärke-Regler anzeigen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Vorherige Anrufe"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Liste der vorherigen Anrufen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "in _Warteschleife"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Zurückrufen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Nummer editieren"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Nummer vor dem Anruf editieren"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Konto parameter"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protokoll"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Hostname"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Benutzername"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Passwort"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Passwort"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Voicemail Nummer"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Authentifizierung"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Geheim"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Authentifizierung Name"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Passwort"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Sicherheit"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Deaktiviert"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "Anmeldung"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
-msgstr ""
+msgstr "Registrierung erwartet"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "Kein netzwerk"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr "Adresse (lokal)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr "Port (lokal)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
-msgstr ""
+msgstr "Veröffentlichte Adresse"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr ""
+msgstr "STUN verwenden"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
-msgstr ""
+msgstr "STUN Server URL"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
+msgstr "Veröffentlichter Port"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Kontoeinstellungen"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Allgemein"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Erweitert"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Netzwerk"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protokoll"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Status"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Konfigurierten Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
+#, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] " aktive Konten"
-msgstr[1] " aktive Konten"
+msgstr[0] "aktive Konten"
+msgstr[1] "aktive Konten"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Sie haben kein aktives Konto"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Allgemein"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "Addressbuch von Evolution verwenden"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Herunterladen Grenze :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "Karten"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Wenn verfügbar, _Bild anzeigen"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Felder vom Evolution Adressbuch"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Arbeit"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Heim"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Handy"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Adressbücher"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Adressbücher von Evolution zum verwenden auswählen"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Name"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Assistent beendet."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -750,315 +792,322 @@ msgstr ""
 "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder "
 "IhreKontoparameter ändern (Optionen/Konten)."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Benutzername"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Sicherheit: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Nichts"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone Konto (Konfigurationsassistent)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Wilkommen zu SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr ""
 "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP Protokoll"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Kontotyp auswählen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterisk Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Bitte eine Option auswählen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Existierendes SIP/IAX2 Konto registrieren"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Konfiguration des SIP Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Folgende Informationen bitte ausfühlen"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Sichere Kommunikation mit _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Fakultative E-mail-Adresse"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Konfiguration des IAX2 Konto"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "STUN Ei_nschalten"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_STUN Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Konto Registrierung"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Gratulation!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequenz"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Bandbreite"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA Plugin"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Ausgabe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Eingabe"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "\"Voice Activity\" Erkennung"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Klingeltöne"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Geräuschreduzierung (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Sound Manager"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA Konfiguration"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Codecs"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Aufnahmen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Zielverzeichnis"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Verzeichnis auswählen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Klingeltöne"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Klingeltöne _einschalten"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Klingelton auswählen"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Audio Dateien"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Kontoeinstellungen"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL Argument"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Spezielle Befehle bei eingehender Anrufen mit URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s wird mit gegebener URL ersetzt."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Bewirkung beim spezifischen _SIP Header"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Bewirkung bei _IAX2 URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Befehl _auszuführen"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Telefonnummer umformen"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Präfix vor Nummern einfügen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Desktopbenachrichtigungen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "Benachrichtigungen _einschalten"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Benachrichtigungsfeld (\"System Tray\") Icon"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "_Hauptfenster nie anzeigen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "_Unsichtbar beim Start"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Liste der vorherigen Anrufen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "Tage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Einstellungen"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Adressbuch"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Hooks"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
-msgid "Advanced options for TLS"
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
+msgid "Advanced options for TLS"
+msgstr "Erweiterte Optionen für TLS"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
-msgstr ""
+msgstr "TLS Transport"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1067,133 +1116,118 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
-msgstr ""
+msgstr "TLS-Protokol-Methode"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
-msgstr ""
+msgstr "Bestätige eingehende Zertifikate als einen Server"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
-msgstr ""
+msgstr "Bestätige eingehende Zertifikate als einen Client"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
-msgstr ""
+msgstr "Benötige Zertifikat für eingehende TLS-Verbindungen"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr "ZRTP Optionen"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
-msgstr ""
+msgstr "Den Benutzer bitten, SAS zu bestätigen"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr "_Warnung wenn ZRTP nicht unterstüzt"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "SDES Optionen"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Suche alle"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Klicken Sie hier, um Suchtyp zu wechseln"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Suche nach Anruf in Abwesenheit"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Suche nach eingehenden Anruf"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Suche nach ausgehenden Anru"
 
-#~ msgid "IP call - %s"
-#~ msgstr "IP Anruf - %s"
-
-#~ msgid "Codec"
-#~ msgstr "Codec"
-
-#~ msgid "Network"
-#~ msgstr "Netzwerk"
-
-#~ msgid "Manually"
-#~ msgstr "Manuell"
-
-#~ msgid "There "
-#~ msgstr "Es "
-
-#~ msgid "is "
-#~ msgstr "gibt "
-
-#~ msgid "are "
-#~ msgstr "gibt "
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "_Während eines Anrufs andere Anwendungen stumm schalten"
-
-#~ msgid "SIP Port"
-#~ msgstr "SIP Port"
-
-#~ msgid "UDP Transport"
-#~ msgstr "UDP Transport"
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "\"Voice Activity\" Erkennung"
 
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "_Benachrichtigung für Voice Nachrichten"
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Geräuschreduzierung (Narrow-Band Companding)"
 
 #~ msgctxt "account state"
 #~ msgid "Error"
@@ -1231,6 +1265,9 @@ msgstr "Suche nach ausgehenden Anru"
 #~ msgid "Default account"
 #~ msgstr "Default Konto"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone KDE Client"
 
@@ -1335,9 +1372,6 @@ msgstr "Suche nach ausgehenden Anru"
 #~ msgid "Apply"
 #~ msgstr "übernehmen"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "IAX"
 #~ msgstr "IAX"
 
@@ -1410,6 +1444,9 @@ msgstr "Suche nach ausgehenden Anru"
 #~ msgid "Connection"
 #~ msgstr "Anbindung"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP Port"
+
 #~ msgid "Trigger on specific SIP header"
 #~ msgstr "Bewirkung beim spezifischen SIP Header"
 
@@ -1435,26 +1472,70 @@ msgstr "Suche nach ausgehenden Anru"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "Warnung: Anzahl Resultate überschreit definiertes Maximum"
 
+#~ msgid "IP call - %s"
+#~ msgstr "IP Anruf - %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Fehler: Kein Audio-Codec gefunden.\n"
+#~ "\n"
+#~ "</b> SFL Audio-Codecs müssen in <i>%s</i> oder <b>.sflphone</b> Ihres "
+#~ "HOME-Verzeichniss ( <i>%s</i> ) gespeichert werden."
+
 #~ msgid "%s - %s"
 #~ msgstr "%s - %s"
 
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i Konto konfiguriert"
+#~ msgstr[1] "%i Konten konfiguriert"
+
 #~ msgid "_Enable this account"
 #~ msgstr "_Einschalten"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "_Benachrichtigung für Voice Nachrichten"
+
 #~ msgid "PulseAudio sound server"
 #~ msgstr "PulseAudio Sound Server"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "_Während eines Anrufs andere Anwendungen stumm schalten"
+
 #~ msgid "Port"
 #~ msgstr "Port"
 
+#~ msgid "Manually"
+#~ msgstr "Manuell"
+
+#~ msgid "There "
+#~ msgstr "Es "
+
+#~ msgid "are "
+#~ msgstr "gibt "
+
+#~ msgid "is "
+#~ msgstr "gibt "
+
+#~ msgid "UDP Transport"
+#~ msgstr "UDP Transport"
+
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
 #~ "Ihre Namen, ,Launchpad Contributions:,Maxime Chambreuil,Sven Werlen, ,"
-#~ "Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen"
+#~ "Launchpad Contributions:,Maxime Chambreuil,Sven Werlen,Sven Werlen, ,"
+#~ "Launchpad Contributions:,Funatiker,Jakob Kramer,Jarosław Ogrodnik,Marcel "
+#~ "Schmücker,Maxime Chambreuil,Michael Keppler,Sven Werlen,Sven Werlen"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ "Ihre E-Mail-Adressen,,,maxime.chambreuil@gmail.com,,,,maxime."
-#~ "chambreuil@gmail.com,,sven.werlen@gmail.com"
+#~ "chambreuil@gmail.com,,sven.werlen@gmail.com,,,,,nobodythere@gmail.com,"
+#~ "versus666@hotmail.de,maxime.chambreuil@gmail.com,Bananeweizen@gmx.de,,"
+#~ "sven.werlen@gmail.com"
diff --git a/sflphone-client-gnome/po/es/es.po b/sflphone-client-gnome/po/es/es.po
index a40c09ce90e8d1106ba4f53f66c7d832e4701a63..75d66eafa6bfb3bb67339cf6dc7d051cc0af6e91 100644
--- a/sflphone-client-gnome/po/es/es.po
+++ b/sflphone-client-gnome/po/es/es.po
@@ -9,173 +9,180 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-26 20:46+0000\n"
-"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-06-17 16:12+0000\n"
+"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "No registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Intentando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Error"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Falló la autenticación"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
-msgstr "Red Inaccesible"
+msgstr "Red inaccesible"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
-msgstr "_Parte del servidor"
+msgstr "Servidor inaccesible"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
-msgstr "Error de configuración Stun"
+msgstr "Error de configuración de Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
-msgstr "Servidor stun inválido"
+msgstr "Servidor Stun no válido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr "Listo"
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
-msgstr "Inválido"
+msgstr "No válido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Usando la cuenta"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
-msgstr "Ninguna cuenta registrada"
+msgstr "No hay ninguna cuenta registrada"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
-"Incapaz de conectar con el servidor SFLphone.\n"
-" Asegúrese que el demonio esté funcionando."
+"No se pudo conectar con el servidor de SFLphone.\n"
+"Asegúrese de que el demonio está en ejecución."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
-msgstr "Llamadas IP directas"
+msgstr "Llamada SIP directa"
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
-msgstr ""
-"<b>Error: Codecs de audio no encontrados.\n"
-"\n"
-"</b> Los codecs de audio de SFLphone deben estar en <i>%s</i> o en el "
-"directorio <b>.sflphone</b> de su carpeta personal( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr "hoy a las %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr "ayer a las %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr "%A a las %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
+msgstr "%x a las %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
-"<b>Notificación ALSA</b>\n"
+"Notificación ALSA\n"
 "\n"
 "Error al abrir el dispositivo de reproducción"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
-"<b>Notificación ALSA</b>\n"
+"Notificación ALSA\n"
 "\n"
 "Error al abrir el dispositivo de captura"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
 "Pulseaudio is not running"
 msgstr ""
-"<b>Notificación de Pulseaudio</b>\n"
+"Notificación de Pulseaudio\n"
 "\n"
 "Pulseaudio no está funcionando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
-msgstr "No hay llamada en curso"
+msgstr "Hay una llamada en curso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Hay llamadas en curso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
-msgstr "Aún quiere salir ?"
+msgstr "¿Aún quiere salir?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
-msgstr "Error SFLphone"
+msgstr "Error de SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
-msgstr "ZRTP no es compatible con %s\n"
+msgstr "El nodo %s no soporta ZRTP\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Comunicación segura no disponible"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
-msgstr "Seguir"
+msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Terminar llamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
-"Un error de %s obliga la llamada con %s a caer bajo un modo decifrado.\n"
+"Un error de %s obliga a la llamada con %s a realizarse en modo no cifrado.\n"
 "Razón exacta: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
-msgstr "Negociación ZRTP fracasada"
+msgstr "Falló la negociación ZRTP"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -184,50 +191,50 @@ msgstr ""
 "%s quiere parar la comunicación segura. Confirmar reanudará la conversación "
 "sin SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s cuenta : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d mensaje de voz"
 msgstr[1] "%d mensajes de voz"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Llamando con la cuenta %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Cuenta actual"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
-msgstr "Ninguna cuenta configurada"
+msgstr "No tiene configurada ninguna cuenta"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "No tiene ninguna cuenta registrada"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -236,520 +243,554 @@ msgstr ""
 "<i>Con:</i> %s\n"
 "usando %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr "%s no es compatible con ZRTP."
+msgstr "%s no soporta ZRTP"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr "Negociación ZRTP fracasada con %s"
+msgstr "La negociación ZRTP ha fracasado con %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Con:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
-msgstr "Volumen de altavoces"
+msgstr "Volumen de los altavoces"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volumen del micrófono"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
-msgstr "Mostrar ventana principal"
+msgstr "Mostrar _ventana principal"
+
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "_Colgar"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "%i cuenta configurada"
-msgstr[1] "%i cuentas configuradas"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%i cuenta activa"
+msgstr[1] "%i cuentas activas"
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Mensaje de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
-msgstr "Libreta de contactos"
+msgstr "No se ha seleccionado ninguna libreta de direcciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
-msgstr "Libreta de contactos"
+msgstr "Libreta de direcciones"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Mensaje de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
-msgstr "SFLphone es un teléfono VoIP compatible con los protocolos SIP y IAX2"
+msgstr "SFLphone es un cliente VoIP compatible con los protocolos SIP e IAX2"
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
-msgstr "Sobre SFLphone"
+msgstr "Acerca de SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
-msgstr "_Llamar"
+msgstr "Llamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nueva llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr ""
+msgstr "Realizar un nuevo llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Descolgar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "_Colgar"
+msgstr "Responder el llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr ""
+msgstr "Finalizar el llamado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "En _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
-msgstr ""
+msgstr "Poner el llamado en espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "Seguir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
-msgstr ""
+msgstr "Sacar el llamado de espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "G_rabar"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Archivo de configuración"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Error de configuración Stun"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d mensaje de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
-msgstr ""
+msgstr "_Cerrar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
-msgstr ""
+msgstr "Minimizar al área de notificación"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "_Editar"
+msgstr "_Salir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
-msgstr ""
+msgstr "Salir del programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
-msgstr ""
+msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Eliminar la cuenta seleccionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
-msgstr ""
+msgstr "_Pegar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "Pegar el contenido del portapapeles"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "_Limpiar historial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Limpiar historial"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Cuentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Cuenta actual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Preferencias"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "Cambiar sus preferencias"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Ver"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Ayuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Seguir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
-msgstr ""
+msgstr "Abrir el manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Autentificación"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "Transferir a : "
+msgstr "Transferir a :"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "G_rabar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Grabar la conversación actual"
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Mostrar barra de herramientas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
-msgstr ""
+msgstr "Mostrar barra de herramientas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
-msgstr "Desactivado"
+msgstr "_Teclado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
-msgstr ""
+msgstr "Mostrar el teclado de marcado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "_Controles de volumen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "_Controles de volumen"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Historia de Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Historia de Llamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Libreta de contactos"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "En _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Llamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Editar número de teléfono"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Editar el número de teléfono antes de llamar"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parámetros de cuenta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Alias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Nombre de equipo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Usuario"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Número de buzón de voz"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr "Agente de _usuario"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Autentificación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Secreto"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Informaciónes"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nombre de autentificación"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Contraseña"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Seguridad"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Usa transporte TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Intercambió de clave SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Desactivado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "Registración"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr "Registracíon expira"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr "_Cumplir con RFC 3263"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "Red Inaccesible"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr "Dirección local"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr "Puerto local"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr "Dirección publicada"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr "Usando STUN "
+msgstr "Usando STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr "URL del servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr "Igual que parámetros locales"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr "Publicar dirección y puerto:"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr "Puerto publicado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Códecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr "DTMF"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr "RTP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Configuración de cuentas"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avanzado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Red"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+"Este perfil es utilizado cuando usted quiere alcanzar al par remoto "
+"escribiendo el URI sip así como <b>sip:parremoto</b>. Los parámetros que "
+"usted define aqui serán también utilizados si ninguná cuenta puede ser "
+"igualada a una llamada entrante o saliente."
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
+#, c-format
 msgid "Server returned \"%s\" (%d)"
-msgstr "Servidor contesta \""
+msgstr "El servidor ha devuelto «%s» (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Cuentas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Cuentas Configuradas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
+#, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] " cuenta activada"
-msgstr[1] " cuenta activada"
+msgstr[0] "Hay %d cuenta activada"
+msgstr[1] "Hay %d cuentas activadas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "No tienes ninguna cuenta activada"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "General"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Usar libreta de contactos de Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Limite de descarga :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "tarjetas"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Mostrar fotos de contactos, si están disponibles"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "P_rofesional"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Personal"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Movil"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Libretas de contactos"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Seleccione la libreta de contactos de Evolution a usar"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nombre"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "El asistente ha finalizado"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -757,317 +798,322 @@ msgstr ""
 "Puede comprobar en cualquier momento su estado de registro o modificar la "
 "configuración de sus cuentas en la ventana de Opciones/Cuentas."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Servidor"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Usuario"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Seguridad: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Ninguno"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Asistente de creación de cuentas"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
-msgstr "¡Bienvenido al asistente de configuración de cuentas de SFLphone"
+msgstr "¡Bienvenido al asistente de creación de cuentas de SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Este asistente de instalación le ayudará a configurar una cuenta."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Escoja un tipo de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Por favor, elija una de las siguientes opciones"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrar una cuenta SIP o IAX2 existente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Configuración de cuenta SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Por favor, ingrese la siguiente información"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
-msgstr "Communicaciòn segura con _ZRTP"
+msgstr "Comunicación segura con _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Dirección de correo opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Correo"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Configuración de cuenta IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Conversión de Dirección de Red (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "A_ctivar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Registro de cuenta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "¡Enhorabuena!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frecuencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Tasa de transferencia"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Ancho de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Salida"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "_Detección de actividad de voz"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Reducción de ruido"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Gestor de audio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Configuración de ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Códecs"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Grabaciones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Carpeta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Seleccione una carpeta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Habilitar tonos de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
-msgstr "Elija un tono de llmada"
+msgstr "Elija un tono de llamada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Archivos de Audio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Configuración de cuentas"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Argumento de URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Comandos personalizados en llamada entrante con URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s se remplazará por la URL."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Disparador en una cabecera _SIP específica"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Disparador con una URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "_Comando a ejecutar"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Reescritura de número de teléfono"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Prefijar los números marcados con"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-"Este perfil es utilizado cuando usted quiere alcanzar al par remoto "
-"escribiendo el URI sip así como <b>sip:parremoto</b>. Los parámetros que "
-"usted define aqui serán también utilizados si ninguná cuenta puede ser "
-"igualada a una llamada entrante o saliente."
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notificación de escritorio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Activar notificaciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Icono de bandeja del sistema"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr "Mostrar SFLphone en la barra de tareas"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Popup ventana principal al recibir llamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "_Nunca mostrar ventana principal"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Esconder SFLphone al principio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Historia de llamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Guardar mi historia por lo menos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "días"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferencias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Sonido"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Libreta de Direcciones"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Disparadores"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Llamadas IP directas"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr "Accesos directos"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+"Tenga cuidado: estos accesos directos podrían reemplazar los accesos "
+"directos de todo sistema."
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
-msgstr "Opciones avanzadas por TLS"
+msgstr "Opciones avanzadas para TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Transporte TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1080,139 +1126,118 @@ msgstr ""
 "diferente transporte TLS para cada cuenta. De cualquier forma, cada uno de "
 "ellos usará un puerto dedicado, diferente el uno del otro.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr "Escuchador TLS global (todas cuentas)"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Lista de Certificados de Autoridad"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Escoge un archivo de lista de CA (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Archivo del certificado del par público"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Escoge un certificado de par público (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Escoge un archivo de clave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Contraseña de clave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Método de protocolo TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Lista de cifrado TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
-msgstr "Nombre del servidor para conección TLS saliente"
+msgstr "Nombre del servidor para la conexión TLS saliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
-msgstr "Negociación expirada"
+msgstr "Negociación expirada (seg:mseg)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Checar certificados entrantes, como un servidor"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Checar certificados de la respuesta, como cliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
-msgstr "Requiere certificado para conecciones TLS entrantes"
+msgstr "Requiere certificado para conexiones TLS entrantes"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr "Opciones ZRTP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr "Enviar Hello Hash en S_DP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr "Preguntar al usuario de confirmar SAS"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr "_Prevenir si ZRTP no es compatible"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr "Presentar SAS una vez para eventos en espera"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Opciones SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Buscar todos"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
-msgstr "Haz clic aqui para cambiar el type de busqueda"
+msgstr "Pulse aquí para cambiar el tipo de búsqueda"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Buscar en llamadas pérdidas"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Buscar en llamadas entrantes"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Buscar en llamadas salientes"
 
-#~ msgid "IP call - %s"
-#~ msgstr "Llamada IP - %s"
-
-#~ msgid "Codec"
-#~ msgstr "Códec"
-
-#~ msgid "Network"
-#~ msgstr "Red"
-
-#~ msgid "Manually"
-#~ msgstr "Manualmente"
-
-#~ msgid "There "
-#~ msgstr "Alla "
-
-#~ msgid "is "
-#~ msgstr "es "
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "_Detección de actividad de voz"
 
-#~ msgid "are "
-#~ msgstr "son "
-
-#~ msgid "s"
-#~ msgstr "s"
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "Silenciar otras aplicaciones durante una llamada"
-
-#~ msgid "SIP Port"
-#~ msgstr "Puerto SIP"
-
-#~ msgid "UDP Transport"
-#~ msgstr "Transporte UDP"
-
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Activar _notificaciones de mensajes de voz"
-
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr "Guarda informaciòn SIP como hash MD5"
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Reducción de ruido"
 
 #~ msgctxt "account state"
 #~ msgid "Registered"
@@ -1241,6 +1266,9 @@ msgstr "Buscar en llamadas salientes"
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "Cliente KDE de SFLphone"
 
+#~ msgid "Codec"
+#~ msgstr "Códec"
+
 #~ msgid "Main screen"
 #~ msgstr "Pantalla principal"
 
@@ -1281,9 +1309,6 @@ msgstr "Buscar en llamadas salientes"
 #~ msgid "Enable Stun"
 #~ msgstr "Activar STUN"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "Apply"
 #~ msgstr "Aplicar"
 
@@ -1296,6 +1321,9 @@ msgstr "Buscar en llamadas salientes"
 #~ msgid "PulseAudio"
 #~ msgstr "PulseAudio"
 
+#~ msgid "SIP Port"
+#~ msgstr "Puerto SIP"
+
 #~ msgctxt "End of 'Keep my history for at least n days.'"
 #~ msgid "days"
 #~ msgstr "días"
@@ -1452,12 +1480,23 @@ msgstr "Buscar en llamadas salientes"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "Cuidado:número de resultatos excede el maximo a mostrar."
 
+#~ msgid "IP call - %s"
+#~ msgstr "Llamada IP - %s"
+
 #~ msgid "_Account creation wizard"
 #~ msgstr "Asistente de configuración de cuentas"
 
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i cuenta configurada"
+#~ msgstr[1] "%i cuentas configuradas"
+
 #~ msgid "_Enable this account"
 #~ msgstr "_Habilitar esta cuenta"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "Activar _notificaciones de mensajes de voz"
+
 #~ msgctxt "Beginning of 'Keep my history for at least n days.'"
 #~ msgid "_Keep my history for at least"
 #~ msgstr "_Guardar mi historia por lo menos"
@@ -1465,6 +1504,9 @@ msgstr "Buscar en llamadas salientes"
 #~ msgid "PulseAudio sound server"
 #~ msgstr "Servidor de sonido Pulseaudio"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "Silenciar otras aplicaciones durante una llamada"
+
 #~ msgid "User"
 #~ msgstr "Usuario"
 
@@ -1723,6 +1765,17 @@ msgstr "Buscar en llamadas salientes"
 #~ msgid "Command to run"
 #~ msgstr "Comando a ejecutar"
 
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Error: Codecs de audio no encontrados.\n"
+#~ "\n"
+#~ "</b> Los codecs de audio de SFLphone deben estar en <i>%s</i> o en el "
+#~ "directorio <b>.sflphone</b> de su carpeta personal( <i>%s</i> )"
+
 #~ msgid "Keep my history for at least"
 #~ msgstr "Guardar el historial al menos"
 
@@ -1770,13 +1823,39 @@ msgstr "Buscar en llamadas salientes"
 #~ "\"Más\" o \"Menos\". Edita la cuenta seleccionada con el formulario a la "
 #~ "derecha."
 
+#~ msgid "Manually"
+#~ msgstr "Manualmente"
+
+#~ msgid "s"
+#~ msgstr "s"
+
+#~ msgid "There "
+#~ msgstr "Alla "
+
+#~ msgid "Store SIP credentials as MD5 hash"
+#~ msgstr "Guarda informaciòn SIP como hash MD5"
+
+#~ msgid "Direct IP calls"
+#~ msgstr "Llamadas IP directas"
+
+#~ msgid "UDP Transport"
+#~ msgstr "Transporte UDP"
+
+#~ msgid "are "
+#~ msgstr "son "
+
+#~ msgid "is "
+#~ msgstr "es "
+
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
 #~ "Maxime Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime "
 #~ "Chambreuil, ,Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,"
 #~ "Launchpad Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad "
-#~ "Contributions:,Andres Mujica,Maxime Chambreuil"
+#~ "Contributions:,Andres Mujica,Maxime Chambreuil, ,Launchpad Contributions:,"
+#~ "Andres Mujica,Daniel Mustieles,Jorge E. Gómez,Maxime Chambreuil,Nicolás "
+#~ "M. Zahlut,Xuacu Saturio"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1784,4 +1863,6 @@ msgstr "Buscar en llamadas salientes"
 #~ "maxime.chambreuil@savoirfairelinux.com,,,andres.mujica@seaq.com.co,maxime."
 #~ "chambreuil@gmail.com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail."
 #~ "com,,,andres.mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres."
-#~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com"
+#~ "mujica@seaq.com.co,maxime.chambreuil@gmail.com,,,andres.mujica@seaq.com."
+#~ "co,daniel.mustieles@gmail.com,jorge@jorgee.net,maxime.chambreuil@gmail."
+#~ "com,nzahlut@live.com,xuacusk8@gmail.com"
diff --git a/sflphone-client-gnome/po/fr/fr.po b/sflphone-client-gnome/po/fr/fr.po
index c7ace4f55b20cd568eb48572c1eb71af406ac753..f790d7fe8a901cf472cda6a07f34b95d758f348e 100644
--- a/sflphone-client-gnome/po/fr/fr.po
+++ b/sflphone-client-gnome/po/fr/fr.po
@@ -7,70 +7,74 @@
 # POT-Creation-Date: 2008-01-13 01:39+0100\n
 msgid ""
 msgstr ""
-"Project-Id-Version: SFLphone 0.9.4\n"
+"Project-Id-Version: SFLphone 0.9.8\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-26 20:46+0000\n"
-"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-04-29 08:48+0000\n"
+"Last-Translator: Christophe CATARINA <Unknown>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2009-11-12 18:12+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Enregistré"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Non Enregistré"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "En cours..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Erreur"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Erreur d'authentification"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Réseau non trouvé"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Serveur introuvable"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Erreur de configuration Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Serveur Stun invalide"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr "Prêt"
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Non valide"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Utilise le compte"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Pas de compte enregistré"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -78,25 +82,28 @@ msgstr ""
 "Impossible de se connecter au serveur SFLphone.\n"
 " Assurez-vous que le démon est lancé."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Appel direct SIP"
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
-msgstr ""
-"<b>Erreur: Aucun codec audio trouvé.\n"
-"\n"
-"</b> Les codecs audio SFL doivent être soit dans <i>%s</i> soit dans le "
-"répertoire <b>.sflphone</b> de votre répertoire racine( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr "Aujourd'hui, à %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr "Hier, à %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr "%A, à %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
+msgstr "%x, à %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -106,7 +113,7 @@ msgstr ""
 "\n"
 "Erreur lors de l'ouverture du périphérique de sortie"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -116,7 +123,7 @@ msgstr ""
 "\n"
 "Erreur lors de l'ouverture du périphérique d'entrée"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -126,43 +133,43 @@ msgstr ""
 "\n"
 "Pulseaudio n'est pas lancé"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Vous avez un appel en cours."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Vous avez des appels en cours."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Voulez-vous quitter?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Erreur SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP n'est pas supporté par %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Communications sécurisées non disponibles"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Continuer"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Arrêter l'appel"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -171,11 +178,11 @@ msgstr ""
 "L'appel avec %s est passé en mode non-crypté à cause d'une erreur %s.\n"
 "Raison exacte: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Erreur d'authentification"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -184,50 +191,50 @@ msgstr ""
 "%s ne désire plus utiliser la communication sécurisée. Confirmer que vous "
 "voulez continuer sans ZRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmer Communication en clair"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmer"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s account : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d message vocal"
 msgstr[1] "%d messages vocaux"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Appel avec le compte %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Compte courant"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Vous n'avez pas configuré de compte"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Vous n'avez aucun compte enregistré"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -236,525 +243,555 @@ msgstr ""
 "<i>Avec:</i> %s\n"
 "using %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s ne supporte pas ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "La négociation ZRTP avec %s a échoué"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>De:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume des hauts-parleurs"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume du micro"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Afficher la fenêtre principale"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "_Raccrocher"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "%i compte configuré"
-msgstr[1] "%i comptes configurés"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%i compte actif"
+msgstr[1] "%i comptes actifs"
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Boite vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Aucun carnet d'adresses sélectionné"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Carnet d'adresses"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
 #, c-format
 msgid "Voicemail (%i)"
 msgstr "Boite vocale (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr ""
 "SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "A propos de SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "Actions"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nouvel appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr "Appeler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Décrocher"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr "Répondre à l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "_Raccrocher"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr "Terminer l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Mettre en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr "Mettre l'appel en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "Reprendre"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr "Reprendre l'appel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "Enregistrer"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr "Enregistrer la conversation courante"
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "_Assistant de configuration"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Lancer l'assistant de configuration"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "Appeler la boite vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Fermer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr "Minimiser dans la barre des tâches"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "_Quitter"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Quitter le programme"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Copier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Copier la sélection"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr "C_oller"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "Coller le contenu du presse-papiers"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Effacer l'_historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Effacer l'historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "Co_mptes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Éditer les comptes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Préférences"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr "Modifier les préférences"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "A_ffichage"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "A_ide"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Sommaire"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr "Ouvrir le manuel"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "À propos de cette application"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transférer"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "Transférer à : "
+msgstr "Transférer à :"
+
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "Enregistrer"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Enregistrer la conversation courante"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr "Afficher la _barre d'outil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr "Afficher la barre d'outil"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "_Clavier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr "Afficher le clavier"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Contrôle du _volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Afficher les controles du volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Historique"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Historique d'appels"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Carnet d'adresses"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "_Mettre en attente"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Rappeler"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Éditer le numéro"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Éditer le numéro de téléphone avant d'appeler"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Paramètres du Compte"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "A_lias"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "P_rotocole"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Serveur"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Usa_ger"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
-#, fuzzy
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
-msgstr "Mot de passe"
+msgstr "Afficher le mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Boite vocale #"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr "_User-agent"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Identification"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Informations"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nom d'authentification"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Mot de passe"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Sécurité"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Utiliser un transport TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Échange de clé SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Désactivé"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "Expiration d'enregistrement"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr "Expiration d'enregistrement"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr "Respecter RFC 3263"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "Interface réseau"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr "Adresse locale"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr "Port local"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr "Adresse de publication"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr "Utiliser STUN "
+msgstr "Utiliser STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr "URL du serveur STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr "Identique aux paramètres locaux"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr "Configurer l'adresse et le port à publier"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr "Port de publication"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr "DTMF"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr "RTP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Paramètre des comptes"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Général"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avancé"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Réseau"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+"Ce profil est utilisé quand vous voulez appeler directement quelqu'un en "
+"composant une adresse SIP telle que: <b>sip:remotepeer</b>. Ces paramètres "
+"sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant "
+"ou sortant."
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr "Le serveur a répondu \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocole"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Statut"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Comptes"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Comptes Configurés"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] " %d compte actif"
-msgstr[1] " %d comptes actifs"
+msgstr[0] "%d compte actif"
+msgstr[1] "%d comptes actifs"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Vous n'avez aucun compte actif"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Général"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Utiliser les carnets d'adresse d'Évolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Limite de téléchargement :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "entrées"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Afficher la photo si disponible"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Utiliser les champs suivants des carnets d'adresse d'Évolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Professionnels"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "P_ersonnels"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Mobiles"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Carnets d'adresses"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nom"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Cet assistant est maintenant terminé."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -762,319 +799,322 @@ msgstr ""
 "Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier "
 "les paramètres de vos comptes dans la fenêtre Options/Comptes."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Alias"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Serveur"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nom d'utilisateur"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Sécurité: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Aucun"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Assistant de création de compte de SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Cet assistant vous guidera dans la configuration d'un compte."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocoles VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Sélectionnez un type de compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Veuillez sélectionner une des options suivantes"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Enregistrer un compte SIP ou IAX2 existant"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Paramètres de compte SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Veuillez remplir les champs suivants"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Communications sécurisées avec _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Adresse courriel optionnelle"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "A_dresse courriel"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Paramètres de compte IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 "Vous devriez probablement activer cette option si vous vous trouvez derrière "
 "un pare-feu."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "A_ctiver STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "S_erveur STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Enregistrement du compte"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Félicitations!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Fréquence"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Bande passante"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Greffon ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Sortie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrée"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "Détection de l'activité de la voix"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+msgid "Ringtone"
+msgstr "Sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "Réduction du bruit (Compresseur extenseur LBR)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Interface Audio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Paramètres ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Codecs"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Enregistrements"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Dossier de destination"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Choisissez un dossier"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Activer les sonneries"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Sélectionner une sonnerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Fichier Audio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Paramètre des comptes"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Argument URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Commandes personnalisées lors d'appels entrants avec une URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s sera remplacé par l'URL passé en argument."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Déclencher sur un entête _SIP spécifique"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Déclencher en _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Commande à e_xécuter"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Réécriture des numéros appelés"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Préfixer les numéros composés par"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-"Ce profil est utilisé quand vous voulez appeler directement quelqu'un en "
-"composant une adresse SIP telle que: <b>sip:remotepeer</b>. Ces paramètres "
-"sont aussi utilisé si aucun compte ne peut être attribué à un appel entrant "
-"ou sortant."
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notifications de Bureau"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Activer les notifications"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Icône dans la barre des tâches"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr "Montrer SFLphone dans la barre des tâches"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Ne _jamais afficher la fenêtre principale"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "_Cacher la fenêtre de SFLphone au démarrage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Historique des appels"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "Garder mon historique au moins"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "jours"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Préférences"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Carnet d'adresse"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Ancrage"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Appels IP"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr "Raccourcis claviers"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+"Soyez prudent; ces raccourcis peuvent entrer en conflit avec ceux du système."
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Options avancées TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Transport TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1087,143 +1127,118 @@ msgstr ""
 "TLS différent pour chaque compte. Cependant, chacun écoutera sur un port "
 "différent.\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr "Port TLS global (pour tous les comptes)"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Liste des autorités de certification"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Choisir une liste d'AC (optionnel)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Fichier de certificats de l'extrémité public"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Sélectionner le certificat de l'extrémité public"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Choisir une clé privée (optionnel)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Mot de passe pour la clé privée"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Méthode pour TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Liste de cryptogramme TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Instance du serveur pour les connections TLS sortantes"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Expiration de la négociation"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "En tant que serveur, vérifier les certificats entrants"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "En tant que client, vérifier les certificats dans les réponses"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Exiger un certificat pour les connexions TLS entrantes"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr "Options de ZRTP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr "Envoyer le hash de Hello dans S_DP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr "Demander à l'utilisateur de confirmer le SAS"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr "_Avertir si ZRTP n'est pas supporté"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr "Afficher le SAS seulement une fois sur les mises en attente"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Options SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr "Recourrir à RTP si SDES échoue"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Rechercher dans tous"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Cliquez ici pour changer le type de recherche"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Rechercher dans les appels manqués"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Rechercher dans les appels entrants"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Rechercher dans les appels sortants"
 
-#~ msgid "Configuration File"
-#~ msgstr "Fichier de configuration"
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "Détection de l'activité de la voix"
 
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr ""
-#~ "Stocker les informations d'authentification sour forme encryptée (MD5)"
-
-#~ msgid "IP call - %s"
-#~ msgstr "Appel IP - %s"
-
-#~ msgid "Codec"
-#~ msgstr "Codec"
-
-#~ msgid "Network"
-#~ msgstr "Réseau"
-
-#~ msgid "Manually"
-#~ msgstr "Manuelle"
-
-#~ msgid "There "
-#~ msgstr "Il y "
-
-#~ msgid "is "
-#~ msgstr "a "
-
-#~ msgid "are "
-#~ msgstr "a "
-
-#~ msgid "s"
-#~ msgstr "s"
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "Éteindre le _son des autres applications lors d'un appel"
-
-#~ msgid "SIP Port"
-#~ msgstr "Port SIP"
-
-#~ msgid "UDP Transport"
-#~ msgstr "Transport UDP"
-
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Activer les notifications de boîte _vocale"
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "Réduction du bruit (Compresseur extenseur LBR)"
 
 #~ msgctxt "account state"
 #~ msgid "Registered"
@@ -1286,6 +1301,9 @@ msgstr "Rechercher dans les appels sortants"
 #~ msgid "Default account"
 #~ msgstr "Compte par défaut"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone Client KDE"
 
@@ -1475,6 +1493,9 @@ msgstr "Rechercher dans les appels sortants"
 #~ msgid "Clear history"
 #~ msgstr "Effacer l'historique"
 
+#~ msgid "SIP Port"
+#~ msgstr "Port SIP"
+
 #~ msgid "Trigger on specific SIP header"
 #~ msgstr "Déclencher sur un entête SIP spécifique"
 
@@ -1496,15 +1517,40 @@ msgstr "Rechercher dans les appels sortants"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "Attention:tous les résultats ne sont pas affichés."
 
+#~ msgid "IP call - %s"
+#~ msgstr "Appel IP - %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Erreur: Aucun codec audio trouvé.\n"
+#~ "\n"
+#~ "</b> Les codecs audio SFL doivent être soit dans <i>%s</i> soit dans le "
+#~ "répertoire <b>.sflphone</b> de votre répertoire racine( <i>%s</i> )"
+
 #~ msgid "_Account creation wizard"
 #~ msgstr "_Assistant de création de compte"
 
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i compte configuré"
+#~ msgstr[1] "%i comptes configurés"
+
 #~ msgid "_Enable this account"
 #~ msgstr "Activer ce compte"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "Activer les notifications de boîte _vocale"
+
 #~ msgid "PulseAudio sound server"
 #~ msgstr "Serveur de son PulseAudio"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "Éteindre le _son des autres applications lors d'un appel"
+
 #~ msgid "Port"
 #~ msgstr "Port"
 
@@ -1770,9 +1816,6 @@ msgstr "Rechercher dans les appels sortants"
 #~ msgid "IAX"
 #~ msgstr "IAX"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "PulseAudio"
 #~ msgstr "PulseAudio"
 
@@ -1817,12 +1860,42 @@ msgstr "Rechercher dans les appels sortants"
 #~ msgid "Registration _expire"
 #~ msgstr "Expiration d'enregistrement"
 
+#~ msgid "Manually"
+#~ msgstr "Manuelle"
+
+#~ msgid "s"
+#~ msgstr "s"
+
+#~ msgid "UDP Transport"
+#~ msgstr "Transport UDP"
+
+#~ msgid "Configuration File"
+#~ msgstr "Fichier de configuration"
+
+#~ msgid "There "
+#~ msgstr "Il y "
+
+#~ msgid "are "
+#~ msgstr "a "
+
+#~ msgid "is "
+#~ msgstr "a "
+
+#~ msgid "Direct IP calls"
+#~ msgstr "Appels IP"
+
+#~ msgid "Store SIP credentials as MD5 hash"
+#~ msgstr ""
+#~ "Stocker les informations d'authentification sour forme encryptée (MD5)"
+
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
 #~ "Jérémy Quentin, ,Launchpad Contributions:,Emmanuel Milou,Maxime "
 #~ "Chambreuil, ,Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ,"
-#~ "Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil"
+#~ "Launchpad Contributions:,Emmanuel Milou,Maxime Chambreuil, ,Launchpad "
+#~ "Contributions:,Alexandre Savard,Christophe CATARINA,Emmanuel Milou,Maxime "
+#~ "Chambreuil,Pierre Slamich"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1830,4 +1903,6 @@ msgstr "Rechercher dans les appels sortants"
 #~ "jeremy.quentin@savoirfairelinux.com,,,emmanuel.milou@savoirfairelinux.com,"
 #~ "maxime.chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime."
 #~ "chambreuil@gmail.com,,,emmanuel.milou@savoirfairelinux.com,maxime."
-#~ "chambreuil@gmail.com"
+#~ "chambreuil@gmail.com,,,alexandre.savard@savoirfairelinux.com,,emmanuel."
+#~ "milou@savoirfairelinux.com,maxime.chambreuil@gmail.com,pierre."
+#~ "slamich@gmail.com"
diff --git a/sflphone-client-gnome/po/it/it.po b/sflphone-client-gnome/po/it/it.po
index cf8644aea926a034434257d7637e4c5c02e5a84c..f9e4a8ddbc573b6a4541039a465d08386cc36435 100644
--- a/sflphone-client-gnome/po/it/it.po
+++ b/sflphone-client-gnome/po/it/it.po
@@ -7,68 +7,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-14 17:47+0000\n"
-"Last-Translator: Maxime Chambreuil <maxime.chambreuil@gmail.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-03-21 18:30+0000\n"
+"Last-Translator: Milo Casagrande <milo@casagrande.name>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrato"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Non registrato"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Registrazione in corso..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Errore"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Autenticazione fallita"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Rete irraggiungibile"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "Host non raggiungibile"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Errore di configurazione STUN"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Server STUN non valido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Non valido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Account in uso:"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Nessun account registrato"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,25 +80,28 @@ msgstr ""
 "Impossibile connettersi al server SFLphone.\n"
 "Accertarsi che il demone sia in esecuzione."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
+msgstr "Chiamata SIP diretta"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
 msgstr ""
-"<b>Errore: Non è stato trovato alcun codec audio.</b>\n"
-"\n"
-"I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella <b>."
-"sflphone</b> della cartella home dell'utente (</i>%s</i>)"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -103,7 +110,7 @@ msgstr ""
 "Notifica ALSA\n"
 "Errore nell'apertura del dispositivo di riproduzione"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -112,7 +119,7 @@ msgstr ""
 "Notifica ALSA\n"
 "Errore nell'apertura del dispositivo di registrazione"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -121,941 +128,976 @@ msgstr ""
 "Notifica PulseAudio\n"
 "PulseAudio non è in esecuzione"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "C'è una chiamata in corso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Ci sono chiamate in corso."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Vuoi veramente uscire?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Errore SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
-msgstr ""
+msgstr "Termina la chiamata"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
-msgstr ""
+msgstr "Negoziazione ZRTP fallita"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "Account %s: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>Da</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d messaggio vocale"
 msgstr[1] "%d messaggi vocali"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Chiamata tramite account %s <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Account attivo"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Nessun account configurato"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Nessun account registrato"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
-msgstr ""
+msgstr "%s non supporta ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
-msgstr ""
+msgstr "Negoziazione ZRTP fallita con %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
-msgstr ""
+msgstr "<i>Con:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume altoparlante"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume microfono"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "Mostra la finestra principale"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "_Chiudi"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "%i account configurato"
-msgstr[1] "%i account configurati"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Segreteria telefonica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Segreteria telefonica (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone è un client VoIP compatibile con i protocolli SIP e IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Informazioni su SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Chiama"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "Chiama"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr ""
+msgstr "Effettua una nuova chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "Rispondi"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "_Chiudi"
+msgstr "Rispondi alla chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr ""
+msgstr "Termina la chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Attesa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
-msgstr ""
+msgstr "Metti in attesa la chiamata"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "_Registra"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Errore di configurazione STUN"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d messaggio vocale"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "_Modifica"
+msgstr "_Esci"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
-msgstr ""
+msgstr "Esce dal programma"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Modifica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Elimina l'account selezionato"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Cancella la cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Cancella la cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Account"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Account attivo"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
-msgstr "Preferenze"
+msgstr "Preferen_ze"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "Modifica le preferenze"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Visualizza"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Aiuto"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Inoltra"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "Inoltra a: "
+msgstr "Inoltra a:"
+
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "_Registra"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Regista la conversazione in corso"
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "Mostra tastiera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
-msgstr ""
+msgstr "Mostra la tastiera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "Mostra i controlli del volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Mostra i controlli del volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Cronologia"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Cronologia chiamate"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "Attesa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parametri account"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Pseudonimo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocollo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "Nome _host"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "Nome _utente"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Password"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Password"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "Numero segreteria telefonica"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
-msgid "Authentication"
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
+msgid "Authentication"
+msgstr "Autenticazione"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Password"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr "Scadenza registrazione"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "Rete irraggiungibile"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codec"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Impostazioni dell'account"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Generale"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avanzate"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Rete"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocollo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Stato"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Account"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Account configurati"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Usa la rubrica di Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "tessere"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "Mostra la foto del contatto se disponibile"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Campi dalla rubrica di Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Lavoro"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Home"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "Cellulare"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Rubriche indirizzi"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Selezionare la rubrica di Evolution da usare"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nome"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "La procedura guidata è terminata."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Pseudonimo"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Server"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nome utente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr ""
 "Benvenuti alla procedura guidata per la creazione di un account SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Questa procedura permetterà di configurare un account."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolli VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Selezionare un tipo di account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Scegliere una delle seguenti opzioni"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Creare un account SIP/IAX2 gratuito  su sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrare un account SIP o IAX2 esistente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Impostazioni account SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Indirizzo email opzionale"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "L'indirizzo email sarà usato per l'invio dei messaggi della segreteria "
 "telefonica."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "Indirizzo _email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Impostazioni account IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "Dovrebbe essere abilitato se ci si trova dietro ad un firewall."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "Abilita STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "Server STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Registrazione account"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Congratulazioni!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequenza"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Uscita"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Ingresso"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Suonerie"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Impostazioni ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Codec"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Registrazioni"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Cartella di destinazione"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Seleziona una cartella"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Suonerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "Abilita suonerie"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Selezionare una suoneria"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "File audio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Impostazioni dell'account"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Rileva header SIP specifico"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Rileva URL su IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Comando da eseguire"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Riscrittura numero telefonico"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "Prefisso da aggiungere ai numeri da chiamare"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notifiche"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "Abilita notifiche"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Icona per area di notifica"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "Mostra la finestra principale all'arrivo delle chiamate"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Non mostrare mai la finestra principale"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Nascondi la finestra di SFLphone all'avvio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Cronologia chiamate"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "Mantieni la cronologia per almeno"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "giorni"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferenze"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Audio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Rubrica"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1064,119 +1106,116 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Cerca tra tutte le chiamate"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Fare clic qui per cambiare il tipo di ricerca"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Cerca tra le chiamate perse"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Cerca tra le chiamate ricevute"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Cerca tra le chiamate effettuate"
 
-#~ msgid "IP call - %s"
-#~ msgstr "Chiamata IP diretta - %s"
-
 #~ msgid "Codec"
 #~ msgstr "Codec"
 
-#~ msgid "Network"
-#~ msgstr "Rete"
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "Spegni l'audio delle altre applicazioni durante una chiamata"
-
-#~ msgid "SIP Port"
-#~ msgstr "SIP Port"
-
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Abilita notifiche messaggi vocali"
-
 #~ msgid "(C) 2009 Savoir-faire Linux"
 #~ msgstr "(C) 2009 Savoir-faire Linux"
 
@@ -1201,9 +1240,6 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgid "IAX"
 #~ msgstr "IAX"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "Apply"
 #~ msgstr "Applica"
 
@@ -1228,6 +1264,9 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgid "Enable notifications"
 #~ msgstr "Attiva le notifiche"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP Port"
+
 #~ msgid "Port"
 #~ msgstr "Port"
 
@@ -1252,9 +1291,17 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgid "Command to run"
 #~ msgstr "Comando da eseguire"
 
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i account configurato"
+#~ msgstr[1] "%i account configurati"
+
 #~ msgid "_Enable this account"
 #~ msgstr "Abilita questo account"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "Abilita notifiche messaggi vocali"
+
 #~ msgid "Voicemail number"
 #~ msgstr "Numero segreteria telefonica"
 
@@ -1297,9 +1344,15 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgid "Prefix dialed numbers with"
 #~ msgstr "Prefisso da aggiungere al numero da chiamare"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "Spegni l'audio delle altre applicazioni durante una chiamata"
+
 #~ msgid "Keep my history for at least"
 #~ msgstr "Mantieni la cronologia per almeno"
 
+#~ msgid "IP call - %s"
+#~ msgstr "Chiamata IP diretta - %s"
+
 #~ msgid "Registration _expire"
 #~ msgstr "Scadenza registrazione"
 
@@ -1316,15 +1369,27 @@ msgstr "Cerca tra le chiamate effettuate"
 #~ msgid "Account creation wizard"
 #~ msgstr "Procedura guidata creazione account"
 
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Errore: Non è stato trovato alcun codec audio.</b>\n"
+#~ "\n"
+#~ "I codec audio SFL devono trovarsi in <i>%s</i> o nella sottocartella <b>."
+#~ "sflphone</b> della cartella home dell'utente (</i>%s</i>)"
+
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
 #~ ",Launchpad Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad "
 #~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad "
-#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil"
+#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil, ,Launchpad "
+#~ "Contributions:,Maurizio Porrato,Maxime Chambreuil,Milo Casagrande"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ ",,,maxime.chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,,,,maxime."
-#~ "chambreuil@gmail.com"
+#~ "chambreuil@gmail.com,,,,maxime.chambreuil@gmail.com,milo@casagrande.name"
diff --git a/sflphone-client-gnome/po/pt_BR/pt_BR.po b/sflphone-client-gnome/po/pt_BR/pt_BR.po
index 0a5429e6c0323561c75343ee5b5b977440bb1ae2..42a553a175d85f07feb573e84d017da5d38c1928 100644
--- a/sflphone-client-gnome/po/pt_BR/pt_BR.po
+++ b/sflphone-client-gnome/po/pt_BR/pt_BR.po
@@ -7,68 +7,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: sflphone\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-26 20:46+0000\n"
-"Last-Translator: kalib <kalibslack@gmail.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-06-02 08:31+0000\n"
+"Last-Translator: Gustavo Guidorizzi <Unknown>\n"
 "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Não Registrado"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "Tentando..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Erro"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "A autenticação falhou"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "A rede está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "A máquina está inacessível"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Erro de configuração no stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Servidor stun inválido"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr "Pronto"
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "Inválido"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "Utilizando conta"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "Sem contas registradas"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -76,25 +80,28 @@ msgstr ""
 "Incapaz de conectar ao servidor SFLphone.\n"
 "Tenha certeza de que o daemon está rodando."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Ligações IP diretas"
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
-msgstr ""
-"<b>Erro: Não foram encontrados codecs de áudio.\n"
-"\n"
-"</b> Os codecs de áudio do SFL tem de ser movidos para o diretório <i>%s</i> "
-"ou para o diretório <b>.sflphone</b> em seu home( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr "hoje às %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr "ontem às %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr "%A às %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
+msgstr "%x às %R"
+
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -104,7 +111,7 @@ msgstr ""
 "\n"
 "Erro ao abrir o dispositivo de reprodução"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -114,7 +121,7 @@ msgstr ""
 "\n"
 "Erro ao abrir o dispositivo de captura"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -124,43 +131,43 @@ msgstr ""
 "\n"
 "Pulseaudio não está rodando"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "Existe uma ligação em progresso"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "Existem ligações em progresso"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Você ainda deseja sair?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Erro no SFLphone"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP não é suportado pelo peer %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "Comunicação Segura Indisponível"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "Finalizar Chamada"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
@@ -169,11 +176,11 @@ msgstr ""
 "Um erro %s forçou a ligação com %s a mudar para um modo não encriptado.\n"
 "Motivo exato: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Negociação ZRTP falhou"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
@@ -182,50 +189,50 @@ msgstr ""
 "%s deseja finalizar a utilização de comunicação segura. A confirmação irá "
 "retomar sem SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Confirmar Vá Limpar"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Confirmar"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s conta : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>De</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d mensagem de voz"
 msgstr[1] "%d mensagens de voz"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "Ligando com %s conta <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "Conta atual"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "Você não tem contas configuradas"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "Você não tem contas registradas"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
@@ -234,520 +241,554 @@ msgstr ""
 "<i>Com:</i>%s \n"
 "utilisando %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s não suporta ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Negociação ZRTP falhou com %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>Com:</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Volume dos auto-falantes"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "Volume do microfone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Apresentar janela principal"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "_Desligar"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "%i conta configurada"
-msgstr[1] "%i contas configuradas"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%i conta ativa"
+msgstr[1] "%i contas ativas"
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "Correio de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "Correio de voz (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone é um cliente VoIP compatível com os protocolos SIP e IAX2."
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "Sobre o SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "_Chamar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "_Nova ligação"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr ""
+msgstr "Faz uma nova chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Atender"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr ""
+msgstr "Responder a chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "_Desligar"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr ""
+msgstr "Terminar a chamada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "Em _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
-msgstr ""
+msgstr "Colocar a chamada em espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "_Gravar"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
+msgstr "Encerrar a chamada em espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Arquivo de Configuração"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Erro de configuração no stun"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d mensagem de voz"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
-msgstr ""
+msgstr "_Fechar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
-msgstr ""
+msgstr "Minimizar para a bandeja do sistema"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "_Editar"
+msgstr "_Sair"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
-msgstr ""
+msgstr "Sair do programa"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Editar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
-msgstr ""
+msgstr "_Copiar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "Remover a conta selecionada"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
-msgstr ""
+msgstr "_Colar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
-msgstr ""
+msgstr "Colar o conteúdo da Área de Transferência"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "Limpar _histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "Limpar histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "_Contas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "Conta atual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "Altera as suas preferências"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Exibir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Ajuda"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "Continuar"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
-msgstr ""
+msgstr "Abrir o manual"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "Autenticação"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "Transferir"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "Transfirir para: "
+msgstr "Transfirir para:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "_Gravar"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Gravar a conversação atual"
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
-msgstr ""
+msgstr "_Exibir barra de ferramentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
-msgstr ""
+msgstr "Mostra a barra de ferramentas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "Desabilitado"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "_Controle de Volumes"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "Exibir controles de volume"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "Histórico"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "Histórico de chamadas"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "Em _Espera"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "_Ligar de volta"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "Editar número de telefone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "Edite o número de telefone antes de fazer uma ligação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Parâmetros de conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Apelido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "_Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "_Nome do host"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "_Nome do usuário"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "_Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "_Senha da caixa postal de voz"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "Autenticação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr "Segredo"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Credencial"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Nome de autenticação"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Senha"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Segurança"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr "Use transporte TLS (sips)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr "Troca de chave SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Desabilitado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "Registro"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr "Registro expira"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr "_De acordo com RFC 3263"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "A rede está inacessível"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr "Endereço local"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr "Porta local"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr "Endereço publicado"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr "Utilizando STUN "
+msgstr "Utilizando STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr "URL do servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr "Igual aos parâmetros locais"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr "Indique endereço e portas publicadas"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr "Porta publicada"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "Configurações da conta"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Básico"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Rede"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+"Este perfil é utilizado quando você deseja alcançar um ponto remoto "
+"simplesmente digitando um URI sip como <b>sip:remotepeer</b>. As "
+"configurações que você definir aqui também serão utilizadas se nenhuma conta "
+"puder ser combinada a uma chamada de entrada ou de saída."
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
+#, c-format
 msgid "Server returned \"%s\" (%d)"
-msgstr "Servidor retornou \""
+msgstr "O Servidor retornou \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Estado"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "Contas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "Contas Configuradas"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
+#, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] " conta ativa"
-msgstr[1] " conta ativa"
+msgstr[0] "conta ativa"
+msgstr[1] "conta ativa"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr "Você não possui uma conta ativa"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Geral"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Use o catálogo de endereços do Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "Limite de download :"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "cartões"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Apresentar foto de contato caso disponível"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "Campos do catálogo de endereços do Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Trabalho"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Casa"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Celular"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Catálogos de endereços"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Selecione qual catálogo de endereços do Evolution deseja utilizar"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Nome"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Este assistente está finalizado."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
@@ -755,320 +796,325 @@ msgstr ""
 "Você pode a qualquer momento checar seu estado de registro ou modificar seus "
 "parâmetros de conta na janela Opções/Contas."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Apelido"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Servidor"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "Nome de usuário"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr "Segurança: "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP rascunho-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Nenhum"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "Assistente de criação de contas do SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "Bem vindo ao assistente de criação de contas do SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "Este assistente de instalação irá lhe ajudar a configurar uma conta."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "Protocolos VoIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "Selecione um tipo de conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "Conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "Por favor, selecione uma das seguintes opções"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "Criar uma conta gratuita SIP/IAX2 em sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "Registrar uma conta SIP ou IAX2 existente"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "Configurações de conta SIP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Por favor, preencha as informações a seguir"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Comunicações seguras com _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "Endereço de e-mail opcional"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr ""
 "Este endereço de email será utilizado para enviar as mensagens de voz em sua "
 "caixa postal."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_endereço de email"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "Configurações de conta IAX2"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr ""
 "Você provavelmente precise habilitar isto se estiver por trás de um firewall."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "Ha_bilitar STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_Servidor STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "Registro de conta"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Parabéns!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Frequência"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Taxa de bits"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "Largura de banda"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "Plugin ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "Saída"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "Entrada"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "_Detecção de atividade de voz"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Ringtones"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "_Redução de ruído (Utilização de banda-estreita)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Gerenciador de Som"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Configurações do ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Codecs"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Gravações"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "Pasta de destino"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "Selecione uma pasta"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "Ringtones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "_Habilitar ringtones"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "Escolha um ringtone"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "Arquivos de Áudio"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Configurações da conta"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Argumento da URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "Comandos padrões de ligações recebidas com URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s será substituído pela URL fornecida."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Gancho em um cabeçalho _SIP específico"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Gancho em uma URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "Comando a _executar"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "Reescrevendo número do telefone"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "_Prefixo de números discados com"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-"Este perfil é utilizado quando você deseja alcançar um ponto remoto "
-"simplesmente digitando um URI sip como <b>sip:remotepeer</b>. As "
-"configurações que você definir aqui também serão utilizadas se nenhuma conta "
-"puder ser combinada a uma chamada de entrada ou de saída."
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "Notificações de Desktop"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "_Habilitar notificações"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "Ícone da bandeja do sistema"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "_Popup na janela principal ao receber ligação"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "Nu_nca apresentar popup na janela principal"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "Esconder o SFLphone na _inicialização"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "Histórico de Chamadas"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr "_Manter meu histórico por pelo ao menos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "dias"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "Preferências"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr "Áudio"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Catálogo de endereços"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "Ganchos"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Ligações IP diretas"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr "Atalhos"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+"Tenha cuidado: estes atalhos podem predominar sobre atalhos definidos "
+"globalmente."
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr "Opções avançadas para o TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Transporte TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1083,143 +1129,125 @@ msgstr ""
 "funcionar em uma\n"
 "porta dedicada, uma diferente da outra\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr "Certificado da lista de Autoridades"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr "Escolha um arquivo de lista CA (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Arquivo certificado endpoint público"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr "Escolha um certificado endpoint público (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr "Escolha um arquivo de chave privada (opcional)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr "Senha para a chave privada"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Método do protocolo TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Lista de cifras TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr "Instância de nome do servidor para saída da conexão TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Tempo de negociação expirado (seg:mseg)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr "Verificar os certificados de entrada, como um servidor"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr "Verificar certificados de resposta, como um cliente"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Requer certificado para conexões tls entrantes"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr "Opções ZRTP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr "Enviar um Hash Olá no S_DP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr "Pergunta ao Usuário para Confirmar SAS"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr "_Alerta se o ZRTP não é suportado"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr "Apresenta o SAS uma vez para realizar eventos"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Opções do SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Buscar todos"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "Clique aqui para alterar o tipo de pesquisa"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "Buscar por ligações perdidas"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "Buscar por ligações recebidas"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "Buscar por ligações feitas"
 
-#~ msgid "IP call - %s"
-#~ msgstr "Ligação IP - %s"
-
-#~ msgid "Codec"
-#~ msgstr "Codec"
-
-#~ msgid "Network"
-#~ msgstr "Rede"
-
-#~ msgid "Manually"
-#~ msgstr "Manualmente"
-
-#~ msgid "There "
-#~ msgstr "Ali "
-
-#~ msgid "is "
-#~ msgstr "está "
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "_Detecção de atividade de voz"
 
-#~ msgid "are "
-#~ msgstr "estão "
-
-#~ msgid "s"
-#~ msgstr "s"
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "_Silenciar outras aplicações durante uma ligação"
-
-#~ msgid "SIP Port"
-#~ msgstr "Porta SIP"
-
-#~ msgid "UDP Transport"
-#~ msgstr "Transporte UDP"
-
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Habilitar _notificações de correio de voz"
-
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr "Armazenar as credenciais SIP como hash MD5"
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "_Redução de ruído (Utilização de banda-estreita)"
 
 #~ msgid "Stun Server"
 #~ msgstr "Servidor STUN"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "(C) 2009 Savoir-faire Linux"
 #~ msgstr "(C) 2009 Savoir-faire Linux"
 
@@ -1247,9 +1275,6 @@ msgstr "Buscar por ligações feitas"
 #~ msgid "Apply"
 #~ msgstr "Aplicar"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "Add"
 #~ msgstr "Adicionar"
 
@@ -1274,6 +1299,9 @@ msgstr "Buscar por ligações feitas"
 #~ msgid "Enable notifications"
 #~ msgstr "Habilitar notificações"
 
+#~ msgid "SIP Port"
+#~ msgstr "Porta SIP"
+
 #~ msgid "NAT Traversal"
 #~ msgstr "NAT Traversal"
 
@@ -1458,6 +1486,20 @@ msgstr "Buscar por ligações feitas"
 #~ msgid "Prefix dialed numbers with"
 #~ msgstr "Números discado com o prefixo"
 
+#~ msgid "IP call - %s"
+#~ msgstr "Ligação IP - %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Erro: Não foram encontrados codecs de áudio.\n"
+#~ "\n"
+#~ "</b> Os codecs de áudio do SFL tem de ser movidos para o diretório <i>%s</"
+#~ "i> ou para o diretório <b>.sflphone</b> em seu home( <i>%s</i> )"
+
 #~ msgid "_Account creation wizard"
 #~ msgstr "_Assistante de criação de conta"
 
@@ -1482,19 +1524,58 @@ msgstr "Buscar por ligações feitas"
 #~ "Pressionando \"aplicar\" a camada de rede será reiniciada. De outra forma "
 #~ "o SFKPhone teria que ser reiniciado."
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "Habilitar _notificações de correio de voz"
+
 #~ msgid "PulseAudio sound server"
 #~ msgstr "Servidor de som PulseAudio"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "_Silenciar outras aplicações durante uma ligação"
+
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "%i conta configurada"
+#~ msgstr[1] "%i contas configuradas"
+
+#~ msgid "Manually"
+#~ msgstr "Manualmente"
+
+#~ msgid "There "
+#~ msgstr "Ali "
+
+#~ msgid "are "
+#~ msgstr "estão "
+
+#~ msgid "is "
+#~ msgstr "está "
+
+#~ msgid "s"
+#~ msgstr "s"
+
+#~ msgid "UDP Transport"
+#~ msgstr "Transporte UDP"
+
+#~ msgid "Store SIP credentials as MD5 hash"
+#~ msgstr "Armazenar as credenciais SIP como hash MD5"
+
+#~ msgid "Direct IP calls"
+#~ msgstr "Ligações IP diretas"
+
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
 #~ ",Launchpad Contributions:,Maxime Chambreuil,kalib, ,Launchpad "
 #~ "Contributions:,Maxime Chambreuil,kalib, ,Launchpad Contributions:,Maxime "
-#~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib"
+#~ "Chambreuil,kalib, ,Launchpad Contributions:,Maxime Chambreuil,kalib, ,"
+#~ "Launchpad Contributions:,André Gondim,Gustavo Guidorizzi,Maxime "
+#~ "Chambreuil,Ricardo Martins,Thaynã Moretti,kalib"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ ",,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,maxime."
 #~ "chambreuil@gmail.com,kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,"
-#~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com"
+#~ "kalibslack@gmail.com,,,maxime.chambreuil@gmail.com,kalibslack@gmail.com,,,"
+#~ "andregondim@ubuntu.com,,maxime.chambreuil@gmail.com,ricardo.macedo@yahoo."
+#~ "com.br,,kalibslack@gmail.com"
diff --git a/sflphone-client-gnome/po/ru/ru.po b/sflphone-client-gnome/po/ru/ru.po
index 14b3aa5dd8b52a0d5e0d4baafc1ee6278b5fe18f..ddb79013273d8850c7265b9bb4f3169a6fc0c2b4 100644
--- a/sflphone-client-gnome/po/ru/ru.po
+++ b/sflphone-client-gnome/po/ru/ru.po
@@ -7,114 +7,122 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.6\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-12-08 20:46+0000\n"
-"Last-Translator: Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-05-11 07:48+0000\n"
+"Last-Translator: DMG <Unknown>\n"
 "Language-Team: Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: \n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "Зарегистрирован"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "Не зарегистрирован"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
-msgstr "Подключение..."
+msgstr "Пытаюсь..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "Ошибка"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "Аутентификация не удалась"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "Сеть недоступна"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
-msgstr "Узел сети недоступен"
+msgstr "Узел недоступен"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Ошибка конфигурации Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Неверный сервер Stun"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr "Готово"
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
-msgstr "Ошибка"
+msgstr "Неверный"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
-msgstr "Используется учетная запись"
+msgstr "Использовать аккаунт"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
-msgstr "Нет зарегистрированных учëтных записей"
+msgstr "У вас нет зарегистрированных аккаунтов"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
 msgstr ""
 "Невозможно подключиться к SFLphone-серверу.\n"
-"Проверьте если демон работает."
+"Убедитесь что он работает."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr "Прямые IP-звонки"
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
-msgstr ""
-"<b>Ошибка: звуковые кодеки не найдены.\n"
-"\n"
-"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</"
-"b> каталоге в вашем домашнем каталоге( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr "сегодня в %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr "вчера в %R"
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr "%A в %R"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
+msgstr "%x в %R"
+
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening playback device"
 msgstr ""
-"<b>ALSA-nпредупреждение</b>\n"
+"<b>Предупреждение ALSA</b>\n"
 "\n"
-"Ошибка во время активирования устройства проигрывания"
+"Ошибка при попытке открытия устройства воспроизведения звука"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
 "Error while opening capture device"
 msgstr ""
-"<b>ALSA-nпредупреждение</b>\n"
+"<b>Предупреждение ALSA</b>\n"
 "\n"
-"Ошибка во время активирования устройства входа"
+"Ошибка при попытке открытия устройства захвата звука"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -122,86 +130,87 @@ msgid ""
 msgstr ""
 "<b>Предупреждение Pulseaudio</b>\n"
 "\n"
-"Pulseaudio не работает"
+"Pulseaudio не запущен"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
-msgstr "Один текущий разговор."
+msgstr "Звонок ещё не окончен."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
-msgstr "Несколько текущих разговоров."
+msgstr "Несколько звонков ещё не окончены."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "Вы уверенны что хотите выйти?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "Ошибка SFLphone."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr "ZRTP не поддерживается устройством %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
-msgstr "Зашифрованная связь недоступна"
+msgstr "Зашифрованная связь недоступна."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "Продолжить"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
-msgstr "Закончить звонок"
+msgstr "Завершить вызов"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
-"Из-за ошибки %s переговор с %s перейдëт в не зашифрованный режим.\n"
+"Из-за возникновения ошибки %s разговор с %s перейдëт в не зашифрованный "
+"режим.\n"
 "Точная причина: %s\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr "Неудачный обмен информации ZRTP"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
-"%s хочет остановить зашифрованную связь. В случае подтверждения переговор "
-"продолжится без SRTP.\n"
+"%s хочет отказаться от использования зашифрованной связи. В случае "
+"подтверждения разговор продолжится без SRTP.\n"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr "Подтвердить переход на незашифрованную связь"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "Подтвердить"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s аккаунт: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>От:</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
@@ -209,866 +218,906 @@ msgstr[0] "%d голосовое письмо"
 msgstr[1] "%d голосовые письма"
 msgstr[2] "%d голосовые письма"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
-msgstr "Звонок с учëтной записью %s <i>%s</i>"
+msgstr "Вызов %s с помощью аккаунта <i>%s</i>"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
-msgstr "Нынешняя учëтная запись"
+msgstr "Текущий аккаунт"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
-msgstr "Вы не настроили ни одной учëтной записи"
+msgstr "У вас нет настроенных аккаунтов"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
-msgstr "У вас нет зарегистрированных учëтных записей"
+msgstr "У вас нет зарегистрированных аккаунтов"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
-"<i>с</i> %s\n"
+"<i>с:</i> %s\n"
 "используя %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s не поддерживает ZRTP."
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr "Обмен информации ZRTP не удался (%s)"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr "<i>с</i> %s"
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "Громкость"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
-msgstr "Громкость микрофона"
+msgstr "Чувствительность микрофона"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "_Показать главное окно"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "_Положить трубку"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "Настроена одна учëтная запись"
-msgstr[1] "Настроены %i учëтные записи"
-msgstr[2] "Настроены %i учëтные записи"
-
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] "%i активный аккаунт"
+msgstr[1] "%i активных аккаунтов"
+msgstr[2] "%i active accounts"
+
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
-msgstr "Автоответчик"
+msgstr "Голосовая почта"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
-msgstr "Нет выбранных адресных книг"
+msgstr "Адресная книга не выбрана"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
-msgstr "Автоответчик (%i)"
+msgstr "Голосовая почта (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент"
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
-msgstr "О SFLphone"
+msgstr "О программе SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
-msgstr "_Звонок"
+msgstr "_Вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
-msgstr "_Новый звонок"
+msgstr "_Новый вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
-msgstr "Позвонить"
+msgstr "Сделать новый вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "_Взять трубку"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
-msgstr "Ответить"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "_Положить трубку"
+msgstr "Ответить на вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
-msgstr "Закончить звонок"
+msgstr "Завершить вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
-msgstr "_Удержать звонок"
+msgstr "_Удерживать вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
-msgstr "Удержать звонок"
+msgstr "Поставить вызов на удержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
-msgstr "_Возобновить разговор"
+msgstr "_Снять вызов с удержания"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
-msgstr "Возобновить разговор"
+msgstr "Поставить вызов на удержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "Записать"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr "Записать переговор"
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr "Мастер настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Запустить мастер настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
-msgstr "%d голосовое письмо"
+msgstr "Прослушивание голосовой почты"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr "_Закрыть"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
-msgstr "Уменьшить в значок"
+msgstr "Свернуть в трей"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "_Правка"
+msgstr "В_ыход"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr "Выйти из программы"
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "_Правка"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr "_Копировать"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
-msgstr "Копировать видимое"
+msgstr "Копировать выделенное"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
-msgstr "_Вставить"
+msgstr "В_ставить"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr "Вставить из буфера обмена"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
-msgstr "_Стереть журнал"
+msgstr "Очистить журнал"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
-msgstr "Очистить историю"
+msgstr "Очистить журнал вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
-msgstr "_Учëтные записи"
+msgstr "_Аккаунты"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
-msgstr "Изменить ваши учëтные записи"
+msgstr "Нстройка аккаунта"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
-msgstr "_Предпочтения"
+msgstr "_Настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr "Изменить ваши предпочтении"
+msgstr "Изменить ваши настройки"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "_Вид"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "_Помощь"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
-msgstr "Продолжить"
+msgstr "Содержание"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
-msgstr "Открыть справочник "
+msgstr "Открыть руководство пользователя"
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
-msgstr "Идентификация"
+msgstr "О программе"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
-msgstr "Переслать звонок на другой номер"
+msgstr "Переадресация вызова"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "Переслать звонок на другой номер"
+msgstr "Переадресовать вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "_Запись"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr "Записать текущий разговор"
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
-msgstr "Показать панель инструментов"
+msgstr "Показать _панель инструментов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
-msgstr "Показать панель инструментов"
+msgstr "Показывать панель инструментов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
-msgstr "Панель набора номера"
+msgstr "_Номеронабиратель"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
-msgstr "Показать панель набора номера"
+msgstr "Показывать _номеронабиратель"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
-msgstr "_Настройки громкости"
+msgstr "Настройки _громкости"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
-msgstr "_Настройки громкости"
+msgstr "Показывать настройки _громкости"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
-msgstr "Журнал"
+msgstr "Журнал вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
-msgstr "Журнал звонков"
+msgstr "История вызовов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
-msgstr "_Удержать звонок"
+msgstr "_Удерживать звонок"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
-msgstr "_Перезвонить"
+msgstr "Обратный вызов"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
-msgstr "Мобильный телефон"
+msgstr "Изменить номер телефона"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
-msgstr "Изменить номер телефона перед звонком"
+msgstr "Изменить номер телефона перед вызовом"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "Параметры учетной записи"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "_Псевдоним"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "Пр_отокол"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "Неизвестный"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "Имя или IP-адрес _сервера"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
-msgstr "Имя или _номер пользователя"
+msgstr "Имя пользователя"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "Па_роль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "Показать пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
-msgstr "Номер _автоответчика #"
+msgstr "Номер _голосовой почты"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr "_Агент-пользователя"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
-msgstr "Идентификация"
+msgstr "Аутентификация"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
-msgstr "Секретный"
+msgstr "Пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr "Параметры доступа"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr "Имя для аутентификации"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "Пароль"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "Безопасность"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
-msgstr "Использовать TLS-транспорт (sips)"
+msgstr "Использовать протокол TLS"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
-msgstr "Обмена ключей SRTP"
+msgstr "Обмен ключами SRTP"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "Отключен"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "Регистрация"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
-msgstr "Срок истечения регистрации"
+msgstr "Истек срок регистрации"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr "_Соотвествует RFC 3263"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
-msgstr "Сетевые настройки"
+msgstr "Сетевой интерфейс"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr "Локальный адрес"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr "Локальный порт"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
-msgstr "Сетевые настройки для Интернета"
+msgstr "Публичный адрес"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
-msgstr "Использует STUN "
+msgstr "Использовать STUN"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr "URL STUN-сервера"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr "Использовать локальный адрес и порт"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
-msgstr "Настроить видимый адрес и порт :"
+msgstr "Настроить публичный адрес и порт:"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr "Публичный порт"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Кодеки"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr "DTMF"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr "RTP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
-msgstr "Настройки учëтной записи"
+msgstr "Настройки аккаунта"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr "Основные"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
-msgstr "Дополнительные"
+msgstr "Дополнительно"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "Сеть"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+"Эти настройки используется, когда вы хотите совершить вызов просто набрав "
+"SIP URI-адрес вида <b>sip:удалëнное устройство</b>. Эти настройки так-же "
+"будут использованы если не будет подходящего аккаунта для входящего или "
+"исходящего вызова."
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
+#, c-format
 msgid "Server returned \"%s\" (%d)"
-msgstr "Сервер ответил \""
+msgstr "Ответ сервера \"%s\" (%d)"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "Протокол"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "Статус"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
-msgstr "Учётные записи"
+msgstr "Аккаунты"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
-msgstr "Настроенные учëтные записи"
+msgstr "Настройка аккаунтов"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
+#, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
-msgstr[0] "Одна действующая учëтная запись"
-msgstr[1] "%d действующих учëтных записей"
-msgstr[2] "%d действующих учëтных записей"
+msgstr[0] "%d активный аккаунт"
+msgstr[1] "%d активных аккаунтов"
+msgstr[2] "действующий аккаунт"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
-msgstr "У вас нет активной учëтной записи"
+msgstr "У вас нет активного аккаунта"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "Общие настройки"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "_Использовать адресную книгу Evolution"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
-msgstr "Показывать не более "
+msgstr "Ограничение скорости скачивания:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "карточек"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "_Показать фотографию контакта (если имеется):"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
-msgstr "Исполоьзовать следующие номера из адресной книги Evolution"
+msgstr "Использовать следующие поля из адресной книги Evolution:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "_Рабочий"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "_Домашний"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "_Мобильный"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "Выбрать адресную книгу Evolution:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "Имя"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "Мастер закончил настройку."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr ""
 "Вы можете в любое время проверить статус регистрации или изменить параметры  "
-"ваших учëтных записей в меню Правка / Учëтные записи"
+"ваших аккаунтов в меню Правка / Аккаунты."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "Псевдоним"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "Сервер"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
-msgstr "Пользователь"
+msgstr "Имя пользователя"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
-msgstr "Безопасность:"
+msgstr "Безопасность "
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr "SRTP/ZRTP draft-zimmermann"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr "Нет"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
-msgstr "Мастер настройки SFLphone"
+msgstr "Мастер создания аккаунта SFLphone"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
-msgstr "Добро пожаловать в SFLphone!"
+msgstr "Добро пожаловать в мастер создания аккаунта SFLphone!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
-msgstr "Этот мастер установки поможет вам настроить вашу учëтную запись"
+msgstr "Этот мастер установки поможет вам настроить ваш аккаунт."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP-протоколы"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
-msgstr "Выберите тип учëтной записи"
+msgstr "Выберите тип аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP (Session Initiation Protocol)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2 (InterAsterix Exchange)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
-msgstr "Учëтная запись"
+msgstr "Аккаунт"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
-msgstr "Введите пожалуйста следующие данные"
+msgstr "Выберите одну из следующих возможностей"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
-msgstr "Создать бесплатную SIP/IAX2-учëтную запись на sflphone.org"
+msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
-msgstr "Зарегистрировать существующею SIP или IAX2 учëтную запись"
+msgstr "Использовать существующий SIP или IAX2 аккаунт"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
-msgstr "Настройка учëтной записи SIP"
+msgstr "Настройка SIP-аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "Введите пожалуйста следующие данные"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr "Защищëнная связь с _ZRTP"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
-msgstr "Электронный адрес (необязательный)"
+msgstr "e-mail"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
-msgstr "Этот электронный адрес будет использоваться для речевых сообщений"
+msgstr ""
+"Этот электронный адрес будет использоваться для отправки сообщений голосовой "
+"почты"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "_Адрес эл. почты"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
-msgstr "Настройка учëтной записи IAX2"
+msgstr "Настройка IAX2-аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "Network Address Translation (NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
-msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном."
+msgstr ""
+"Возможно нужно выбрать эту опцию если вы находитесь за сетевым экраном."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "Включить STUN"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "_STUN-сервер"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
-msgstr "Регистрация учëтной записи"
+msgstr "Регистрация аккаунта"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "Поздравляем!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "Частота"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "Битрейт"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
-msgstr "Пропускная способность"
+msgstr "Полоса пропускания"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA-плагин"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
-msgstr "Выход"
+msgstr "Аудиовыход"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
-msgstr "Вход"
+msgstr "Аудиовход"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "Включить детектор тишины"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "Рингтоны"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "Шумоподавление"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+msgid "_Noise Reduction"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "Менеджер звука"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "_Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "_ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "Настройка ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Кодеки"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "Записи"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
-msgstr "Папка назначения"
+msgstr "Сохранять в"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
-msgstr "Выберите папку"
+msgstr "Выберите каталог"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
-msgstr "Звонки"
+msgstr "Рингтоны"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
-msgstr "Включить звонок"
+msgstr "Включить рингтон"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
-msgstr "Выберите звонок"
+msgstr "Выберать рингтон"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
-msgstr "Звуковые файлы"
+msgstr "Аудио файлы"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "Настройки аккаунта"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "Передача URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
-msgstr "Пользовательские команды при входящих вызовах с URL"
+msgstr "Пользовательская команда при входящих вызовах с URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "%s будет заменена на переданную URL"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "Запустить при определëнном SIP-заголовке"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "Запустить при наличии URL _IAX2"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "_Выполнить команду:"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
-msgstr "Переписка номера телефона"
+msgstr "Префикс"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
-msgstr "Добавить перед на набранными номерами"
+msgstr "Добавить префикс перед номером"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-"Этот профиль используется когда вы хотите достичь удалëнное устройство "
-"просто набрав SIP URI (адрес) типа <b>sip:удалëнное устройство</b>. Эти "
-"настройки так-же будут использованы если не будет подходящего аккаунта для "
-"входящего или выходящего звонка."
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
-msgstr "Извещения на рабочем столе"
+msgstr "Всплывающие уведомления"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
-msgstr "Включить звонок"
+msgstr "Показывать всплывающие уведомления"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
-msgstr "Поведение окна SFLPhone"
+msgstr "Значок в системном трее"
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr "Показывать SFLphone в системном трее"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
-msgstr "_Показать главное окно при входящем звонке"
+msgstr "_Показать главное окно при входящем вызове"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
-msgstr "Никогда не показывать главное окно"
+msgstr "_Никогда не показывать главное окно"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
-msgstr "Спрятать окно SFLphone при пуске"
+msgstr "Скрывать SFLphone при запуске в трей"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
-msgstr "Журнал звонков"
+msgstr "Журнал вызовов"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
-msgstr "Со_хранить мой журнал звонков как минимум в течении"
+msgstr "_Хранить журнал вызовов в течении"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr "дней"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
-msgstr "Предпочтения"
+msgstr "Настройка"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
-msgstr "Звук"
+msgstr "Аудио"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "Адресная книга"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
-msgstr "Зацепки"
+msgstr "Прочее"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
-msgstr "Прямые IP-звонки"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr "Горячие клавиши"
+
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr "ВНИМАНИЕ: эти комбинации могут заменить системные комбинации клавиш"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
-msgstr "Дополнительные опции для TLS"
+msgstr "Дополнительные настройки для TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr "Транспорт TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1081,139 +1130,118 @@ msgstr ""
 "каждого аккаунта (но каждый из них будет использовать свой выделенный "
 "порт).\n"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr "Global TLS listener (для всех аккаунтов)"
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
-msgstr "Список центра сертификации"
+msgstr "Список центров сертификации"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
-msgstr "Выберите файл Центра сертификации (необязательный)"
+msgstr "Выберите файл Центра сертификации (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr "Файл с публичным сертификатом"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
-msgstr "Выберите публичный сертификат (необязательный)"
+msgstr "Выберите публичный сертификат (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
-msgstr "Выберите файл с секретным ключом (необязательно)"
+msgstr "Выберите файл с приватным ключом (необязательно)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
-msgstr "Пароль для секретного ключа"
+msgstr "Пароль для приватного ключа"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr "Метод протокола TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr "Список шифров TLS"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
-msgstr "Имя сервера для выходящих TLS-подключений."
+msgstr "Имя сервера для исходящих TLS-подключений"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr "Время ожидания соединения (сек:мсек)"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
-msgstr "Проверять входящие сертификаты (в качестве сервера)"
+msgstr "Проверять входящие сертификаты как сервер"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
-msgstr "Проверять входящие сертификаты (в качестве клиента)"
+msgstr "Проверять входящие сертификаты как клиент"
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr "Требовать сертификат для входящих TLS-подключений"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr "Опции ZRTP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr "Послать hello-хэш в S_DP"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr "Попросить пользователя подтвердить пароль SAS"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr "_Предупредить если ZRTP не пддерживается"
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr "Показать SAS один раз"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr "Настройка SDES"
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr "Использовать RTP при сбое SDES"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "Искать все"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
-msgstr "Нажмите, чтобы изменить тип поиска"
+msgstr "Нажмите сюда, чтобы изменить тип поиска"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
-msgstr "Поиск по пропущенным вызовам"
+msgstr "Поиск в пропущенных вызовах"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
-msgstr "Поиск по входящим вызовам"
+msgstr "Поиск в входящих вызовах"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
-msgstr "Поиск по исходящим вызовам"
-
-#~ msgid "IP call - %s"
-#~ msgstr "IP звонок  - %s"
-
-#~ msgid "Codec"
-#~ msgstr "Codec"
-
-#~ msgid "Network"
-#~ msgstr "Сеть"
-
-#~ msgid "Manually"
-#~ msgstr "Вручную"
+msgstr "Поиск в исходящих вызовах"
 
-#~ msgid "There "
-#~ msgstr "Здесь "
-
-#~ msgid "is "
-#~ msgstr "Зарегестрирован "
-
-#~ msgid "are "
-#~ msgstr "Зарегестрированны "
-
-#~ msgid "s"
-#~ msgstr "a"
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "Детектор тишины (VAD)"
 
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "Приглушать звук других програм во время звонка"
-
-#~ msgid "SIP Port"
-#~ msgstr "SIP-порт"
-
-#~ msgid "UDP Transport"
-#~ msgstr "Транспорт UDP"
-
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "Включить предупреждения о речевых сообщениях"
-
-#~ msgid "Store SIP credentials as MD5 hash"
-#~ msgstr "Записать параметры доступа SIP с шифровкой MD5."
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "Шумоподавление"
 
 #~ msgid "Account creation wizard"
 #~ msgstr "Мастер настройки SFLphone"
@@ -1221,6 +1249,9 @@ msgstr "Поиск по исходящим вызовам"
 #~ msgid "Voicemail number"
 #~ msgstr "Номер автоответчика #"
 
+#~ msgid "Codec"
+#~ msgstr "Codec"
+
 #~ msgid "Display volume controls"
 #~ msgstr "_Настройки громкости"
 
@@ -1266,21 +1297,44 @@ msgstr "Поиск по исходящим вызовам"
 #~ msgid "Sound manager"
 #~ msgstr "Менеджер звука"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP-порт"
+
 #~ msgid "Command to run"
 #~ msgstr "Выполнить команду:"
 
 #~ msgid "Prefix dialed numbers with"
 #~ msgstr "Добавить перед на набранными номерами"
 
+#~ msgid "IP call - %s"
+#~ msgstr "IP звонок  - %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>Ошибка: звуковые кодеки не найдены.\n"
+#~ "\n"
+#~ "</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>."
+#~ "sflphone</b> каталоге в вашем домашнем каталоге( <i>%s</i> )"
+
 #~ msgid "_Account creation wizard"
 #~ msgstr "Мастер настройки SFLphone"
 
 #~ msgid "_Enable this account"
 #~ msgstr "_Включить"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "Включить предупреждения о речевых сообщениях"
+
 #~ msgid "PulseAudio sound server"
 #~ msgstr "Сервер звука PulseAudio"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "Приглушать звук других програм во время звонка"
+
 #~ msgid "Port"
 #~ msgstr "Порт"
 
@@ -1444,9 +1498,6 @@ msgstr "Поиск по исходящим вызовам"
 #~ msgid "IAX"
 #~ msgstr "IAX"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "PulseAudio"
 #~ msgstr "PulseAudio"
 
@@ -1456,6 +1507,27 @@ msgstr "Поиск по исходящим вызовам"
 #~ msgid "Enable notifications"
 #~ msgstr "Включить уведомления"
 
+#~ msgid "Manually"
+#~ msgstr "Вручную"
+
+#~ msgid "UDP Transport"
+#~ msgstr "Транспорт UDP"
+
+#~ msgid "There "
+#~ msgstr "Здесь "
+
+#~ msgid "Store SIP credentials as MD5 hash"
+#~ msgstr "Записать параметры доступа SIP с шифровкой MD5."
+
+#~ msgid "s"
+#~ msgstr "a"
+
+#~ msgid "are "
+#~ msgstr "Зарегестрированны "
+
+#~ msgid "is "
+#~ msgstr "Зарегестрирован "
+
 #~ msgctxt "NAME OF TRANSLATORS"
 #~ msgid "Your names"
 #~ msgstr ""
@@ -1464,11 +1536,14 @@ msgstr "Поиск по исходящим вызовам"
 #~ "Sergei Sedov, ,Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,"
 #~ "Hussein Abdallah,Maxime Chambreuil,Pavlo Kucheriavyi,Sergei Sedov, ,"
 #~ "Launchpad Contributions:,Emmanuel Milou,Hussein Abdallah,Hussein Abdallah,"
-#~ "Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov"
+#~ "Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov, ,Launchpad "
+#~ "Contributions:,DMG,Emmanuel Milou,Hussein Abdallah,Hussein Abdallah,"
+#~ "Lortonix,Maxime Chambreuil,Pavlo Kucheriavyi,Sergey Sedov"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ ",,,,,emmanuel.milou@savoirfairelinux.com,,maxime.chambreuil@gmail.com,,,,,"
 #~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,,"
-#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,"
+#~ "emmanuel.milou@savoirfairelinux.com,,,maxime.chambreuil@gmail.com,,,,,,"
+#~ "emmanuel.milou@savoirfairelinux.com,,,,maxime.chambreuil@gmail.com,,"
diff --git a/sflphone-client-gnome/po/zh_CN/zh_CN.po b/sflphone-client-gnome/po/zh_CN/zh_CN.po
index bfc3429d51dec35ea9728985f2d0967e8ad86bd1..d2df50e47aeea11bd0d72b693039d1efb8078619 100644
--- a/sflphone-client-gnome/po/zh_CN/zh_CN.po
+++ b/sflphone-client-gnome/po/zh_CN/zh_CN.po
@@ -8,68 +8,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-26 20:46+0000\n"
-"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2010-02-28 01:32+0000\n"
+"Last-Translator: YunQiang Su <wzssyqa@gmail.com>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "已注册"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "未注册"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "正在连接..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "注册失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr "认证失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "网络连接失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "服务器连接失败"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun配置有误"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Stun服务器无效"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "无效"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "使用账户"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "没有已注册帐户"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -77,25 +81,28 @@ msgstr ""
 "连接SFLphone服务器失败.\n"
 "请检查daemon是否还在运行."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
 msgstr ""
-"<b>错误:无法找到codecs编码文件.\n"
-"\n"
-"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>."
-"sflphone</b>目录下"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -105,7 +112,7 @@ msgstr ""
 "\n"
 "打开回放设备时出错"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -115,7 +122,7 @@ msgstr ""
 "\n"
 "打开采集设备时出错"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -125,935 +132,973 @@ msgstr ""
 "\n"
 "Pulseaudio未运行"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "有一个电话正在处理"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "有电话正在处理中"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "确认要退出?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone出错"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr "安全通信不可用"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr "继续"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr "停止呼叫"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr "确认"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s 帐户: %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>拨入方</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d 个语音信息"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "使用%s帐户<i>%s</i>呼叫"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "当前帐户"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "你没有设置任何账户"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "未发现已注册帐户"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr "%s 不支持 ZRTP。"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "扬声器音量"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "话筒音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "显示主窗口(S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "挂断(_H)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "已配置了%i个账户"
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] ""
+msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "语音信箱"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "语音信箱 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议."
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "关于SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "电话(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "新电话(_N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "接听(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "挂断(_H)"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "保持(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "恢复通话"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "录音(_R)"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun配置有误"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d 个语音信息"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
-msgstr "编辑(_E)"
+msgstr "退出(_Q)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "编辑(_E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "删除所选账户"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "清空历史记录(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "清空历史记录"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "账户(_A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "当前帐户"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
-msgstr "首选项"
+msgstr "首选项(_P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
-msgstr ""
+msgstr "更改您的首选项"
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "查看(_V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "帮助(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr "继续"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr "身份验证"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "转接"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "转给: "
+msgstr "转给:"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "录音(_R)"
+
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "禁用"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "历史"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "呼叫记录"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "保持(_H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "回叫(_C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "编辑电话号码"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "拨出电话前编辑电话号码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "帐户相关参数"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "别名(A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "协议(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "未知"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "主机名(H)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "用户名(U)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "密码(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "密码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "语音信箱号码(V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr "身份验证"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "密码"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr "安全"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr "禁用"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr "注册"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "网络连接失败"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "Codecs编码"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "帐户设置"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr "网络"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "协议"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "状态"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "帐户"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "已配置帐户"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
+msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "常用配置"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "使用Evolution地址薄(U)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "下载上限:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "卡"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "如果可行则显示联系人照片(D)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "使用Evolution地址薄中的如下字段:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "单位电话(W)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "家庭电话(H)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "移动电话(M)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "选择使用如下Evolution地址薄"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "名称"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "配置完成."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "别名"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "服务器"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "用户名"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone账户创建向导"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "欢迎使用SFLphone帐户创建向导!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "安装向导将帮助您配置帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP协议"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "选择帐户类型"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(会话初始化协议)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(Asterisk内部交换协议)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "请选择以下选项中的一个"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "在sflphone.org上创建免费的SIP/IAX2帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "注册已存在的SIP或IAX2帐户"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIP帐户设置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "请填写以下信息"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "可选邮件地址"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "这个邮件地址将被用来发送您的语音邮箱消息"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "邮件地址(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2帐户设置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "网络地址解析(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "使用STUN(n)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "STUN服务器(S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "帐户注册"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "恭喜!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "频率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "比率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "带宽"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA插件"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "输出"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "输入"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "声音状态检测(V)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "铃声"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "降噪处理-窄频压缩(N)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+#, fuzzy
+msgid "_Noise Reduction"
+msgstr "降噪"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "音频管理器"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA设置"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "Codecs编码"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "记录"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "目标文件夹"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "选择文件夹"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "铃声"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "启用铃声(E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "选择铃声"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "音频文件"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "帐户设置"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL参数"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "定制对带有URL的来电的处理"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "传输的URL会被替换成%s."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "激活指定的SIP头(S)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "激活IAX2 URL(I)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "运行命令(r)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "重设电话号码"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "号码前缀(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "桌面提示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "启用提示(E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "系统托盘图标"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "来电时弹出主窗口(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "从不弹出主窗口(v)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "在启动时隐藏SFLphone主窗口"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "拨号历史"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "首选项"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "钩键"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1062,118 +1107,118 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "查询所有"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "请点击此处改变查询方式"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "从未接电话中查询"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "从来电中查询"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "从拨出电话中查询"
 
-#~ msgid "IP call - %s"
-#~ msgstr "IP 电话 - %s"
-
-#~ msgid "Codec"
-#~ msgstr "编码"
-
-#~ msgid "Network"
-#~ msgstr "网络"
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "当有来电时静音其它应用程序(c)"
-
-#~ msgid "SIP Port"
-#~ msgstr "SIP端口号"
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "声音状态检测(V)"
 
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "启用语音邮箱提示(n)"
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "降噪处理-窄频压缩(N)"
 
 #~ msgid "Account creation wizard"
 #~ msgstr "帐户创建向导"
@@ -1195,6 +1240,9 @@ msgstr "从拨出电话中查询"
 #~ msgid "Default account"
 #~ msgstr "默认帐户"
 
+#~ msgid "Codec"
+#~ msgstr "编码"
+
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone KDE客户端"
 
@@ -1312,9 +1360,6 @@ msgstr "从拨出电话中查询"
 #~ msgid "Apply"
 #~ msgstr "应用"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "IAX"
 #~ msgstr "IAX"
 
@@ -1381,6 +1426,9 @@ msgstr "从拨出电话中查询"
 #~ msgid "On start"
 #~ msgstr "正在启动"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP端口号"
+
 #~ msgid "Trigger on specific SIP header"
 #~ msgstr "激活指定的SIP头"
 
@@ -1396,12 +1444,36 @@ msgstr "从拨出电话中查询"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "注意:结果超过可显示的最大值"
 
+#~ msgid "IP call - %s"
+#~ msgstr "IP 电话 - %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>错误:无法找到codecs编码文件.\n"
+#~ "\n"
+#~ "</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>."
+#~ "sflphone</b>目录下"
+
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "已配置了%i个账户"
+
 #~ msgid "_Enable this account"
 #~ msgstr "启用该账户(E)"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "启用语音邮箱提示(n)"
+
 #~ msgid "PulseAudio sound server"
 #~ msgstr "PulseAudio服务器"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "当有来电时静音其它应用程序(c)"
+
 #~ msgid "Port"
 #~ msgstr "端口"
 
@@ -1678,9 +1750,6 @@ msgstr "从拨出电话中查询"
 #~ msgid "%s account- %s"
 #~ msgstr "%s 帐户- %s"
 
-#~ msgid "Noise reduction"
-#~ msgstr "降噪"
-
 #~ msgid "_Destination folder"
 #~ msgstr "目标文件夹(D)"
 
@@ -1702,7 +1771,8 @@ msgstr "从拨出电话中查询"
 #~ "Yun Liu, ,Launchpad Contributions:,Aron Xu,Yun Liu, ,Launchpad "
 #~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,rainofchaos, ,Launchpad "
 #~ "Contributions:,Aron Xu,Yinghua Wang,Yun Liu,冯超, ,Launchpad "
-#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,冯超,王英华"
+#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,冯超,王英华, ,Launchpad "
+#~ "Contributions:,Aron Xu,Emmanuel Milou,Yun Liu,YunQiang Su,冯超,英华"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
@@ -1710,4 +1780,5 @@ msgstr "从拨出电话中查询"
 #~ "yunliu2000@gmail.com,,,happyaron.xu@gmail.com,,,,happyaron.xu@gmail.com,,,"
 #~ "rainofchaos@gmail.com,,,happyaron.xu@gmail.com,,,rainofchaos@gmail.com,,,,"
 #~ "emmanuel.milou@savoirfairelinux.com,,rainofchaos@gmail.com,"
-#~ "wantinghard@gmail.com"
+#~ "wantinghard@gmail.com,,,,emmanuel.milou@savoirfairelinux.com,,"
+#~ "wzssyqa@gmail.com,rainofchaos@gmail.com,wantinghard@gmail.com"
diff --git a/sflphone-client-gnome/po/zh_HK/zh_HK.po b/sflphone-client-gnome/po/zh_HK/zh_HK.po
index 0e4afca0c52ab6cb04c97d2e67f3c4fd39c9c273..ef06d0715a2e23900d35abddfeb11b9638e6740d 100644
--- a/sflphone-client-gnome/po/zh_HK/zh_HK.po
+++ b/sflphone-client-gnome/po/zh_HK/zh_HK.po
@@ -8,68 +8,72 @@ msgid ""
 msgstr ""
 "Project-Id-Version: SFLphone 0.9.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-03 10:22-0500\n"
-"PO-Revision-Date: 2009-10-26 20:46+0000\n"
+"POT-Creation-Date: 2010-06-17 14:22-0400\n"
+"PO-Revision-Date: 2009-12-03 18:09+0000\n"
 "Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
 "Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Launchpad-Export-Date: 2009-12-03 15:32+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 18:12+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
-#: ../sflphone-client-gnome/src/accountlist.c:175
+#: ../sflphone-client-gnome/src/accountlist.c:181
 msgid "Registered"
 msgstr "已註冊"
 
-#: ../sflphone-client-gnome/src/accountlist.c:178
+#: ../sflphone-client-gnome/src/accountlist.c:184
 msgid "Not Registered"
 msgstr "未註冊"
 
-#: ../sflphone-client-gnome/src/accountlist.c:181
+#: ../sflphone-client-gnome/src/accountlist.c:187
 msgid "Trying..."
 msgstr "正在連接..."
 
-#: ../sflphone-client-gnome/src/accountlist.c:184
-#: ../sflphone-client-gnome/src/sflnotify.c:131
-#: ../sflphone-client-gnome/src/sflnotify.c:148
+#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:142
+#: ../sflphone-client-gnome/src/sflnotify.c:159
 msgid "Error"
 msgstr "註冊失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:187
+#: ../sflphone-client-gnome/src/accountlist.c:193
 msgid "Authentication Failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/accountlist.c:190
+#: ../sflphone-client-gnome/src/accountlist.c:196
 msgid "Network unreachable"
 msgstr "網路連線失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:193
+#: ../sflphone-client-gnome/src/accountlist.c:199
 msgid "Host unreachable"
 msgstr "伺服器連線失敗"
 
-#: ../sflphone-client-gnome/src/accountlist.c:196
+#: ../sflphone-client-gnome/src/accountlist.c:202
 msgid "Stun configuration error"
 msgstr "Stun配置有誤"
 
-#: ../sflphone-client-gnome/src/accountlist.c:199
+#: ../sflphone-client-gnome/src/accountlist.c:205
 msgid "Stun server invalid"
 msgstr "Stun伺服器無效"
 
-#: ../sflphone-client-gnome/src/accountlist.c:202
+#: ../sflphone-client-gnome/src/accountlist.c:208
+msgid "Ready"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/accountlist.c:211
 msgid "Invalid"
 msgstr "無效"
 
-#: ../sflphone-client-gnome/src/actions.c:98
+#: ../sflphone-client-gnome/src/actions.c:125
 msgid "Using account"
 msgstr "使用賬戶"
 
-#: ../sflphone-client-gnome/src/actions.c:104
+#: ../sflphone-client-gnome/src/actions.c:132
 msgid "No registered accounts"
 msgstr "沒有已註冊帳戶"
 
-#: ../sflphone-client-gnome/src/actions.c:285
+#: ../sflphone-client-gnome/src/actions.c:319
 msgid ""
 "Unable to connect to the SFLphone server.\n"
 "Make sure the daemon is running."
@@ -77,25 +81,28 @@ msgstr ""
 "連接SFLphone伺服器失敗.\n"
 "請核查daemon是否正在運行."
 
-#: ../sflphone-client-gnome/src/actions.c:589
-#: ../sflphone-client-gnome/src/actions.c:911
+#: ../sflphone-client-gnome/src/actions.c:620
+#: ../sflphone-client-gnome/src/actions.c:946
 msgid "Direct SIP call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/actions.c:1103
-#, c-format
-msgid ""
-"<b>Error: No audio codecs found.\n"
-"\n"
-"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
-"b> directory in your home( <i>%s</i> )"
+#: ../sflphone-client-gnome/src/callable_obj.c:390
+msgid "today at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:393
+msgid "yesterday at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:395
+msgid "%A at %R"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/callable_obj.c:399
+msgid "%x at %R"
 msgstr ""
-"<b>錯誤:無法找到音訊編碼檔案.\n"
-"\n"
-"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>."
-"sflphone</b>目錄下"
 
-#: ../sflphone-client-gnome/src/errors.c:29
+#: ../sflphone-client-gnome/src/errors.c:40
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -105,7 +112,7 @@ msgstr ""
 "\n"
 "打開回放設備時出錯"
 
-#: ../sflphone-client-gnome/src/errors.c:32
+#: ../sflphone-client-gnome/src/errors.c:43
 msgid ""
 "ALSA notification\n"
 "\n"
@@ -115,7 +122,7 @@ msgstr ""
 "\n"
 "打開采集設備時出錯"
 
-#: ../sflphone-client-gnome/src/errors.c:35
+#: ../sflphone-client-gnome/src/errors.c:46
 msgid ""
 "Pulseaudio notification\n"
 "\n"
@@ -125,935 +132,973 @@ msgstr ""
 "\n"
 "Pulseaudio未運行"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:73
+#: ../sflphone-client-gnome/src/mainwindow.c:105
 msgid "There is one call in progress."
 msgstr "有一個電話正在處理中."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:77
+#: ../sflphone-client-gnome/src/mainwindow.c:109
 msgid "There are calls in progress."
 msgstr "有電話正在處理中."
 
-#: ../sflphone-client-gnome/src/mainwindow.c:86
+#: ../sflphone-client-gnome/src/mainwindow.c:114
 msgid "Do you still want to quit?"
 msgstr "確認要退出?"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:298
+#: ../sflphone-client-gnome/src/mainwindow.c:337
 msgid "SFLphone Error"
 msgstr "SFLphone 出錯"
 
-#: ../sflphone-client-gnome/src/mainwindow.c:392
+#: ../sflphone-client-gnome/src/mainwindow.c:456
 #, c-format
 msgid "ZRTP is not supported by peer %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:393
+#: ../sflphone-client-gnome/src/mainwindow.c:458
 msgid "Secure Communication Unavailable"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:394
-#: ../sflphone-client-gnome/src/mainwindow.c:416
+#: ../sflphone-client-gnome/src/mainwindow.c:460
+#: ../sflphone-client-gnome/src/mainwindow.c:490
 msgid "Continue"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:395
-#: ../sflphone-client-gnome/src/mainwindow.c:417
-#: ../sflphone-client-gnome/src/mainwindow.c:431
+#: ../sflphone-client-gnome/src/mainwindow.c:461
+#: ../sflphone-client-gnome/src/mainwindow.c:491
+#: ../sflphone-client-gnome/src/mainwindow.c:512
 msgid "Stop Call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:414
+#: ../sflphone-client-gnome/src/mainwindow.c:486
 #, c-format
 msgid ""
 "A %s error forced the call with %s to fall under unencrypted mode.\n"
 "Exact reason: %s\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:415
+#: ../sflphone-client-gnome/src/mainwindow.c:488
 msgid "ZRTP negotiation failed"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:428
+#: ../sflphone-client-gnome/src/mainwindow.c:506
 #, c-format
 msgid ""
 "%s wants to stop using secure communication. Confirm will resume "
 "conversation without SRTP.\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:429
+#: ../sflphone-client-gnome/src/mainwindow.c:508
 msgid "Confirm Go Clear"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/mainwindow.c:430
+#: ../sflphone-client-gnome/src/mainwindow.c:510
 msgid "Confirm"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:71
-#: ../sflphone-client-gnome/src/sflnotify.c:91
+#: ../sflphone-client-gnome/src/sflnotify.c:82
+#: ../sflphone-client-gnome/src/sflnotify.c:102
 #, c-format
 msgid "%s account : %s"
 msgstr "%s 帳戶 : %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:75
+#: ../sflphone-client-gnome/src/sflnotify.c:86
 #, c-format
 msgid "<i>From</i> %s"
 msgstr "<i>撥入方</i> %s"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:94
+#: ../sflphone-client-gnome/src/sflnotify.c:105
 #, c-format
 msgid "%d voice mail"
 msgid_plural "%d voice mails"
 msgstr[0] "%d 個語音郵件"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:111
+#: ../sflphone-client-gnome/src/sflnotify.c:122
 #, c-format
 msgid "Calling with %s account <i>%s</i>"
 msgstr "使用%s帳戶<i>%s</i>呼叫"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:115
+#: ../sflphone-client-gnome/src/sflnotify.c:126
 msgid "Current account"
 msgstr "當前帳戶"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:130
+#: ../sflphone-client-gnome/src/sflnotify.c:141
 msgid "You have no accounts set up"
 msgstr "你沒有設置任何賬戶"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:147
+#: ../sflphone-client-gnome/src/sflnotify.c:158
 msgid "You have no registered accounts"
 msgstr "未發現已註冊帳戶"
 
-#: ../sflphone-client-gnome/src/sflnotify.c:190
+#: ../sflphone-client-gnome/src/sflnotify.c:201
 #, c-format
 msgid ""
 "<i>With:</i> %s \n"
 "using %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:205
+#: ../sflphone-client-gnome/src/sflnotify.c:216
 #, c-format
 msgid "%s does not support ZRTP."
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:220
+#: ../sflphone-client-gnome/src/sflnotify.c:231
 #, c-format
 msgid "ZRTP negotiation failed with %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sflnotify.c:235
+#: ../sflphone-client-gnome/src/sflnotify.c:246
 #, c-format
 msgid "<i>With:</i> %s"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/sliders.c:162
+#: ../sflphone-client-gnome/src/sliders.c:173
 msgid "Speakers volume"
 msgstr "揚聲器音量"
 
-#: ../sflphone-client-gnome/src/sliders.c:164
+#: ../sflphone-client-gnome/src/sliders.c:175
 msgid "Mic volume"
 msgstr "話筒音量"
 
-#: ../sflphone-client-gnome/src/statusicon.c:96
+#: ../sflphone-client-gnome/src/statusicon.c:139
 msgid "_Show main window"
 msgstr "顯示主窗口(S)"
 
-#: ../sflphone-client-gnome/src/statusicon.c:131
+#: ../sflphone-client-gnome/src/statusicon.c:146
+#: ../sflphone-client-gnome/src/uimanager.c:822
+#: ../sflphone-client-gnome/src/uimanager.c:1136
+#: ../sflphone-client-gnome/src/uimanager.c:1178
+msgid "_Hang up"
+msgstr "放下(H)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:200
 msgid "SFLphone"
 msgstr "SFLphone"
 
-#: ../sflphone-client-gnome/src/statusicon.c:132
+#: ../sflphone-client-gnome/src/statusicon.c:201
 #, c-format
-msgid "%i account configured"
-msgid_plural "%i accounts configured"
-msgstr[0] "已配置了%i個賬戶"
+msgid "%i active account"
+msgid_plural "%i active accounts"
+msgstr[0] ""
+msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/toolbar.c:38
-#: ../sflphone-client-gnome/src/uimanager.c:693
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/toolbar.c:49
+#: ../sflphone-client-gnome/src/uimanager.c:787
+#: ../sflphone-client-gnome/src/uimanager.c:831
 msgid "Voicemail"
 msgstr "語音郵件"
 
-#: ../sflphone-client-gnome/src/uimanager.c:117
+#: ../sflphone-client-gnome/src/uimanager.c:133
 msgid "No address book selected"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:137
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:156
+#: ../sflphone-client-gnome/src/uimanager.c:879
 msgid "Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:279
+#: ../sflphone-client-gnome/src/uimanager.c:338
+#, c-format
 msgid "Voicemail (%i)"
 msgstr "語音郵件 (%i)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:342
+#: ../sflphone-client-gnome/src/uimanager.c:406
 msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
 msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议."
 
-#: ../sflphone-client-gnome/src/uimanager.c:345
+#: ../sflphone-client-gnome/src/uimanager.c:408
 msgid "About SFLphone"
 msgstr "有關SFLphone"
 
-#: ../sflphone-client-gnome/src/uimanager.c:719
+#: ../sflphone-client-gnome/src/uimanager.c:817
 msgid "Call"
 msgstr "電話"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
-#: ../sflphone-client-gnome/src/uimanager.c:1184
+#: ../sflphone-client-gnome/src/uimanager.c:818
+#: ../sflphone-client-gnome/src/uimanager.c:1328
 msgid "_New call"
 msgstr "新電話(N)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:720
+#: ../sflphone-client-gnome/src/uimanager.c:819
 msgid "Place a new call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
-#: ../sflphone-client-gnome/src/uimanager.c:979
+#: ../sflphone-client-gnome/src/uimanager.c:820
+#: ../sflphone-client-gnome/src/uimanager.c:1124
 msgid "_Pick up"
 msgstr "撥出(P)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:721
+#: ../sflphone-client-gnome/src/uimanager.c:821
 msgid "Answer the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:722
-#: ../sflphone-client-gnome/src/uimanager.c:991
-#: ../sflphone-client-gnome/src/uimanager.c:1032
-msgid "_Hang up"
-msgstr "放下(H)"
-
-#: ../sflphone-client-gnome/src/uimanager.c:722
+#: ../sflphone-client-gnome/src/uimanager.c:823
 msgid "Finish the call"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:824
 msgid "O_n hold"
 msgstr "待机"
 
-#: ../sflphone-client-gnome/src/uimanager.c:723
+#: ../sflphone-client-gnome/src/uimanager.c:825
 msgid "Place the call on hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:826
 msgid "O_ff hold"
 msgstr "恢复通話"
 
-#: ../sflphone-client-gnome/src/uimanager.c:724
+#: ../sflphone-client-gnome/src/uimanager.c:827
 msgid "Place the call off hold"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:725
-#: ../sflphone-client-gnome/src/uimanager.c:1015
-msgid "_Record"
-msgstr "記錄(R)"
-
-#: ../sflphone-client-gnome/src/uimanager.c:725
-msgid "Record the current conversation"
-msgstr ""
-
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:828
 msgid "Configuration _Assistant"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:726
+#: ../sflphone-client-gnome/src/uimanager.c:829
 msgid "Run the configuration assistant"
 msgstr "Stun配置有誤"
 
-#: ../sflphone-client-gnome/src/uimanager.c:727
+#: ../sflphone-client-gnome/src/uimanager.c:832
 msgid "Call your voicemail"
 msgstr "%d 個語音郵件"
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:833
 msgid "_Close"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:728
+#: ../sflphone-client-gnome/src/uimanager.c:834
 msgid "Minimize to system tray"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:835
 msgid "_Quit"
 msgstr "編輯(E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:729
+#: ../sflphone-client-gnome/src/uimanager.c:836
 msgid "Quit the program"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:732
+#: ../sflphone-client-gnome/src/uimanager.c:839
 msgid "_Edit"
 msgstr "編輯(E)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:840
 msgid "_Copy"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:733
+#: ../sflphone-client-gnome/src/uimanager.c:841
 msgid "Copy the selection"
 msgstr "刪除所選賬戶"
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:842
 msgid "_Paste"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:734
+#: ../sflphone-client-gnome/src/uimanager.c:843
 msgid "Paste the clipboard"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:844
 msgid "Clear _history"
 msgstr "清空曆史記錄(C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:735
+#: ../sflphone-client-gnome/src/uimanager.c:845
 msgid "Clear the call history"
 msgstr "清空曆史記錄"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "_Accounts"
 msgstr "帳戶(A)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:736
+#: ../sflphone-client-gnome/src/uimanager.c:846
 msgid "Edit your accounts"
 msgstr "當前帳戶"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:848
 msgid "_Preferences"
 msgstr "屬性"
 
-#: ../sflphone-client-gnome/src/uimanager.c:737
+#: ../sflphone-client-gnome/src/uimanager.c:849
 msgid "Change your preferences"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:740
+#: ../sflphone-client-gnome/src/uimanager.c:852
 msgid "_View"
 msgstr "查看(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:743
+#: ../sflphone-client-gnome/src/uimanager.c:855
 msgid "_Help"
 msgstr "幫助(H)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:856
 msgid "Contents"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:744
+#: ../sflphone-client-gnome/src/uimanager.c:857
 msgid "Open the manual"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:745
+#: ../sflphone-client-gnome/src/uimanager.c:858
 msgid "About this application"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:866
 msgid "_Transfer"
 msgstr "轉接"
 
-#: ../sflphone-client-gnome/src/uimanager.c:751
+#: ../sflphone-client-gnome/src/uimanager.c:867
 msgid "Transfer the call"
-msgstr "轉給: "
+msgstr "轉給:"
+
+#: ../sflphone-client-gnome/src/uimanager.c:868
+#: ../sflphone-client-gnome/src/uimanager.c:1160
+msgid "_Record"
+msgstr "記錄(R)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:869
+msgid "Record the current conversation"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/uimanager.c:870
 msgid "_Show toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:752
+#: ../sflphone-client-gnome/src/uimanager.c:871
 msgid "Show the toolbar"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:872
 msgid "_Dialpad"
 msgstr "顯示撥號鍵盤"
 
-#: ../sflphone-client-gnome/src/uimanager.c:753
+#: ../sflphone-client-gnome/src/uimanager.c:873
 msgid "Show the dialpad"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:874
 msgid "_Volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:754
+#: ../sflphone-client-gnome/src/uimanager.c:875
 msgid "Show the volume controls"
 msgstr "音量控制(V)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:876
 msgid "_History"
 msgstr "歷史"
 
-#: ../sflphone-client-gnome/src/uimanager.c:755
+#: ../sflphone-client-gnome/src/uimanager.c:877
 msgid "Calls history"
 msgstr "呼叫記錄"
 
-#: ../sflphone-client-gnome/src/uimanager.c:756
+#: ../sflphone-client-gnome/src/uimanager.c:878
 msgid "_Address book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1003
-#: ../sflphone-client-gnome/src/uimanager.c:1044
+#: ../sflphone-client-gnome/src/uimanager.c:1148
+#: ../sflphone-client-gnome/src/uimanager.c:1190
 msgid "On _Hold"
 msgstr "待机"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1107
+#: ../sflphone-client-gnome/src/uimanager.c:1251
 msgid "_Call back"
 msgstr "回叫(C)"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1258
+#: ../sflphone-client-gnome/src/uimanager.c:1407
 msgid "Edit phone number"
 msgstr "編輯電話號碼"
 
-#: ../sflphone-client-gnome/src/uimanager.c:1269
+#: ../sflphone-client-gnome/src/uimanager.c:1419
 msgid "Edit the phone number before making a call"
 msgstr "撥出電話前編輯電話號碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:180
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:281
 msgid "Account Parameters"
 msgstr "帳戶相關參數"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:189
-#: ../sflphone-client-gnome/src/config/assistant.c:314
-#: ../sflphone-client-gnome/src/config/assistant.c:427
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:296
+#: ../sflphone-client-gnome/src/config/assistant.c:326
+#: ../sflphone-client-gnome/src/config/assistant.c:439
 msgid "_Alias"
 msgstr "別稱(A)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:197
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:306
 msgid "_Protocol"
 msgstr "協議(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:215
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:325
 msgid "Unknown"
 msgstr "未知"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:225
-#: ../sflphone-client-gnome/src/config/assistant.c:322
-#: ../sflphone-client-gnome/src/config/assistant.c:435
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:336
+#: ../sflphone-client-gnome/src/config/assistant.c:334
+#: ../sflphone-client-gnome/src/config/assistant.c:447
 msgid "_Host name"
 msgstr "主机名稱(H)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:233
-#: ../sflphone-client-gnome/src/config/assistant.c:330
-#: ../sflphone-client-gnome/src/config/assistant.c:443
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:345
+#: ../sflphone-client-gnome/src/config/assistant.c:342
+#: ../sflphone-client-gnome/src/config/assistant.c:455
 msgid "_User name"
 msgstr "使用者名稱(U)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:250
-#: ../sflphone-client-gnome/src/config/assistant.c:346
-#: ../sflphone-client-gnome/src/config/assistant.c:458
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:358
+#: ../sflphone-client-gnome/src/config/assistant.c:470
 msgid "_Password"
 msgstr "密碼(P)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:270
-#: ../sflphone-client-gnome/src/config/assistant.c:363
-#: ../sflphone-client-gnome/src/config/assistant.c:473
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:403
+#: ../sflphone-client-gnome/src/config/assistant.c:375
+#: ../sflphone-client-gnome/src/config/assistant.c:485
 msgid "Show password"
 msgstr "密碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:274
-#: ../sflphone-client-gnome/src/config/assistant.c:368
-#: ../sflphone-client-gnome/src/config/assistant.c:478
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:408
+#: ../sflphone-client-gnome/src/config/assistant.c:380
+#: ../sflphone-client-gnome/src/config/assistant.c:490
 msgid "_Voicemail number"
 msgstr "語音郵箱(V)"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:361
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:417
+msgid "_User-agent"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:504
 msgid "Authentication"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:362
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:505
 msgid "Secret"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:605
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:755
 msgid "Credential"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:640
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:789
 msgid "Authentication name"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:651
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
 msgid "Password"
 msgstr "密碼"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:674
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1056
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:858
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1313
 msgid "Security"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:687
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:333
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:869
 msgid "Use TLS transport (sips)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:693
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:338
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:875
 msgid "SRTP key exchange"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:699
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:344
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:881
 msgid "Disabled"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:795
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:949
 msgid "Registration"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:800
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:953
 msgid "Registration expire"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:809
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:962
 msgid "_Comply with RFC 3263"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:816
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:234
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:981
 msgid "Network Interface"
 msgstr "網路連線失敗"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:830
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:249
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:994
 msgid "Local address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:880
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:301
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1061
 msgid "Local port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:893
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:928
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1098
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1131
 msgid "Published address"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:899
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1102
 msgid "Using STUN"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:906
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1109
 msgid "STUN server URL"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:914
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1117
 msgid "Same as local parameters"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:917
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1120
 msgid "Set published address and port:"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:936
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1140
 msgid "Published port"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1027
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1206
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1295
+msgid "Codecs"
+msgstr "編碼"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1217
+msgid "DTMF"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1227
+msgid "RTP"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1231
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1265
 msgid "Account settings"
 msgstr "帳戶設置"
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1046
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1288
 msgid "Basic"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1051
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1308
 msgid "Advanced"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:164
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1321
+msgid "Network"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountconfigdialog.c:1512
+msgid ""
+"This profile is used when you want to reach a remote peer simply by typing a "
+"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
+"also be used if no account can be matched to an incoming or outgoing call."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:142
 #, c-format
 msgid "Server returned \"%s\" (%d)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:389
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:432
 msgid "Protocol"
 msgstr "協議"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:396
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:440
 msgid "Status"
 msgstr "狀態"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:474
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:522
 msgid "Accounts"
 msgstr "帳戶"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:484
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:532
 msgid "Configured Accounts"
 msgstr "已配置帳戶"
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:501
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:549
 #, c-format
 msgid "There is %d active account"
 msgid_plural "There are %d active accounts"
 msgstr[0] ""
+msgstr[1] ""
 
-#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:507
+#: ../sflphone-client-gnome/src/config/accountlistconfigdialog.c:555
 msgid "You have no active account"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:556
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:317
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:303
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:47
 msgid "General"
 msgstr "常用配置"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:323
 msgid "_Use Evolution address books"
 msgstr "使用Evolution地址薄(U)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:330
 msgid "Download limit :"
 msgstr "下載上限:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:338
 msgid "cards"
 msgstr "卡"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:344
 msgid "_Display contact photo if available"
 msgstr "如果可以則顯示聯繫人照片(D)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:352
 msgid "Fields from Evolution's address books"
 msgstr "使用Evolution地址薄中的如下字段:"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:356
 msgid "_Work"
 msgstr "單位電話(W)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:362
 msgid "_Home"
 msgstr "家庭電話(H)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
 msgid "_Mobile"
 msgstr "移動電話(M)"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:375
 msgid "Address Books"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:379
 msgid "Select which Evolution address books to use"
 msgstr "選擇使用如下Evolution地址薄"
 
-#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
-#: ../sflphone-client-gnome/src/config/audioconf.c:577
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:415
+#: ../sflphone-client-gnome/src/config/audioconf.c:704
 msgid "Name"
 msgstr "名稱"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:75
+#: ../sflphone-client-gnome/src/config/assistant.c:86
 #, c-format
 msgid "This assistant is now finished."
 msgstr "配置完成."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:77
+#: ../sflphone-client-gnome/src/config/assistant.c:88
 msgid ""
 "You can at any time check your registration state or modify your accounts "
 "parameters in the Options/Accounts window."
 msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:80
+#: ../sflphone-client-gnome/src/config/assistant.c:91
 msgid "Alias"
 msgstr "別稱"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:84
+#: ../sflphone-client-gnome/src/config/assistant.c:95
 msgid "Server"
 msgstr "伺服器"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:88
+#: ../sflphone-client-gnome/src/config/assistant.c:99
 msgid "Username"
 msgstr "使用者名稱"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:92
+#: ../sflphone-client-gnome/src/config/assistant.c:103
 msgid "Security: "
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:94
+#: ../sflphone-client-gnome/src/config/assistant.c:105
 msgid "SRTP/ZRTP draft-zimmermann"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:96
+#: ../sflphone-client-gnome/src/config/assistant.c:107
 msgid "None"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:229
+#: ../sflphone-client-gnome/src/config/assistant.c:241
 msgid "SFLphone account creation wizard"
 msgstr "SFLphone賬戶創建嚮導"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:255
+#: ../sflphone-client-gnome/src/config/assistant.c:267
 msgid "Welcome to the Account creation wizard of SFLphone!"
 msgstr "歡迎使用SFLphone帳戶創建嚮導!"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:256
+#: ../sflphone-client-gnome/src/config/assistant.c:268
 msgid "This installation wizard will help you configure an account."
 msgstr "安裝向導將幫助您配置帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "VoIP Protocols"
 msgstr "VoIP協議"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:270
+#: ../sflphone-client-gnome/src/config/assistant.c:282
 msgid "Select an account type"
 msgstr "選擇帳戶類型"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:272
+#: ../sflphone-client-gnome/src/config/assistant.c:284
 msgid "SIP (Session Initiation Protocol)"
 msgstr "SIP(會話初始化協議)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:274
+#: ../sflphone-client-gnome/src/config/assistant.c:286
 msgid "IAX2 (InterAsterix Exchange)"
 msgstr "IAX2(Asterisk內部交換協議)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Account"
 msgstr "帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:288
+#: ../sflphone-client-gnome/src/config/assistant.c:300
 msgid "Please select one of the following options"
 msgstr "請選擇以下選項中的一個"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:290
+#: ../sflphone-client-gnome/src/config/assistant.c:302
 msgid "Create a free SIP/IAX2 account on sflphone.org"
 msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:292
+#: ../sflphone-client-gnome/src/config/assistant.c:304
 msgid "Register an existing SIP or IAX2 account"
 msgstr "註冊已存在的SIP或IAX2帳戶"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
+#: ../sflphone-client-gnome/src/config/assistant.c:318
 msgid "SIP account settings"
 msgstr "SIP帳戶配置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:306
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:318
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "Please fill the following information"
 msgstr "請填寫如下信息"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:376
-#: ../sflphone-client-gnome/src/config/assistant.c:405
+#: ../sflphone-client-gnome/src/config/assistant.c:388
+#: ../sflphone-client-gnome/src/config/assistant.c:417
 msgid "Secure communications with _ZRTP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "Optional email address"
 msgstr "可選郵件地址"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:389
+#: ../sflphone-client-gnome/src/config/assistant.c:401
 msgid "This email address will be used to send your voicemail messages."
 msgstr "這個郵件地址將被用來發送您的語音"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:397
+#: ../sflphone-client-gnome/src/config/assistant.c:409
 msgid "_Email address"
 msgstr "郵件地址(E)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:419
+#: ../sflphone-client-gnome/src/config/assistant.c:431
 msgid "IAX2 account settings"
 msgstr "IAX2帳戶配置"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "Network Address Translation (NAT)"
 msgstr "网络地址解析(NAT)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:496
+#: ../sflphone-client-gnome/src/config/assistant.c:508
 msgid "You should probably enable this if you are behind a firewall."
 msgstr "如果你使用網路防火牆,你很有可能需要設定該項."
 
-#: ../sflphone-client-gnome/src/config/assistant.c:505
+#: ../sflphone-client-gnome/src/config/assistant.c:517
 msgid "E_nable STUN"
 msgstr "啟用STUN(n)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:512
+#: ../sflphone-client-gnome/src/config/assistant.c:524
 msgid "_STUN server"
 msgstr "STUN伺服器(S)"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Account Registration"
 msgstr "帳戶註冊"
 
-#: ../sflphone-client-gnome/src/config/assistant.c:526
+#: ../sflphone-client-gnome/src/config/assistant.c:538
 msgid "Congratulations!"
 msgstr "恭喜!"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:582
+#: ../sflphone-client-gnome/src/config/audioconf.c:709
 msgid "Frequency"
 msgstr "顰律"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:587
+#: ../sflphone-client-gnome/src/config/audioconf.c:714
 msgid "Bitrate"
 msgstr "比率"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:592
+#: ../sflphone-client-gnome/src/config/audioconf.c:719
 msgid "Bandwidth"
 msgstr "顰寬"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:670
+#: ../sflphone-client-gnome/src/config/audioconf.c:838
 msgid "ALSA plugin"
 msgstr "ALSA插件"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:692
+#: ../sflphone-client-gnome/src/config/audioconf.c:860
 msgid "Output"
 msgstr "輸出"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:714
+#: ../sflphone-client-gnome/src/config/audioconf.c:882
 msgid "Input"
 msgstr "輸入"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:749
-msgid "_Voice Activity Detection"
-msgstr "聲音狀態檢測(V)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:904
+#, fuzzy
+msgid "Ringtone"
+msgstr "鈴聲"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:759
-msgid "_Noise Reduction (Narrow-Band Companding)"
-msgstr "降噪處理-窄頻壓縮(N)"
+#: ../sflphone-client-gnome/src/config/audioconf.c:939
+msgid "_Echo Suppression"
+msgstr ""
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:800
+#: ../sflphone-client-gnome/src/config/audioconf.c:952
+#, fuzzy
+msgid "_Noise Reduction"
+msgstr "降噪"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:991
 msgid "Sound Manager"
 msgstr "聲音管理器"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:809
+#: ../sflphone-client-gnome/src/config/audioconf.c:1000
 msgid "_Pulseaudio"
 msgstr "Pulseaudio"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:813
+#: ../sflphone-client-gnome/src/config/audioconf.c:1004
 msgid "_ALSA"
 msgstr "ALSA"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:819
+#: ../sflphone-client-gnome/src/config/audioconf.c:1010
 msgid "ALSA settings"
 msgstr "ALSA 配置"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:836
-msgid "Codecs"
-msgstr "編碼"
-
-#: ../sflphone-client-gnome/src/config/audioconf.c:865
+#: ../sflphone-client-gnome/src/config/audioconf.c:1031
 msgid "Recordings"
 msgstr "記錄"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:869
+#: ../sflphone-client-gnome/src/config/audioconf.c:1035
 msgid "Destination folder"
 msgstr "目標文件夾"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:873
+#: ../sflphone-client-gnome/src/config/audioconf.c:1039
 msgid "Select a folder"
 msgstr "選擇文件夾"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:879
+#: ../sflphone-client-gnome/src/config/audioconf.c:1045
 msgid "Ringtones"
 msgstr "鈴聲"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:885
+#: ../sflphone-client-gnome/src/config/audioconf.c:1051
 msgid "_Enable ringtones"
 msgstr "啟動鈴聲(E)"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:891
+#: ../sflphone-client-gnome/src/config/audioconf.c:1057
 msgid "Choose a ringtone"
 msgstr "鈴聲選擇"
 
-#: ../sflphone-client-gnome/src/config/audioconf.c:897
+#: ../sflphone-client-gnome/src/config/audioconf.c:1063
 msgid "Audio Files"
 msgstr "音訊檔案"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+#: ../sflphone-client-gnome/src/config/audioconf.c:1070
+#, fuzzy
+msgid "Voice enhancement settings"
+msgstr "帳戶設置"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
 msgid "URL Argument"
 msgstr "URL參數"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+#: ../sflphone-client-gnome/src/config/hooks-config.c:146
 msgid "Custom commands on incoming calls with URL"
 msgstr "定制對帶有URL的來電的處理"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#: ../sflphone-client-gnome/src/config/hooks-config.c:149
 #, c-format
 msgid "%s will be replaced with the passed URL."
 msgstr "傳輸的URL會被替換成%s."
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+#: ../sflphone-client-gnome/src/config/hooks-config.c:152
 msgid "Trigger on specific _SIP header"
 msgstr "激活指定的SIP頭(S)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+#: ../sflphone-client-gnome/src/config/hooks-config.c:161
 msgid "Trigger on _IAX2 URL"
 msgstr "激活IAX2 URL(I)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+#: ../sflphone-client-gnome/src/config/hooks-config.c:166
 msgid "Command to _run"
 msgstr "運行命令(r)"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+#: ../sflphone-client-gnome/src/config/hooks-config.c:176
 msgid "Phone number rewriting"
 msgstr "重設電話號碼"
 
-#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+#: ../sflphone-client-gnome/src/config/hooks-config.c:180
 msgid "_Prefix dialed numbers with"
 msgstr "號碼前綴(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:225
-msgid ""
-"This profile is used when you want to reach a remote peer simply by typing a "
-"sip URI such as <b>sip:remotepeer</b>. The settings you define here will "
-"also be used if no account can be matched to an incoming or outgoing call."
-msgstr ""
-
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:440
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:158
 msgid "Desktop Notifications"
 msgstr "桌面提示"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:444
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:163
 msgid "_Enable notifications"
 msgstr "啟動提示(E)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:450
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:170
 msgid "System Tray Icon"
 msgstr "系統托盤圖標"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:453
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:180
+msgid "Show SFLphone in the system tray"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:187
 msgid "_Popup main window on incoming call"
 msgstr "來電話時彈出主視窗(P)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:457
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:193
 msgid "Ne_ver popup main window"
 msgstr "從不彈出主視窗(v)"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:463
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:203
 msgid "Hide SFLphone window on _startup"
 msgstr "在啟動時隱藏SFLphone主窗口"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:469
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:217
 msgid "Calls History"
 msgstr "打電話歷史"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:472
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:221
 msgid "_Keep my history for at least"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:483
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:236
 msgid "days"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:536
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:282
 msgid "Preferences"
 msgstr "屬性"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:561
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:309
 msgid "Audio"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:566
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:315
 msgid "Address Book"
 msgstr "地址簿"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:571
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:321
 msgid "Hooks"
 msgstr "鉤鍵"
 
-#: ../sflphone-client-gnome/src/config/preferencesdialog.c:581
-msgid "Direct IP calls"
+#: ../sflphone-client-gnome/src/config/preferencesdialog.c:326
+msgid "Shortcuts"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:38
+#: ../sflphone-client-gnome/src/config/shortcuts-config.c:49
+msgid "Be careful: these shortcuts might override system-wide shortcuts."
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:49
 msgid "Advanced options for TLS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:56
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:67
 msgid "TLS transport"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:60
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:71
 msgid ""
 "TLS transport can be used along with UDP for those calls that would\n"
 "require secure sip transactions (aka SIPS). You can configure a different\n"
@@ -1062,115 +1107,118 @@ msgid ""
 "port, different one from each other\n"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:103
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:118
+msgid "Global TLS listener (all accounts)"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:133
 msgid "Certificate of Authority list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:107
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:137
 msgid "Choose a CA list file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:131
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:158
 msgid "Public endpoint certificate file"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:135
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:162
 msgid "Choose a public endpoint certificate (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:159
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:185
 msgid "Choose a private key file (optional)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:181
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:206
 msgid "Password for the private key"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:204
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:229
 msgid "TLS protocol method"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:238
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:263
 msgid "TLS cipher list"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:247
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
 msgid "Server name instance for outgoing TLS connection"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:255
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:280
 msgid "Negotiation timeout (sec:msec)"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:272
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:297
 msgid "Verify incoming certificates, as a server"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:278
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:303
 msgid "Verify certificates from answer, as a client"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:284
+#: ../sflphone-client-gnome/src/config/tlsadvanceddialog.c:309
 msgid "Require certificate for incoming tls connections"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:49
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:60
 msgid "ZRTP Options"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:69
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:80
 msgid "Send Hello Hash in S_DP"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:75
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:86
 msgid "Ask User to Confirm SAS"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:81
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:92
 msgid "_Warn if ZRTP not supported"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:87
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:98
 msgid "Display SAS once for hold events"
 msgstr ""
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:58
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:142
+msgid "SDES Options"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/zrtpadvanceddialog.c:167
+msgid "Fallback on RTP on SDES failure"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
 msgid "Search all"
 msgstr "查詢所有"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:59
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:72
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:84
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:96
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:107
 msgid "Click here to change the search type"
 msgstr "請點擊此處改變查詢方式"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:71
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
 msgid "Search by missed call"
 msgstr "從未接電話中查詢"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:83
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
 msgid "Search by incoming call"
 msgstr "從來電中查詢"
 
-#: ../sflphone-client-gnome/src/contacts/searchbar.c:95
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:106
 msgid "Search by outgoing call"
 msgstr "從撥出電話中查詢"
 
-#~ msgid "IP call - %s"
-#~ msgstr "IP電話- %s"
-
-#~ msgid "Codec"
-#~ msgstr "編碼"
-
-#~ msgid "_Mute other applications during a call"
-#~ msgstr "當有來電時靜音其它應用程序(c)"
-
-#~ msgid "SIP Port"
-#~ msgstr "SIP端口"
+#~ msgid "_Voice Activity Detection"
+#~ msgstr "聲音狀態檢測(V)"
 
-#~ msgid "Enable voicemail _notifications"
-#~ msgstr "啟用語音郵箱提示(n)"
+#~ msgid "_Noise Reduction (Narrow-Band Companding)"
+#~ msgstr "降噪處理-窄頻壓縮(N)"
 
 #~ msgid "Account creation wizard"
 #~ msgstr "帳戶創建向導"
@@ -1192,6 +1240,9 @@ msgstr "從撥出電話中查詢"
 #~ msgid "Default account"
 #~ msgstr "默認帳戶"
 
+#~ msgid "Codec"
+#~ msgstr "編碼"
+
 #~ msgid "SFLphone KDE Client"
 #~ msgstr "SFLphone KDE客戶端"
 
@@ -1306,9 +1357,6 @@ msgstr "從撥出電話中查詢"
 #~ msgid "Apply"
 #~ msgstr "套用"
 
-#~ msgid "SIP"
-#~ msgstr "SIP"
-
 #~ msgid "IAX"
 #~ msgstr "IAX"
 
@@ -1375,6 +1423,9 @@ msgstr "從撥出電話中查詢"
 #~ msgid "On start"
 #~ msgstr "正在啟動"
 
+#~ msgid "SIP Port"
+#~ msgstr "SIP端口"
+
 #~ msgid "Trigger on specific SIP header"
 #~ msgstr "激活指定的SIP頭"
 
@@ -1390,15 +1441,39 @@ msgstr "從撥出電話中查詢"
 #~ msgid "Attention:number of results exceeds max displayed."
 #~ msgstr "注意:結果超過可顯示的最大值"
 
+#~ msgid "IP call - %s"
+#~ msgstr "IP電話- %s"
+
+#~ msgid ""
+#~ "<b>Error: No audio codecs found.\n"
+#~ "\n"
+#~ "</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>."
+#~ "sflphone</b> directory in your home( <i>%s</i> )"
+#~ msgstr ""
+#~ "<b>錯誤:無法找到音訊編碼檔案.\n"
+#~ "\n"
+#~ "</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>."
+#~ "sflphone</b>目錄下"
+
 #~ msgid "_Account creation wizard"
 #~ msgstr "帳戶創建向導(A)"
 
+#~ msgid "%i account configured"
+#~ msgid_plural "%i accounts configured"
+#~ msgstr[0] "已配置了%i個賬戶"
+
 #~ msgid "_Enable this account"
 #~ msgstr "啟用該賬戶(E)"
 
+#~ msgid "Enable voicemail _notifications"
+#~ msgstr "啟用語音郵箱提示(n)"
+
 #~ msgid "PulseAudio sound server"
 #~ msgstr "PulseAudio聲音伺服器"
 
+#~ msgid "_Mute other applications during a call"
+#~ msgstr "當有來電時靜音其它應用程序(c)"
+
 #~ msgid "Port"
 #~ msgstr "端口"
 
@@ -1677,9 +1752,6 @@ msgstr "從撥出電話中查詢"
 #~ msgid "%s account- %s"
 #~ msgstr "%s 帳戶- %s"
 
-#~ msgid "Noise reduction"
-#~ msgstr "降噪"
-
 #~ msgid "_Destination folder"
 #~ msgstr "目標文件夾(D)"
 
@@ -1697,10 +1769,12 @@ msgstr "從撥出電話中查詢"
 #~ msgstr ""
 #~ "Yun Liu, ,Launchpad Contributions:,Yun Liu, ,Launchpad Contributions:,"
 #~ "Emmanuel Milou,Yun Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun "
-#~ "Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu"
+#~ "Liu, ,Launchpad Contributions:,Emmanuel Milou,Yun Liu, ,Launchpad "
+#~ "Contributions:,Emmanuel Milou,Yun Liu"
 
 #~ msgctxt "EMAIL OF TRANSLATORS"
 #~ msgid "Your emails"
 #~ msgstr ""
 #~ "yunliu2000@gmail.com,,,,,,emmanuel.milou@savoirfairelinux.com,,,,emmanuel."
-#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com,"
+#~ "milou@savoirfairelinux.com,,,,emmanuel.milou@savoirfairelinux.com,,,,"
+#~ "emmanuel.milou@savoirfairelinux.com,"
diff --git a/sflphone-client-gnome/sflphone-client-gnome.schemas b/sflphone-client-gnome/sflphone-client-gnome.schemas
new file mode 100644
index 0000000000000000000000000000000000000000..cda7c5e3a686e440b7e751b44252430400d704c8
--- /dev/null
+++ b/sflphone-client-gnome/sflphone-client-gnome.schemas
@@ -0,0 +1,69 @@
+<gconfschemafile>
+   <schemalist>
+
+	<schema>
+        <key>/schemas/apps/sflphone-client-gnome/state/window_width</key>
+        <applyto>/apps/sflphone-client-gnome/state/window_width</applyto>
+        <owner>sflphone-client-gnome</owner>
+        <type>int</type>
+        <default>240</default>
+        <locale name="C">
+    <short>Main window width</short>
+    <long>Main window width.</long>
+        </locale>
+      </schema>
+
+
+      <schema>
+        <key>/schemas/apps/sflphone-client-gnome/state/window_position_x</key>
+        <applyto>/apps/sflphone-client-gnome/state/window_position_x</applyto>
+        <owner>sflphone-client-gnome</owner>
+        <type>int</type>
+        <default>0</default>
+        <locale name="C">
+    <short>Main window X position</short>
+    <long>Main window X position.</long>
+        </locale>
+      </schema>
+
+
+      <schema>
+        <key>/schemas/apps/sflphone-client-gnome/state/window_position_y</key>
+        <applyto>/apps/sflphone-client-gnome/state/window_position_y</applyto>
+        <owner>sflphone-client-gnome</owner>
+        <type>int</type>
+        <default>0</default>
+        <locale name="C">
+    <short>Main window Y position</short>
+    <long>Main window Y position.</long>
+        </locale>
+      </schema>
+
+      <schema>
+        <key>/schemas/apps/sflphone-client-gnome/state/window_height</key>
+        <applyto>/apps/sflphone-client-gnome/state/window_height</applyto>
+        <owner>sflphone-client-gnome</owner>
+        <type>int</type>
+        <default>320</default>
+        <locale name="C">
+    <short>Main window height</short>
+    <long>Main window height.</long>
+        </locale>
+      </schema>
+	
+	<schema>
+        <key>/schemas/apps/sflphone-client-gnome/state/dialpad</key>
+        <applyto>/apps/sflphone-client-gnome/state/dialpad</applyto>
+        <owner>sflphone-client-gnome</owner>
+        <type>bool</type>
+        <default>true</default>
+        <locale name="C">
+    <short>Display dialpad</short>
+    <long>Display dialpad.</long>
+        </locale>
+      </schema>
+	
+
+
+   </schemalist>
+</gconfschemafile>
diff --git a/sflphone-client-gnome/src/Makefile.am b/sflphone-client-gnome/src/Makefile.am
index 006f90714509c286ff3a51c7c40fdb4e71ece8ae..06e6b6ac5bb5c31b4e4005540b91ac61481e1175 100644
--- a/sflphone-client-gnome/src/Makefile.am
+++ b/sflphone-client-gnome/src/Makefile.am
@@ -5,7 +5,6 @@ bin_PROGRAMS = sflphone-client-gnome
 SUBDIRS = config contacts dbus widget icons
   
 NOFIFY_LIBS = -lnotify
-LOG4C = -llog4c
 X11_LIBS = -lX11
 
 SFLPHONEGTK_LIBS=./contacts/libcontacts.la ./config/libconfig.la ./dbus/libdbus.la ./widget/libwidget.la ./icons/libicons.la
@@ -13,9 +12,11 @@ SFLPHONEGTK_LIBS=./contacts/libcontacts.la ./config/libconfig.la ./dbus/libdbus.
 sflphone_client_gnome_SOURCES = \
   main.c \
   errors.c \
+  logger.c \
   uimanager.c \
   sflnotify.c \
   mainwindow.c \
+  imwindow.c \
   dialpad.c \
   callable_obj.c \
   conference_obj.c \
@@ -25,14 +26,15 @@ sflphone_client_gnome_SOURCES = \
   statusicon.c \
   codeclist.c \
   reqaccount.c \
-  shortcuts.c  
+  shortcuts.c  \
+  eel-gconf-extensions.c
 
 noinst_HEADERS =  actions.h sflnotify.h mainwindow.h dialpad.h codeclist.h \
                   reqaccount.h errors.h sflphone_const.h uimanager.h \
                   accountlist.h sliders.h statusicon.h callable_obj.h conference_obj.h \
-                  shortcuts.h
+                  shortcuts.h eel-gconf-extensions.h logger.h
 
-sflphone_client_gnome_LDADD = $(DEPS_LIBS) $(NOTIFY_LIBS) $(SFLPHONEGTK_LIBS) $(LIBSEXY_LIBS) $(LOG4C) $(X11_LIBS)
+sflphone_client_gnome_LDADD = $(DEPS_LIBS) $(NOTIFY_LIBS) $(SFLPHONEGTK_LIBS) $(LIBSEXY_LIBS) $(X11_LIBS)
 
 # add symbolic link	     
 install-exec-local:
@@ -41,3 +43,5 @@ install-exec-local:
 
 uninstall-local:
 	-test -h $(DESTDIR)$(bindir)/sflphone && rm $(DESTDIR)$(bindir)/sflphone
+
+all: indent
diff --git a/sflphone-client-gnome/src/accountlist.c b/sflphone-client-gnome/src/accountlist.c
index 7e6d0c86dd75155b6ac960fe254eef704d2a5d02..d73f3450c9f9d4cc926128daaf7133fc5fe07214 100644
--- a/sflphone-client-gnome/src/accountlist.c
+++ b/sflphone-client-gnome/src/accountlist.c
@@ -36,357 +36,372 @@
 GQueue * accountQueue;
 
 /* GCompareFunc to compare a accountID (gchar* and a account_t) */
-gint is_accountID_struct ( gconstpointer a, gconstpointer b) {
-
-	account_t * c = (account_t*)a;
-	if(strcmp(c->accountID, (gchar*) b) == 0)
-	{
-		return 0;
-	}
-	else
-	{
-		return 1;
-	}
+gint is_accountID_struct (gconstpointer a, gconstpointer b)
+{
+
+    if (!a || !b)
+        return 1;
+
+    account_t * c = (account_t*) a;
+
+    if (strcmp (c->accountID, (gchar*) b) == 0) {
+        return 0;
+    } else {
+        return 1;
+    }
 }
 
 /* GCompareFunc to get current call (gchar* and a account_t) */
-gint get_state_struct ( gconstpointer a, gconstpointer b) {
-
-	account_t * c = (account_t*)a;
-	if( c->state == *((account_state_t*)b))
-	{
-		return 0;
-	}
-	else
-	{
-		return 1;
-	}
+gint get_state_struct (gconstpointer a, gconstpointer b)
+{
+
+    account_t * c = (account_t*) a;
+
+    if (c->state == * ( (account_state_t*) b)) {
+        return 0;
+    } else {
+        return 1;
+    }
 }
 
-void account_list_init () {
+void account_list_init ()
+{
 
-	accountQueue = g_queue_new ();
+    accountQueue = g_queue_new ();
 }
 
-	void
+void
 account_list_clean ()
 {
-	g_queue_free (accountQueue);
+    g_queue_free (accountQueue);
 }
 
-	void
+void
 account_list_add (account_t * c)
 {
-	g_queue_push_tail (accountQueue, (gpointer *) c);
+    g_queue_push_tail (accountQueue, (gpointer *) c);
 }
 
-	void
+void
 account_list_add_at_nth (account_t * c, guint pos)
 {
-	g_queue_push_nth (accountQueue, (gpointer *) c, pos);
+    g_queue_push_nth (accountQueue, (gpointer *) c, pos);
 }
 
 
-	void
+void
 account_list_remove (const gchar * accountID)
 {
-	GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
-	if (c)
-	{
-		g_queue_remove(accountQueue, c->data);
-	}
+    GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
+
+    if (c) {
+        g_queue_remove (accountQueue, c->data);
+    }
 }
 
 
-	account_t *
-account_list_get_by_state (account_state_t state )
+account_t *
+account_list_get_by_state (account_state_t state)
 {
-	GList * c = g_queue_find_custom (accountQueue, &state, get_state_struct);
-	if (c)
-	{
-		return (account_t *)c->data;
-	}
-	else
-	{
-		return NULL;
-	}
+    GList * c = g_queue_find_custom (accountQueue, &state, get_state_struct);
+
+    if (c) {
+        return (account_t *) c->data;
+    } else {
+        return NULL;
+    }
 
 }
 
-	account_t *
-account_list_get_by_id(gchar * accountID)
+account_t *
+account_list_get_by_id (gchar * accountID)
 {
-	GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
-	if(c)
-	{
-		return (account_t *)c->data;
-	}
-	else
-	{
-		return NULL;
-	}
+    GList * c = g_queue_find_custom (accountQueue, accountID, is_accountID_struct);
+
+    if (c) {
+        return (account_t *) c->data;
+    } else {
+        return NULL;
+    }
 }
 
-guint account_list_get_size (void) {
-	
-	return g_queue_get_length (accountQueue);
+guint account_list_get_size (void)
+{
+
+    return g_queue_get_length (accountQueue);
 }
 
-account_t * account_list_get_nth (guint n) {
+account_t * account_list_get_nth (guint n)
+{
 
-	return g_queue_peek_nth (accountQueue, n);
+    return g_queue_peek_nth (accountQueue, n);
 }
 
-	account_t*
-account_list_get_current( )
+account_t*
+account_list_get_current()
 {
-	account_t *current;
+    account_t *current;
 
-	// No account registered
-	if (account_list_get_registered_accounts () == 0)
-		return NULL;
+    // No account registered
+    if (account_list_get_registered_accounts () == 0)
+        return NULL;
 
-	// if we are here, it means that we have at least one registered account in the list
-	// So we get the first one
-	current = account_list_get_by_state (ACCOUNT_STATE_REGISTERED);
-	if (!current)
-		return NULL;
+    // if we are here, it means that we have at least one registered account in the list
+    // So we get the first one
+    current = account_list_get_by_state (ACCOUNT_STATE_REGISTERED);
 
-	return current;
+    if (!current)
+        return NULL;
+
+    return current;
 }
 
 void account_list_set_current (account_t *current)
 {
-	gpointer acc;
-	guint pos;
-
-	// 2 steps:
-	// 1 - retrieve the index of the current account in the Queue
-	// 2 - then set it as first
-	pos = account_list_get_position (current);
-	if (pos > 0)
-	{
-		acc = g_queue_pop_nth(accountQueue, pos);
-		g_queue_push_nth(accountQueue, acc, 0);
-	}
+    gpointer acc;
+    guint pos;
+
+    // 2 steps:
+    // 1 - retrieve the index of the current account in the Queue
+    // 2 - then set it as first
+    pos = account_list_get_position (current);
+
+    if (pos > 0) {
+        acc = g_queue_pop_nth (accountQueue, pos);
+        g_queue_push_nth (accountQueue, acc, 0);
+    }
 }
 
 
 const gchar * account_state_name (account_state_t s)
 {
-	gchar * state;
-	switch(s)
-	{
-		case ACCOUNT_STATE_REGISTERED:
-			state = _("Registered");
-			break;
-		case ACCOUNT_STATE_UNREGISTERED:
-			state = _("Not Registered");
-			break;
-		case ACCOUNT_STATE_TRYING:
-			state = _("Trying...");
-			break;
-		case ACCOUNT_STATE_ERROR:
-			state = _("Error");
-			break;
-		case ACCOUNT_STATE_ERROR_AUTH:
-			state = _("Authentication Failed");
-			break;
-		case ACCOUNT_STATE_ERROR_NETWORK:
-			state = _("Network unreachable");
-			break;
-		case ACCOUNT_STATE_ERROR_HOST:
-			state = _("Host unreachable");
-			break;
-		case ACCOUNT_STATE_ERROR_CONF_STUN:
-			state = _("Stun configuration error");
-			break;
-		case ACCOUNT_STATE_ERROR_EXIST_STUN:
-			state = _("Stun server invalid");
-			break;
-		case IP2IP_PROFILE_STATUS:
-			state = _("Ready");
-			break;
-		default:
-			state = _("Invalid");
-			break;
-	}
-	return state;
+    gchar * state;
+
+    switch (s) {
+        case ACCOUNT_STATE_REGISTERED:
+            state = _ ("Registered");
+            break;
+        case ACCOUNT_STATE_UNREGISTERED:
+            state = _ ("Not Registered");
+            break;
+        case ACCOUNT_STATE_TRYING:
+            state = _ ("Trying...");
+            break;
+        case ACCOUNT_STATE_ERROR:
+            state = _ ("Error");
+            break;
+        case ACCOUNT_STATE_ERROR_AUTH:
+            state = _ ("Authentication Failed");
+            break;
+        case ACCOUNT_STATE_ERROR_NETWORK:
+            state = _ ("Network unreachable");
+            break;
+        case ACCOUNT_STATE_ERROR_HOST:
+            state = _ ("Host unreachable");
+            break;
+        case ACCOUNT_STATE_ERROR_CONF_STUN:
+            state = _ ("Stun configuration error");
+            break;
+        case ACCOUNT_STATE_ERROR_EXIST_STUN:
+            state = _ ("Stun server invalid");
+            break;
+        case IP2IP_PROFILE_STATUS:
+            state = _ ("Ready");
+            break;
+        default:
+            state = _ ("Invalid");
+            break;
+    }
+
+    return state;
 }
 
-	void
-account_list_clear ( )
+void
+account_list_clear ()
 {
-	g_queue_free (accountQueue);
-	accountQueue = g_queue_new ();
+    g_queue_free (accountQueue);
+    accountQueue = g_queue_new ();
 }
 
-	void
-account_list_move_up(guint index)
+void
+account_list_move_up (guint index)
 {
-	DEBUG ("index  = %i\n", index);
+    DEBUG ("index  = %i\n", index);
 
-	if(index != 0)
-	{
-		gpointer acc = g_queue_pop_nth(accountQueue, index);
-		g_queue_push_nth(accountQueue, acc, index-1);
-	}
+    if (index != 0) {
+        gpointer acc = g_queue_pop_nth (accountQueue, index);
+        g_queue_push_nth (accountQueue, acc, index-1);
+    }
 }
 
-	void
-account_list_move_down(guint index)
+void
+account_list_move_down (guint index)
 {
-	if(index != accountQueue->length)
-	{
-		gpointer acc = g_queue_pop_nth(accountQueue, index);
-		g_queue_push_nth(accountQueue, acc, index+1);
-	}
+    if (index != accountQueue->length) {
+        gpointer acc = g_queue_pop_nth (accountQueue, index);
+        g_queue_push_nth (accountQueue, acc, index+1);
+    }
 }
 
-	guint
-account_list_get_registered_accounts( void )
+guint
+account_list_get_registered_accounts (void)
 {
-	guint res = 0;
-	unsigned int i;
-	for(i=0;i<account_list_get_size();i++)
-	{
-		if( account_list_get_nth( i ) -> state == ( ACCOUNT_STATE_REGISTERED ))
-			res ++;
-	}
-	DEBUG(" %d registered accounts" , res );
-	return res;
+    guint res = 0;
+    unsigned int i;
+
+    for (i=0; i<account_list_get_size(); i++) {
+
+        if (account_list_get_nth (i) -> state == (ACCOUNT_STATE_REGISTERED))
+            res ++;
+    }
+
+    DEBUG ("Account: %d registered accounts" , res);
+    return res;
 }
 
-gchar* account_list_get_current_id( void ){
+gchar* account_list_get_current_id (void)
+{
 
-	account_t *current;
+    account_t *current;
 
-	current = account_list_get_current ();
-	if (current)
-		return current->accountID;
-	else
-		return "";
+    current = account_list_get_current ();
+
+    if (current)
+        return current->accountID;
+    else
+        return "";
 }
 
-int account_list_get_sip_account_number( void ){
+int account_list_get_sip_account_number (void)
+{
 
-	int n;
-	guint size, i;
-	account_t *current;
+    int n;
+    guint size, i;
+    account_t *current;
 
-	size = account_list_get_size();
-	n = 0;
-	for( i=0; i<size ;i++ ){
-		current = account_list_get_nth( i );
-		if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "SIP" ) == 0 )
-			n++;
-	}
+    size = account_list_get_size();
+    n = 0;
 
-	return n;
+    for (i=0; i<size ; i++) {
+        current = account_list_get_nth (i);
+
+        if (strcmp (g_hash_table_lookup (current->properties, ACCOUNT_TYPE), "SIP") == 0)
+            n++;
+    }
+
+    return n;
 }
 
-int account_list_get_iax_account_number( void ){
+int account_list_get_iax_account_number (void)
+{
+
+    int n;
+    guint size, i;
+    account_t *current;
+
+    size = account_list_get_size();
+    n = 0;
 
-	int n;
-	guint size, i;
-	account_t *current;
+    for (i=0; i<size ; i++) {
+        current = account_list_get_nth (i);
 
-	size = account_list_get_size();
-	n = 0;
-	for( i=0; i<size ;i++ ){
-		current = account_list_get_nth( i );
-		if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "IAX" ) == 0 )
-			n++;
-	}
+        if (strcmp (g_hash_table_lookup (current->properties, ACCOUNT_TYPE), "IAX") == 0)
+            n++;
+    }
 
-	return n;
+    return n;
 }
 
-gchar * account_list_get_ordered_list (void) {
+gchar * account_list_get_ordered_list (void)
+{
+
+    gchar *order="";
+    guint i;
+
+    for (i=0; i < account_list_get_size(); i++) {
+        account_t * account = NULL;
+        account = account_list_get_nth (i);
 
-	gchar *order="";
-	guint i;
+        if (account != NULL) {
+            order = g_strconcat (order, account->accountID, "/", NULL);
+        }
+    }
 
-	for( i=0; i < account_list_get_size(); i++ )
-	{
-		account_t * account = NULL;
-		account = account_list_get_nth(i);    
-		if (account != NULL) {
-			order = g_strconcat (order, account->accountID, "/", NULL);
-		}
-	}
-	return order;
+    return order;
 }
 
 
-guint account_list_get_position (account_t *account) 
+guint account_list_get_position (account_t *account)
 {
-	guint size, i;
-	account_t *tmp;
-
-	size = account_list_get_size ();
-	for (i=0; i<size; i++)
-	{
-		tmp = account_list_get_nth (i);
-		if (g_strcasecmp (tmp->accountID, account->accountID) == 0)
-		{
-			return i;
-		}
-	}
-	// Not found
-	return -1;
+    guint size, i;
+    account_t *tmp;
+
+    size = account_list_get_size ();
+
+    for (i=0; i<size; i++) {
+        tmp = account_list_get_nth (i);
+
+        if (g_strcasecmp (tmp->accountID, account->accountID) == 0) {
+            return i;
+        }
+    }
+
+    // Not found
+    return -1;
 }
 
 gboolean current_account_has_mailbox (void)
 {
 
-	account_t *current;
+    account_t *current;
+
+    // Check if the current account has a voicemail number configured
 
-	// Check if the current account has a voicemail number configured
+    current = account_list_get_current ();
 
-	current = account_list_get_current ();
-	if (current)
-	{
-		if (g_strcasecmp (g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX), "") != 0)
-			return TRUE;
-	}
+    if (current) {
+        gchar * account_mailbox = g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX);
 
-	return FALSE;
+        if (account_mailbox != NULL && g_strcasecmp (account_mailbox, "") != 0)
+            return TRUE;
+    }
+
+    return FALSE;
 }
 
 void current_account_set_message_number (guint nb)
 {
-	account_t *current;
+    account_t *current;
+
+    current = account_list_get_current ();
 
-	current = account_list_get_current ();
-	if (current)
-	{
-		current->_messages_number = nb;
-	}
+    if (current) {
+        current->_messages_number = nb;
+    }
 }
 
 guint current_account_get_message_number (void)
 {
-	account_t *current;
-
-	current = account_list_get_current ();
-	if (current)
-	{
-		return current->_messages_number;
-	}
-	else
-		return 0;
+    account_t *current;
+
+    current = account_list_get_current ();
+
+    if (current) {
+        return current->_messages_number;
+    } else
+        return 0;
 }
 
 gboolean current_account_has_new_message (void)
 {
-	account_t *current;
-
-	current = account_list_get_current ();
-	if (current)
-	{
-		return (current->_messages_number > 0);
-	}
-	return FALSE;
+    account_t *current;
+
+    current = account_list_get_current ();
+
+    if (current) {
+        return (current->_messages_number > 0);
+    }
+
+    return FALSE;
 }
 
diff --git a/sflphone-client-gnome/src/accountlist.h b/sflphone-client-gnome/src/accountlist.h
index 1ba201ffa8a4aca27da2210801465211bf24c71a..9aa8bb361a0b8b2383e9f9a3b2b34c4483d4e3db 100644
--- a/sflphone-client-gnome/src/accountlist.h
+++ b/sflphone-client-gnome/src/accountlist.h
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -28,7 +28,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __ACCOUNTLIST_H__
 #define __ACCOUNTLIST_H__
 
@@ -37,176 +37,175 @@
   * @brief A list to hold accounts.
   */
 
-/** @enum account_state_t 
+/** @enum account_state_t
   * This enum have all the states an account can take.
   */
-typedef enum
-{
-  /** Invalid state */
-   ACCOUNT_STATE_INVALID = 0,
-   /** The account is registered  */
-   ACCOUNT_STATE_REGISTERED,   
-   /** The account is not registered */
-   ACCOUNT_STATE_UNREGISTERED,   
-   /** The account is trying to register */
-   ACCOUNT_STATE_TRYING, 
-   /** Error state. The account is not registered */
-   ACCOUNT_STATE_ERROR,
-   /** An authentification error occured. Wrong password or wrong username. The account is not registered */
-   ACCOUNT_STATE_ERROR_AUTH,
-   /** The network is unreachable. The account is not registered */
-   ACCOUNT_STATE_ERROR_NETWORK,
-   /** Host is unreachable. The account is not registered */
-   ACCOUNT_STATE_ERROR_HOST,
-   /** Stun server configuration error. The account is not registered */
-   ACCOUNT_STATE_ERROR_CONF_STUN,
-   /** Stun server is not existing. The account is not registered */
-   ACCOUNT_STATE_ERROR_EXIST_STUN,
-   /** IP profile status **/
-   IP2IP_PROFILE_STATUS
+typedef enum {
+    /** Invalid state */
+    ACCOUNT_STATE_INVALID = 0,
+    /** The account is registered  */
+    ACCOUNT_STATE_REGISTERED,
+    /** The account is not registered */
+    ACCOUNT_STATE_UNREGISTERED,
+    /** The account is trying to register */
+    ACCOUNT_STATE_TRYING,
+    /** Error state. The account is not registered */
+    ACCOUNT_STATE_ERROR,
+    /** An authentification error occured. Wrong password or wrong username. The account is not registered */
+    ACCOUNT_STATE_ERROR_AUTH,
+    /** The network is unreachable. The account is not registered */
+    ACCOUNT_STATE_ERROR_NETWORK,
+    /** Host is unreachable. The account is not registered */
+    ACCOUNT_STATE_ERROR_HOST,
+    /** Stun server configuration error. The account is not registered */
+    ACCOUNT_STATE_ERROR_CONF_STUN,
+    /** Stun server is not existing. The account is not registered */
+    ACCOUNT_STATE_ERROR_EXIST_STUN,
+    /** IP profile status **/
+    IP2IP_PROFILE_STATUS
 } account_state_t;
 
 /** @struct account_t
   * @brief Account information.
-  * This struct holds information about an account.  All values are stored in the 
-  * properties GHashTable except the accountID and state.  This match how the 
+  * This struct holds information about an account.  All values are stored in the
+  * properties GHashTable except the accountID and state.  This match how the
   * server internally works and the dbus API to save and retrieve the accounts details.
-  * 
-  * To retrieve the Alias for example, use g_hash_table_lookup(a->properties, ACCOUNT_ALIAS).  
+  *
+  * To retrieve the Alias for example, use g_hash_table_lookup(a->properties, ACCOUNT_ALIAS).
   */
 
 typedef struct  {
- 	gchar * accountID;
-  	account_state_t state;
-  	gchar * protocol_state_description;
-  	guint protocol_state_code;  
-  	GHashTable * properties;
-  	GPtrArray * credential_information;
-
-	/* The codec list */
-	GQueue *codecs;
-  	guint _messages_number;
+    gchar * accountID;
+    account_state_t state;
+    gchar * protocol_state_description;
+    guint protocol_state_code;
+    GHashTable * properties;
+    GPtrArray * credential_information;
+
+    /* The codec list */
+    GQueue *codecs;
+    guint _messages_number;
 } account_t;
 
 
-/** 
- * This function initialize the account list. 
+/**
+ * This function initialize the account list.
  */
 void account_list_init ();
 
-/** 
- * This function empty and free the account list. 
+/**
+ * This function empty and free the account list.
  */
 void account_list_clean ();
 
-/** 
- * This function append an account to list. 
- * @param a The account you want to add 
+/**
+ * This function append an account to list.
+ * @param a The account you want to add
  */
 void account_list_add (account_t * a);
 
-/** 
- * This function append an account to list at a given position. 
+/**
+ * This function append an account to list at a given position.
  * @param a The account you want to add
  * @param pos THe position in the list to insert the account
  */
 void account_list_add_at_nth (account_t * a, guint pos);
 
-/** 
- * This function remove an account from list. 
+/**
+ * This function remove an account from list.
  * @param accountID The accountID of the account you want to remove
  */
 void account_list_remove (const gchar * accountID);
 
-/** 
- * Return the first account that corresponds to the state 
+/**
+ * Return the first account that corresponds to the state
  * @param state The state
- * @return account_t* An account or NULL 
+ * @return account_t* An account or NULL
  */
-account_t * account_list_get_by_state ( account_state_t state);
+account_t * account_list_get_by_state (account_state_t state);
 
 /**
  * @return guint The number of registered accounts in the list
  */
-guint account_list_get_registered_accounts( );
+guint account_list_get_registered_accounts();
 
-/** 
+/**
  * Return the number of accounts in the list
- * @return guint The number of accounts in the list 
+ * @return guint The number of accounts in the list
  */
-guint account_list_get_size ( );
+guint account_list_get_size ();
 
-/** 
+/**
  * Return the account at the nth position in the list
  * @param n The position of the account you want
- * @return An account or NULL 
+ * @return An account or NULL
  */
-account_t * account_list_get_nth ( guint n );
+account_t * account_list_get_nth (guint n);
 
-/** 
+/**
  * Return the current account struct
  *  @return The current account struct
  */
-account_t * account_list_get_current( );
+account_t * account_list_get_current();
 
-/** 
+/**
  * This function sets an account as the current one
  * @param current the account you want to set as current
  */
 void account_list_set_current (account_t *current);
 
-/** 
+/**
  * This function maps account_state_t enums to a description.
  * @param s The state
- * @return The full text description of the state 
+ * @return The full text description of the state
  */
-const gchar * account_state_name(account_state_t s);
+const gchar * account_state_name (account_state_t s);
 
-/** 
+/**
  * This function clear the list
  */
-void account_list_clear ( );
+void account_list_clear ();
 
-/** 
+/**
  * Return the account associated with an ID
  * @param accountID The ID of the account
- * @return An account or NULL 
+ * @return An account or NULL
  */
-account_t * account_list_get_by_id(gchar * accountID); 
+account_t * account_list_get_by_id (gchar * accountID);
 
-/** 
+/**
  * Move the account from an unit up in the account_list
  * @param index The current index in the list
  */
-void account_list_move_up( guint index );
+void account_list_move_up (guint index);
 
-/** 
+/**
  * Move the account from an unit down in the account_list
  * @param index The current index in the list
  */
-void account_list_move_down( guint index );
+void account_list_move_down (guint index);
 
 /**
  * Return the ID of the current default account
  * @return gchar* The id
  */
-gchar* account_list_get_current_id( void );
+gchar* account_list_get_current_id (void);
 
 /**
  * Returns the number of SIP accounts that have been configured
  */
-int account_list_get_sip_account_number( void );
+int account_list_get_sip_account_number (void);
 
 /**
  * Returns the number of IAX accounts that have been configured
  */
-int account_list_get_iax_account_number( void );
+int account_list_get_iax_account_number (void);
 
 gchar * account_list_get_ordered_list (void);
 
 guint account_list_get_position (account_t *account);
 
-gboolean account_list_current_account_has_mailbox (void);
+gboolean current_account_has_mailbox (void);
 
 guint current_account_get_message_number (void);
 
@@ -214,4 +213,4 @@ void current_account_set_message_number (guint nb);
 
 gboolean current_account_has_new_message (void);
 
-#endif 
+#endif
diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index 2f57ee5679ffc532d29cbae67a2c48bdce079e8d..d6c73039998f8fc6693fc6cc6bbfd45af0baace3 100644
--- a/sflphone-client-gnome/src/actions.c
+++ b/sflphone-client-gnome/src/actions.c
@@ -51,33 +51,38 @@
 #include <sys/ioctl.h>
 #include <linux/if.h>
 
-
+#include <widget/imwidget.h>
+#include <imwindow.h>
 
 GHashTable * ip2ip_profile=NULL;
 
-    void
+void
 sflphone_notify_voice_mail (const gchar* accountID , guint count)
 {
     gchar *id;
     gchar *current_id;
-	account_t *current;
+    account_t *current;
 
     // We want to notify only the current account; ie the first in the list
     id = g_strdup (accountID);
     current_id = account_list_get_current_id ();
 
+    DEBUG ("sflphone_notify_voice_mail begin");
+
     if (g_strcasecmp (id, current_id) != 0 || account_list_get_size() == 0)
         return;
 
-	// Set the number of voice messages for the current account
-	current_account_set_message_number (count);
-	current = account_list_get_current ();
+    // Set the number of voice messages for the current account
+    current_account_set_message_number (count);
+    current = account_list_get_current ();
+
+    // Update the voicemail tool button
+    update_voicemail_status ();
 
-	// Update the voicemail tool button
-	update_voicemail_status ();
+    if (current)
+        notify_voice_mails (count, current);
 
-	if (current)
-		notify_voice_mails (count, current);
+    DEBUG ("sflphone_notify_voice_mail end");
 }
 
 /*
@@ -86,23 +91,25 @@ sflphone_notify_voice_mail (const gchar* accountID , guint count)
  * registered account of the account list
  * Else, check if it an IP call. if not, popup an error message
  */
- 
-static gboolean _is_direct_call(callable_obj_t * c) {
 
-    if(g_strcasecmp(c->_accountID, EMPTY_ENTRY) == 0) {
-        if(!g_str_has_prefix (c->_peer_number, "sip:")) {
-            gchar * new_number = g_strconcat("sip:", c->_peer_number, NULL);
-            g_free(c->_peer_number);
+static gboolean _is_direct_call (callable_obj_t * c)
+{
+
+    if (g_strcasecmp (c->_accountID, EMPTY_ENTRY) == 0) {
+        if (!g_str_has_prefix (c->_peer_number, "sip:")) {
+            gchar * new_number = g_strconcat ("sip:", c->_peer_number, NULL);
+            g_free (c->_peer_number);
             c->_peer_number = new_number;
         }
+
         return 1;
     }
 
-    if(g_str_has_prefix (c->_peer_number, "sip:")) {
+    if (g_str_has_prefix (c->_peer_number, "sip:")) {
         return 1;
     }
 
-    if(g_str_has_prefix (c->_peer_number, "sips:")) {
+    if (g_str_has_prefix (c->_peer_number, "sips:")) {
         return 1;
     }
 
@@ -110,269 +117,262 @@ static gboolean _is_direct_call(callable_obj_t * c) {
 }
 
 
-    void
+void
 status_bar_display_account ()
 {
     gchar* msg;
     account_t* acc;
 
-    statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
+    statusbar_pop_message (__MSG_ACCOUNT_DEFAULT);
+
+    DEBUG ("status_bar_display_account begin");
 
     acc = account_list_get_current ();
-    if(acc){
-	status_tray_icon_online(TRUE);
-        msg = g_markup_printf_escaped("%s %s (%s)" ,
-                _("Using account"),
-                (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS),
-                (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE));
-    }
-    else
-    {
-	status_tray_icon_online(FALSE);
-        msg = g_markup_printf_escaped(_("No registered accounts"));
+
+    if (acc) {
+        status_tray_icon_online (TRUE);
+        msg = g_markup_printf_escaped ("%s %s (%s)" ,
+                                       _ ("Using account"),
+                                       (gchar*) g_hash_table_lookup (acc->properties , ACCOUNT_ALIAS),
+                                       (gchar*) g_hash_table_lookup (acc->properties , ACCOUNT_TYPE));
+    } else {
+        status_tray_icon_online (FALSE);
+        msg = g_markup_printf_escaped (_ ("No registered accounts"));
     }
-    statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
-    g_free(msg);
+
+    statusbar_push_message (msg, NULL,  __MSG_ACCOUNT_DEFAULT);
+    g_free (msg);
+
+    DEBUG ("status_bar_display_account_end");
 }
 
 
-    gboolean
+gboolean
 sflphone_quit ()
 {
     gboolean quit = FALSE;
-    guint count = calllist_get_size(current_calls);
-    if(count > 0){
+    guint count = calllist_get_size (current_calls);
+
+    if (count > 0) {
         quit = main_window_ask_quit();
-    }
-    else{
+    } else {
         quit = TRUE;
     }
 
-    if (quit)
-    {
-        // Save the history 
+    if (quit) {
+        // Save the history
         sflphone_save_history ();
 
-        dbus_unregister(getpid());
+        dbus_unregister (getpid());
         dbus_clean ();
         //call_list_clean(); TODO
         //account_list_clean()
         gtk_main_quit ();
     }
+
     return quit;
 }
 
-    void
-sflphone_hold (callable_obj_t * c )
+void
+sflphone_hold (callable_obj_t * c)
 {
     c->_state = CALL_STATE_HOLD;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_ringing(callable_obj_t * c )
+void
+sflphone_ringing (callable_obj_t * c)
 {
     c->_state = CALL_STATE_RINGING;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_hung_up( callable_obj_t * c)
+void
+sflphone_hung_up (callable_obj_t * c)
 {
-    calllist_remove( current_calls, c->_callID);
-    calltree_remove_call(current_calls, c, NULL);
+    DEBUG ("SFLphone: Hung up");
+
+    calllist_remove (current_calls, c->_callID);
+    calltree_remove_call (current_calls, c, NULL);
     c->_state = CALL_STATE_DIALING;
-    call_remove_all_errors(c);
+    call_remove_all_errors (c);
     update_actions();
+
+    // test wether the widget contain 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
+        im_widget_update_state (IM_WIDGET (c->_im_widget), FALSE);
+
 #if GTK_CHECK_VERSION(2,10,0)
-    status_tray_icon_blink( FALSE );
+    status_tray_icon_blink (FALSE);
 #endif
-}
-
-static hashtable_free(gpointer key, gpointer value, gpointer user_data)
-{
-    g_free(key);
-    g_free(value);
+    calltree_update_clock();
 }
 
 /** Internal to actions: Fill account list */
-void sflphone_fill_account_list (void) {
+void sflphone_fill_account_list (void)
+{
 
     gchar** array;
     gchar** accountID;
     unsigned int i;
-	int count;
-	GQueue *codeclist;
+    int count;
 
-	DEBUG("SFLphone: Fill account list");
+    DEBUG ("SFLphone: Fill account list");
 
-	count = current_account_get_message_number ();
+    count = current_account_get_message_number ();
 
     account_list_clear ();
 
-    array = (gchar **)dbus_account_list();
-    if(array)
-    {
-        for (accountID = array; *accountID; accountID++)
-        {
-            account_t * a = g_new0(account_t,1);
-            a->accountID = g_strdup(*accountID);
+    array = (gchar **) dbus_account_list();
+
+    if (array) {
+
+        for (accountID = array; *accountID; accountID++) {
+            account_t * a = g_new0 (account_t,1);
+            a->accountID = g_strdup (*accountID);
             a->credential_information = NULL;
-			// TODO Clean codec list QUEUE
-            account_list_add(a);
+            account_list_add (a);
         }
+
         g_strfreev (array);
     }
 
-    for( i = 0; i < account_list_get_size(); i++)
-    {
+    for (i = 0; i < account_list_get_size(); i++) {
         account_t  * a = account_list_get_nth (i);
-        GHashTable * details = (GHashTable *) dbus_account_details(a->accountID);
-        if( details == NULL )
+        GHashTable * details = (GHashTable *) dbus_account_details (a->accountID);
+
+        if (details == NULL)
             break;
+
         a->properties = details;
-                        
-        /* As this function might be called numberous time, we should free the 
+
+        /* As this function might be called numberous time, we should free the
          * previously allocated space to avoid memory leaks.
          */
 
         /* Fill the actual array of credentials */
-        int number_of_credential = dbus_get_number_of_credential(a->accountID);
-        if(number_of_credential) {
+        int number_of_credential = dbus_get_number_of_credential (a->accountID);
+
+        if (number_of_credential) {
             a->credential_information = g_ptr_array_new();
         } else {
             a->credential_information = NULL;
         }
-        
+
         int credential_index;
-        for(credential_index = 0; credential_index < number_of_credential; credential_index++) {
+
+        for (credential_index = 0; credential_index < number_of_credential; credential_index++) {
             GHashTable * credential_information = dbus_get_credential (a->accountID, credential_index);
-            g_ptr_array_add(a->credential_information, credential_information);
+            g_ptr_array_add (a->credential_information, credential_information);
         }
 
-        gchar * status = g_hash_table_lookup(details, REGISTRATION_STATUS);
-        if(strcmp(status, "REGISTERED") == 0)
-        {
+        gchar * status = g_hash_table_lookup (details, REGISTRATION_STATUS);
+
+        if (strcmp (status, "REGISTERED") == 0) {
             a->state = ACCOUNT_STATE_REGISTERED;
-        }
-        else if(strcmp(status, "UNREGISTERED") == 0)
-        {
+        } else if (strcmp (status, "UNREGISTERED") == 0) {
             a->state = ACCOUNT_STATE_UNREGISTERED;
-        }
-        else if(strcmp(status, "TRYING") == 0)
-        {
+        } else if (strcmp (status, "TRYING") == 0) {
             a->state = ACCOUNT_STATE_TRYING;
-        }
-        else if(strcmp(status, "ERROR") == 0)
-        {
+        } else if (strcmp (status, "ERROR") == 0) {
             a->state = ACCOUNT_STATE_ERROR;
-        }
-        else if(strcmp( status , "ERROR_AUTH") == 0 )
-        {
+        } else if (strcmp (status , "ERROR_AUTH") == 0) {
             a->state = ACCOUNT_STATE_ERROR_AUTH;
-        }
-        else if(strcmp( status , "ERROR_NETWORK") == 0 )
-        {
+        } else if (strcmp (status , "ERROR_NETWORK") == 0) {
             a->state = ACCOUNT_STATE_ERROR_NETWORK;
-        }
-        else if(strcmp( status , "ERROR_HOST") == 0 )
-        {
+        } else if (strcmp (status , "ERROR_HOST") == 0) {
             a->state = ACCOUNT_STATE_ERROR_HOST;
-        }
-        else if(strcmp( status , "ERROR_CONF_STUN") == 0 )
-        {
+        } else if (strcmp (status , "ERROR_CONF_STUN") == 0) {
             a->state = ACCOUNT_STATE_ERROR_CONF_STUN;
-        }
-        else if(strcmp( status , "ERROR_EXIST_STUN") == 0 )
-        {
+        } else if (strcmp (status , "ERROR_EXIST_STUN") == 0) {
             a->state = ACCOUNT_STATE_ERROR_EXIST_STUN;
-        }
-		else if (strcmp (status, "READY") == 0) {
-			a->state = IP2IP_PROFILE_STATUS;
-		}
-        else
-        {
+        } else if (strcmp (status, "READY") == 0) {
+            a->state = IP2IP_PROFILE_STATUS;
+        } else {
             a->state = ACCOUNT_STATE_INVALID;
         }
 
         gchar * code = NULL;
-        code = g_hash_table_lookup(details, REGISTRATION_STATE_CODE);
+        code = g_hash_table_lookup (details, REGISTRATION_STATE_CODE);
+
         if (code != NULL) {
-            a->protocol_state_code = atoi(code);
+            a->protocol_state_code = atoi (code);
         }
-        g_free(a->protocol_state_description);
-        a->protocol_state_description = g_hash_table_lookup(details, REGISTRATION_STATE_DESCRIPTION);
+
+        g_free (a->protocol_state_description);
+        a->protocol_state_description = g_hash_table_lookup (details, REGISTRATION_STATE_DESCRIPTION);
     }
 
-	// Set the current account message number
-	current_account_set_message_number (count);
+    // Set the current account message number
+    current_account_set_message_number (count);
 
-	sflphone_fill_codec_list ();
+    sflphone_fill_codec_list ();
 }
 
-gboolean sflphone_init() {
+gboolean sflphone_init()
+{
 
-    if(!dbus_connect ()){
+    if (!dbus_connect ()) {
 
-        main_window_error_message(_("Unable to connect to the SFLphone server.\nMake sure the daemon is running."));
+        main_window_error_message (_ ("Unable to connect to the SFLphone server.\nMake sure the daemon is running."));
         return FALSE;
-    }
-    else
-    {
-        dbus_register(getpid(), "Gtk+ Client");
+    } else {
+        dbus_register (getpid(), "Gtk+ Client");
 
-		// Init icons factory
-		init_icon_factory ();
+        // Init icons factory
+        init_icon_factory ();
 
-        current_calls = calltab_init(FALSE, CURRENT_CALLS);
-        contacts = calltab_init(TRUE, CONTACTS);
-        history = calltab_init(TRUE, HISTORY);
+        current_calls = calltab_init (FALSE, CURRENT_CALLS);
+        contacts = calltab_init (TRUE, CONTACTS);
+        history = calltab_init (TRUE, HISTORY);
 
         account_list_init ();
         codec_capabilities_load ();
-		conferencelist_init ();
+        conferencelist_init ();
 
         // Fetch the configured accounts
         sflphone_fill_account_list ();
 
-        // Fetch the ip2ip profile 
+        // Fetch the ip2ip profile
         sflphone_fill_ip2ip_profile();
-        
-		// Fetch the conference list
-		// sflphone_fill_conference_list();
+
+        // Fetch the conference list
+        // sflphone_fill_conference_list();
 
         return TRUE;
     }
 }
 
-void sflphone_fill_ip2ip_profile(void)
+void sflphone_fill_ip2ip_profile (void)
 {
     ip2ip_profile = (GHashTable *) dbus_get_ip2_ip_details();
 }
 
 void sflphone_get_ip2ip_properties (GHashTable **properties)
 {
-	*properties	= ip2ip_profile;
+    *properties	= ip2ip_profile;
 }
 
-    void
+void
 sflphone_hang_up()
 {
-    callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-    conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+    DEBUG ("SFLphone: Hang up");
 
-    if(selectedCall)
-    {
-        switch(selectedCall->_state)
-        {
+    if (selectedCall) {
+        switch (selectedCall->_state) {
             case CALL_STATE_DIALING:
                 dbus_hang_up (selectedCall);
                 break;
             case CALL_STATE_RINGING:
                 dbus_hang_up (selectedCall);
-                call_remove_all_errors(selectedCall);
+                call_remove_all_errors (selectedCall);
                 selectedCall->_state = CALL_STATE_DIALING;
                 //selectedCall->_stop = 0;
                 break;
@@ -381,36 +381,48 @@ sflphone_hang_up()
             case CALL_STATE_BUSY:
             case CALL_STATE_RECORD:
                 dbus_hang_up (selectedCall);
-                call_remove_all_errors(selectedCall);
+                call_remove_all_errors (selectedCall);
                 selectedCall->_state = CALL_STATE_DIALING;
                 set_timestamp (&selectedCall->_time_stop);
+
+                //if ( (im_window_get_nb_tabs() > 1) && selectedCall->_im_widget &&
+                //        ! (IM_WIDGET (selectedCall->_im_widget)->containText))
+                //    im_window_remove_tab (selectedCall->_im_widget);
+                //else
+                im_widget_update_state (IM_WIDGET (selectedCall->_im_widget), FALSE);
+
                 break;
             case CALL_STATE_FAILURE:
                 dbus_hang_up (selectedCall);
-                call_remove_all_errors(selectedCall);
+                call_remove_all_errors (selectedCall);
                 selectedCall->_state = CALL_STATE_DIALING;
                 break;
             case CALL_STATE_INCOMING:
                 dbus_refuse (selectedCall);
-                call_remove_all_errors(selectedCall);
+                call_remove_all_errors (selectedCall);
                 selectedCall->_state = CALL_STATE_DIALING;
-                DEBUG("from sflphone_hang_up : "); stop_notification();
+                DEBUG ("from sflphone_hang_up : ");
+                stop_notification();
                 break;
             case CALL_STATE_TRANSFERT:
                 dbus_hang_up (selectedCall);
-                call_remove_all_errors(selectedCall);
+                call_remove_all_errors (selectedCall);
                 set_timestamp (&selectedCall->_time_stop);
                 break;
             default:
-                WARN("Should not happen in sflphone_hang_up()!");
+                WARN ("Should not happen in sflphone_hang_up()!");
                 break;
         }
+    } else if (selectedConf) {
+        im_widget_update_state (IM_WIDGET (selectedConf->_im_widget), FALSE);
+        dbus_hang_up_conference (selectedConf);
     }
-    else if(selectedConf) {
-        dbus_hang_up_conference(selectedConf);
-    }
 
-    calltree_update_call(history, selectedCall, NULL);
+    calltree_update_call (history, selectedCall, NULL);
+
+    stop_call_clock (selectedCall);
+
+    calltree_update_clock();
 }
 
 
@@ -419,30 +431,39 @@ sflphone_conference_hang_up()
 {
     conference_obj_t * selectedConf = calltab_get_selected_conf();
 
-    if(selectedConf)
-	dbus_hang_up_conference(selectedConf);
+    if (selectedConf)
+        dbus_hang_up_conference (selectedConf);
 }
 
 
-    void
+void
 sflphone_pick_up()
 {
-    DEBUG("sflphone_pick_up\n");
+    DEBUG ("sflphone_pick_up\n");
     callable_obj_t * selectedCall = NULL;
-    selectedCall = calltab_get_selected_call(active_calltree);
-    
-    if(selectedCall)
-    {
-        switch(selectedCall->_state)
-        {
+    selectedCall = calltab_get_selected_call (active_calltree);
+
+    if (selectedCall) {
+        switch (selectedCall->_state) {
             case CALL_STATE_DIALING:
                 sflphone_place_call (selectedCall);
+
+                // if instant messaging window is visible, create new tab (deleted automatically if not used)
+                if (im_window_is_visible())
+                    im_widget_display ( (IMWidget **) (&selectedCall->_im_widget), NULL, selectedCall->_callID, NULL);
+
                 break;
             case CALL_STATE_INCOMING:
                 selectedCall->_history_state = INCOMING;
-                calltree_update_call( history, selectedCall, NULL);
+                calltree_update_call (history, selectedCall, NULL);
+
+                // if instant messaging window is visible, create new tab (deleted automatically if not used)
+                if (im_window_is_visible())
+                    im_widget_display ( (IMWidget **) (&selectedCall->_im_widget), NULL, selectedCall->_callID, NULL);
+
                 dbus_accept (selectedCall);
-                DEBUG("from sflphone_pick_up : "); stop_notification();
+                DEBUG ("from sflphone_pick_up : ");
+                stop_notification();
                 break;
             case CALL_STATE_HOLD:
                 sflphone_new_call();
@@ -459,27 +480,25 @@ sflphone_pick_up()
                 sflphone_new_call();
                 break;
             default:
-                WARN("Should not happen in sflphone_pick_up()!");
+                WARN ("Should not happen in sflphone_pick_up()!");
                 break;
         }
-    }
-    else {
+    } else {
         sflphone_new_call();
     }
 
 }
 
-    void
+void
 sflphone_on_hold ()
 {
-    callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-    conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
-
-    DEBUG("sflphone_on_hold");
-    if(selectedCall)
-    {
-        switch(selectedCall->_state)
-        {
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+    DEBUG ("sflphone_on_hold");
+
+    if (selectedCall) {
+        switch (selectedCall->_state) {
             case CALL_STATE_CURRENT:
                 dbus_hold (selectedCall);
                 break;
@@ -488,189 +507,175 @@ sflphone_on_hold ()
                 break;
 
             default:
-                WARN("Should not happen in sflphone_on_hold!");
+                WARN ("Should not happen in sflphone_on_hold!");
                 break;
         }
-    }
-    else if (selectedConf) {
-        dbus_hold_conference(selectedConf);
+    } else if (selectedConf) {
+        dbus_hold_conference (selectedConf);
     }
 }
 
-    void
+void
 sflphone_off_hold ()
 {
-    DEBUG("sflphone_off_hold");
-    callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-    conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
-
-    if(selectedCall)
-    {
-        switch(selectedCall->_state)
-        {
+    DEBUG ("sflphone_off_hold");
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+    if (selectedCall) {
+        switch (selectedCall->_state) {
             case CALL_STATE_HOLD:
                 dbus_unhold (selectedCall);
                 break;
             default:
-                WARN("Should not happen in sflphone_off_hold ()!");
+                WARN ("Should not happen in sflphone_off_hold ()!");
                 break;
         }
-    }
-    else if (selectedConf) {
+    } else if (selectedConf) {
 
-        
-        dbus_unhold_conference(selectedConf);
-    }
-    /*
-    if(dbus_get_is_recording(selectedCall))
-    {
-        DEBUG("Currently recording!");
-    }
-    else
-    {
-        DEBUG("Not recording currently");
+
+        dbus_unhold_conference (selectedConf);
     }
-    */
 }
 
 
-    void
-sflphone_fail( callable_obj_t * c )
+void
+sflphone_fail (callable_obj_t * c)
 {
     c->_state = CALL_STATE_FAILURE;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_busy( callable_obj_t * c )
+void
+sflphone_busy (callable_obj_t * c)
 {
     c->_state = CALL_STATE_BUSY;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_current( callable_obj_t * c )
+void
+sflphone_current (callable_obj_t * c)
 {
 
-    if( c->_state != CALL_STATE_HOLD )
+    if (c->_state != CALL_STATE_HOLD)
         set_timestamp (&c->_time_start);
+
     c->_state = CALL_STATE_CURRENT;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_record( callable_obj_t * c )
+void
+sflphone_record (callable_obj_t * c)
 {
-    if( c->_state != CALL_STATE_HOLD )
+    if (c->_state != CALL_STATE_HOLD)
         set_timestamp (&c->_time_start);
+
     c->_state = CALL_STATE_RECORD;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
+void
 sflphone_set_transfert()
 {
-    callable_obj_t * c = calltab_get_selected_call(current_calls);
-    if(c)
-    {
+    callable_obj_t * c = calltab_get_selected_call (current_calls);
+
+    if (c) {
         c->_state = CALL_STATE_TRANSFERT;
-        c->_trsft_to = g_strdup("");
-        calltree_update_call(current_calls, c, NULL);
+        c->_trsft_to = g_strdup ("");
+        calltree_update_call (current_calls, c, NULL);
     }
+
     update_actions();
 }
 
-    void
+void
 sflphone_unset_transfert()
 {
-    callable_obj_t * c = calltab_get_selected_call(current_calls);
-    if(c)
-    {
+    callable_obj_t * c = calltab_get_selected_call (current_calls);
+
+    if (c) {
         c->_state = CALL_STATE_CURRENT;
-        c->_trsft_to = g_strdup("");
-        calltree_update_call(current_calls, c, NULL);
+        c->_trsft_to = g_strdup ("");
+        calltree_update_call (current_calls, c, NULL);
     }
+
     update_actions();
 }
 
-    void
-sflphone_display_transfer_status(const gchar* message)
+void
+sflphone_display_transfer_status (const gchar* message)
 {
-    statusbar_push_message( message , __MSG_ACCOUNT_DEFAULT);
+    statusbar_push_message (message , NULL, __MSG_ACCOUNT_DEFAULT);
 }
 
-    void
+void
 sflphone_incoming_call (callable_obj_t * c)
 {
-	gchar *msg = "";
+    gchar *msg = "";
 
     c->_history_state = MISSED;
-    calllist_add ( current_calls, c );
-    calllist_add( history, c );
-    calltree_add_call( current_calls, c, NULL);
+    calllist_add (current_calls, c);
+    calllist_add (history, c);
+    calltree_add_call (current_calls, c, NULL);
     update_actions();
     calltree_display (current_calls);
-	
-	// Change the status bar if we are dealing with a direct SIP call
-    if(_is_direct_call(c)) {
-		msg = g_markup_printf_escaped (_("Direct SIP call"));
-        statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
-        statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
-        g_free(msg);
-	}
+
+    // Change the status bar if we are dealing with a direct SIP call
+    if (_is_direct_call (c)) {
+        msg = g_markup_printf_escaped (_ ("Direct SIP call"));
+        statusbar_pop_message (__MSG_ACCOUNT_DEFAULT);
+        statusbar_push_message (msg , NULL, __MSG_ACCOUNT_DEFAULT);
+        g_free (msg);
+    }
 }
 
-    void
-process_dialing(callable_obj_t * c, guint keyval, gchar * key)
+void
+process_dialing (callable_obj_t * c, guint keyval, gchar * key)
 {
     // We stop the tone
-    if(strlen(c->_peer_number) == 0 && c->_state != CALL_STATE_TRANSFERT){
-        dbus_start_tone( FALSE , 0 );
+    if (strlen (c->_peer_number) == 0 && c->_state != CALL_STATE_TRANSFERT) {
+        dbus_start_tone (FALSE , 0);
         //dbus_play_dtmf( key );
     }
 
-    DEBUG("process_dialing : keyval : %i",keyval);
-    DEBUG("process_dialing : key : %s",key);
+    DEBUG ("process_dialing : keyval : %i",keyval);
+    DEBUG ("process_dialing : key : %s",key);
 
-    switch (keyval)
-    {
+    switch (keyval) {
         case 65293: /* ENTER */
         case 65421: /* ENTER numpad */
-            sflphone_place_call(c);
+            sflphone_place_call (c);
             break;
         case 65307: /* ESCAPE */
-            sflphone_hang_up(c);
+            sflphone_hang_up (c);
             break;
         case 65288: /* BACKSPACE */
-            {  /* Brackets mandatory because of local vars */
-                gchar * before = c->_peer_number;
-                if(strlen(c->_peer_number) >= 1){
-
-					if (c->_state == CALL_STATE_TRANSFERT)
-					{
-                                                // Process backspace if and only if string not NULL
-                                                if(strlen(c->_trsft_to) > 0)
-                                                     c->_trsft_to = g_strndup (c->_trsft_to, strlen(c->_trsft_to) - 1);
-					}
-					else
-					{
-						c->_peer_number = g_strndup(c->_peer_number, strlen(c->_peer_number) -1);
-						g_free(before);
-						DEBUG("TO: backspace %s", c->_peer_number);
-                    }
-					calltree_update_call(current_calls, c, NULL);
-                }
-                else if(strlen(c->_peer_number) == 0)
-                {
-                    if(c->_state != CALL_STATE_TRANSFERT)
-                        dbus_hang_up(c);
+        {  /* Brackets mandatory because of local vars */
+            gchar * before = c->_peer_number;
+
+            if (strlen (c->_peer_number) >= 1) {
+
+                if (c->_state == CALL_STATE_TRANSFERT) {
+                    // Process backspace if and only if string not NULL
+                    if (strlen (c->_trsft_to) > 0)
+                        c->_trsft_to = g_strndup (c->_trsft_to, strlen (c->_trsft_to) - 1);
+                } else {
+                    c->_peer_number = g_strndup (c->_peer_number, strlen (c->_peer_number) -1);
+                    g_free (before);
+                    DEBUG ("TO: backspace %s", c->_peer_number);
                 }
+
+                calltree_update_call (current_calls, c, NULL);
+            } else if (strlen (c->_peer_number) == 0) {
+                if (c->_state != CALL_STATE_TRANSFERT)
+                    dbus_hang_up (c);
             }
-            break;
+        }
+        break;
         case 65289: /* TAB */
         case 65513: /* ALT */
         case 65507: /* CTRL */
@@ -678,33 +683,31 @@ process_dialing(callable_obj_t * c, guint keyval, gchar * key)
         case 65509: /* CAPS */
             break;
         default:
+
             // if (keyval < 255 || (keyval >65453 && keyval < 65466))
-            if (keyval < 127 || (keyval > 65400 && keyval < 65466))
-            {
+            if (keyval < 127 || (keyval > 65400 && keyval < 65466)) {
 
-                if (c->_state == CALL_STATE_TRANSFERT)
-                {
-                    c->_trsft_to = g_strconcat(c->_trsft_to, key, NULL);
-                }
-                else
-                {
-                    dbus_play_dtmf( key );
-                    c->_peer_number = g_strconcat(c->_peer_number, key, NULL);
+                if (c->_state == CALL_STATE_TRANSFERT) {
+                    c->_trsft_to = g_strconcat (c->_trsft_to, key, NULL);
+                } else {
+                    dbus_play_dtmf (key);
+                    c->_peer_number = g_strconcat (c->_peer_number, key, NULL);
                 }
 
-                if(c->_state == CALL_STATE_DIALING)
-                {
+                if (c->_state == CALL_STATE_DIALING) {
                     //g_free(c->_peer_name);
                     //c->_peer_name = g_strconcat("\"\" <", c->_peer_number, ">", NULL);
                 }
-                calltree_update_call(current_calls, c, NULL);
+
+                calltree_update_call (current_calls, c, NULL);
             }
+
             break;
     }
 }
 
 
-    callable_obj_t *
+callable_obj_t *
 sflphone_new_call()
 {
 
@@ -712,18 +715,18 @@ sflphone_new_call()
     callable_obj_t * current_selected_call;
     gchar *peer_name, *peer_number;
 
-    DEBUG("sflphone_new_call");
+    DEBUG ("Actions: Sflphone new call");
 
-    current_selected_call = calltab_get_selected_call(current_calls);
+    current_selected_call = calltab_get_selected_call (current_calls);
 
-    if ((current_selected_call != NULL) && (current_selected_call->_confID == NULL))
-	sflphone_on_hold();
+    if ( (current_selected_call != NULL) && (current_selected_call->_confID == NULL))
+        sflphone_on_hold();
 
     // Play a tone when creating a new call
-    if( calllist_get_size(current_calls) == 0 )
-        dbus_start_tone( TRUE , (current_account_has_new_message ()  > 0)? TONE_WITH_MESSAGE : TONE_WITHOUT_MESSAGE) ;
+    if (calllist_get_size (current_calls) == 0)
+        dbus_start_tone (TRUE , (current_account_has_new_message ()  > 0) ? TONE_WITH_MESSAGE : TONE_WITHOUT_MESSAGE) ;
 
-    peer_number = g_strdup("");
+    peer_number = g_strdup ("");
     peer_name = g_strdup ("");
     create_new_call (CALL, CALL_STATE_DIALING, "", "", peer_name, peer_number, &c);
 
@@ -737,50 +740,47 @@ sflphone_new_call()
 }
 
 
-    void
-sflphone_keypad( guint keyval, gchar * key)
+void
+sflphone_keypad (guint keyval, gchar * key)
 {
-    callable_obj_t * c = calltab_get_selected_call(current_calls);
+    callable_obj_t * c = calltab_get_selected_call (current_calls);
+
+    if ( (active_calltree != current_calls) || (active_calltree == current_calls && !c)) {
+        DEBUG ("Not in a call, not dialing, create a new call");
 
-    if((active_calltree != current_calls) || (active_calltree == current_calls && !c))
-    {
-        DEBUG("Not in a call, not dialing, create a new call");
         //dbus_play_dtmf(key);
-        switch (keyval)
-        {
+        switch (keyval) {
             case 65293: /* ENTER */
             case 65421: /* ENTER numpad */
             case 65307: /* ESCAPE */
                 break;
             default:
                 calltree_display (current_calls);
-                process_dialing(sflphone_new_call(), keyval, key);
+                process_dialing (sflphone_new_call(), keyval, key);
                 break;
         }
-    }
-    else if(c)
-    {
-        DEBUG("Call is non-zero");
-        switch(c->_state)
-        {
+    } else if (c) {
+        DEBUG ("Call is non-zero");
+
+        switch (c->_state) {
             case CALL_STATE_DIALING: // Currently dialing => edit number
-                DEBUG("Writing a number");
-                process_dialing(c, keyval, key);
+                DEBUG ("Writing a number");
+                process_dialing (c, keyval, key);
                 break;
             case CALL_STATE_RECORD:
             case CALL_STATE_CURRENT:
-                switch (keyval)
-                {
+
+                switch (keyval) {
                     case 65307: /* ESCAPE */
-                        dbus_hang_up(c);
+                        dbus_hang_up (c);
                         set_timestamp (&c->_time_stop);
-                        calltree_update_call(history, c, NULL);
+                        calltree_update_call (history, c, NULL);
                         break;
                     default:
                         // To play the dtmf when calling mail box for instance
-                        dbus_play_dtmf(key);
-                        if (keyval < 255 || (keyval >65453 && keyval < 65466))
-                        {
+                        dbus_play_dtmf (key);
+
+                        if (keyval < 255 || (keyval >65453 && keyval < 65466)) {
                             //gchar * temp = g_strconcat(call_get_number(c), key, NULL);
                             //gchar * before = c->from;
                             //c->from = g_strconcat("\"",call_get_name(c) ,"\" <", temp, ">", NULL);
@@ -788,420 +788,431 @@ sflphone_keypad( guint keyval, gchar * key)
                             //g_free(temp);
                             //update_callable_obj_tree(current_calls,c);
                         }
+
                         break;
                 }
+
                 break;
             case CALL_STATE_INCOMING:
-                switch (keyval)
-                {
+
+                switch (keyval) {
                     case 65293: /* ENTER */
                     case 65421: /* ENTER numpad */
                         c->_history_state = INCOMING;
-                        calltree_update_call(history, c, NULL);
-                        dbus_accept(c);
-                        DEBUG("from sflphone_keypad ( enter ) : "); stop_notification();
+                        calltree_update_call (history, c, NULL);
+                        dbus_accept (c);
+                        DEBUG ("from sflphone_keypad ( enter ) : ");
+                        stop_notification();
                         break;
                     case 65307: /* ESCAPE */
-                        dbus_refuse(c);
-                        DEBUG("from sflphone_keypad ( escape ) : "); stop_notification();
+                        dbus_refuse (c);
+                        DEBUG ("from sflphone_keypad ( escape ) : ");
+                        stop_notification();
                         break;
                 }
+
                 break;
             case CALL_STATE_TRANSFERT:
-                switch (keyval)
-                {
+
+                switch (keyval) {
                     case 65293: /* ENTER */
                     case 65421: /* ENTER numpad */
-                        dbus_transfert(c);
+                        dbus_transfert (c);
                         set_timestamp (&c->_time_stop);
                         break;
                     case 65307: /* ESCAPE */
-                        sflphone_unset_transfert(c);
+                        sflphone_unset_transfert (c);
                         break;
                     default: // When a call is on transfert, typing new numbers will add it to c->_peer_number
-                        process_dialing(c, keyval, key);
+                        process_dialing (c, keyval, key);
                         break;
                 }
+
                 break;
             case CALL_STATE_HOLD:
-                switch (keyval)
-                {
+
+                switch (keyval) {
                     case 65293: /* ENTER */
                     case 65421: /* ENTER numpad */
-                        dbus_unhold(c);
+                        dbus_unhold (c);
                         break;
                     case 65307: /* ESCAPE */
-                        dbus_hang_up(c);
+                        dbus_hang_up (c);
                         break;
                     default: // When a call is on hold, typing new numbers will create a new call
-                        process_dialing(sflphone_new_call(), keyval, key);
+                        process_dialing (sflphone_new_call(), keyval, key);
                         break;
                 }
+
                 break;
             case CALL_STATE_RINGING:
             case CALL_STATE_BUSY:
             case CALL_STATE_FAILURE:
+
                 //c->_stop = 0;
-                switch (keyval)
-                {
+                switch (keyval) {
                     case 65307: /* ESCAPE */
-                        dbus_hang_up(c);
+                        dbus_hang_up (c);
                         //c->_stop = 0;
-                        calltree_update_call(history, c, NULL);
+                        calltree_update_call (history, c, NULL);
                         break;
                 }
+
                 break;
             default:
                 break;
         }
 
-    }
-    else {
+    } else {
         sflphone_new_call();
     }
 }
 
-static int _place_direct_call(const callable_obj_t * c) {
+static int _place_direct_call (const callable_obj_t * c)
+{
     if (c->_state == CALL_STATE_DIALING) {
         dbus_place_call (c);
     } else {
         return -1;
     }
+
     return 0;
 }
 
-static int _place_registered_call(callable_obj_t * c) {
+static int _place_registered_call (callable_obj_t * c)
+{
 
     account_t * current = NULL;
-  
-    if(c == NULL) {
-        DEBUG("callable_obj_t is NULL in _place_registered_call");
+
+    if (c == NULL) {
+        DEBUG ("Actions: Callable_obj_t is NULL in _place_registered_call");
         return -1;
     }
-    
+
     if (c->_state != CALL_STATE_DIALING) {
         return -1;
     }
-  
-    if(g_strcasecmp(c->_peer_number, "") == 0) {
+
+    if (g_strcasecmp (c->_peer_number, "") == 0) {
         return -1;
     }
-    
-    if( account_list_get_size() == 0 ) {
+
+    if (account_list_get_size() == 0) {
         notify_no_accounts();
-        sflphone_fail(c);
+        sflphone_fail (c);
         return -1;
-    } 
-    
-    if( account_list_get_by_state( ACCOUNT_STATE_REGISTERED ) == NULL ) {
+    }
+
+    if (account_list_get_by_state (ACCOUNT_STATE_REGISTERED) == NULL) {
+        DEBUG ("Actions: No registered account, cannot make a call");
         notify_no_registered_accounts();
-        sflphone_fail(c);
+        sflphone_fail (c);
         return -1;
     }
-    
-    if(g_strcasecmp(c->_accountID, "") != 0) {
-        current = account_list_get_by_id(c->_accountID);
+
+    DEBUG ("Actions: Get account for this call");
+
+    if (g_strcasecmp (c->_accountID, "") != 0) {
+        DEBUG ("Actions: Account %s already set for this call", c->_accountID);
+        current = account_list_get_by_id (c->_accountID);
     } else {
+        DEBUG ("Actions: No account set for this call, use first of the list");
         current = account_list_get_current();
     }
 
-    if(current == NULL) { 
-        DEBUG("Unexpected condition: account_t is NULL in %s at %d for accountID %s", __FILE__, __LINE__, c->_accountID);
+    if (current == NULL) {
+        DEBUG ("Actions: Unexpected condition: account_t is NULL in %s at %d for accountID %s", __FILE__, __LINE__, c->_accountID);
         return -1;
-    }   
-                        
-    if(g_strcasecmp(g_hash_table_lookup( current->properties, "Status"),"REGISTERED")==0) {
+    }
+
+    if (g_strcasecmp (g_hash_table_lookup (current->properties, "Status"),"REGISTERED") ==0) {
         /* The call is made with the current account */
-        c->_accountID = current->accountID;
-        dbus_place_call(c);
+        // free memory for previous account id and get a new one
+        g_free (c->_accountID);
+        c->_accountID = g_strdup (current->accountID);
+        dbus_place_call (c);
     } else {
-       /* Place the call with the first registered account
-        * and switch the current account.
-        * If we are here, we can be sure that there is at least one. 
-        */
-        current = account_list_get_by_state( ACCOUNT_STATE_REGISTERED );
-        c->_accountID = current->accountID;
-        dbus_place_call(c);
-        notify_current_account( current );
-    }        
+        /* Place the call with the first registered account
+         * and switch the current account.
+         * If we are here, we can be sure that there is at least one.
+         */
+        current = account_list_get_by_state (ACCOUNT_STATE_REGISTERED);
+        g_free (c->_accountID);
+        c->_accountID = g_strdup (current->accountID);
+        dbus_place_call (c);
+        notify_current_account (current);
+    }
 
     c->_history_state = OUTGOING;
-    calllist_add(history, c);                
+    calllist_add (history, c);
     return 0;
 }
 
-    void
-sflphone_place_call ( callable_obj_t * c )
+void
+sflphone_place_call (callable_obj_t * c)
 {
-	gchar *msg = "";
+    gchar *msg = "";
+
+    DEBUG ("Actions: Placing call with %s @ %s and accountid %s", c->_peer_name, c->_peer_number, c->_accountID);
 
-    DEBUG("Placing call with %s @ %s and accountid %s", c->_peer_name, c->_peer_number, c->_accountID);
-    
-    if(c == NULL) {
-        DEBUG("Unexpected condition: callable_obj_t is null in %s at %d", __FILE__, __LINE__);
+    if (c == NULL) {
+        DEBUG ("Actions: Unexpected condition: callable_obj_t is null in %s at %d", __FILE__, __LINE__);
         return;
     }
 
-    if(_is_direct_call(c)) {
-		msg = g_markup_printf_escaped (_("Direct SIP call"));
-        statusbar_pop_message(__MSG_ACCOUNT_DEFAULT);
-        statusbar_push_message( msg , __MSG_ACCOUNT_DEFAULT);
-        g_free(msg);
-        if(_place_direct_call(c) < 0) {
-            DEBUG("An error occured while placing direct call in %s at %d", __FILE__, __LINE__);
+    if (_is_direct_call (c)) {
+        msg = g_markup_printf_escaped (_ ("Direct SIP call"));
+        statusbar_pop_message (__MSG_ACCOUNT_DEFAULT);
+        statusbar_push_message (msg , NULL, __MSG_ACCOUNT_DEFAULT);
+        g_free (msg);
+
+        if (_place_direct_call (c) < 0) {
+            DEBUG ("An error occured while placing direct call in %s at %d", __FILE__, __LINE__);
             return;
         }
     } else {
-        if(_place_registered_call(c) < 0) {
-            DEBUG("An error occured while placing registered call in %s at %d", __FILE__, __LINE__);
+        if (_place_registered_call (c) < 0) {
+            DEBUG ("An error occured while placing registered call in %s at %d", __FILE__, __LINE__);
             return;
         }
     }
 }
 
 
-    void
-sflphone_detach_participant(const gchar* callID)
+void
+sflphone_detach_participant (const gchar* callID)
 {
-    DEBUG("Action: Detach participant from conference");
+    DEBUG ("Action: Detach participant from conference");
+
+    if (callID == NULL) {
+        callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+        DEBUG ("Action: Detach participant %s", selectedCall->_callID);
 
-    if(callID == NULL) {
-        callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-	DEBUG("Action: Detach participant %s", selectedCall->_callID);
+        if (selectedCall->_confID) {
+            g_free (selectedCall->_confID);
+            selectedCall->_confID = NULL;
+        }
 
-	if(selectedCall->_confID) {
-	    g_free(selectedCall->_confID);
-	    selectedCall->_confID = NULL;
-	}
+        // Instant messaging widget should have been deactivated during the conference
+        if (selectedCall->_im_widget)
+            im_widget_update_state (IM_WIDGET (selectedCall->_im_widget), TRUE);
 
-	calltree_remove_call(current_calls, selectedCall, NULL);
-	calltree_add_call(current_calls, selectedCall, NULL);
-        dbus_detach_participant(selectedCall->_callID);
-    }
-    else {
-	callable_obj_t * selectedCall = calllist_get(current_calls, callID);
-	DEBUG("Action: Darticipant %s", callID);
-
-	if(selectedCall->_confID) {
-	    g_free(selectedCall->_confID); 
-	    selectedCall->_confID = NULL;
-	}
-
-	calltree_remove_call(current_calls, selectedCall, NULL);
-	calltree_add_call(current_calls, selectedCall, NULL);
-	dbus_detach_participant(callID);	
+        calltree_remove_call (current_calls, selectedCall, NULL);
+        calltree_add_call (current_calls, selectedCall, NULL);
+        dbus_detach_participant (selectedCall->_callID);
+    } else {
+        callable_obj_t * selectedCall = calllist_get (current_calls, callID);
+        DEBUG ("Action: Darticipant %s", callID);
+
+        if (selectedCall->_confID) {
+            g_free (selectedCall->_confID);
+            selectedCall->_confID = NULL;
+        }
+
+        // Instant messagin widget should have been deactivated during the conference
+        if (selectedCall->_im_widget)
+            im_widget_update_state (IM_WIDGET (selectedCall->_im_widget), TRUE);
+
+        calltree_remove_call (current_calls, selectedCall, NULL);
+        calltree_add_call (current_calls, selectedCall, NULL);
+        dbus_detach_participant (callID);
     }
-     
+
 }
 
-    void
-sflphone_join_participant(const gchar* sel_callID, const gchar* drag_callID)
+void
+sflphone_join_participant (const gchar* sel_callID, const gchar* drag_callID)
 {
-    DEBUG("sflphone join participants %s and %s", sel_callID, drag_callID);
+    DEBUG ("sflphone join participants %s and %s", sel_callID, drag_callID);
 
-    
-    dbus_join_participant(sel_callID, drag_callID);
+
+    dbus_join_participant (sel_callID, drag_callID);
 }
 
 
-    void
-sflphone_add_participant(const gchar* callID, const gchar* confID)
+void
+sflphone_add_participant (const gchar* callID, const gchar* confID)
 {
-    DEBUG("sflphone add participant %s to conference %s", callID, confID);
+    DEBUG ("sflphone add participant %s to conference %s", callID, confID);
 
-    dbus_add_participant(callID, confID);
+    dbus_add_participant (callID, confID);
 }
 
-    void
+void
 sflphone_add_conference()
 {
-    DEBUG("sflphone add a conference to tree view");
+    DEBUG ("sflphone add a conference to tree view");
     // dbus_join_participant(selected_call, dragged_call);
 }
 
-    void
-sflphone_join_conference(const gchar* sel_confID, const gchar* drag_confID)
+void
+sflphone_join_conference (const gchar* sel_confID, const gchar* drag_confID)
 {
-    DEBUG("sflphone join two conference");
-    dbus_join_conference(sel_confID, drag_confID);
+    DEBUG ("sflphone join two conference");
+    dbus_join_conference (sel_confID, drag_confID);
 }
 
 void
-sflphone_add_main_participant(const conference_obj_t * c)
+sflphone_add_main_participant (const conference_obj_t * c)
 {
-    DEBUG("sflphone add main participant");
-    dbus_add_main_participant(c->_confID);
+    DEBUG ("sflphone add main participant");
+    dbus_add_main_participant (c->_confID);
 }
 
 void
-sflphone_conference_on_hold(const conference_obj_t * c)
+sflphone_conference_on_hold (const conference_obj_t * c)
 {
-    DEBUG("sflphone_conference_on_hold");
-    dbus_hold_conference(c);
+    DEBUG ("sflphone_conference_on_hold");
+    dbus_hold_conference (c);
 }
 
 void
-sflphone_conference_off_hold(const conference_obj_t * c)
+sflphone_conference_off_hold (const conference_obj_t * c)
 {
-    DEBUG("sflphone_conference_off_hold");
-    dbus_unhold_conference(c);
+    DEBUG ("sflphone_conference_off_hold");
+    dbus_unhold_conference (c);
 }
 
 
-    void
+void
 sflphone_rec_call()
 {
-    callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-    conference_obj_t * selectedConf = calltab_get_selected_conf(current_calls);
-
-    if(selectedCall)
-    {
-	dbus_set_record(selectedCall->_callID);
-	switch(selectedCall->_state)
-	{
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (current_calls);
+
+    if (selectedCall) {
+        DEBUG ("SFLphone: Set record for selected call");
+        dbus_set_record (selectedCall->_callID);
+
+        switch (selectedCall->_state) {
             case CALL_STATE_CURRENT:
-		selectedCall->_state = CALL_STATE_RECORD;
-		break;
+                selectedCall->_state = CALL_STATE_RECORD;
+                break;
             case CALL_STATE_RECORD:
-		selectedCall->_state = CALL_STATE_CURRENT;
-		break;
+                selectedCall->_state = CALL_STATE_CURRENT;
+                break;
             default:
-		WARN("Should not happen in sflphone_off_hold ()!");
-		break;
-	}
-    }
-    else if(selectedConf)
-    {
-	dbus_set_record(selectedConf->_confID);
-	switch(selectedConf->_state)
-	{
+                WARN ("Should not happen in sflphone_off_hold ()!");
+                break;
+        }
+    } else if (selectedConf) {
+        DEBUG ("SFLphone: Set record for selected conf");
+        dbus_set_record (selectedConf->_confID);
+
+        switch (selectedConf->_state) {
             case CONFERENCE_STATE_ACTIVE_ATACHED:
-		selectedCall->_state = CONFERENCE_STATE_RECORD;
-		break;
+                selectedConf->_state = CONFERENCE_STATE_RECORD;
+                break;
             case CONFERENCE_STATE_RECORD:
-		selectedCall->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-		break;
+                selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+                break;
             default:
-		WARN("Should not happen in sflphone_off_hold ()!");
-		break;
-	}
+                WARN ("Should not happen in sflphone_off_hold ()!");
+                break;
+        }
     }
-    calltree_update_call(current_calls, selectedCall, NULL);
-    update_actions();
 
-    // gchar* codname = sflphone_get_current_codec_name();
-    // DEBUG("sflphone_get_current_codec_name: %s",codname);
+    calltree_update_call (current_calls, selectedCall, NULL);
+    update_actions();
 }
 
-void sflphone_fill_codec_list () {
+void sflphone_fill_codec_list ()
+{
 
-	guint account_list_size;
-	guint i;
-	account_t *current = NULL;
-	gchar** codecs = NULL;
+    guint account_list_size;
+    guint i;
+    account_t *current = NULL;
 
-	DEBUG("SFLphone: Fill codec list");
+    DEBUG ("SFLphone: Fill codec list");
 
-	account_list_size = account_list_get_size ();
+    account_list_size = account_list_get_size ();
 
-	for (i=0; i<account_list_size; i++)
-	{
-		current = account_list_get_nth (i);
-		if (current) {
-			sflphone_fill_codec_list_per_account (&current);
-		}
-	}
+    for (i=0; i<account_list_size; i++) {
+        current = account_list_get_nth (i);
 
-	/*
-	if (codec_list_get_size() == 0) {
+        if (current) {
+            sflphone_fill_codec_list_per_account (&current);
+        }
+    }
 
-		// Error message
-		ERROR ("No audio codecs found");
-        dbus_unregister(getpid());
-        exit(0);
-    }*/
 }
 
-void sflphone_fill_codec_list_per_account (account_t **account) {
+void sflphone_fill_codec_list_per_account (account_t **account)
+{
 
     gchar **order;
-    gchar** details;
     gchar** pl;
-    gchar *accountID;
     GQueue *codeclist;
     gboolean active = FALSE;
 
-    order = (gchar**) dbus_get_active_codec_list ((*account)->accountID);
+    order = (gchar**) dbus_get_active_codec_list ( (*account)->accountID);
 
     codeclist = (*account)->codecs;
 
     // First clean the list
     codec_list_clear (&codeclist);
 
-    if(!(*order))
-      ERROR("SFLphone: No codec list provided");
-
-    for (pl=order; *pl; pl++)
-    {
-      codec_t * cpy = NULL;
-		
-      // Each account will have a copy of the system-wide capabilities
-      codec_create_new_from_caps (codec_list_get_by_payload ((gconstpointer) (size_t)atoi (*pl), NULL), &cpy);
-      if (cpy) {
-	  cpy->is_active = TRUE;
-	  codec_list_add (cpy, &codeclist);
-      }
-      else
-	ERROR ("SFLphone: Couldn't find codec");
+    if (! (*order))
+        ERROR ("SFLphone: No codec list provided");
+
+    for (pl=order; *pl; pl++) {
+        codec_t * cpy = NULL;
+
+        // Each account will have a copy of the system-wide capabilities
+        codec_create_new_from_caps (codec_list_get_by_payload ( (gconstpointer) (size_t) atoi (*pl), NULL), &cpy);
+
+        if (cpy) {
+            cpy->is_active = TRUE;
+            codec_list_add (cpy, &codeclist);
+        } else
+            ERROR ("SFLphone: Couldn't find codec");
     }
 
-	// Test here if we just added some active codec.
-	active = (codeclist->length == 0) ? TRUE : FALSE;
-
-	guint caps_size = codec_list_get_size (), i=0;
-
-	for (i=0; i<caps_size; i++) {
-			
-		codec_t * current_cap = capabilities_get_nth (i);
-		// Check if this codec has already been enabled for this account
-		if (codec_list_get_by_payload ( (gconstpointer) (size_t)(current_cap->_payload), codeclist) == NULL) {
-			// codec_t *cpy;
-			// codec_create_new_from_caps (current_cap, &cpy);
-			current_cap->is_active = active;
-			codec_list_add (current_cap, &codeclist);
-		}
-		else {
-		}
-
-	}
-	
-	(*account)->codecs = codeclist; 
-	
-	// call dbus function with array of strings
-	codec_list_update_to_daemon (*account);
-	
+    // Test here if we just added some active codec.
+    active = (codeclist->length == 0) ? TRUE : FALSE;
+
+    guint caps_size = codec_list_get_size (), i=0;
+
+    for (i=0; i<caps_size; i++) {
+
+        codec_t * current_cap = capabilities_get_nth (i);
+
+        // Check if this codec has already been enabled for this account
+        if (codec_list_get_by_payload ( (gconstpointer) (size_t) (current_cap->_payload), codeclist) == NULL) {
+            // codec_t *cpy;
+            // codec_create_new_from_caps (current_cap, &cpy);
+            current_cap->is_active = active;
+            codec_list_add (current_cap, &codeclist);
+        } else {
+        }
+
+    }
+
+    (*account)->codecs = codeclist;
+
+    // call dbus function with array of strings
+    codec_list_update_to_daemon (*account);
+
 }
 
 void sflphone_fill_call_list (void)
 {
 
-    gchar** calls = (gchar**)dbus_get_call_list();
+    gchar** calls = (gchar**) dbus_get_call_list();
     gchar** pl;
     GHashTable *call_details;
     callable_obj_t *c;
     gchar *callID;
 
-    DEBUG("sflphone_fill_call_list");
+    DEBUG ("sflphone_fill_call_list");
 
-    if(calls)
-    {
-        for(pl=calls; *calls; calls++)
-        {
-            c = g_new0(callable_obj_t, 1);
-            callID = (gchar*)(*calls);
-            call_details = dbus_get_call_details(callID);
+    if (calls) {
+        for (pl=calls; *calls; calls++) {
+            c = g_new0 (callable_obj_t, 1);
+            callID = (gchar*) (*calls);
+            call_details = dbus_get_call_details (callID);
             create_new_call_from_details (callID, call_details, &c);
-            c->_callID = g_strdup(callID);
+            c->_callID = g_strdup (callID);
             c->_zrtp_confirmed = FALSE;
             // Add it to the list
             DEBUG ("Add call retrieved from server side: %s\n", c->_callID);
@@ -1213,7 +1224,7 @@ void sflphone_fill_call_list (void)
 }
 
 
-void sflphone_fill_conference_list(void)
+void sflphone_fill_conference_list (void)
 {
     // TODO Fetch the active conferences at client startup
 
@@ -1223,28 +1234,26 @@ void sflphone_fill_conference_list(void)
     gchar* conf_id;
     conference_obj_t* conf;
 
-    DEBUG("sflphone_fill_conference_list");
+    DEBUG ("sflphone_fill_conference_list");
 
     conferences = dbus_get_conference_list();
 
-    if(conferences)
-    {
-	for (pl = conferences; *conferences; conferences++)
-	{
-	    conf = g_new0(conference_obj_t, 1);
-	    conf_id = (gchar*)(*conferences);
+    if (conferences) {
+        for (pl = conferences; *conferences; conferences++) {
+            conf = g_new0 (conference_obj_t, 1);
+            conf_id = (gchar*) (*conferences);
 
-	    DEBUG("   fetching conference: %s", conf_id);
+            DEBUG ("   fetching conference: %s", conf_id);
 
-	    conference_details = (GHashTable*) dbus_get_conference_details(conf_id);
-	    
-	    create_new_conference_from_details (conf_id, conference_details, &conf);
-	    
-	    conf->_confID = g_strdup(conf_id);	    
+            conference_details = (GHashTable*) dbus_get_conference_details (conf_id);
 
-	    conferencelist_add(conf);
-	    calltree_add_conference (current_calls, conf);
-	}
+            create_new_conference_from_details (conf_id, conference_details, &conf);
+
+            conf->_confID = g_strdup (conf_id);
+
+            conferencelist_add (conf);
+            calltree_add_conference (current_calls, conf);
+        }
     }
 }
 
@@ -1252,59 +1261,61 @@ void sflphone_fill_history (void)
 {
     GHashTable *entries;
     GHashTableIter iter;
-    gpointer key, key_to_min, value;
+    gpointer key, value;
+    gpointer key_to_min = NULL;
     callable_obj_t *history_entry;
-
-    int timestamp, min_timestamp;
+    int timestamp = 0;
+    int min_timestamp = 0;
 
     gboolean is_first;
 
     DEBUG ("Loading history ...");
 
     entries = dbus_get_history ();
+
     if (entries) {
 
-	while(g_hash_table_size (entries)) {
+        while (g_hash_table_size (entries)) {
+
+            is_first = TRUE;
+
+            // find lowest timestamp in map
+            g_hash_table_iter_init (&iter, entries);
 
-	    is_first = TRUE;
+            while (g_hash_table_iter_next (&iter, &key, &value))  {
 
-	    // find lowest timestamp in map
-	    g_hash_table_iter_init (&iter, entries);
-	    while (g_hash_table_iter_next (&iter, &key, &value))  {
+                timestamp = atoi ( (gchar*) key);
 
-	        timestamp = atoi((gchar*)key);
+                if (is_first) {
 
-	        if(is_first) {
+                    // first iteration of the loop, init search
+                    min_timestamp = timestamp;
+                    key_to_min = key;
 
-		    // first iteration of the loop, init search
-		    min_timestamp = timestamp;
-		    key_to_min = key;
+                    is_first = FALSE;
+                } else {
 
-		    is_first = FALSE;
-		}
-		else {
+                    // if lower, replace
+                    if (timestamp < min_timestamp) {
 
-		    // if lower, replace
-		    if(timestamp < min_timestamp) {
+                        min_timestamp = timestamp;
+                        key_to_min = key;
+                    }
+                }
+            }
 
-		        min_timestamp = timestamp;
-			key_to_min = key;
-		    }
-		}
-	    }
+            if (g_hash_table_lookup_extended (entries, key_to_min, &key, &value)) {
 
-	    if(g_hash_table_lookup_extended(entries, key_to_min, &key, &value)) {
+                // do something with key and value
+                create_history_entry_from_serialized_form ( (gchar*) key, (gchar*) value, &history_entry);
+                DEBUG ("HISTORY ENTRY: %i\n", history_entry->_time_start);
+                // Add it and update the GUI
+                calllist_add (history, history_entry);
 
-	        // do something with key and value 
-	        create_history_entry_from_serialized_form ((gchar*)key, (gchar*)value, &history_entry);    
-		DEBUG("HISTORY ENTRY: %i\n", history_entry->_time_start);
-		// Add it and update the GUI
-		calllist_add (history, history_entry);
-		
-		// remove entry from map
-		g_hash_table_remove(entries, key_to_min);
-	    }
-	}
+                // remove entry from map
+                g_hash_table_remove (entries, key_to_min);
+            }
+        }
     }
 }
 
@@ -1319,131 +1330,137 @@ void sflphone_save_history (void)
 
     DEBUG ("Saving history ...");
 
-    result = g_hash_table_new(NULL, g_str_equal);
+    result = g_hash_table_new (NULL, g_str_equal);
     items = history->callQueue;
     size = calllist_get_size (history);
 
-    for (i=0; i<size; i++)
-    {
+    for (i=0; i<size; i++) {
         current = g_queue_peek_nth (items, i);
-        if (current)
-        {
+
+        if (current) {
             value = serialize_history_entry (current);
             key = convert_timestamp_to_gchar (current->_time_start);
-            g_hash_table_replace(result, (gpointer) key,
-                    (gpointer) value);
+            g_hash_table_replace (result, (gpointer) key,
+                                  (gpointer) value);
         }
     }
 
     dbus_set_history (result);
 
     // Decrement the reference count
-    g_hash_table_unref(result);
+    g_hash_table_unref (result);
 }
 
-   void
-sflphone_srtp_sdes_on(callable_obj_t * c)
+void
+sflphone_srtp_sdes_on (callable_obj_t * c)
 {
 
     c->_srtp_state = SRTP_STATE_SDES_SUCCESS;
 
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-   void
-sflphone_srtp_sdes_off(callable_obj_t * c)
+void
+sflphone_srtp_sdes_off (callable_obj_t * c)
 {
     c->_srtp_state = SRTP_STATE_UNLOCKED;
 
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
 
-   void
-sflphone_srtp_zrtp_on( callable_obj_t * c)
+void
+sflphone_srtp_zrtp_on (callable_obj_t * c)
 {
     c->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
 
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_srtp_zrtp_off( callable_obj_t * c )
+void
+sflphone_srtp_zrtp_off (callable_obj_t * c)
 {
     c->_srtp_state = SRTP_STATE_UNLOCKED;
-    calltree_update_call(current_calls, c, NULL);
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void
-sflphone_srtp_zrtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified)
+void
+sflphone_srtp_zrtp_show_sas (callable_obj_t * c, const gchar* sas, const gboolean verified)
 {
-    if(c == NULL) {
-        DEBUG("Panic callable obj is NULL in %s at %d", __FILE__, __LINE__);
+    if (c == NULL) {
+        DEBUG ("Panic callable obj is NULL in %s at %d", __FILE__, __LINE__);
     }
-    c->_sas = g_strdup(sas);
-    if(verified == TRUE) {
+
+    c->_sas = g_strdup (sas);
+
+    if (verified == TRUE) {
         c->_srtp_state = SRTP_STATE_ZRTP_SAS_CONFIRMED;
     } else {
         c->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
     }
-    calltree_update_call(current_calls, c, NULL);
+
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
-    void 
-sflphone_srtp_zrtp_not_supported( callable_obj_t * c )
+void
+sflphone_srtp_zrtp_not_supported (callable_obj_t * c)
 {
-    DEBUG("ZRTP not supported");
-    main_window_zrtp_not_supported(c);
+    DEBUG ("ZRTP not supported");
+    main_window_zrtp_not_supported (c);
 }
 
 /* Method on sflphoned */
-    void 
-sflphone_set_confirm_go_clear( callable_obj_t * c )
+void
+sflphone_set_confirm_go_clear (callable_obj_t * c)
 {
-   dbus_set_confirm_go_clear(c);
+    dbus_set_confirm_go_clear (c);
 }
 
- void 
-sflphone_request_go_clear(void)
+void
+sflphone_request_go_clear (void)
 {
-    callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-    if(selectedCall) {
-        dbus_request_go_clear(selectedCall);
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+
+    if (selectedCall) {
+        dbus_request_go_clear (selectedCall);
     }
 }
 
 /* Signal sent by sflphoned */
-    void 
-sflphone_confirm_go_clear( callable_obj_t * c )
+void
+sflphone_confirm_go_clear (callable_obj_t * c)
 {
-    main_window_confirm_go_clear(c);
+    main_window_confirm_go_clear (c);
 }
 
 
-    void 
-sflphone_call_state_changed( callable_obj_t * c, const gchar * description, const guint code)
+void
+sflphone_call_state_changed (callable_obj_t * c, const gchar * description, const guint code)
 {
-        DEBUG("sflphone_call_state_changed");
-    if(c == NULL) {
-        DEBUG("Panic callable obj is NULL in %s at %d", __FILE__, __LINE__);
+    DEBUG ("SFLPhone: sflphone_call_state_changed");
+
+    if (c == NULL) {
+        DEBUG ("Panic callable obj is NULL in %s at %d", __FILE__, __LINE__);
     } else {
-        //g_free(c->_state_code_description); 
+        //g_free(c->_state_code_description);
         //DEBUG("sflphone_call_state_changed");
-        c->_state_code_description = g_strdup(description);
-        c->_state_code = code;   
+        c->_state_code_description = g_strdup (description);
+        c->_state_code = code;
+        DEBUG ("SFLPhone: state code %d", c->_state_code);
     }
-    
-    calltree_update_call(current_calls, c, NULL);
+
+    calltree_update_call (current_calls, c, NULL);
     update_actions();
 }
 
 
-void sflphone_get_interface_addr_from_name(char *iface_name, char **iface_addr, int size) {
+void sflphone_get_interface_addr_from_name (char *iface_name, char **iface_addr, int size)
+{
 
     struct ifreq ifr;
     int fd;
@@ -1454,26 +1471,26 @@ void sflphone_get_interface_addr_from_name(char *iface_name, char **iface_addr,
     struct sockaddr_in *saddr_in;
     struct in_addr *addr_in;
 
-    if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
-        DEBUG("getInterfaceAddrFromName error could not open socket\n");
+    if ( (fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
+        DEBUG ("getInterfaceAddrFromName error could not open socket\n");
 
     memset (&ifr, 0, sizeof (struct ifreq));
 
     strcpy (ifr.ifr_name, iface_name);
     ifr.ifr_addr.sa_family = AF_INET;
 
-    if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0)
-        DEBUG("getInterfaceAddrFromName use default interface (0.0.0.0)\n");
+    if ( (err = ioctl (fd, SIOCGIFADDR, &ifr)) < 0)
+        DEBUG ("getInterfaceAddrFromName use default interface (0.0.0.0)\n");
+
 
-    
-    saddr_in = (struct sockaddr_in *)&ifr.ifr_addr;
-    addr_in = &(saddr_in->sin_addr);
+    saddr_in = (struct sockaddr_in *) &ifr.ifr_addr;
+    addr_in = & (saddr_in->sin_addr);
 
-    tmp_addr = (char *)addr_in;
+    tmp_addr = (char *) addr_in;
 
-    snprintf(*iface_addr, size, "%d.%d.%d.%d", 
-	     UC(tmp_addr[0]), UC(tmp_addr[1]), UC(tmp_addr[2]), UC(tmp_addr[3]));
+    snprintf (*iface_addr, size, "%d.%d.%d.%d",
+              UC (tmp_addr[0]), UC (tmp_addr[1]), UC (tmp_addr[2]), UC (tmp_addr[3]));
 
-    close(fd);
+    close (fd);
 
 }
diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h
index 8be845e176769555f61d50653b4dc2d0f07b445e..5cd2a7245d69369f0a8ab811e3e70415dbc22c10 100644
--- a/sflphone-client-gnome/src/actions.h
+++ b/sflphone-client-gnome/src/actions.h
@@ -54,13 +54,13 @@
  * Initialize lists and configurations
  * @return TRUE if succeeded, FALSE otherwise
  */
-gboolean sflphone_init ( ) ;
+gboolean sflphone_init () ;
 
 /**
  * Steps when closing the application.  Will ask for confirmation if a call is in progress.
  * @return TRUE if the user wants to quit, FALSE otherwise.
  */
-gboolean sflphone_quit ( ) ;
+gboolean sflphone_quit () ;
 
 /**
  * Hang up / refuse the current call
@@ -88,7 +88,7 @@ callable_obj_t * sflphone_new_call();
  * @param accountID The account the voice mails are for
  * @param count The number of voice mails
  */
-void sflphone_notify_voice_mail ( const gchar* accountID , guint count );
+void sflphone_notify_voice_mail (const gchar* accountID , guint count);
 
 /**
  * Prepare SFLphone to transfer a call and wait for the user to dial the number to transfer to
@@ -110,43 +110,43 @@ void sflphone_pick_up ();
  * Put the call on hold state
  * @param c The current call
  */
-void sflphone_hold ( callable_obj_t * c);
+void sflphone_hold (callable_obj_t * c);
 
 /**
  * Put the call in Ringing state
  * @param c* The current call
  */
-void sflphone_ringing(callable_obj_t * c );
+void sflphone_ringing (callable_obj_t * c);
 
 /**
  * Put the call in Busy state
  * @param c* The current call
  */
-void sflphone_busy( callable_obj_t * c );
+void sflphone_busy (callable_obj_t * c);
 
 /**
  * Put the call in Failure state
  * @param c* The current call
  */
-void sflphone_fail( callable_obj_t * c );
+void sflphone_fail (callable_obj_t * c);
 
 /**
  * Put the call in Current state
  * @param c The current call
  */
-void sflphone_current ( callable_obj_t * c);
+void sflphone_current (callable_obj_t * c);
 
 /**
  * The callee has hung up
  * @param c The current call
  */
-void sflphone_hung_up( callable_obj_t * c);
+void sflphone_hung_up (callable_obj_t * c);
 
 /**
  * Incoming call
  * @param c The incoming call
  */
-void sflphone_incoming_call ( callable_obj_t * c);
+void sflphone_incoming_call (callable_obj_t * c);
 
 /**
  * Dial the number
@@ -154,26 +154,26 @@ void sflphone_incoming_call ( callable_obj_t * c);
  * @param keyval The unique int representing the key
  * @param key The char value of the key
  */
-void sflphone_keypad ( guint keyval, gchar * key);
+void sflphone_keypad (guint keyval, gchar * key);
 
 /**
  * Place a call with a filled callable_obj_t.to
  * @param c A call in CALL_STATE_DIALING state
  */
-void sflphone_place_call ( callable_obj_t * c );
+void sflphone_place_call (callable_obj_t * c);
 
 /**
  * Fetch the ip2ip profile through dbus and fill
- * the internal hash table. 
+ * the internal hash table.
  */
-void sflphone_fill_ip2ip_profile(void);
+void sflphone_fill_ip2ip_profile (void);
 
 /**
  * @return The internal hash table representing
- * the settings for the ip2ip profile. 
+ * the settings for the ip2ip profile.
  */
 void sflphone_get_ip2ip_properties (GHashTable **properties);
- 
+
 /**
  * Initialize the accounts data structure
  */
@@ -210,95 +210,110 @@ void sflphone_save_history (void);
 /**
  * Action called when two single call are dragged on together to create a new conference
  */
-void sflphone_join_participant(const gchar* sel_callID, const gchar* drag_callID);
+void sflphone_join_participant (const gchar* sel_callID, const gchar* drag_callID);
 
 /**
  * Action called when a new participant is dragged in
  */
-void sflphone_add_participant(const gchar* callID, const gchar* confID);
+void sflphone_add_participant (const gchar* callID, const gchar* confID);
 
 /**
  * Action called when a conference participant is draged out
  */
-void sflphone_detach_participant(const gchar* callID);
+void sflphone_detach_participant (const gchar* callID);
 
 /**
  * Action called when two conference are merged together
  */
-void sflphone_join_conference(const gchar* sel_confID, const gchar* drag_confID);
+void sflphone_join_conference (const gchar* sel_confID, const gchar* drag_confID);
 
 
-/** 
- * Nofity that the communication is 
+/**
+ * Nofity that the communication is
  * now secured using SRTP/SDES.
  * @param c* The current call
  */
-void sflphone_srtp_sdes_on(callable_obj_t * c);
+void sflphone_srtp_sdes_on (callable_obj_t * c);
 
-/** 
+/**
  * Notify that the SRTP/SDES session
  * is not secured
  */
 
-/** 
- * Nofity that the communication is 
+/**
+ * Nofity that the communication is
  * now secured using ZRTP.
  * @param c* The current call
  */
-void sflphone_srtp_zrtp_on( callable_obj_t * c);
+void sflphone_srtp_zrtp_on (callable_obj_t * c);
 
-/** 
+/**
  * Called when the ZRTP session goes
  * unsecured.
  * @param c* The current call
  */
-void sflphone_srtp_zrtp_off( callable_obj_t * c );
+void sflphone_srtp_zrtp_off (callable_obj_t * c);
 
-/** 
+/**
  * Called when the sas has been computed
  * and is ready to be displayed.
  * @param c* The current call
  * @param sas* The Short Authentication String
  * @param verified* Weather the SAS was confirmed or not.
  */
-void sflphone_srtp_zrtp_show_sas( callable_obj_t * c, const gchar* sas, const gboolean verified);
+void sflphone_srtp_zrtp_show_sas (callable_obj_t * c, const gchar* sas, const gboolean verified);
 
-/** 
+/**
  * Called when the remote peer does not support ZRTP
  * @param c* The current call
  */
-void sflphone_srtp_zrtp_not_supported( callable_obj_t * c );
+void sflphone_srtp_zrtp_not_supported (callable_obj_t * c);
 
-/** 
+/**
  * Called when user wants to confirm go clear request.
  * @param c* The call to confirm the go clear request.
  */
-void sflphone_set_confirm_go_clear( callable_obj_t * c );
+void sflphone_set_confirm_go_clear (callable_obj_t * c);
 
-/** 
+/**
  * Called when user wants to confirm go clear request.
  * @param c* The call to confirm the go clear request.
  */
-void sflphone_confirm_go_clear( callable_obj_t * c );
+void sflphone_confirm_go_clear (callable_obj_t * c);
 
 /**
  * Called when user wants to clear.
  * @param c* The call on which to go clear
  */
-void sflphone_request_go_clear(void);
+void sflphone_request_go_clear (void);
 
-/** 
- * Called when the UI needs to be refreshed to 
+/**
+ * Called when the UI needs to be refreshed to
  * better inform the user about the current
- * state of the call. 
+ * state of the call.
  * @param c A pointer to the call that needs to be updated
  * @param description A textual description of the code
  * @param code The status code as in SIP or IAX
  */
-void sflphone_call_state_changed(callable_obj_t * c, const gchar * description, const guint code);
+void sflphone_call_state_changed (callable_obj_t * c, const gchar * description, const guint code);
 
 /**
  * Resolve an interface address given its name
  */
-void sflphone_get_interface_addr_from_name(char *iface_name, char **iface_addr, int size);
+void sflphone_get_interface_addr_from_name (char *iface_name, char **iface_addr, int size);
+
+void sflphone_add_main_participant (const conference_obj_t * c);
+
+void
+sflphone_conference_off_hold (const conference_obj_t * c);
+
+void
+sflphone_srtp_sdes_off (callable_obj_t * c);
+
+void sflphone_fill_conference_list (void);
+
+void sflphone_conference_on_hold (const conference_obj_t * c);
+
+void sflphone_conference_hang_up();
+
 #endif
diff --git a/sflphone-client-gnome/src/callable_obj.c b/sflphone-client-gnome/src/callable_obj.c
index e165857433d975f76096b6e3a6acac22e59f2cfe..189c891ef8fbdd8c7a3be6f030721e627f5c8d8f 100644
--- a/sflphone-client-gnome/src/callable_obj.c
+++ b/sflphone-client-gnome/src/callable_obj.c
@@ -32,33 +32,32 @@
 #include <codeclist.h>
 #include <sflphone_const.h>
 #include <time.h>
+#include "contacts/calltree.h"
+#include  <unistd.h>
+
 
 #define UNIX_DAY			86400
 #define UNIX_WEEK			86400 * 6
-#define UNIX_TWO_DAYS		86400 * 2
+#define UNIX_TWO_DAYS		        86400 * 2
 
-gint is_callID_callstruct ( gconstpointer a, gconstpointer b)
+gint is_callID_callstruct (gconstpointer a, gconstpointer b)
 {
-    callable_obj_t * c = (callable_obj_t*)a;
-    if(g_strcasecmp(c->_callID, (const gchar*) b) == 0)
-    {
+    callable_obj_t * c = (callable_obj_t*) a;
+
+    if (g_strcasecmp (c->_callID, (const gchar*) b) == 0) {
         return 0;
-    }
-    else
-    {
+    } else {
         return 1;
     }
 }
 
-gint get_state_callstruct ( gconstpointer a, gconstpointer b)
+gint get_state_callstruct (gconstpointer a, gconstpointer b)
 {
-    callable_obj_t * c = (callable_obj_t*)a;
-    if( c->_state == *((call_state_t*)b))
-    {
+    callable_obj_t * c = (callable_obj_t*) a;
+
+    if (c->_state == * ( (call_state_t*) b)) {
         return 0;
-    }
-    else
-    {
+    } else {
         return 1;
     }
 }
@@ -67,7 +66,7 @@ gchar* call_get_peer_name (const gchar *format)
 {
     const gchar *end, *name;
 
-    DEBUG("    callable_obj: %s", format);
+    DEBUG ("    callable_obj: %s", format);
 
     end = g_strrstr (format, "<");
 
@@ -75,65 +74,151 @@ gchar* call_get_peer_name (const gchar *format)
         return g_strndup (format, 0);
     } else {
         name = format;
-        return g_strndup(name, end - name);
+        return g_strndup (name, end - name);
     }
 }
 
 gchar* call_get_peer_number (const gchar *format)
 {
-    DEBUG("    callable_obj: %s", format);
+    DEBUG ("    callable_obj: %s", format);
 
-    gchar * number = g_strrstr(format, "<") + 1;
-    gchar * end = g_strrstr(format, ">");
+    gchar * number = g_strrstr (format, "<") + 1;
+    gchar * end = g_strrstr (format, ">");
 
-    if(end && number)
-	number = g_strndup(number, end - number  );
+    if (end && number)
+        number = g_strndup (number, end - number);
     else
-	number = g_strdup(format);
-    
+        number = g_strdup (format);
+
     return number;
 }
 
 gchar* call_get_audio_codec (callable_obj_t *obj)
 {
-	gchar *audio_codec = "";
-	codec_t *codec;
-	gchar *format ="";
-	int samplerate;
-	
-	if (obj)
-	{
-		audio_codec = dbus_get_current_codec_name (obj);	
-		codec = codec_list_get_by_name (audio_codec, NULL);
-		if (codec){
-			samplerate = codec->sample_rate;
-			format = g_markup_printf_escaped ("%s/%i", audio_codec, samplerate);
-		}
-	}
-	return format;
+    gchar *audio_codec = "";
+    codec_t *codec;
+    gchar *format ="";
+    int samplerate;
+
+    if (obj) {
+        audio_codec = dbus_get_current_codec_name (obj);
+        codec = codec_list_get_by_name (audio_codec, NULL);
+
+        if (codec) {
+            samplerate = codec->sample_rate;
+            format = g_markup_printf_escaped ("%s/%i", audio_codec, samplerate);
+        }
+    }
+
+    return format;
 }
 
-void call_add_error(callable_obj_t * call, gpointer dialog)
+void call_add_error (callable_obj_t * call, gpointer dialog)
 {
     g_ptr_array_add (call->_error_dialogs, dialog);
 }
 
-void call_remove_error(callable_obj_t * call, gpointer dialog)
+void call_remove_error (callable_obj_t * call, gpointer dialog)
 {
     g_ptr_array_remove (call->_error_dialogs, dialog);
 }
 
-void call_remove_all_errors(callable_obj_t * call)
+void call_remove_all_errors (callable_obj_t * call)
 {
     g_ptr_array_foreach (call->_error_dialogs, (GFunc) gtk_widget_destroy, NULL);
 }
 
+void threaded_clock_incrementer (void *pc)
+{
+
+    callable_obj_t *call = (callable_obj_t *) pc;
+
+
+    while (call->clockStarted) {
+
+        int duration;
+        time_t start, current;
+
+        gdk_threads_enter ();
+
+        set_timestamp (& (call->_time_current));
+
+        start = call->_time_start;
+        current = call->_time_current;
+
+        if (current == start) {
+            g_snprintf (call->_timestr, 20, "00:00");
+
+        }
+
+        duration = (int) difftime (current, start);
+
+        if (duration / 60 == 0) {
+            if (duration < 10) {
+                g_snprintf (call->_timestr, 20, "00:0%d", duration);
+            } else {
+                g_snprintf (call->_timestr, 20, "00:%d", duration);
+            }
+        } else {
+            if (duration%60 < 10) {
+                g_snprintf (call->_timestr, 20, "0%d:0%d", duration/60, duration%60);
+            } else {
+                g_snprintf (call->_timestr, 20, "%d:%d", duration/60, duration%60);
+            }
+        }
+
+        // Update clock only if call is active (current, hold, recording transfer)
+        if ( (call->_state != CALL_STATE_INVALID) &&
+                (call->_state != CALL_STATE_INCOMING) &&
+                (call->_state != CALL_STATE_RINGING) &&
+                (call->_state != CALL_STATE_DIALING) &&
+                (call->_state != CALL_STATE_FAILURE) &&
+                (call->_state != CALL_STATE_BUSY)) {
+            calltree_update_clock();
+        }
+
+        // gdk_flush();
+        gdk_threads_leave ();
+
+
+        usleep (1000000);
+
+    }
+
+    DEBUG ("CallableObj: Stopping Thread");
+
+    g_thread_exit (NULL);
+
+}
+
+void stop_call_clock (callable_obj_t *c)
+{
+
+    DEBUG ("CallableObj: Stop call clock");
+
+    if (!c) {
+        ERROR ("CallableObj: Callable object is NULL");
+        return;
+    }
+
+    if (c->_type == CALL && c->clockStarted) {
+        c->clockStarted = 0;
+        /// no need to join here, only need to call g_thread_exit at the end of the threaded function
+        // g_thread_join (c->tid);
+    }
+}
+
 void create_new_call (callable_type_t type, call_state_t state, gchar* callID , gchar* accountID, gchar* peer_name, gchar* peer_number, callable_obj_t ** new_call)
 {
 
+    GError *err1 = NULL ;
     callable_obj_t *obj;
     gchar *call_id;
 
+    DEBUG ("CallableObj: Create new call");
+
+    DEBUG ("Account: %s", accountID);
+
     // Allocate memory
     obj = g_new0 (callable_obj_t, 1);
 
@@ -150,17 +235,30 @@ void create_new_call (callable_type_t type, call_state_t state, gchar* callID ,
     obj->_peer_info = g_strdup (get_peer_info (peer_name, peer_number));
 
     obj->_trsft_to = "";
-    set_timestamp (&(obj->_time_start));
-    set_timestamp (&(obj->_time_stop));
+    set_timestamp (& (obj->_time_start));
+    set_timestamp (& (obj->_time_current));
+    set_timestamp (& (obj->_time_stop));
+    // g_snprintf(obj->_timestr, 20, "00:00");
 
     if (g_strcasecmp (callID, "") == 0)
         call_id = generate_call_id ();
     else
         call_id = callID;
+
     // Set the IDs
     obj->_callID = g_strdup (call_id);
     obj->_confID = NULL;
 
+    obj->clockStarted = 1;
+
+    if (obj->_type == CALL) {
+        // pthread_create(&(obj->tid), NULL, threaded_clock_incrementer, obj);
+        if ( (obj->tid = g_thread_create ( (GThreadFunc) threaded_clock_incrementer, (void *) obj, TRUE, &err1)) == NULL) {
+            DEBUG ("Thread creation failed!");
+            g_error_free (err1) ;
+        }
+    }
+
     *new_call = obj;
 }
 
@@ -179,11 +277,11 @@ void create_new_call_from_details (const gchar *call_id, GHashTable *details, ca
     if (g_strcasecmp (state_str, "CURRENT") == 0)
         state = CALL_STATE_CURRENT;
 
-	else if (g_strcasecmp (state_str, "RINGING") == 0)
-		state = CALL_STATE_RINGING;
+    else if (g_strcasecmp (state_str, "RINGING") == 0)
+        state = CALL_STATE_RINGING;
 
-	else if (g_strcasecmp (state_str, "INCOMING") == 0)
-		state = CALL_STATE_INCOMING;
+    else if (g_strcasecmp (state_str, "INCOMING") == 0)
+        state = CALL_STATE_INCOMING;
 
     else if (g_strcasecmp (state_str, "HOLD") == 0)
         state = CALL_STATE_HOLD;
@@ -194,7 +292,7 @@ void create_new_call_from_details (const gchar *call_id, GHashTable *details, ca
     else
         state = CALL_STATE_FAILURE;
 
-    create_new_call (CALL, state, (gchar*)call_id, accountID, peer_name, call_get_peer_number(peer_number), &new_call);
+    create_new_call (CALL, state, (gchar*) call_id, accountID, peer_name, call_get_peer_number (peer_number), &new_call);
     *call = new_call;
 }
 
@@ -210,16 +308,15 @@ void create_history_entry_from_serialized_form (gchar *timestamp, gchar *details
 
     // details is in serialized form, i e: calltype%to%from%callid
 
-    if ((ptr = g_strsplit(details, delim,5)) != NULL) {
+    if ( (ptr = g_strsplit (details, delim,5)) != NULL) {
+
+        while (ptr != NULL && token < 5) {
 
-	while (ptr != NULL && token < 5) {
-	    
-            switch (token)
-            {
+            switch (token) {
                 case 0:
                     history_state = get_history_state_from_id (*ptr);
                     break;
-	        case 1: 
+                case 1:
                     peer_number = *ptr;
                     break;
                 case 2:
@@ -236,11 +333,12 @@ void create_history_entry_from_serialized_form (gchar *timestamp, gchar *details
             }
 
             token++;
-	    ptr++;
+            ptr++;
 
-	}
+        }
 
     }
+
     if (g_strcasecmp (peer_name, "empty") == 0)
         peer_name="";
 
@@ -254,15 +352,24 @@ void create_history_entry_from_serialized_form (gchar *timestamp, gchar *details
 
 void free_callable_obj_t (callable_obj_t *c)
 {
+    DEBUG ("CallableObj: Free callable object");
+
+    stop_call_clock (c);
+
     g_free (c->_callID);
     g_free (c->_accountID);
     g_free (c->_peer_name);
     g_free (c->_peer_number);
     g_free (c->_peer_info);
     g_free (c);
+
+    DEBUG ("If you don't see it that is because there is a problem");
+
+    calltree_update_clock();
 }
 
-void attach_thumbnail (callable_obj_t *call, GdkPixbuf *pixbuf) {
+void attach_thumbnail (callable_obj_t *call, GdkPixbuf *pixbuf)
+{
     call->_contact_thumbnail = pixbuf;
 }
 
@@ -270,8 +377,8 @@ gchar* generate_call_id (void)
 {
     gchar *call_id;
 
-    call_id = g_new0(gchar, 30);
-    g_sprintf(call_id, "%d", rand());
+    call_id = g_new0 (gchar, 30);
+    g_sprintf (call_id, "%d", rand());
     return call_id;
 }
 
@@ -279,11 +386,12 @@ gchar* get_peer_info (gchar* number, gchar* name)
 {
     gchar *info;
 
-    info = g_strconcat("\"", name, "\" <", number, ">", NULL);
+    info = g_strconcat ("\"", name, "\" <", number, ">", NULL);
     return info;
 }
 
-history_state_t get_history_state_from_id (gchar *indice){
+history_state_t get_history_state_from_id (gchar *indice)
+{
 
     history_state_t state;
 
@@ -308,34 +416,32 @@ gchar* get_call_duration (callable_obj_t *obj)
 
     start = obj->_time_start;
     end = obj->_time_stop;
-    
+
     if (start == end)
-        return g_markup_printf_escaped("<small>Duration:</small> 0:00");
+        return g_markup_printf_escaped ("<small>Duration:</small> 0:00");
 
-    duration = (int) difftime(end, start);
+    duration = (int) difftime (end, start);
 
-    if( duration / 60 == 0 )
-    {
-        if( duration < 10 )
-            res = g_markup_printf_escaped("00:0%i", duration);
+    if (duration / 60 == 0) {
+        if (duration < 10)
+            res = g_markup_printf_escaped ("00:0%i", duration);
         else
-            res = g_markup_printf_escaped("00:%i", duration);
-    }
-    else
-    {
-        if( duration%60 < 10 )
-            res = g_markup_printf_escaped("%i:0%i" , duration/60 , duration%60);
+            res = g_markup_printf_escaped ("00:%i", duration);
+    } else {
+        if (duration%60 < 10)
+            res = g_markup_printf_escaped ("%i:0%i" , duration/60 , duration%60);
         else
-            res = g_markup_printf_escaped("%i:%i" , duration/60 , duration%60);
+            res = g_markup_printf_escaped ("%i:%i" , duration/60 , duration%60);
     }
-    return g_markup_printf_escaped("<small>Duration:</small> %s", res);
+
+    return g_markup_printf_escaped ("<small>Duration:</small> %s", res);
 
 }
 
 gchar* serialize_history_entry (callable_obj_t *entry)
 {
     // "0|514-276-5468|Savoir-faire Linux|144562458" for instance
-    
+
     gchar* result;
     gchar* separator = "|";
     gchar* history_state, *timestamp;
@@ -345,21 +451,23 @@ gchar* serialize_history_entry (callable_obj_t *entry)
     // and the timestamps
     timestamp = convert_timestamp_to_gchar (entry->_time_stop);
 
-    result = g_strconcat (history_state, separator, 
-                          entry->_peer_number, separator, 
-                          g_strcasecmp (entry->_peer_name,"") ==0 ? "empty": entry->_peer_name, separator, 
-                          timestamp, separator, 
-                          g_strcasecmp (entry->_accountID,"") ==0 ? "empty": entry->_accountID, 
+    gchar* peer_name = (entry->_peer_name == NULL || g_strcasecmp (entry->_peer_name,"") == 0) ? "empty": entry->_peer_name;
+    gchar* account_id = (entry->_accountID == NULL || g_strcasecmp (entry->_accountID,"") == 0) ? "empty": entry->_accountID;
+
+    result = g_strconcat (history_state, separator,
+                          entry->_peer_number, separator,
+                          peer_name, separator,
+                          timestamp, separator,
+                          account_id,
                           NULL);
-    
+
     return result;
 }
 
 gchar* get_history_id_from_state (history_state_t state)
 {
     // Refer to history_state_t enum in callable_obj.h
-    switch (state)
-    {
+    switch (state) {
         case MISSED:
             return "0";
         case INCOMING:
@@ -371,37 +479,38 @@ gchar* get_history_id_from_state (history_state_t state)
     }
 }
 
-gchar* get_formatted_start_timestamp (callable_obj_t *obj) { 
-	
+gchar* get_formatted_start_timestamp (callable_obj_t *obj)
+{
+
     struct tm* ptr;
     time_t lt, now;
     unsigned char str[100];
 
-    if (obj)
-    {
-		// Fetch the current timestamp
-		(void) time (&now);
+    if (obj) {
+        // Fetch the current timestamp
+        (void) time (&now);
         lt = obj->_time_start;
 
         ptr = localtime (&lt);
 
-		if (now - lt < UNIX_WEEK) {
-			if (now-lt < UNIX_DAY) {
-				strftime((char *)str, 100, N_("today at %R"), (const struct tm *)ptr);
-			} else {
-				if (now - lt < UNIX_TWO_DAYS) {
-					strftime((char *)str, 100, N_("yesterday at %R"), (const struct tm *)ptr);
-				} else {
-					strftime((char *)str, 100, N_("%A at %R"), (const struct tm *)ptr);
-				}
-			}
-		} else {
-			strftime((char *)str, 100, N_("%x at %R"), (const struct tm *)ptr);
-		}
+        if (now - lt < UNIX_WEEK) {
+            if (now-lt < UNIX_DAY) {
+                strftime ( (char *) str, 100, N_ ("today at %R"), (const struct tm *) ptr);
+            } else {
+                if (now - lt < UNIX_TWO_DAYS) {
+                    strftime ( (char *) str, 100, N_ ("yesterday at %R"), (const struct tm *) ptr);
+                } else {
+                    strftime ( (char *) str, 100, N_ ("%A at %R"), (const struct tm *) ptr);
+                }
+            }
+        } else {
+            strftime ( (char *) str, 100, N_ ("%x at %R"), (const struct tm *) ptr);
+        }
 
         // result function of the current locale
-        return g_markup_printf_escaped("\n%s\n" , str);
+        return g_markup_printf_escaped ("\n%s\n" , str);
     }
+
     return "";
 }
 
@@ -410,16 +519,28 @@ void set_timestamp (time_t *timestamp)
     time_t tmp;
 
     // Set to the current value
-    (void) time(&tmp);
+    (void) time (&tmp);
     *timestamp=tmp;
 }
 
 gchar* convert_timestamp_to_gchar (time_t timestamp)
 {
-    return g_markup_printf_escaped ("%i", (int)timestamp);
+    return g_markup_printf_escaped ("%i", (int) timestamp);
 }
 
 time_t convert_gchar_to_timestamp (gchar *timestamp)
 {
     return (time_t) atoi (timestamp);
 }
+
+gchar*
+get_peer_information (callable_obj_t *c)
+{
+
+    if (g_strcasecmp (c->_peer_name,"") == 0)
+        return g_strdup (c->_peer_number);
+    else
+        return g_strdup (c->_peer_name);
+}
+
+
diff --git a/sflphone-client-gnome/src/callable_obj.h b/sflphone-client-gnome/src/callable_obj.h
index 61acd6ce9aa67b87d5517acc84c687b39e04ae58..6f31d1942e0f44d8e969308e5f1c44802ed639dc 100644
--- a/sflphone-client-gnome/src/callable_obj.h
+++ b/sflphone-client-gnome/src/callable_obj.h
@@ -35,38 +35,36 @@
 #include <glib/gprintf.h>
 #include <stdlib.h>
 #include <time.h>
+#include <pthread.h>
 
 /**
  * @enum history_state
  * This enum have all the state a call can take in the history
  */
-typedef enum
-{
-  MISSED,
-  INCOMING,
-  OUTGOING
+typedef enum {
+    MISSED,
+    INCOMING,
+    OUTGOING
 } history_state_t;
 
 /**
  * @enum contact_type
  * This enum have all types of contacts: HOME phone, cell phone, etc...
  */
-typedef enum
-{
-  CONTACT_PHONE_HOME,
-  CONTACT_PHONE_BUSINESS,
-  CONTACT_PHONE_MOBILE
+typedef enum {
+    CONTACT_PHONE_HOME,
+    CONTACT_PHONE_BUSINESS,
+    CONTACT_PHONE_MOBILE
 } contact_type_t;
 
 /**
  * @enum callable_obj_type
  * This enum have all types of items
  */
-typedef enum
-{
-  CALL,
-  HISTORY_ENTRY,
-  CONTACT
+typedef enum {
+    CALL,
+    HISTORY_ENTRY,
+    CONTACT
 } callable_type_t;
 
 
@@ -74,16 +72,16 @@ typedef enum
   * This enum have all the states a call can take.
   */
 typedef enum {
-   CALL_STATE_INVALID = 0,
-   CALL_STATE_INCOMING,
-   CALL_STATE_RINGING,
-   CALL_STATE_CURRENT,
-   CALL_STATE_DIALING,
-   CALL_STATE_HOLD,
-   CALL_STATE_FAILURE,
-   CALL_STATE_BUSY,
-   CALL_STATE_TRANSFERT,
-   CALL_STATE_RECORD,
+    CALL_STATE_INVALID = 0,
+    CALL_STATE_INCOMING,
+    CALL_STATE_RINGING,
+    CALL_STATE_CURRENT,
+    CALL_STATE_DIALING,
+    CALL_STATE_HOLD,
+    CALL_STATE_FAILURE,
+    CALL_STATE_BUSY,
+    CALL_STATE_TRANSFERT,
+    CALL_STATE_RECORD,
 } call_state_t;
 
 typedef enum {
@@ -104,19 +102,22 @@ typedef struct  {
     callable_type_t _type;          // CALL - HISTORY ENTRY - CONTACT
     call_state_t _state;            // The state of the call
     int _state_code;                // The numeric state code as defined in SIP or IAX
-    gchar* _state_code_description; // A textual description of _state_code   
+    gchar* _state_code_description; // A textual description of _state_code
     gchar* _callID;                 // The call ID
     gchar* _confID;                 // The conference ID (NULL if don't participate to a conference)
     gchar* _accountID;              // The account the call is made with
     time_t _time_start;             // The timestamp the call was initiating
+    time_t _time_current;           // Clock increment to display call's elapsed time
     time_t _time_stop;              // The timestamp the call was over
+    gchar _timestr[20];             // The timestamp as a string format for disply in statusbar
     history_state_t _history_state; // The history state if necessary
-    srtp_state_t _srtp_state;       // The state of security on the call 
+    srtp_state_t _srtp_state;       // The state of security on the call
     gchar* _srtp_cipher;            // Cipher used for the srtp session
     gchar* _sas;                    // The Short Authentication String that should be displayed
-    gboolean _zrtp_confirmed;       // Override real state. Used for hold/unhold 
-                                    // since rtp session is killed each time and 
-                                    // libzrtpcpp does not remember state (yet?)
+    gboolean _zrtp_confirmed;       // Override real state. Used for hold/unhold
+    // since rtp session is killed each time and
+    // libzrtpcpp does not remember state (yet?)
+
     /**
      * The information about the person we are talking
      */
@@ -137,8 +138,8 @@ typedef struct  {
      * The thumbnail, if callable_obj_type=CONTACT
      */
     GdkPixbuf *_contact_thumbnail;
-    
-    /** 
+
+    /**
      * Maintains a list of error dialogs
      * associated with that call so that
      * they could be destroyed at the right
@@ -149,6 +150,15 @@ typedef struct  {
     /* The audio codec used for this call, if applicable */
     gchar *_audio_codec;
 
+    /* Associated IM widget */
+    GtkWidget *_im_widget;
+
+    // thread id to increment clock
+    // pthread_t tid;
+    GThread *tid;
+
+    int clockStarted;
+
 } callable_obj_t;
 
 void create_new_call (callable_type_t, call_state_t, gchar*, gchar*, gchar*, gchar*, callable_obj_t **);
@@ -157,26 +167,26 @@ void create_new_call_from_details (const gchar *, GHashTable *, callable_obj_t *
 
 void create_history_entry_from_serialized_form (gchar *, gchar *, callable_obj_t **);
 
-void call_add_error(callable_obj_t * call, gpointer dialog);
+void call_add_error (callable_obj_t * call, gpointer dialog);
 
-void call_remove_error(callable_obj_t * call, gpointer dialog);
+void call_remove_error (callable_obj_t * call, gpointer dialog);
 
-void call_remove_all_errors(callable_obj_t * call);
+void call_remove_all_errors (callable_obj_t * call);
 
-/* 
- * GCompareFunc to compare a callID (gchar* and a callable_obj_t) 
+/*
+ * GCompareFunc to compare a callID (gchar* and a callable_obj_t)
  */
-gint is_callID_callstruct ( gconstpointer, gconstpointer);
+gint is_callID_callstruct (gconstpointer, gconstpointer);
 
-/* 
- * GCompareFunc to get current call (gchar* and a callable_obj_t) 
+/*
+ * GCompareFunc to get current call (gchar* and a callable_obj_t)
  */
-gint get_state_callstruct ( gconstpointer, gconstpointer);
+gint get_state_callstruct (gconstpointer, gconstpointer);
 
-/** 
+/**
   * This function parse the callable_obj_t.from field to return the name
   * @param c The call
-  * @return The full name of the caller or an empty string 
+  * @return The full name of the caller or an empty string
   */
 gchar* call_get_peer_name (const gchar*);
 
@@ -187,15 +197,15 @@ gchar* call_get_peer_name (const gchar*);
  */
 gchar* call_get_peer_number (const gchar*);
 
-
-
-
 void
 attach_thumbnail (callable_obj_t *, GdkPixbuf *);
 
 void
 free_callable_obj_t (callable_obj_t *c);
 
+void
+stop_call_clock (callable_obj_t *c);
+
 /**
  * @return gchar* A random ID
  */
@@ -221,4 +231,6 @@ time_t convert_gchar_to_timestamp (gchar*);
 
 gchar* call_get_audio_codec (callable_obj_t *obj);
 
+gchar* get_peer_information (callable_obj_t *c);
+
 #endif
diff --git a/sflphone-client-gnome/src/codeclist.c b/sflphone-client-gnome/src/codeclist.c
index 21037b01fb90572cc16ddf4c72234b11df2e7f7d..d6fcadb3c910296f2e32b715a04c9c6598afa6ee 100644
--- a/sflphone-client-gnome/src/codeclist.c
+++ b/sflphone-client-gnome/src/codeclist.c
@@ -32,153 +32,154 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <unistd.h>
 
 #include "dbus.h"
 
 GQueue * codecsCapabilities = NULL;
 
-	gint
+gint
 is_name_codecstruct (gconstpointer a, gconstpointer b)
 {
-	codec_t * c = (codec_t *)a;
-	if(strcmp(c->name, (const gchar *)b)==0)
-		return 0;
-	else
-		return 1;
+    codec_t * c = (codec_t *) a;
+
+    if (strcmp (c->name, (const gchar *) b) ==0)
+        return 0;
+    else
+        return 1;
 }
 
-	gint
+gint
 is_payload_codecstruct (gconstpointer a, gconstpointer b)
 {
-	codec_t * c = (codec_t *)a;
-	if(c->_payload == GPOINTER_TO_INT(b))
-		return 0;
-	else
-		return 1;
+    codec_t * c = (codec_t *) a;
+
+    if (c->_payload == GPOINTER_TO_INT (b))
+        return 0;
+    else
+        return 1;
 }
 
-void codec_list_init (GQueue **queue) {
+void codec_list_init (GQueue **queue)
+{
 
-	// Create the queue object that will contain the audio codecs
-	*queue = g_queue_new();
+    // Create the queue object that will contain the audio codecs
+    *queue = g_queue_new();
 }
 
-void codec_capabilities_load (void) {
+void codec_capabilities_load (void)
+{
 
-	gchar **codecs = NULL, **pl = NULL, **specs = NULL;
-	guint payload;
+    gchar **codecs = NULL, **pl = NULL, **specs = NULL;
+    guint payload;
 
-	// Create the queue object that will contain the global list of audio codecs
-	if (codecsCapabilities != NULL)	
-		g_queue_free (codecsCapabilities);
+    // Create the queue object that will contain the global list of audio codecs
+    if (codecsCapabilities != NULL)
+        g_queue_free (codecsCapabilities);
 
-	codecsCapabilities = g_queue_new();
+    codecsCapabilities = g_queue_new();
 
-	// This is a global list inherited by all accounts
+    // This is a global list inherited by all accounts
     codecs = (gchar**) dbus_codec_list ();
-    
-	// Add the codecs in the list
-	for (pl=codecs; *codecs; codecs++) {
-
-		codec_t *c;
-		payload = atoi (*codecs);
-		specs = (gchar **) dbus_codec_details (payload);
-		codec_create_new_with_specs (payload, specs, TRUE, &c);
-		g_queue_push_tail (codecsCapabilities, (gpointer*) c);
-    }
 
-	// If we didn't load any codecs, problem ...
-	if (g_queue_get_length (codecsCapabilities) == 0) {
+    // Add the codecs in the list
+    for (pl=codecs; *codecs; codecs++) {
 
-		// Error message
-		ERROR ("No audio codecs found");
-        dbus_unregister(getpid());
-        exit(0);
+        codec_t *c;
+        payload = atoi (*codecs);
+        specs = (gchar **) dbus_codec_details (payload);
+        codec_create_new_with_specs (payload, specs, TRUE, &c);
+        g_queue_push_tail (codecsCapabilities, (gpointer*) c);
     }
-}
 
-void account_create_codec_list (account_t **acc) {
+    // If we didn't load any codecs, problem ...
+    if (g_queue_get_length (codecsCapabilities) == 0) {
 
-	gchar **order = NULL;
-	GQueue *_codecs;
+        // Error message
+        ERROR ("No audio codecs found");
+        dbus_unregister (getpid());
+        exit (0);
+    }
+}
 
-	_codecs = (*acc)->codecs;
-	if (_codecs != NULL)
-		g_queue_free (_codecs);
+void account_create_codec_list (account_t **acc)
+{
 
-	_codecs = g_queue_new ();
-	// _codecs = g_queue_copy (codecsCapabilities);
+    GQueue *_codecs;
 
-	(*acc)->codecs = _codecs;
-	// order = (gchar**) dbus_get_active_codec_list (acc->accountID);
-}
+    _codecs = (*acc)->codecs;
 
-void account_set_codec_list (account_t **acc) {
+    if (_codecs != NULL)
+        g_queue_free (_codecs);
 
-	// Reset the codec list
-	// account_create_codec_list (a);
+    _codecs = g_queue_new ();
 
+    (*acc)->codecs = _codecs;
 }
 
-void codec_create_new (gint payload, gboolean active, codec_t **c) {
+void codec_create_new (gint payload, gboolean active, codec_t **c)
+{
 
-	codec_t *codec;
-	gchar **specs;
+    codec_t *codec;
+    gchar **specs;
 
-	codec = g_new0 (codec_t, 1);
-	codec->_payload = payload;
+    codec = g_new0 (codec_t, 1);
+    codec->_payload = payload;
     specs = (gchar **) dbus_codec_details (payload);
-	codec->name = specs[0];
-	codec->sample_rate = atoi (specs[1]);
-	codec->_bitrate = atoi (specs[2]);
-	codec->_bandwidth = atoi (specs[3]);
-	codec->is_active = active;
+    codec->name = specs[0];
+    codec->sample_rate = atoi (specs[1]);
+    codec->_bitrate = atoi (specs[2]);
+    codec->_bandwidth = atoi (specs[3]);
+    codec->is_active = active;
 
-	*c = codec;
+    *c = codec;
 }
 
-void codec_create_new_with_specs (gint payload, gchar **specs, gboolean active, codec_t **c) {
+void codec_create_new_with_specs (gint payload, gchar **specs, gboolean active, codec_t **c)
+{
 
-	codec_t *codec;
+    codec_t *codec;
 
-	codec = g_new0 (codec_t, 1);
-	codec->_payload = payload;
-	codec->name = specs[0];
-	codec->sample_rate = atoi (specs[1]);
-	codec->_bitrate = atoi (specs[2]);
-	codec->_bandwidth = atoi (specs[3]);
-	codec->is_active = active;
+    codec = g_new0 (codec_t, 1);
+    codec->_payload = payload;
+    codec->name = specs[0];
+    codec->sample_rate = atoi (specs[1]);
+    codec->_bitrate = atoi (specs[2]);
+    codec->_bandwidth = atoi (specs[3]);
+    codec->is_active = active;
 
-	*c = codec;
+    *c = codec;
 }
 
-void codec_create_new_from_caps (codec_t *original, codec_t **copy) {
+void codec_create_new_from_caps (codec_t *original, codec_t **copy)
+{
 
-	codec_t *codec;
+    codec_t *codec;
 
-	if(!original) {
-	  *copy = NULL;
-	  return;
-	}
+    if (!original) {
+        *copy = NULL;
+        return;
+    }
 
-	codec = g_new0 (codec_t, 1);
-	codec->_payload = original->_payload;
-	codec->name = original->name;
-	codec->sample_rate = original->sample_rate;
-	codec->_bitrate = original->_bitrate;
-	codec->_bandwidth = original->_bandwidth;
-	codec->is_active = original->is_active;
+    codec = g_new0 (codec_t, 1);
+    codec->_payload = original->_payload;
+    codec->name = original->name;
+    codec->sample_rate = original->sample_rate;
+    codec->_bitrate = original->_bitrate;
+    codec->_bandwidth = original->_bandwidth;
+    codec->is_active = original->is_active;
 
-	*copy = codec;
+    *copy = codec;
 }
 
 
-void codec_list_clear (GQueue **queue) {
+void codec_list_clear (GQueue **queue)
+{
 
-	if (*queue != NULL)
-		g_queue_free (*queue);
+    if (*queue != NULL)
+        g_queue_free (*queue);
 
-	*queue = g_queue_new();
+    *queue = g_queue_new();
 }
 
 /*void codec_list_clear (void) {
@@ -187,162 +188,174 @@ void codec_list_clear (GQueue **queue) {
 	codecsCapabilities = g_queue_new();
 }*/
 
-void codec_list_add(codec_t * c, GQueue **queue) {
+void codec_list_add (codec_t * c, GQueue **queue)
+{
 
-	// Add a codec to a specific list
-	g_queue_push_tail (*queue, (gpointer *) c);
+    // Add a codec to a specific list
+    g_queue_push_tail (*queue, (gpointer *) c);
 }
 
-void codec_set_active (codec_t **c) {
+void codec_set_active (codec_t **c)
+{
 
-	if(c)
-	{
-		DEBUG("%s set active", (*c)->name);
-		(*c)->is_active = TRUE;
-	}
+    if (c) {
+        DEBUG ("%s set active", (*c)->name);
+        (*c)->is_active = TRUE;
+    }
 }
 
-void codec_set_inactive (codec_t **c) {
+void codec_set_inactive (codec_t **c)
+{
 
-	if(c){
-		DEBUG("%s set active", (*c)->name);
-		(*c)->is_active = FALSE;
-	}
+    if (c) {
+        DEBUG ("%s set active", (*c)->name);
+        (*c)->is_active = FALSE;
+    }
 }
 
-guint codec_list_get_size () {
+guint codec_list_get_size ()
+{
 
-	// The system wide codec list and the one per account have exactly the same size
-	// The only difference may be the order and the enabled codecs
-	return g_queue_get_length (codecsCapabilities);
+    // The system wide codec list and the one per account have exactly the same size
+    // The only difference may be the order and the enabled codecs
+    return g_queue_get_length (codecsCapabilities);
 }
 
-codec_t* codec_list_get_by_name (gconstpointer name, GQueue *q) {
+codec_t* codec_list_get_by_name (gconstpointer name, GQueue *q)
+{
+
+    // If NULL is passed as argument, we look into the global capabilities
+    if (q == NULL)
+        q = codecsCapabilities;
 
-	// If NULL is passed as argument, we look into the global capabilities
-	if (q == NULL)
-		q = codecsCapabilities;
+    GList * c = g_queue_find_custom (q, name, is_name_codecstruct);
 
-	GList * c = g_queue_find_custom (q, name, is_name_codecstruct);
-	if(c)
-		return (codec_t *)c->data;
-	else
-		return NULL;
+    if (c)
+        return (codec_t *) c->data;
+    else
+        return NULL;
 }
 
-codec_t* codec_list_get_by_payload (gconstpointer payload, GQueue *q) {
+codec_t* codec_list_get_by_payload (gconstpointer payload, GQueue *q)
+{
+
+    // If NULL is passed as argument, we look into the global capabilities
+    if (q == NULL)
+        q = codecsCapabilities;
 
-	// If NULL is passed as argument, we look into the global capabilities
-	if (q == NULL)
-		q = codecsCapabilities;
+    GList * c = g_queue_find_custom (q, payload, is_payload_codecstruct);
 
-	GList * c = g_queue_find_custom (q, payload, is_payload_codecstruct);
-	if(c)
-		return (codec_t *)c->data;
-	else
-		return NULL;
+    if (c)
+        return (codec_t *) c->data;
+    else
+        return NULL;
 }
 
-codec_t* codec_list_get_nth (guint index, GQueue *q) {
-	return g_queue_peek_nth (q, index);
+codec_t* codec_list_get_nth (guint index, GQueue *q)
+{
+    return g_queue_peek_nth (q, index);
 }
 
-codec_t* capabilities_get_nth (guint index) {
+codec_t* capabilities_get_nth (guint index)
+{
 
-	return g_queue_peek_nth (codecsCapabilities, index);
+    return g_queue_peek_nth (codecsCapabilities, index);
 }
 
-void codec_set_prefered_order (guint index, GQueue *q) {
+void codec_set_prefered_order (guint index, GQueue *q)
+{
 
-	codec_t * prefered = codec_list_get_nth (index, q);
-	g_queue_pop_nth (q, index);
-	g_queue_push_head (q, prefered);
+    codec_t * prefered = codec_list_get_nth (index, q);
+    g_queue_pop_nth (q, index);
+    g_queue_push_head (q, prefered);
 }
 
-void codec_list_move_codec_up (guint index, GQueue **q) {
+void codec_list_move_codec_up (guint index, GQueue **q)
+{
 
-	DEBUG("Codec list Size: %i \n", codec_list_get_size ());
+    DEBUG ("Codec list Size: %i \n", codec_list_get_size ());
 
-	GQueue *tmp = *q;
+    GQueue *tmp = *q;
 
-	if (index != 0)
-	{
-		gpointer codec = g_queue_pop_nth (tmp, index);
-		g_queue_push_nth (tmp, codec, index-1);
-	}
+    if (index != 0) {
+        gpointer codec = g_queue_pop_nth (tmp, index);
+        g_queue_push_nth (tmp, codec, index-1);
+    }
 
-	*q = tmp;
+    *q = tmp;
 
 }
 
-void codec_list_move_codec_down (guint index, GQueue **q) {
+void codec_list_move_codec_down (guint index, GQueue **q)
+{
 
-	DEBUG("Codec list Size: %i \n",codec_list_get_size());
+    DEBUG ("Codec list Size: %i \n",codec_list_get_size());
 
-	GQueue *tmp = *q;
+    GQueue *tmp = *q;
 
-	if (index != tmp->length)
-	{
-		gpointer codec = g_queue_pop_nth (tmp, index);
-		g_queue_push_nth (tmp, codec, index+1);
-	}
-	
-	*q = tmp;
+    if (index != tmp->length) {
+        gpointer codec = g_queue_pop_nth (tmp, index);
+        g_queue_push_nth (tmp, codec, index+1);
+    }
+
+    *q = tmp;
 
 }
 
-void codec_list_update_to_daemon (account_t *acc) {
-
-	// String listing codecs payloads
-	const gchar** codecList;
-
-	// Length of the codec list
-	int length = acc->codecs->length;
-
-	// Initiate double array char list for one string
-	codecList = (void*)malloc(sizeof(void*));
-
-	// Get all codecs in queue
-	int c = 0;
-	unsigned int i = 0;
-
-	for(i = 0; i < length; i++)
-	{
-		codec_t* currentCodec = codec_list_get_nth (i, acc->codecs);
-		// Assert not null
-		if(currentCodec)
-		{
-			// Save only if active
-			if(currentCodec->is_active)
-			{
-				// Reallocate memory each time more than one active codec is found
-				if(c!=0)
-					codecList = (void*)realloc(codecList, (c+1)*sizeof(void*));
-				// Allocate memory for the payload
-				*(codecList+c) = (gchar*)malloc(sizeof(gchar*));
-				char payload[10];
-				// Put payload string in char array
-				sprintf(payload, "%d", currentCodec->_payload);
-				strcpy((char*)*(codecList+c), payload);
-				c++;
-			}
-		}
-	}
-
-	// Allocate NULL array at the end for Dbus
-	codecList = (void*)realloc(codecList, (c+1)*sizeof(void*));
-	*(codecList+c) = NULL;
-
-	// call dbus function with array of strings
-	dbus_set_active_codec_list (codecList, acc->accountID);
-
-	// Delete memory
-	for(i = 0; i < c; i++) {
-		free((gchar*)*(codecList+i));
-	}
-	free(codecList);
+void codec_list_update_to_daemon (account_t *acc)
+{
+
+    // String listing codecs payloads
+    const gchar** codecList;
+
+    // Length of the codec list
+    int length = acc->codecs->length;
+
+    // Initiate double array char list for one string
+    codecList = (void*) malloc (sizeof (void*));
+
+    // Get all codecs in queue
+    int c = 0;
+    int i = 0;
+
+    for (i = 0; i < length; i++) {
+        codec_t* currentCodec = codec_list_get_nth (i, acc->codecs);
+
+        // Assert not null
+        if (currentCodec) {
+            // Save only if active
+            if (currentCodec->is_active) {
+                // Reallocate memory each time more than one active codec is found
+                if (c!=0)
+                    codecList = (void*) realloc (codecList, (c+1) *sizeof (void*));
+
+                // Allocate memory for the payload
+                * (codecList+c) = (gchar*) malloc (sizeof (gchar*));
+                char payload[10];
+                // Put payload string in char array
+                sprintf (payload, "%d", currentCodec->_payload);
+                strcpy ( (char*) * (codecList+c), payload);
+                c++;
+            }
+        }
+    }
+
+    // Allocate NULL array at the end for Dbus
+    codecList = (void*) realloc (codecList, (c+1) *sizeof (void*));
+    * (codecList+c) = NULL;
+
+    // call dbus function with array of strings
+    dbus_set_active_codec_list (codecList, acc->accountID);
+
+    // Delete memory
+    for (i = 0; i < c; i++) {
+        free ( (gchar*) * (codecList+i));
+    }
+
+    free (codecList);
 }
 
-GQueue* get_system_codec_list (void) {
-	return  codecsCapabilities;
+GQueue* get_system_codec_list (void)
+{
+    return  codecsCapabilities;
 }
diff --git a/sflphone-client-gnome/src/codeclist.h b/sflphone-client-gnome/src/codeclist.h
index 0737f3853d10c77bb22bdca2efdb5cac89113bf6..253067a8df71f8fb3ad5cda7e697b8019ff15ec0 100644
--- a/sflphone-client-gnome/src/codeclist.h
+++ b/sflphone-client-gnome/src/codeclist.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.net>
- *                                                                              
+ *
  *  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.
@@ -38,19 +38,19 @@
   */
 
 typedef struct {
-  /** Payload of the codec */
-  gint _payload;
-  /** Tells if the codec has been activated */
-  gboolean is_active;
-  /** String description */
-  gchar * name;
-  /** Sample rate */
-  int sample_rate;
-  /** Bitrate */
-  gdouble _bitrate;
-  /** Bandwidth */
-  gdouble _bandwidth;
-}codec_t;
+    /** Payload of the codec */
+    gint _payload;
+    /** Tells if the codec has been activated */
+    gboolean is_active;
+    /** String description */
+    gchar * name;
+    /** Sample rate */
+    int sample_rate;
+    /** Bitrate */
+    gdouble _bitrate;
+    /** Bandwidth */
+    gdouble _bandwidth;
+} codec_t;
 
 /** @struct codec_t
   * @brief Codec information.
@@ -58,29 +58,29 @@ typedef struct {
   * This match how the server internally works and the dbus API to save and retrieve the codecs details.
   */
 
-/** 
- * This function initialize a specific codec list. 
+/**
+ * This function initialize a specific codec list.
  */
 void codec_list_init (GQueue **q);
 
-/** 
- * This function initialize the system wide codec list. 
+/**
+ * This function initialize the system wide codec list.
  */
 void codec_capabilities_load (void);
 
-/** 
- * This function empty and free a specific codec list. 
+/**
+ * This function empty and free a specific codec list.
  */
 void codec_list_clear (GQueue **q);
 
-/** 
- * This function empty and free the system wide codec list. 
+/**
+ * This function empty and free the system wide codec list.
  */
 void system_codec_list_clear (void);
 
-/** 
- * This function append an codec to list. 
- * @param c The codec you want to add 
+/**
+ * This function append an codec to list.
+ * @param c The codec you want to add
  */
 void codec_list_add (codec_t * c, GQueue **q);
 
@@ -94,25 +94,25 @@ void codec_set_active (codec_t **c);
  * Set a codec inactive. An active codec won't be used for codec negociation
  * @param name The string description of the codec
  */
-void codec_set_inactive(codec_t **c);
+void codec_set_inactive (codec_t **c);
 
-/** 
+/**
  * Return the number of codecs in the list
- * @return guint The number of codecs in the list 
+ * @return guint The number of codecs in the list
  */
 guint codec_list_get_size();
 
-/** 
- * Return the codec structure that corresponds to the string description 
+/**
+ * Return the codec structure that corresponds to the string description
  * @param name The string description of the codec
- * @return codec_t* A codec or NULL 
+ * @return codec_t* A codec or NULL
  */
-codec_t * codec_list_get_by_name(gconstpointer name, GQueue *q);
+codec_t * codec_list_get_by_name (gconstpointer name, GQueue *q);
 
-/** 
+/**
  * Return the codec at the nth position in the list
  * @param index The position of the codec you want
- * @return codec_t* A codec or NULL 
+ * @return codec_t* A codec or NULL
  */
 codec_t* codec_list_get_nth (guint index, GQueue *q);
 codec_t* capabilities_get_nth (guint index);
@@ -120,16 +120,16 @@ codec_t* capabilities_get_nth (guint index);
 /**
  * Set the prefered codec first in the codec list
  * @param index The position in the list of the prefered codec
- */ 
+ */
 void codec_set_prefered_order (guint index, GQueue *q);
 
-/** 
+/**
  * Move the codec from an unit up in the codec_list
  * @param index The current index in the list
  */
 void codec_list_move_codec_up (guint index, GQueue **q);
 
-/** 
+/**
  * Move the codec from an unit down in the codec_list
  * @param index The current index in the list
  */
@@ -145,7 +145,7 @@ codec_t* codec_list_get_by_payload (gconstpointer payload, GQueue *q);
 GQueue* get_system_codec_list (void);
 
 /**
- * Instanciate a new codecs with the given payload. 
+ * Instanciate a new codecs with the given payload.
  * Fetches codec specification through D-Bus
  *
  * @param payload		The unique RTP payload
diff --git a/sflphone-client-gnome/src/conference_obj.c b/sflphone-client-gnome/src/conference_obj.c
index 3b534e079ab6d5c9e53e8615b254ebdb444b1fa5..680a784b0f9e979f9ed07aa6ba532461b8bec5d6 100644
--- a/sflphone-client-gnome/src/conference_obj.c
+++ b/sflphone-client-gnome/src/conference_obj.c
@@ -32,22 +32,20 @@
 #include <sflphone_const.h>
 #include <time.h>
 
-gint is_confID_confstruct ( gconstpointer a, gconstpointer b)
+gint is_confID_confstruct (gconstpointer a, gconstpointer b)
 {
-    conference_obj_t * c = (conference_obj_t*)a;
-    if(g_strcasecmp(c->_confID, (const gchar*) b) == 0)
-    {
+    conference_obj_t * c = (conference_obj_t*) a;
+
+    if (g_strcasecmp (c->_confID, (const gchar*) b) == 0) {
         return 0;
-    }
-    else
-    {
+    } else {
         return 1;
     }
 }
 
-conference_obj_t* create_new_conference (conference_state_t state, const gchar* confID, conference_obj_t ** conf)
+void create_new_conference (conference_state_t state, const gchar* confID, conference_obj_t ** conf)
 {
-    DEBUG("create_new_conference");
+    DEBUG ("create_new_conference");
 
     // conference_obj_t *obj;
     conference_obj_t *new_conf;
@@ -56,7 +54,7 @@ conference_obj_t* create_new_conference (conference_state_t state, const gchar*
     // Allocate memory
     new_conf = g_new0 (conference_obj_t, 1);
 
-    // Set state field    
+    // Set state field
     new_conf->_state = state;
 
     // Set the ID field
@@ -66,17 +64,14 @@ conference_obj_t* create_new_conference (conference_state_t state, const gchar*
     new_conf->participant_list = NULL;
 
     *conf = new_conf;
-
 }
 
-conference_obj_t* create_new_conference_from_details (const gchar *conf_id, GHashTable *details, conference_obj_t ** conf)
-{    
-    DEBUG("create_new_conference_from_details");
+void create_new_conference_from_details (const gchar *conf_id, GHashTable *details, conference_obj_t ** conf)
+{
+    DEBUG ("create_new_conference_from_details");
 
     conference_obj_t *new_conf;
-    gchar* call_id;
     gchar** participants;
-    gchar** part;
     gchar* state_str;
     // GSList* participant_list;
 
@@ -91,11 +86,11 @@ conference_obj_t* create_new_conference_from_details (const gchar *conf_id, GHas
     new_conf->participant_list = NULL;
 
     // get participant list
-    participants = dbus_get_participant_list(conf_id);
+    participants = dbus_get_participant_list (conf_id);
 
     // generate conference participant list
-    conference_participant_list_update(participants, new_conf);
- 
+    conference_participant_list_update (participants, new_conf);
+
     state_str = g_hash_table_lookup (details, "CONF_STATE");
 
     if (g_strcasecmp (state_str, "ACTIVE_ATACHED") == 0)
@@ -114,49 +109,49 @@ void free_conference_obj_t (conference_obj_t *c)
 {
     g_free (c->_confID);
 
-    if(c->participant_list)
+    if (c->participant_list)
         g_slist_free (c->participant_list);
 
     g_free (c);
 }
 
 
-void conference_add_participant(const gchar* call_id, conference_obj_t* conf)
+void conference_add_participant (const gchar* call_id, conference_obj_t* conf)
 {
     // store the new participant list after appending participant id
-    conf->participant_list = g_slist_append(conf->participant_list, (gpointer)call_id);
+    conf->participant_list = g_slist_append (conf->participant_list, (gpointer) call_id);
 }
 
 
-void conference_remove_participant(const gchar* call_id, conference_obj_t* conf)
+void conference_remove_participant (const gchar* call_id, conference_obj_t* conf)
 {
     // store the new participant list after removing participant id
-    conf->participant_list = g_slist_remove(conf->participant_list, (gconstpointer)call_id);
+    conf->participant_list = g_slist_remove (conf->participant_list, (gconstpointer) call_id);
 }
 
 
-GSList* conference_next_participant(GSList* participant)
+GSList* conference_next_participant (GSList* participant)
 {
-    return g_slist_next(participant);
+    return g_slist_next (participant);
 }
 
 
-GSList* conference_participant_list_update(gchar** participants, conference_obj_t* conf)
+void conference_participant_list_update (gchar** participants, conference_obj_t* conf)
 {
     gchar* call_id;
     gchar** part;
 
-    if(conf->participant_list) {
-        g_slist_free(conf->participant_list);
-	conf->participant_list = NULL;
+    if (conf->participant_list) {
+        g_slist_free (conf->participant_list);
+        conf->participant_list = NULL;
     }
 
-    DEBUG("Conference: Participant list update");
+    DEBUG ("Conference: Participant list update");
 
     for (part = participants; *part; part++) {
-        call_id = (gchar*)(*part);
-	DEBUG("Adding %s", call_id);
-	conference_add_participant(call_id, conf);
+        call_id = (gchar*) (*part);
+        DEBUG ("Adding %s", call_id);
+        conference_add_participant (call_id, conf);
     }
 
 }
diff --git a/sflphone-client-gnome/src/conference_obj.h b/sflphone-client-gnome/src/conference_obj.h
index 5215ee7bd5aebbc9bea181e6fb622a34b42c6a55..56b731f7c8489ec94ce56dc1a86e3a99eece6c7c 100644
--- a/sflphone-client-gnome/src/conference_obj.h
+++ b/sflphone-client-gnome/src/conference_obj.h
@@ -41,12 +41,11 @@
 /** @enum conference_state_t
   * This enum have all the states a conference can take.
   */
-typedef enum
-{
-   CONFERENCE_STATE_ACTIVE_ATACHED = 0,
-   CONFERENCE_STATE_ACTIVE_DETACHED,
-   CONFERENCE_STATE_RECORD,
-   CONFERENCE_STATE_HOLD
+typedef enum {
+    CONFERENCE_STATE_ACTIVE_ATACHED = 0,
+    CONFERENCE_STATE_ACTIVE_DETACHED,
+    CONFERENCE_STATE_RECORD,
+    CONFERENCE_STATE_HOLD
 } conference_state_t;
 
 
@@ -57,30 +56,31 @@ typedef enum
 typedef struct  {
 
     conference_state_t _state;       // The state of the call
-    gchar* _confID;                  // The call ID
+    gchar *_confID;                  // The call ID
     gboolean _conference_secured;    // the security state of the conference
     gboolean _conf_srtp_enabled;     // security required for this conference
-    GSList* participant_list;             // participant list for this 
+    GSList *participant_list;        // participant list for this
+    GtkWidget *_im_widget;           // associated instant messaging widget
 
 } conference_obj_t;
 
-conference_obj_t* create_new_conference (conference_state_t, const gchar*, conference_obj_t **);
+void create_new_conference (conference_state_t, const gchar*, conference_obj_t **);
 
-conference_obj_t* create_new_conference_from_details (const gchar *, GHashTable *, conference_obj_t **);
+void create_new_conference_from_details (const gchar *, GHashTable *, conference_obj_t **);
 
 void free_conference_obj_t (conference_obj_t *c);
 
-/* 
- * GCompareFunc to compare a confID (gchar* and a callable_obj_t) 
+/*
+ * GCompareFunc to compare a confID (gchar* and a callable_obj_t)
  */
-gint is_confID_confstruct ( gconstpointer, gconstpointer);
+gint is_confID_confstruct (gconstpointer, gconstpointer);
 
-void conference_add_participatn(const gchar*, conference_obj_t *);
+void conference_add_participatn (const gchar*, conference_obj_t *);
 
-void conference_remove_participant(const gchar*, conference_obj_t *);
+void conference_remove_participant (const gchar*, conference_obj_t *);
 
-GSList* conference_next_participant(GSList* participant);
+GSList* conference_next_participant (GSList* participant);
 
-GSList* conference_participant_list_update(gchar**, conference_obj_t*);
+void conference_participant_list_update (gchar**, conference_obj_t*);
 
 #endif
diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c
index a3757c13dbfed920181cf8a543868ea5ad6603fe..9ab3de9e4f5a65df5d254e24df00564f398db074 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.c
@@ -3,6 +3,7 @@
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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
@@ -30,6 +31,8 @@
  *  as that of the covered work.
  */
 
+
+
 #include <actions.h>
 #include <mainwindow.h>
 #include <accountlist.h>
@@ -37,6 +40,7 @@
 #include <accountconfigdialog.h>
 #include <zrtpadvanceddialog.h>
 #include <tlsadvanceddialog.h>
+#include <audioconf.h>
 
 // From version 2.16, gtk provides the functionalities libsexy used to provide
 #if GTK_CHECK_VERSION(2,16,0)
@@ -56,7 +60,7 @@
  * TODO: tidy this up
  * by storing these variables
  * in a private structure.
- * Local variables 
+ * Local variables
  */
 GtkDialog * dialog;
 GtkWidget * hbox;
@@ -72,7 +76,7 @@ GtkWidget * entryMailbox;
 GtkWidget * entryUseragent;
 GtkWidget * entryResolveNameOnlyOnce;
 GtkWidget * expireSpinBox;
-GtkListStore * credentialStore;
+GtkListStore * credentialStore = NULL;
 GtkWidget * deleteCredButton;
 GtkWidget * treeViewCredential;
 // GtkWidget * scrolledWindowCredential;
@@ -96,6 +100,8 @@ GtkWidget * publishedAddressLabel;
 GtkWidget * publishedPortLabel;
 GtkWidget * stunServerLabel;
 GtkWidget * stunServerEntry;
+GtkWidget * enableTone;
+GtkWidget * fileChooser;
 
 GtkWidget * displayNameEntry;
 
@@ -106,1223 +112,1269 @@ GtkWidget * overrtp;
 
 GHashTable * directIpCallsProperties = NULL;
 
+gchar *current_username;
+
+
 // Credentials
 enum {
-	COLUMN_CREDENTIAL_REALM,
-	COLUMN_CREDENTIAL_USERNAME,
-	COLUMN_CREDENTIAL_PASSWORD,
-	COLUMN_CREDENTIAL_DATA,
-	COLUMN_CREDENTIAL_COUNT
+    COLUMN_CREDENTIAL_REALM,
+    COLUMN_CREDENTIAL_USERNAME,
+    COLUMN_CREDENTIAL_PASSWORD,
+    COLUMN_CREDENTIAL_DATA,
+    COLUMN_CREDENTIAL_COUNT
 };
 
+/*
+ * The same window is used with different configurations
+ * so we need to reset some data to prevent side-effects
+ */
+static void reset()
+{
+    entryAlias = NULL;
+    protocolComboBox = NULL;
+    entryHostname = NULL;
+    entryUsername = NULL;
+    entryPassword = NULL;
+    entryUseragent = NULL;
+    entryMailbox = NULL;
+}
+
 /*
  * Display / Hide the password
  */
-static void show_password_cb (GtkWidget *widget, gpointer data)
+static void show_password_cb (GtkWidget *widget UNUSED, gpointer data)
 {
-	gtk_entry_set_visibility (GTK_ENTRY (data), !gtk_entry_get_visibility (GTK_ENTRY (data)));
+    gtk_entry_set_visibility (GTK_ENTRY (data), !gtk_entry_get_visibility (GTK_ENTRY (data)));
 }
 
 /* Signal to protocolComboBox 'changed' */
-void change_protocol_cb (account_t *currentAccount UNUSED) {
-
-	gchar *protocol = gtk_combo_box_get_active_text (GTK_COMBO_BOX (protocolComboBox));
-
-	// Only if tabs are not NULL
-	if(security_tab && advanced_tab) {
-	    if (g_strcasecmp (protocol, "IAX") == 0) {
-		gtk_widget_hide (GTK_WIDGET(security_tab));
-		gtk_widget_hide (GTK_WIDGET(advanced_tab));
-	    }
-	    else {
-                gtk_widget_show (GTK_WIDGET(security_tab));
-		gtk_widget_show (GTK_WIDGET(advanced_tab));
-	    }
-	}
+void change_protocol_cb (account_t *currentAccount UNUSED)
+{
+
+    gchar *protocol = gtk_combo_box_get_active_text (GTK_COMBO_BOX (protocolComboBox));
+
+    // Only if tabs are not NULL
+    if (security_tab && advanced_tab) {
+        if (g_strcasecmp (protocol, "IAX") == 0) {
+            gtk_widget_hide (GTK_WIDGET (security_tab));
+            gtk_widget_hide (GTK_WIDGET (advanced_tab));
+        } else {
+            gtk_widget_show (GTK_WIDGET (security_tab));
+            gtk_widget_show (GTK_WIDGET (advanced_tab));
+        }
+    }
 }
 
-	int
-is_iax_enabled(void)
+int
+is_iax_enabled (void)
 {
-	int res = dbus_is_iax2_enabled();
-	if(res == 1)
-		return TRUE;
-	else
-		return FALSE;
+    int res = dbus_is_iax2_enabled();
+
+    if (res == 1)
+        return TRUE;
+    else
+        return FALSE;
 }
 
 
-        void
-select_dtmf_type( void )
+void
+select_dtmf_type (void)
 {
 
-        DEBUG("DTMF selection changed\n");
+    DEBUG ("DTMF selection changed\n");
 
-        if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(overrtp) ) )
-        {
-                // dbus_set_audio_manager( ALSA );
-                DEBUG("Selected DTMF over RTP");
-        }
-        else {
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (overrtp))) {
+        // dbus_set_audio_manager( ALSA );
+        DEBUG ("Selected DTMF over RTP");
+    } else {
 
-                // dbus_set_audio_manager( PULSEAUDIO );
-                DEBUG("Selected DTMF over SIP");
-        }
+        // dbus_set_audio_manager( PULSEAUDIO );
+        DEBUG ("Selected DTMF over SIP");
+    }
 
 }
 
-static GPtrArray* getNewCredential (GHashTable * properties) {
+static GPtrArray* getNewCredential (GHashTable * properties)
+{
 
-	GtkTreeIter iter;
-	gboolean valid;
-	gint row_count = 0;
+    GtkTreeIter iter;
+    gboolean valid;
+    gint row_count = 0;
+
+    valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (credentialStore), &iter);
 
-	valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(credentialStore), &iter);
+    GPtrArray *credential_array = g_ptr_array_new ();
 
-	GPtrArray *credential_array = g_ptr_array_new ();
+    gchar *username;
+    gchar *realm;
+    gchar *password;
+    GHashTable * new_table;
+
+    if (valid == FALSE) {
+        DEBUG ("Gtk tree model iter is not valid");
+        return NULL;
+    }
 
-	gchar *username;
-	gchar *realm;
-	gchar *password;
-	GHashTable * new_table;   
+    gtk_tree_model_get (GTK_TREE_MODEL (credentialStore), &iter,
+                        COLUMN_CREDENTIAL_REALM, &realm,
+                        COLUMN_CREDENTIAL_USERNAME, &username,
+                        COLUMN_CREDENTIAL_PASSWORD, &password,
+                        -1);
 
-	gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter,
-			COLUMN_CREDENTIAL_REALM, &realm,
-			COLUMN_CREDENTIAL_USERNAME, &username,
-			COLUMN_CREDENTIAL_PASSWORD, &password,
-			-1);
+    g_hash_table_insert (properties, g_strdup (ACCOUNT_REALM), realm);
 
-	g_hash_table_insert(properties, g_strdup(ACCOUNT_REALM), realm);
-	g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), username);
+    // better use the current_username as it is the account username in the
+    // g_hash_table_insert(properties, g_strdup(ACCOUNT_AUTHENTICATION_USERNAME), username);
+    g_hash_table_insert (properties, g_strdup (ACCOUNT_AUTHENTICATION_USERNAME), current_username);
 
-	// Do not change the password if nothing has been changed by the user
-	if (g_strcasecmp (password, PW_HIDDEN) != 0)
-		g_hash_table_insert(properties, g_strdup(ACCOUNT_PASSWORD), password);
+    // Do not change the password if nothing has been changed by the user
+    if (g_strcasecmp (password, PW_HIDDEN) != 0)
+        g_hash_table_insert (properties, g_strdup (ACCOUNT_PASSWORD), password);
 
-	valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter);
 
-	while (valid) {        
-		gtk_tree_model_get (GTK_TREE_MODEL(credentialStore), &iter,
-				COLUMN_CREDENTIAL_REALM, &realm,
-				COLUMN_CREDENTIAL_USERNAME, &username,
-				COLUMN_CREDENTIAL_PASSWORD, &password,
-				-1);
+    valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (credentialStore), &iter);
 
-		DEBUG ("Row %d: %s %s %s", row_count, username, password, realm);
+    while (valid) {
+        gtk_tree_model_get (GTK_TREE_MODEL (credentialStore), &iter,
+                            COLUMN_CREDENTIAL_REALM, &realm,
+                            COLUMN_CREDENTIAL_USERNAME, &username,
+                            COLUMN_CREDENTIAL_PASSWORD, &password,
+                            -1);
 
-		new_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
-		g_hash_table_insert(new_table, g_strdup(ACCOUNT_REALM), realm);
-		g_hash_table_insert(new_table, g_strdup(ACCOUNT_USERNAME), username);
-		g_hash_table_insert(new_table, g_strdup(ACCOUNT_PASSWORD), password);
+        DEBUG ("Row %d: %s %s %s", row_count, username, password, realm);
 
-		g_ptr_array_add (credential_array, new_table);
+        new_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+        g_hash_table_insert (new_table, g_strdup (ACCOUNT_REALM), realm);
+        g_hash_table_insert (new_table, g_strdup (ACCOUNT_USERNAME), username);
+        g_hash_table_insert (new_table, g_strdup (ACCOUNT_PASSWORD), password);
 
-		row_count ++;
+        g_ptr_array_add (credential_array, new_table);
 
-		valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(credentialStore), &iter);
-	}
+        row_count ++;
 
-	return credential_array;
+        valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (credentialStore), &iter);
+    }
+
+    return credential_array;
 }
 
-static void update_credential_cb(GtkWidget *widget, gpointer data UNUSED)
+static void update_credential_cb (GtkWidget *widget, gpointer data UNUSED)
 {
-	GtkTreeIter iter;
-	gtk_tree_model_get_iter_from_string ((GtkTreeModel *) credentialStore, &iter, "0");
-	gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "column"));
-	// g_print ("set password to %s\n", (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)));
-	gtk_list_store_set (GTK_LIST_STORE (credentialStore), &iter, column, (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)), -1);
+    GtkTreeIter iter;
+
+    if (credentialStore) {
+        if (gtk_tree_model_get_iter_from_string ( (GtkTreeModel *) credentialStore, &iter, "0")) {
+            gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "column"));
+            // g_print ("set password to %s\n", (gchar *) gtk_entry_get_text(GTK_ENTRY(widget)));
+            gtk_list_store_set (GTK_LIST_STORE (credentialStore), &iter, column, (gchar *) gtk_entry_get_text (GTK_ENTRY (widget)), -1);
+        }
+    }
+
 }
 
-static GtkWidget* create_basic_tab (account_t **a)  {
+static GtkWidget* create_basic_tab (account_t **a)
+{
 
-	GtkWidget * frame;
-	GtkWidget * table;
-	account_t *currentAccount;
-	GtkWidget * clearTextCheckbox;
+    GtkWidget * frame;
+    GtkWidget * table;
+    account_t *currentAccount;
+    GtkWidget * clearTextCheckbox;
 #if GTK_CHECK_VERSION(2,16,0)
 #else
-	GtkWidget *image;
+    GtkWidget *image;
 #endif
 
-	// Default settings
-	gchar *curAccountID = "";
-	gchar *curAccountEnabled = "true";
-	gchar *curAccountType = "SIP";
-	gchar *curAlias = "";
-	gchar *curUsername = "";
-	gchar *curRouteSet = "";
-	gchar *curHostname = "";
-	gchar *curPassword = "";
-	/* TODO: add curProxy, and add boxes for Proxy support */
-	gchar *curMailbox = "";
-	gchar *curUseragent = "";
-
-	currentAccount = *a;
-
-	int row = 0;
-
-	// Load from SIP/IAX/Unknown ?
-	if(currentAccount)
-	{
-		curAccountID = currentAccount->accountID;
-		curAccountType = g_hash_table_lookup(currentAccount->properties, ACCOUNT_TYPE);
-		DEBUG("Config: Current accountType %s", curAccountType);
-		curAccountEnabled = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ENABLED);
-		curAlias = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ALIAS);
-		curHostname = g_hash_table_lookup(currentAccount->properties, ACCOUNT_HOSTNAME);
-		curPassword = g_hash_table_lookup(currentAccount->properties, ACCOUNT_PASSWORD);
-		curUsername = g_hash_table_lookup(currentAccount->properties, ACCOUNT_USERNAME);
-		// curRouteSet = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ROUTE);
-		curMailbox = g_hash_table_lookup(currentAccount->properties, ACCOUNT_MAILBOX);
-		curUseragent = g_hash_table_lookup(currentAccount->properties, ACCOUNT_USERAGENT);
-	}
-
-	gnome_main_section_new (_("Account Parameters"), &frame);
-	gtk_widget_show(frame);
-
-	if(strcmp(curAccountType, "SIP") == 0) {
-	  table = gtk_table_new (9, 2,  FALSE/* homogeneous */);
-	}
-	else if(strcmp(curAccountType, "IAX") == 0) {
-	  table = gtk_table_new (8, 2, FALSE);
-	}
-
-	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_widget_show (table);
-	gtk_container_add( GTK_CONTAINER( frame) , table );
-
-	label = gtk_label_new_with_mnemonic (_("_Alias"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	entryAlias = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryAlias);
-	gtk_entry_set_text(GTK_ENTRY(entryAlias), curAlias);
-	gtk_table_attach ( GTK_TABLE( table ), entryAlias, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-
-	row++;
-	label = gtk_label_new_with_mnemonic (_("_Protocol"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	protocolComboBox = gtk_combo_box_new_text();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), protocolComboBox);
-	gtk_combo_box_append_text(GTK_COMBO_BOX(protocolComboBox), "SIP");
-	if( is_iax_enabled() ) gtk_combo_box_append_text(GTK_COMBO_BOX(protocolComboBox), "IAX");
-	if(strcmp(curAccountType, "SIP") == 0)
-	{
-		gtk_combo_box_set_active(GTK_COMBO_BOX(protocolComboBox),0);
-	}
-	else if(strcmp(curAccountType, "IAX") == 0)
-	{
-		gtk_combo_box_set_active(GTK_COMBO_BOX(protocolComboBox),1);
-	}
-	else
-	{
-	        DEBUG("Config: Error: Account protocol not valid");
-		/* Should never come here, add debug message. */
-		gtk_combo_box_append_text(GTK_COMBO_BOX(protocolComboBox), _("Unknown"));
-		gtk_combo_box_set_active(GTK_COMBO_BOX(protocolComboBox),2);
-	}
-	gtk_table_attach ( GTK_TABLE( table ), protocolComboBox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	/* Link signal 'changed' */
-	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(protocolComboBox)), "changed",
-			G_CALLBACK (change_protocol_cb),
-			currentAccount);
-
-	row++;
-	label = gtk_label_new_with_mnemonic (_("_Host name"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	entryHostname = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryHostname);
-	gtk_entry_set_text(GTK_ENTRY(entryHostname), curHostname);
-	gtk_table_attach ( GTK_TABLE( table ), entryHostname, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	row++;
-	label = gtk_label_new_with_mnemonic (_("_User name"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);	
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+    // Default settings
+    gchar *curAccountID = "";
+    gchar *curAccountEnabled = "true";
+    gchar *curAccountType = "SIP";
+    gchar *curAlias = "";
+    gchar *curUsername = "";
+    gchar *curHostname = "";
+    gchar *curPassword = "";
+    /* TODO: add curProxy, and add boxes for Proxy support */
+    gchar *curMailbox = "";
+    gchar *curUseragent = "";
+
+    currentAccount = *a;
+
+    int row = 0;
+
+    DEBUG ("Config: Create basic account tab");
+
+    // Load from SIP/IAX/Unknown ?
+    if (currentAccount) {
+        curAccountID = currentAccount->accountID;
+        curAccountType = g_hash_table_lookup (currentAccount->properties, ACCOUNT_TYPE);
+        curAccountEnabled = g_hash_table_lookup (currentAccount->properties, ACCOUNT_ENABLED);
+        curAlias = g_hash_table_lookup (currentAccount->properties, ACCOUNT_ALIAS);
+        curHostname = g_hash_table_lookup (currentAccount->properties, ACCOUNT_HOSTNAME);
+        curPassword = g_hash_table_lookup (currentAccount->properties, ACCOUNT_PASSWORD);
+        curUsername = g_hash_table_lookup (currentAccount->properties, ACCOUNT_USERNAME);
+        // curRouteSet = g_hash_table_lookup(currentAccount->properties, ACCOUNT_ROUTE);
+        curMailbox = g_hash_table_lookup (currentAccount->properties, ACCOUNT_MAILBOX);
+        curMailbox = curMailbox != NULL ? curMailbox : "";
+        curUseragent = g_hash_table_lookup (currentAccount->properties, ACCOUNT_USERAGENT);
+    }
+
+    gnome_main_section_new (_ ("Account Parameters"), &frame);
+    gtk_widget_show (frame);
+
+    if (strcmp (curAccountType, "SIP") == 0) {
+        table = gtk_table_new (9, 2,  FALSE/* homogeneous */);
+    } else if (strcmp (curAccountType, "IAX") == 0) {
+        table = gtk_table_new (8, 2, FALSE);
+    }
+
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    gtk_widget_show (table);
+    gtk_container_add (GTK_CONTAINER (frame) , table);
+
+    label = gtk_label_new_with_mnemonic (_ ("_Alias"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    entryAlias = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryAlias);
+    gtk_entry_set_text (GTK_ENTRY (entryAlias), curAlias);
+    gtk_table_attach (GTK_TABLE (table), entryAlias, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+
+    row++;
+    label = gtk_label_new_with_mnemonic (_ ("_Protocol"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    protocolComboBox = gtk_combo_box_new_text();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), protocolComboBox);
+    gtk_combo_box_append_text (GTK_COMBO_BOX (protocolComboBox), "SIP");
+
+    if (is_iax_enabled()) gtk_combo_box_append_text (GTK_COMBO_BOX (protocolComboBox), "IAX");
+
+    if (strcmp (curAccountType, "SIP") == 0) {
+        gtk_combo_box_set_active (GTK_COMBO_BOX (protocolComboBox),0);
+    } else if (strcmp (curAccountType, "IAX") == 0) {
+        gtk_combo_box_set_active (GTK_COMBO_BOX (protocolComboBox),1);
+    } else {
+        DEBUG ("Config: Error: Account protocol not valid");
+        /* Should never come here, add debug message. */
+        gtk_combo_box_append_text (GTK_COMBO_BOX (protocolComboBox), _ ("Unknown"));
+        gtk_combo_box_set_active (GTK_COMBO_BOX (protocolComboBox),2);
+    }
+
+    gtk_table_attach (GTK_TABLE (table), protocolComboBox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    /* Link signal 'changed' */
+    g_signal_connect (G_OBJECT (GTK_COMBO_BOX (protocolComboBox)), "changed",
+                      G_CALLBACK (change_protocol_cb),
+                      currentAccount);
+
+    row++;
+    label = gtk_label_new_with_mnemonic (_ ("_Host name"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    entryHostname = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryHostname);
+    gtk_entry_set_text (GTK_ENTRY (entryHostname), curHostname);
+    gtk_table_attach (GTK_TABLE (table), entryHostname, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    row++;
+    label = gtk_label_new_with_mnemonic (_ ("_User name"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
-	entryUsername = gtk_entry_new();
-	gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (entryUsername), GTK_ENTRY_ICON_PRIMARY, gdk_pixbuf_new_from_file(ICONS_DIR "/stock_person.svg", NULL));
+    entryUsername = gtk_entry_new();
+    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (entryUsername), GTK_ENTRY_ICON_PRIMARY, gdk_pixbuf_new_from_file (ICONS_DIR "/stock_person.svg", NULL));
 #else
-	entryUsername = sexy_icon_entry_new();
-	image = gtk_image_new_from_file( ICONS_DIR "/stock_person.svg" );
-	sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(entryUsername), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    entryUsername = sexy_icon_entry_new();
+    image = gtk_image_new_from_file (ICONS_DIR "/stock_person.svg");
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (entryUsername), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUsername);
-	gtk_entry_set_text(GTK_ENTRY(entryUsername), curUsername);
-	gtk_table_attach ( GTK_TABLE( table ), entryUsername, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	if(strcmp(curAccountType, "SIP") == 0) {
-	  g_signal_connect(G_OBJECT (entryUsername), "changed", G_CALLBACK (update_credential_cb), NULL);
-	  g_object_set_data (G_OBJECT (entryUsername), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
-	}
-
-	// Route set can be update only for SIP account
-	// TODO: uncomment this code and implement route 
-	/*
-	if(strcmp(curAccountType, "SIP") == 0) {
-	  row++;
-	  label = gtk_label_new_with_mnemonic(_("_Route (optional)"));
-	  gtk_table_attach(GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	  gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	  entryRouteSet = gtk_entry_new();
-	  gtk_label_set_mnemonic_widget(GTK_LABEL(label), entryRouteSet);
-	  gtk_entry_set_text(GTK_ENTRY(entryRouteSet), curRouteSet);
-	  gtk_table_attach (GTK_TABLE(table), entryRouteSet, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	}
-	*/
-
-	row++;
-	label = gtk_label_new_with_mnemonic (_("_Password"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUsername);
+    gtk_entry_set_text (GTK_ENTRY (entryUsername), curUsername);
+    gtk_table_attach (GTK_TABLE (table), entryUsername, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    if (strcmp (curAccountType, "SIP") == 0) {
+        g_signal_connect (G_OBJECT (entryUsername), "changed", G_CALLBACK (update_credential_cb), NULL);
+        g_object_set_data (G_OBJECT (entryUsername), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
+    }
+
+    row++;
+    label = gtk_label_new_with_mnemonic (_ ("_Password"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
-	entryPassword = gtk_entry_new();
-	GtkSettings *settings = gtk_settings_get_default ();
-	//g_object_set (G_OBJECT (settings), "gtk-entry-password-hint-timeout", 600, NULL);
-	gtk_entry_set_icon_from_stock (GTK_ENTRY (entryPassword), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
+    entryPassword = gtk_entry_new();
+    gtk_entry_set_icon_from_stock (GTK_ENTRY (entryPassword), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
 #else
-	entryPassword = sexy_icon_entry_new();
-	image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
-	sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(entryPassword), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    entryPassword = sexy_icon_entry_new();
+    image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (entryPassword), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_entry_set_visibility(GTK_ENTRY(entryPassword), FALSE);
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPassword);
-	gtk_entry_set_text(GTK_ENTRY(entryPassword), curPassword);
-	gtk_table_attach ( GTK_TABLE( table ), entryPassword, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	if(strcmp(curAccountType, "SIP") == 0) {
-	  g_signal_connect (G_OBJECT (entryPassword), "changed", G_CALLBACK (update_credential_cb), NULL);
-	  g_object_set_data (G_OBJECT (entryPassword), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
-	}
-
-	row++;
-	clearTextCheckbox = gtk_check_button_new_with_mnemonic (_("Show password"));
-	g_signal_connect (clearTextCheckbox, "toggled", G_CALLBACK (show_password_cb), entryPassword);
-	gtk_table_attach (GTK_TABLE (table), clearTextCheckbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	row++;
-	label = gtk_label_new_with_mnemonic (_("_Voicemail number"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	entryMailbox = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryMailbox);
-	gtk_entry_set_text(GTK_ENTRY(entryMailbox), curMailbox);
-	gtk_table_attach ( GTK_TABLE( table ), entryMailbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	row++;
-	label = gtk_label_new_with_mnemonic (_("_User-agent"));
-	gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-	entryUseragent = gtk_entry_new ();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUseragent);
-	gtk_entry_set_text (GTK_ENTRY (entryUseragent), curUseragent);
-	gtk_table_attach ( GTK_TABLE( table ), entryUseragent, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	gtk_widget_show_all( table );
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-
-	*a = currentAccount;
-	return frame;
+    gtk_entry_set_visibility (GTK_ENTRY (entryPassword), FALSE);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryPassword);
+    gtk_entry_set_text (GTK_ENTRY (entryPassword), curPassword);
+    gtk_table_attach (GTK_TABLE (table), entryPassword, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    if (strcmp (curAccountType, "SIP") == 0) {
+        g_signal_connect (G_OBJECT (entryPassword), "changed", G_CALLBACK (update_credential_cb), NULL);
+        g_object_set_data (G_OBJECT (entryPassword), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
+    }
+
+    row++;
+    clearTextCheckbox = gtk_check_button_new_with_mnemonic (_ ("Show password"));
+    g_signal_connect (clearTextCheckbox, "toggled", G_CALLBACK (show_password_cb), entryPassword);
+    gtk_table_attach (GTK_TABLE (table), clearTextCheckbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    row++;
+    label = gtk_label_new_with_mnemonic (_ ("_Voicemail number"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    entryMailbox = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryMailbox);
+    gtk_entry_set_text (GTK_ENTRY (entryMailbox), curMailbox);
+    gtk_table_attach (GTK_TABLE (table), entryMailbox, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    row++;
+    label = gtk_label_new_with_mnemonic (_ ("_User-agent"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    entryUseragent = gtk_entry_new ();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), entryUseragent);
+    gtk_entry_set_text (GTK_ENTRY (entryUseragent), curUseragent);
+    gtk_table_attach (GTK_TABLE (table), entryUseragent, 1, 2, row, row+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    gtk_widget_show_all (table);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+
+    *a = currentAccount;
+    return frame;
 }
 
-static void fill_treeview_with_credential (GtkListStore * credentialStore, account_t * account) 
+static void fill_treeview_with_credential (GtkListStore * credentialStore, account_t * account)
 {
-	GtkTreeIter iter;
-	gtk_list_store_clear(credentialStore);
-	gtk_list_store_append (credentialStore, &iter);
-
-	/* This is the default, undeletable credential */
-	gchar * authentication_name = g_hash_table_lookup(account->properties, ACCOUNT_AUTHENTICATION_USERNAME);
-	gchar * realm = g_hash_table_lookup(account->properties, ACCOUNT_REALM);        
-	if (realm == NULL || (g_strcmp0(realm, "") == 0)) {
-		realm = g_strdup("*");
-	}
-
-	if((authentication_name == NULL) || (g_strcmp0(authentication_name, "") == 0)) {
-		gtk_list_store_set(credentialStore, &iter,
-				COLUMN_CREDENTIAL_REALM, realm, 
-				COLUMN_CREDENTIAL_USERNAME, gtk_entry_get_text(GTK_ENTRY(entryUsername)),
-				COLUMN_CREDENTIAL_PASSWORD, gtk_entry_get_text(GTK_ENTRY(entryPassword)),    
-				COLUMN_CREDENTIAL_DATA, account, 
-				-1);
-	} else {
-		gtk_list_store_set(credentialStore, &iter,
-				COLUMN_CREDENTIAL_REALM, g_hash_table_lookup(account->properties, ACCOUNT_REALM), 
-				COLUMN_CREDENTIAL_USERNAME, g_hash_table_lookup(account->properties, ACCOUNT_AUTHENTICATION_USERNAME),
-				// COLUMN_CREDENTIAL_PASSWORD, gtk_entry_get_text(GTK_ENTRY(entryPassword)),    
-				COLUMN_CREDENTIAL_PASSWORD, PW_HIDDEN,    
-				COLUMN_CREDENTIAL_DATA, account, 
-				-1);
-		g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL);
-	}
-
-	if(account->credential_information == NULL) {
-		DEBUG("No credential defined");
-		return;
-	}
-
-	unsigned int i;
-	for(i = 0; i < account->credential_information->len; i++)
-	{	                    
-		GHashTable * element = g_ptr_array_index(account->credential_information, i);               
-		gtk_list_store_append (credentialStore, &iter);
-		gtk_list_store_set(credentialStore, &iter,
-				COLUMN_CREDENTIAL_REALM, g_hash_table_lookup(element, ACCOUNT_REALM), 
-				COLUMN_CREDENTIAL_USERNAME, g_hash_table_lookup(element, ACCOUNT_USERNAME), 
-				COLUMN_CREDENTIAL_PASSWORD, g_hash_table_lookup(element, ACCOUNT_PASSWORD), 
-				COLUMN_CREDENTIAL_DATA, element, // Pointer
-				-1);
-	}
+    GtkTreeIter iter;
+    gtk_list_store_clear (credentialStore);
+
+    if (account->credential_information == NULL) {
+        DEBUG ("No credential defined");
+        return;
+    }
+
+    unsigned int i;
+
+    for (i = 0; i < account->credential_information->len; i++) {
+        GHashTable * element = g_ptr_array_index (account->credential_information, i);
+        gtk_list_store_append (credentialStore, &iter);
+        gtk_list_store_set (credentialStore, &iter,
+                            COLUMN_CREDENTIAL_REALM, g_hash_table_lookup (element, ACCOUNT_REALM),
+                            COLUMN_CREDENTIAL_USERNAME, g_hash_table_lookup (element, ACCOUNT_USERNAME),
+                            COLUMN_CREDENTIAL_PASSWORD, g_hash_table_lookup (element, ACCOUNT_PASSWORD),
+                            COLUMN_CREDENTIAL_DATA, element, -1);
+    }
 }
 
-static select_credential_cb(GtkTreeSelection *selection, GtkTreeModel *model)
+static void select_credential_cb (GtkTreeSelection *selection, GtkTreeModel *model)
 {
-	GtkTreeIter iter;
-	GtkTreePath *path;
-	if(gtk_tree_selection_get_selected (selection, NULL, &iter)) {
-		path = gtk_tree_model_get_path (model, &iter);
-		if(gtk_tree_path_get_indices (path)[0] == 0) {
-			gtk_widget_set_sensitive(GTK_WIDGET(deleteCredButton), FALSE);
-		} else {
-			gtk_widget_set_sensitive(GTK_WIDGET(deleteCredButton), TRUE);
-		}
-	}
+    GtkTreeIter iter;
+    GtkTreePath *path;
+
+    if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+        path = gtk_tree_model_get_path (model, &iter);
+
+        if (gtk_tree_path_get_indices (path) [0] == 0) {
+            gtk_widget_set_sensitive (GTK_WIDGET (deleteCredButton), FALSE);
+        } else {
+            gtk_widget_set_sensitive (GTK_WIDGET (deleteCredButton), TRUE);
+        }
+    }
 }
 
-static void add_credential_cb (GtkWidget *button, gpointer data)
+static void add_credential_cb (GtkWidget *button UNUSED, gpointer data)
 {
-	GtkTreeIter iter;
-	GtkTreeModel *model = (GtkTreeModel *)data;
-
-	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
-	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-			COLUMN_CREDENTIAL_REALM, "*",
-			COLUMN_CREDENTIAL_USERNAME, _("Authentication"),
-			COLUMN_CREDENTIAL_PASSWORD, _("Secret"),
-			-1);
+    GtkTreeIter iter;
+    GtkTreeModel *model = (GtkTreeModel *) data;
+
+    gtk_list_store_append (GTK_LIST_STORE (model), &iter);
+    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                        COLUMN_CREDENTIAL_REALM, "*",
+                        COLUMN_CREDENTIAL_USERNAME, _ ("Authentication"),
+                        COLUMN_CREDENTIAL_PASSWORD, _ ("Secret"),
+                        -1);
 }
 
-static void delete_credential_cb(GtkWidget *button, gpointer data)
+static void delete_credential_cb (GtkWidget *button UNUSED, gpointer data)
 {
-	GtkTreeIter iter;
-	GtkTreeView *treeview = (GtkTreeView *)data;
-	GtkTreeModel *model = gtk_tree_view_get_model (treeview);
-	GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview);
+    GtkTreeIter iter;
+    GtkTreeView *treeview = (GtkTreeView *) data;
+    GtkTreeModel *model = gtk_tree_view_get_model (treeview);
+    GtkTreeSelection *selection = gtk_tree_view_get_selection (treeview);
 
-	if (gtk_tree_selection_get_selected (selection, NULL, &iter))
-	{
-		GtkTreePath *path;
-		path = gtk_tree_model_get_path (model, &iter);
-		gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+    if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+        GtkTreePath *path;
+        path = gtk_tree_model_get_path (model, &iter);
+        gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
 
-		gtk_tree_path_free (path);
-	}
+        gtk_tree_path_free (path);
+    }
 
 }
 
-static void cell_edited_cb(GtkCellRendererText *renderer, gchar *path_desc, gchar *text, gpointer data)
+static void cell_edited_cb (GtkCellRendererText *renderer, gchar *path_desc, gchar *text, gpointer data)
 {
-	GtkTreeModel *model = (GtkTreeModel *)data;
-	GtkTreePath *path = gtk_tree_path_new_from_string (path_desc);
-	GtkTreeIter iter;
+    GtkTreeModel *model = (GtkTreeModel *) data;
+    GtkTreePath *path = gtk_tree_path_new_from_string (path_desc);
+    GtkTreeIter iter;
 
-	gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (renderer), "column"));
-	DEBUG("path desc in cell_edited_cb: %s\n", text);
+    gint column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (renderer), "column"));
+    DEBUG ("path desc in cell_edited_cb: %s\n", text);
 
-	if(g_strcasecmp(path_desc, "0") == 0) {
-		if(g_strcasecmp(text, gtk_entry_get_text (GTK_ENTRY(entryUsername))) != 0) {
-			g_signal_handlers_disconnect_by_func (G_OBJECT(entryUsername), G_CALLBACK(update_credential_cb), NULL);
-		}
+    if (g_strcasecmp (path_desc, "0") == 0) {
+        if (g_strcasecmp (text, gtk_entry_get_text (GTK_ENTRY (entryUsername))) != 0) {
+            g_signal_handlers_disconnect_by_func (G_OBJECT (entryUsername), G_CALLBACK (update_credential_cb), NULL);
+        }
 
-		if (column == COLUMN_CREDENTIAL_PASSWORD) { 
-			gtk_entry_set_text (GTK_ENTRY (entryPassword), text);
-			text = PW_HIDDEN;	
-		}
-	}  
+        if (column == COLUMN_CREDENTIAL_PASSWORD) {
+            gtk_entry_set_text (GTK_ENTRY (entryPassword), text);
+            text = PW_HIDDEN;
+        }
+    }
 
-	gtk_tree_model_get_iter (model, &iter, path);
-	gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, text, -1);
-	gtk_tree_path_free (path);
+    gtk_tree_model_get_iter (model, &iter, path);
+    gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, text, -1);
+    gtk_tree_path_free (path);
 
 }
 
-static void editing_started_cb (GtkCellRenderer *cell, GtkCellEditable * editable, const gchar * path, gpointer data) {
+static void editing_started_cb (GtkCellRenderer *cell UNUSED, GtkCellEditable * editable, const gchar * path, gpointer data UNUSED)
+{
 
-	DEBUG("Editing started");
-	DEBUG("path desc in editing_started_cb: %s\n", path);
+    DEBUG ("Editing started");
+    DEBUG ("path desc in editing_started_cb: %s\n", path);
 
-	// If we are dealing the first row
-	if (g_strcasecmp (path, "0") == 0)
-	{
-		gtk_entry_set_text (GTK_ENTRY (editable), gtk_entry_get_text (GTK_ENTRY (entryPassword)));
-	}
+    // If we are dealing the first row
+    if (g_strcasecmp (path, "0") == 0) {
+        gtk_entry_set_text (GTK_ENTRY (editable), gtk_entry_get_text (GTK_ENTRY (entryPassword)));
+    }
 }
 
-static void show_advanced_zrtp_options_cb(GtkWidget *widget UNUSED, gpointer data)
+static void show_advanced_zrtp_options_cb (GtkWidget *widget UNUSED, gpointer data)
 {
 
-    DEBUG("Advanced options for SRTP");
-    if (g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP") == 0) {
-        show_advanced_zrtp_options((GHashTable *) data);
-    }
-    else {
-        show_advanced_sdes_options((GHashTable *) data);
+    DEBUG ("Advanced options for SRTP");
+
+    if (g_strcasecmp (gtk_combo_box_get_active_text (GTK_COMBO_BOX (keyExchangeCombo)), (gchar *) "ZRTP") == 0) {
+        show_advanced_zrtp_options ( (GHashTable *) data);
+    } else {
+        show_advanced_sdes_options ( (GHashTable *) data);
     }
 }
 
 
-static void show_advanced_tls_options_cb(GtkWidget *widget UNUSED, gpointer data)
+static void show_advanced_tls_options_cb (GtkWidget *widget UNUSED, gpointer data)
 {
-	DEBUG("Advanced options for TLS");
-	show_advanced_tls_options((GHashTable *) data);
+    DEBUG ("Advanced options for TLS");
+    show_advanced_tls_options ( (GHashTable *) data);
 }
 
-static void key_exchange_changed_cb(GtkWidget *widget, gpointer data)
+static void key_exchange_changed_cb (GtkWidget *widget UNUSED, gpointer data UNUSED)
 {
 
-    DEBUG("Key exchange changed %s", gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)));
+    DEBUG ("Key exchange changed %s", gtk_combo_box_get_active_text (GTK_COMBO_BOX (keyExchangeCombo)));
 
-    int isSdes = g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "SDES");
-    int isZrtp = g_strcasecmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo)), (gchar *) "ZRTP");
+    int isSdes = g_strcasecmp (gtk_combo_box_get_active_text (GTK_COMBO_BOX (keyExchangeCombo)), (gchar *) "SDES");
+    int isZrtp = g_strcasecmp (gtk_combo_box_get_active_text (GTK_COMBO_BOX (keyExchangeCombo)), (gchar *) "ZRTP");
 
-    if ((isSdes == 0) || (isZrtp == 0)) {
-        gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), TRUE);
+    if ( (isSdes == 0) || (isZrtp == 0)) {
+        gtk_widget_set_sensitive (GTK_WIDGET (advancedZrtpButton), TRUE);
     } else {
-        gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-        
+        gtk_widget_set_sensitive (GTK_WIDGET (advancedZrtpButton), FALSE);
+
     }
 }
 
 
-static void use_sip_tls_cb(GtkWidget *widget, gpointer data)
+static void use_sip_tls_cb (GtkWidget *widget, gpointer data)
 {
 
-	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-		DEBUG("Using sips");
-		gtk_widget_set_sensitive(GTK_WIDGET(data), TRUE);
-		// Uncheck stun
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useStunCheckBox), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
-		gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
-		gtk_widget_hide (stunServerLabel);
-		gtk_widget_hide (stunServerEntry);
-
-
-
-		if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
-			gtk_widget_show(publishedAddressEntry);
-			gtk_widget_show(publishedPortSpinBox);
-			gtk_widget_show(publishedAddressLabel);
-			gtk_widget_show(publishedPortLabel);
-		}
-
-	} else {
-		gtk_widget_set_sensitive(GTK_WIDGET(data), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(useStunCheckBox), TRUE);
-
-		if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox))) {
-			gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), FALSE);
-			gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), FALSE);
-			gtk_widget_show(stunServerLabel);
-			gtk_widget_show(stunServerEntry);
-			gtk_widget_hide(publishedAddressEntry);
-			gtk_widget_hide(publishedPortSpinBox);
-			gtk_widget_hide(publishedAddressLabel);
-			gtk_widget_hide(publishedPortLabel);
-		}
-		else {
-			gtk_widget_set_sensitive(GTK_WIDGET(sameAsLocalRadioButton), TRUE);
-			gtk_widget_set_sensitive(GTK_WIDGET(publishedAddrRadioButton), TRUE);
-			gtk_widget_hide(stunServerLabel);
-			gtk_widget_hide(stunServerEntry);
-		}
-
-	}   
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+        DEBUG ("Using sips");
+        gtk_widget_set_sensitive (GTK_WIDGET (data), TRUE);
+        // Uncheck stun
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (useStunCheckBox), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (useStunCheckBox), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (sameAsLocalRadioButton), TRUE);
+        gtk_widget_set_sensitive (GTK_WIDGET (publishedAddrRadioButton), TRUE);
+        gtk_widget_hide (stunServerLabel);
+        gtk_widget_hide (stunServerEntry);
+
+
+
+        if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton))) {
+            gtk_widget_show (publishedAddressEntry);
+            gtk_widget_show (publishedPortSpinBox);
+            gtk_widget_show (publishedAddressLabel);
+            gtk_widget_show (publishedPortLabel);
+        }
+
+    } else {
+        gtk_widget_set_sensitive (GTK_WIDGET (data), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (useStunCheckBox), TRUE);
+
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (useStunCheckBox))) {
+            gtk_widget_set_sensitive (GTK_WIDGET (sameAsLocalRadioButton), FALSE);
+            gtk_widget_set_sensitive (GTK_WIDGET (publishedAddrRadioButton), FALSE);
+            gtk_widget_show (stunServerLabel);
+            gtk_widget_show (stunServerEntry);
+            gtk_widget_hide (publishedAddressEntry);
+            gtk_widget_hide (publishedPortSpinBox);
+            gtk_widget_hide (publishedAddressLabel);
+            gtk_widget_hide (publishedPortLabel);
+        } else {
+            gtk_widget_set_sensitive (GTK_WIDGET (sameAsLocalRadioButton), TRUE);
+            gtk_widget_set_sensitive (GTK_WIDGET (publishedAddrRadioButton), TRUE);
+            gtk_widget_hide (stunServerLabel);
+            gtk_widget_hide (stunServerEntry);
+        }
+
+    }
 }
 
-static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED) {
+static void local_interface_changed_cb (GtkWidget * widget UNUSED, gpointer data UNUSED)
+{
 
-	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton))) {
 
-		gchar *local_iface_name;
-		gchar *local_iface_addr;
-		local_iface_addr = g_malloc(36);
+        gchar *local_iface_name;
+        gchar *local_iface_addr;
+        local_iface_addr = g_malloc (36);
 
-		local_iface_name = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
-		// sflphone_get_interface_addr_from_name((char *)local_interface);
-		sflphone_get_interface_addr_from_name(local_iface_name, &local_iface_addr, 36);
+        local_iface_name = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
+        sflphone_get_interface_addr_from_name (local_iface_name, &local_iface_addr, 36);
 
-		gtk_entry_set_text(GTK_ENTRY(localAddressEntry), local_iface_addr);
-		gtk_entry_set_text (GTK_ENTRY(publishedAddressEntry), local_iface_addr);
+        gtk_entry_set_text (GTK_ENTRY (localAddressEntry), local_iface_addr);
+        gtk_entry_set_text (GTK_ENTRY (publishedAddressEntry), local_iface_addr);
 
-		// gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
-		// gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
-		g_free(local_iface_addr);
-	}
+        g_free (local_iface_addr);
+    }
 
 }
 
-static set_published_addr_manually_cb(GtkWidget * widget, gpointer data UNUSED)
+static void set_published_addr_manually_cb (GtkWidget * widget, gpointer data UNUSED)
 {
-
-	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-		DEBUG("Config: Showing manual publishing options");    
-		gtk_widget_show(publishedPortLabel);            
-		gtk_widget_show(publishedPortSpinBox);
-		gtk_widget_show(publishedAddressLabel);                	
-		gtk_widget_show(publishedAddressEntry);
-	} else {
-		DEBUG("Config: Hiding manual publishing options");   
-		gtk_widget_hide(publishedPortLabel);            
-		gtk_widget_hide(publishedPortSpinBox);
-		gtk_widget_hide(publishedAddressLabel);                	
-		gtk_widget_hide(publishedAddressEntry);
-	}
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+        DEBUG ("Config: Showing manual publishing options");
+        gtk_widget_show (publishedPortLabel);
+        gtk_widget_show (publishedPortSpinBox);
+        gtk_widget_show (publishedAddressLabel);
+        gtk_widget_show (publishedAddressEntry);
+    } else {
+        DEBUG ("Config: Hiding manual publishing options");
+        gtk_widget_hide (publishedPortLabel);
+        gtk_widget_hide (publishedPortSpinBox);
+        gtk_widget_hide (publishedAddressLabel);
+        gtk_widget_hide (publishedAddressEntry);
+    }
 }
 
-static use_stun_cb(GtkWidget *widget, gpointer data UNUSED)
+static void use_stun_cb (GtkWidget *widget, gpointer data UNUSED)
 {
-	gchar *local_interface;
-	gchar *local_address;
-
-	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
-
-		DEBUG("Config: Showing stun options, hiding Local/Published info");
-		gtk_widget_show (stunServerLabel);
-		gtk_widget_show (stunServerEntry);
-		gtk_widget_set_sensitive (sameAsLocalRadioButton, FALSE);
-		gtk_widget_set_sensitive (publishedAddrRadioButton, FALSE);
-
-		gtk_widget_hide (publishedAddressLabel);
-		gtk_widget_hide (publishedPortLabel);
-		gtk_widget_hide (publishedAddressEntry);
-		gtk_widget_hide (publishedPortSpinBox);
-
-	} else {
-
-	        DEBUG("Config: hiding stun options, showing Local/Published info");
-
-		gtk_widget_hide (stunServerLabel);
-		gtk_widget_hide (stunServerEntry);
-		gtk_widget_set_sensitive (sameAsLocalRadioButton, TRUE);
-		gtk_widget_set_sensitive (publishedAddrRadioButton, TRUE);
-
-		if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton))) {
-			gtk_widget_show (publishedAddressLabel);
-			gtk_widget_show (publishedPortLabel);
-			gtk_widget_show (publishedAddressEntry);
-			gtk_widget_show (publishedPortSpinBox);
-		}
-	}
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+
+        DEBUG ("Config: Showing stun options, hiding Local/Published info");
+        gtk_widget_show (stunServerLabel);
+        gtk_widget_show (stunServerEntry);
+        gtk_widget_set_sensitive (sameAsLocalRadioButton, FALSE);
+        gtk_widget_set_sensitive (publishedAddrRadioButton, FALSE);
+
+        gtk_widget_hide (publishedAddressLabel);
+        gtk_widget_hide (publishedPortLabel);
+        gtk_widget_hide (publishedAddressEntry);
+        gtk_widget_hide (publishedPortSpinBox);
+
+    } else {
+
+        DEBUG ("Config: hiding stun options, showing Local/Published info");
+
+        gtk_widget_hide (stunServerLabel);
+        gtk_widget_hide (stunServerEntry);
+        gtk_widget_set_sensitive (sameAsLocalRadioButton, TRUE);
+        gtk_widget_set_sensitive (publishedAddrRadioButton, TRUE);
+
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton))) {
+            gtk_widget_show (publishedAddressLabel);
+            gtk_widget_show (publishedPortLabel);
+            gtk_widget_show (publishedAddressEntry);
+            gtk_widget_show (publishedPortSpinBox);
+        }
+    }
 }
 
 
-static same_as_local_cb(GtkWidget * widget, gpointer data UNUSED)
+static void same_as_local_cb (GtkWidget * widget, gpointer data UNUSED)
 {
 
-	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
-		DEBUG("Same as local");
-		gchar * local_interface;
-		gchar * local_address;
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+        DEBUG ("Same as local");
+        gchar * local_interface;
+        gchar * local_address;
 
-		local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo));
-		// sflphone_get_interface_addr_from_name((char *)local_interface);
-		local_address = dbus_get_address_from_interface_name(local_interface);
+        local_interface = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
+        // sflphone_get_interface_addr_from_name((char *)local_interface);
+        local_address = dbus_get_address_from_interface_name (local_interface);
 
-		gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address);
+        gtk_entry_set_text (GTK_ENTRY (publishedAddressEntry), local_address);
 
-		gchar * local_port = (gchar *) gtk_entry_get_text(GTK_ENTRY(localPortSpinBox));
-		gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(local_port, NULL));
-	} 
+        gchar * local_port = (gchar *) gtk_entry_get_text (GTK_ENTRY (localPortSpinBox));
+        gtk_spin_button_set_value (GTK_SPIN_BUTTON (publishedPortSpinBox), g_ascii_strtod (local_port, NULL));
+    }
 
 }
 
 
 
-GtkWidget* create_credential_widget (account_t **a) {
-
-	GtkWidget *frame, *table, *scrolledWindowCredential, *addButton;
-	GtkCellRenderer * renderer;
-	GtkTreeViewColumn * treeViewColumn;
-	GtkTreeSelection * treeSelection;
-
-	/* Credentials tree view */
-	gnome_main_section_new_with_table (_("Credential"), &frame, &table, 1, 1);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings(GTK_TABLE(table), 10);
-
-	scrolledWindowCredential = gtk_scrolled_window_new (NULL, NULL);
-	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindowCredential), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledWindowCredential), GTK_SHADOW_IN);
-	gtk_table_attach_defaults (GTK_TABLE (table), scrolledWindowCredential, 0, 1, 0, 1);
-
-	credentialStore = gtk_list_store_new(COLUMN_CREDENTIAL_COUNT,
-			G_TYPE_STRING,  // Realm
-			G_TYPE_STRING,  // Username
-			G_TYPE_STRING,  // Password
-			G_TYPE_POINTER  // Pointer to the Objectc
-			);
-
-	treeViewCredential = gtk_tree_view_new_with_model(GTK_TREE_MODEL(credentialStore));
-	treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW (treeViewCredential));
-	g_signal_connect(G_OBJECT (treeSelection), "changed", G_CALLBACK (select_credential_cb), credentialStore);
-
-	renderer = gtk_cell_renderer_text_new();
-	g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
-	g_signal_connect(G_OBJECT (renderer), "edited", G_CALLBACK(cell_edited_cb), credentialStore);
-	g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_REALM));
-	treeViewColumn = gtk_tree_view_column_new_with_attributes ("Realm",
-			renderer,
-			"markup", COLUMN_CREDENTIAL_REALM,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
-
-	renderer = gtk_cell_renderer_text_new();
-	g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
-	g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
-	g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
-	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Authentication name"),
-			renderer,
-			"markup", COLUMN_CREDENTIAL_USERNAME,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
-
-	renderer = gtk_cell_renderer_text_new();
-	g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
-	g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
-	g_signal_connect (renderer, "editing-started", G_CALLBACK (editing_started_cb), NULL);
-	g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
-	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Password"),
-			renderer,
-			"markup", COLUMN_CREDENTIAL_PASSWORD,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(treeViewCredential), treeViewColumn);
-
-	gtk_container_add(GTK_CONTAINER(scrolledWindowCredential), treeViewCredential);
-
-	fill_treeview_with_credential(credentialStore, *a);
-
-	/* Credential Buttons */    
-	hbox = gtk_hbox_new(FALSE, 10);
-	gtk_table_attach_defaults(GTK_TABLE(table), hbox, 0, 3, 1, 2);
-
-	addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
-	g_signal_connect (addButton, "clicked", G_CALLBACK (add_credential_cb), credentialStore);
-	gtk_box_pack_start(GTK_BOX(hbox), addButton, FALSE, FALSE, 0);
-
-	deleteCredButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
-	g_signal_connect (deleteCredButton, "clicked", G_CALLBACK (delete_credential_cb), treeViewCredential);
-	gtk_box_pack_start(GTK_BOX(hbox), deleteCredButton, FALSE, FALSE, 0);
-
-	/* Dynamically resize the window to fit the scrolled window */
-	GtkRequisition requisitionTable;
-	GtkRequisition requisitionTreeView;
-	gtk_widget_size_request (GTK_WIDGET(treeViewCredential), &requisitionTreeView);
-	gtk_widget_size_request (GTK_WIDGET(table), &requisitionTable);
-	gtk_widget_set_size_request (GTK_WIDGET(scrolledWindowCredential), 400, 120);
-	// same_as_local_cb (sameAsLocalRadioButton, NULL);
-	// set_published_addr_manually_cb (publishedAddrRadioButton, NULL);
-
-	return frame;
+GtkWidget* create_credential_widget (account_t **a)
+{
+
+    GtkWidget *frame, *table, *scrolledWindowCredential, *addButton;
+    GtkCellRenderer * renderer;
+    GtkTreeViewColumn * treeViewColumn;
+    GtkTreeSelection * treeSelection;
+
+    /* Credentials tree view */
+    gnome_main_section_new_with_table (_ ("Credential"), &frame, &table, 1, 1);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+
+    scrolledWindowCredential = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindowCredential), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledWindowCredential), GTK_SHADOW_IN);
+    gtk_table_attach_defaults (GTK_TABLE (table), scrolledWindowCredential, 0, 1, 0, 1);
+
+    credentialStore = gtk_list_store_new (COLUMN_CREDENTIAL_COUNT,
+                                          G_TYPE_STRING,  // Realm
+                                          G_TYPE_STRING,  // Username
+                                          G_TYPE_STRING,  // Password
+                                          G_TYPE_POINTER  // Pointer to the Objectc
+                                         );
+
+    treeViewCredential = gtk_tree_view_new_with_model (GTK_TREE_MODEL (credentialStore));
+    treeSelection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeViewCredential));
+    g_signal_connect (G_OBJECT (treeSelection), "changed", G_CALLBACK (select_credential_cb), credentialStore);
+
+    renderer = gtk_cell_renderer_text_new();
+    g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
+    g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
+    g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_REALM));
+    treeViewColumn = gtk_tree_view_column_new_with_attributes ("Realm",
+                     renderer,
+                     "markup", COLUMN_CREDENTIAL_REALM,
+                     NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeViewCredential), treeViewColumn);
+
+    renderer = gtk_cell_renderer_text_new();
+    g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
+    g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
+    g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_USERNAME));
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Authentication name"),
+                     renderer,
+                     "markup", COLUMN_CREDENTIAL_USERNAME,
+                     NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeViewCredential), treeViewColumn);
+
+    renderer = gtk_cell_renderer_text_new();
+    g_object_set (renderer, "editable", TRUE, "editable-set", TRUE, NULL);
+    g_signal_connect (G_OBJECT (renderer), "edited", G_CALLBACK (cell_edited_cb), credentialStore);
+    g_signal_connect (renderer, "editing-started", G_CALLBACK (editing_started_cb), NULL);
+    g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_CREDENTIAL_PASSWORD));
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Password"),
+                     renderer,
+                     "markup", COLUMN_CREDENTIAL_PASSWORD,
+                     NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeViewCredential), treeViewColumn);
+
+    gtk_container_add (GTK_CONTAINER (scrolledWindowCredential), treeViewCredential);
+
+    DEBUG ("Credential pas ok");
+    fill_treeview_with_credential (credentialStore, *a);
+    DEBUG ("Credential ok");
+
+    /* Credential Buttons */
+    hbox = gtk_hbox_new (FALSE, 10);
+    gtk_table_attach_defaults (GTK_TABLE (table), hbox, 0, 3, 1, 2);
+
+    addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
+    g_signal_connect (addButton, "clicked", G_CALLBACK (add_credential_cb), credentialStore);
+    gtk_box_pack_start (GTK_BOX (hbox), addButton, FALSE, FALSE, 0);
+
+    deleteCredButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+    g_signal_connect (deleteCredButton, "clicked", G_CALLBACK (delete_credential_cb), treeViewCredential);
+    gtk_box_pack_start (GTK_BOX (hbox), deleteCredButton, FALSE, FALSE, 0);
+
+    /* Dynamically resize the window to fit the scrolled window */
+    GtkRequisition requisitionTable;
+    GtkRequisition requisitionTreeView;
+    gtk_widget_size_request (GTK_WIDGET (treeViewCredential), &requisitionTreeView);
+    gtk_widget_size_request (GTK_WIDGET (table), &requisitionTable);
+    gtk_widget_set_size_request (GTK_WIDGET (scrolledWindowCredential), 400, 120);
+    // same_as_local_cb (sameAsLocalRadioButton, NULL);
+    // set_published_addr_manually_cb (publishedAddrRadioButton, NULL);
+
+    return frame;
 }
 
 
-GtkWidget* create_security_widget (account_t **a) {
-
-	GtkWidget *frame, *table, *sipTlsAdvancedButton, *label;
-	gchar *curSRTPEnabled = NULL, *curKeyExchange = NULL, *curTLSEnabled = NULL;
-
-	// Load from SIP/IAX/Unknown ?
-	if((*a)) {	
-		curKeyExchange = g_hash_table_lookup ((*a)->properties, ACCOUNT_KEY_EXCHANGE);
-		if (curKeyExchange == NULL) {
-			curKeyExchange = "none";
-		}		
-
-		curSRTPEnabled = g_hash_table_lookup ((*a)->properties, ACCOUNT_SRTP_ENABLED);
-		if (curSRTPEnabled == NULL) {
-			curSRTPEnabled = "false";
-		}
-
-		curTLSEnabled = g_hash_table_lookup ((*a)->properties, TLS_ENABLE);
-		if (curTLSEnabled == NULL) {
-			curTLSEnabled = "false";
-		}
-	}
-
-	gnome_main_section_new_with_table (_("Security"), &frame, &table, 2, 3);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings (GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings (GTK_TABLE(table), 10);
-
-	/* TLS subsection */
-	sipTlsAdvancedButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
-	gtk_table_attach_defaults (GTK_TABLE (table), sipTlsAdvancedButton, 2, 3, 0, 1);
-	gtk_widget_set_sensitive (GTK_WIDGET (sipTlsAdvancedButton), FALSE);    
-	g_signal_connect (G_OBJECT (sipTlsAdvancedButton), "clicked", G_CALLBACK (show_advanced_tls_options_cb), (*a)->properties);
-
-	useSipTlsCheckBox = gtk_check_button_new_with_mnemonic(_("Use TLS transport (sips)"));
-	g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK(use_sip_tls_cb), sipTlsAdvancedButton);
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox), (g_strcmp0(curTLSEnabled, "true") == 0) ? TRUE:FALSE);
-	gtk_table_attach_defaults(GTK_TABLE(table), useSipTlsCheckBox, 0, 2, 0, 1);
-
-	/* ZRTP subsection */
-	label = gtk_label_new_with_mnemonic (_("SRTP key exchange"));
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	keyExchangeCombo = gtk_combo_box_new_text();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
-	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "ZRTP");
-	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), "SDES");
-	gtk_combo_box_append_text(GTK_COMBO_BOX(keyExchangeCombo), _("Disabled"));      
-
-	advancedZrtpButton = gtk_button_new_from_stock(GTK_STOCK_PREFERENCES);
-	g_signal_connect(G_OBJECT(advancedZrtpButton), "clicked", G_CALLBACK(show_advanced_zrtp_options_cb), (*a)->properties);
-
-	if (g_strcmp0(curSRTPEnabled, "false") == 0)
-	{
-		gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
-		gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-	} else {
-		if (strcmp(curKeyExchange, ZRTP) == 0) {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),0);
-		} 
-		else if (strcmp(curKeyExchange, SDES) == 0) {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo),1);
-		}
-		else {
-			gtk_combo_box_set_active(GTK_COMBO_BOX(keyExchangeCombo), 2);
-			gtk_widget_set_sensitive(GTK_WIDGET(advancedZrtpButton), FALSE);
-		}
-	}
-
-	g_signal_connect (G_OBJECT (GTK_COMBO_BOX(keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), *a);
-
-	gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-	gtk_table_attach_defaults(GTK_TABLE(table), keyExchangeCombo, 1, 2, 1, 2);    
-	gtk_table_attach_defaults(GTK_TABLE(table), advancedZrtpButton, 2, 3, 1, 2);
-
-	gtk_widget_show_all(table);
-
-	return frame;
+GtkWidget* create_security_widget (account_t **a)
+{
+
+    GtkWidget *frame, *table, *sipTlsAdvancedButton, *label;
+    gchar *curSRTPEnabled = NULL, *curKeyExchange = NULL, *curTLSEnabled = NULL;
+
+    // Load from SIP/IAX/Unknown ?
+    if ( (*a)) {
+        curKeyExchange = g_hash_table_lookup ( (*a)->properties, ACCOUNT_KEY_EXCHANGE);
+
+        if (curKeyExchange == NULL) {
+            curKeyExchange = "none";
+        }
+
+        curSRTPEnabled = g_hash_table_lookup ( (*a)->properties, ACCOUNT_SRTP_ENABLED);
+
+        if (curSRTPEnabled == NULL) {
+            curSRTPEnabled = "false";
+        }
+
+        curTLSEnabled = g_hash_table_lookup ( (*a)->properties, TLS_ENABLE);
+
+        if (curTLSEnabled == NULL) {
+            curTLSEnabled = "false";
+        }
+    }
+
+    gnome_main_section_new_with_table (_ ("Security"), &frame, &table, 2, 3);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+
+    /* TLS subsection */
+    sipTlsAdvancedButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+    gtk_table_attach_defaults (GTK_TABLE (table), sipTlsAdvancedButton, 2, 3, 0, 1);
+    gtk_widget_set_sensitive (GTK_WIDGET (sipTlsAdvancedButton), FALSE);
+    g_signal_connect (G_OBJECT (sipTlsAdvancedButton), "clicked", G_CALLBACK (show_advanced_tls_options_cb), (*a)->properties);
+
+    useSipTlsCheckBox = gtk_check_button_new_with_mnemonic (_ ("Use TLS transport (sips)"));
+    g_signal_connect (useSipTlsCheckBox, "toggled", G_CALLBACK (use_sip_tls_cb), sipTlsAdvancedButton);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (useSipTlsCheckBox), (g_strcmp0 (curTLSEnabled, "true") == 0) ? TRUE:FALSE);
+    gtk_table_attach_defaults (GTK_TABLE (table), useSipTlsCheckBox, 0, 2, 0, 1);
+
+    /* ZRTP subsection */
+    label = gtk_label_new_with_mnemonic (_ ("SRTP key exchange"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    keyExchangeCombo = gtk_combo_box_new_text();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), keyExchangeCombo);
+    gtk_combo_box_append_text (GTK_COMBO_BOX (keyExchangeCombo), "ZRTP");
+    gtk_combo_box_append_text (GTK_COMBO_BOX (keyExchangeCombo), "SDES");
+    gtk_combo_box_append_text (GTK_COMBO_BOX (keyExchangeCombo), _ ("Disabled"));
+
+    advancedZrtpButton = gtk_button_new_from_stock (GTK_STOCK_PREFERENCES);
+    g_signal_connect (G_OBJECT (advancedZrtpButton), "clicked", G_CALLBACK (show_advanced_zrtp_options_cb), (*a)->properties);
+
+    if (g_strcmp0 (curSRTPEnabled, "false") == 0) {
+        gtk_combo_box_set_active (GTK_COMBO_BOX (keyExchangeCombo), 2);
+        gtk_widget_set_sensitive (GTK_WIDGET (advancedZrtpButton), FALSE);
+    } else {
+        if (strcmp (curKeyExchange, ZRTP) == 0) {
+            gtk_combo_box_set_active (GTK_COMBO_BOX (keyExchangeCombo),0);
+        } else if (strcmp (curKeyExchange, SDES) == 0) {
+            gtk_combo_box_set_active (GTK_COMBO_BOX (keyExchangeCombo),1);
+        } else {
+            gtk_combo_box_set_active (GTK_COMBO_BOX (keyExchangeCombo), 2);
+            gtk_widget_set_sensitive (GTK_WIDGET (advancedZrtpButton), FALSE);
+        }
+    }
+
+    g_signal_connect (G_OBJECT (GTK_COMBO_BOX (keyExchangeCombo)), "changed", G_CALLBACK (key_exchange_changed_cb), *a);
+
+    gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
+    gtk_table_attach_defaults (GTK_TABLE (table), keyExchangeCombo, 1, 2, 1, 2);
+    gtk_table_attach_defaults (GTK_TABLE (table), advancedZrtpButton, 2, 3, 1, 2);
+
+    gtk_widget_show_all (table);
+
+    return frame;
 }
 
 
 GtkWidget * create_security_tab (account_t **a)
 {
-	GtkWidget * frame;
-	GtkWidget * ret;
-	GtkWidget * hbox;
-
+    GtkWidget * frame;
+    GtkWidget * ret;
 
-	ret = gtk_vbox_new(FALSE, 10);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
 
-	// Credentials frame
-	frame = create_credential_widget (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    // Credentials frame
+    frame = create_credential_widget (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	// Security frame
-	frame = create_security_widget (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    // Security frame
+    frame = create_security_widget (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	gtk_widget_show_all(ret);
+    gtk_widget_show_all (ret);
 
-	return ret;
-	}
+    return ret;
+}
 
-GtkWidget* create_registration_expire (account_t **a) {
+GtkWidget* create_registration_expire (account_t **a)
+{
 
     GtkWidget *table, *frame, *label;
 
     gchar *resolve_once=NULL, *account_expire=NULL;
 
     if (*a) {
-        resolve_once = g_hash_table_lookup ((*a)->properties, ACCOUNT_RESOLVE_ONCE);
-	account_expire = g_hash_table_lookup ((*a)->properties, ACCOUNT_REGISTRATION_EXPIRE);
+        resolve_once = g_hash_table_lookup ( (*a)->properties, ACCOUNT_RESOLVE_ONCE);
+        account_expire = g_hash_table_lookup ( (*a)->properties, ACCOUNT_REGISTRATION_EXPIRE);
     }
 
-    gnome_main_section_new_with_table (_("Registration"), &frame, &table, 2, 3);
-    gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-    gtk_table_set_row_spacings (GTK_TABLE (table), 5);	
-    
-    label = gtk_label_new_with_mnemonic (_("Registration expire"));
+    gnome_main_section_new_with_table (_ ("Registration"), &frame, &table, 2, 3);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 5);
+
+    label = gtk_label_new_with_mnemonic (_ ("Registration expire"));
     gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
     gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
     expireSpinBox = gtk_spin_button_new_with_range (1, 65535, 1);
     gtk_label_set_mnemonic_widget (GTK_LABEL (label), expireSpinBox);
     gtk_spin_button_set_value (GTK_SPIN_BUTTON (expireSpinBox), g_ascii_strtod (account_expire, NULL));
     gtk_table_attach_defaults (GTK_TABLE (table), expireSpinBox, 1, 2, 0, 1);
-	
 
-    entryResolveNameOnlyOnce = gtk_check_button_new_with_mnemonic (_("_Comply with RFC 3263"));
+
+    entryResolveNameOnlyOnce = gtk_check_button_new_with_mnemonic (_ ("_Comply with RFC 3263"));
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (entryResolveNameOnlyOnce),
-				  g_strcasecmp (resolve_once,"false") == 0 ? TRUE: FALSE);
+                                  g_strcasecmp (resolve_once,"false") == 0 ? TRUE: FALSE);
     gtk_table_attach_defaults (GTK_TABLE (table), entryResolveNameOnlyOnce, 0, 2, 1, 2);
-    gtk_widget_set_sensitive (GTK_WIDGET (entryResolveNameOnlyOnce ) , TRUE );
+    gtk_widget_set_sensitive (GTK_WIDGET (entryResolveNameOnlyOnce) , TRUE);
 
     return frame;
 }
 
-GtkWidget* create_network (account_t **a) {
-  
+GtkWidget* create_network (account_t **a)
+{
+
     GtkWidget *table, *frame, *label;
-    gchar *local_interface, *local_port;
+    gchar *local_interface = NULL;
+    gchar *local_port = NULL;
 
     if (*a) {
-        local_interface = g_hash_table_lookup ((*a)->properties, LOCAL_INTERFACE);
-	local_port = g_hash_table_lookup ((*a)->properties, LOCAL_PORT);
+        local_interface = g_hash_table_lookup ( (*a)->properties, LOCAL_INTERFACE);
+        local_port = g_hash_table_lookup ( (*a)->properties, LOCAL_PORT);
     }
 
-    gnome_main_section_new_with_table (_("Network Interface"), &frame, &table, 2, 3);
-    gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-    gtk_table_set_row_spacings( GTK_TABLE(table), 5);
+    gnome_main_section_new_with_table (_ ("Network Interface"), &frame, &table, 2, 3);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 5);
 
     /**
-     * Retreive the list of IP interface from the 
+     * Retreive the list of IP interface from the
      * the daemon and build the combo box.
      */
 
-    GtkListStore * ipInterfaceListStore; 
+    GtkListStore * ipInterfaceListStore;
     GtkTreeIter iter;
 
-    ipInterfaceListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
-    label = gtk_label_new_with_mnemonic (_("Local address"));    
-    gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+    ipInterfaceListStore =  gtk_list_store_new (1, G_TYPE_STRING);
+    label = gtk_label_new_with_mnemonic (_ ("Local address"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 
-    GtkTreeIter current_local_iface_iter = iter;   
+    GtkTreeIter current_local_iface_iter = iter;
     gchar ** iface_list = NULL;
     // iface_list = (gchar**) dbus_get_all_ip_interface();
     iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
     gchar ** iface = NULL;
 
-    // flag to determine if local_address is found 
+    // flag to determine if local_address is found
     gboolean iface_found = FALSE;
 
     gchar *local_iface_addr;
-    gchar *local_iface_name; 
+    gchar *local_iface_name;
+
+    local_iface_addr= g_malloc (36);
 
-    local_iface_addr= g_malloc(36);
-    
     if (iface_list != NULL) {
 
         // fill the iterface combo box
-        for (iface = iface_list; *iface; iface++) {         
-	    DEBUG("Interface %s", *iface);            
-	    gtk_list_store_append(ipInterfaceListStore, &iter );
-	    gtk_list_store_set(ipInterfaceListStore, &iter, 0, *iface, -1 );
-
-	    // set the current local address
-	    if (!iface_found && (g_strcmp0(*iface, local_interface) == 0)) {
-	        DEBUG("Setting active local address combo box");
-		current_local_iface_iter = iter;
-		iface_found = TRUE;
-	  }
-	}
-	    
-	if(!iface_found) {
-	  DEBUG("Did not find local ip address, take fisrt in the list");
-	  gtk_tree_model_get_iter_first(GTK_TREE_MODEL(ipInterfaceListStore), &current_local_iface_iter);
-	}
-	
+        for (iface = iface_list; *iface; iface++) {
+            DEBUG ("Interface %s", *iface);
+            gtk_list_store_append (ipInterfaceListStore, &iter);
+            gtk_list_store_set (ipInterfaceListStore, &iter, 0, *iface, -1);
+
+            // set the current local address
+            if (!iface_found && (g_strcmp0 (*iface, local_interface) == 0)) {
+                DEBUG ("Setting active local address combo box");
+                current_local_iface_iter = iter;
+                iface_found = TRUE;
+            }
+        }
+
+        if (!iface_found) {
+            DEBUG ("Did not find local ip address, take fisrt in the list");
+            gtk_tree_model_get_iter_first (GTK_TREE_MODEL (ipInterfaceListStore), &current_local_iface_iter);
+        }
+
     }
-  
-    
-    localAddressCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(ipInterfaceListStore));
+
+
+    localAddressCombo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (ipInterfaceListStore));
     gtk_label_set_mnemonic_widget (GTK_LABEL (label), localAddressCombo);
-    gtk_table_attach ( GTK_TABLE( table ), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    g_object_unref(G_OBJECT(ipInterfaceListStore));	
+    gtk_table_attach (GTK_TABLE (table), localAddressCombo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    g_object_unref (G_OBJECT (ipInterfaceListStore));
+
 
- 
     GtkCellRenderer * ipInterfaceCellRenderer;
     ipInterfaceCellRenderer = gtk_cell_renderer_text_new();
 
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
-    gtk_combo_box_set_active_iter(GTK_COMBO_BOX(localAddressCombo), &current_local_iface_iter);
+    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (localAddressCombo), ipInterfaceCellRenderer, TRUE);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (localAddressCombo), ipInterfaceCellRenderer, "text", 0, NULL);
+    gtk_combo_box_set_active_iter (GTK_COMBO_BOX (localAddressCombo), &current_local_iface_iter);
 
 
     // Fill the text entry with the ip address of local interface selected
     localAddressEntry = gtk_entry_new();
     local_iface_name = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo));
-    sflphone_get_interface_addr_from_name(local_iface_name, &local_iface_addr, 36);
-    gtk_entry_set_text(GTK_ENTRY(localAddressEntry), local_iface_addr);
-    gtk_widget_set_sensitive(localAddressEntry, FALSE); 
-    gtk_table_attach ( GTK_TABLE( table ), localAddressEntry, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    sflphone_get_interface_addr_from_name (local_iface_name, &local_iface_addr, 36);
+    gtk_entry_set_text (GTK_ENTRY (localAddressEntry), local_iface_addr);
+    gtk_widget_set_sensitive (localAddressEntry, FALSE);
+    gtk_table_attach (GTK_TABLE (table), localAddressEntry, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    g_free (local_iface_addr);
 
-    g_free(local_iface_addr);
-    
     // Local port widget
-    label = gtk_label_new_with_mnemonic (_("Local port"));
-    gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
-    gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-    localPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
+    label = gtk_label_new_with_mnemonic (_ ("Local port"));
+    gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    localPortSpinBox = gtk_spin_button_new_with_range (1, 65535, 1);
     gtk_label_set_mnemonic_widget (GTK_LABEL (label), localPortSpinBox);
-    gtk_spin_button_set_value(GTK_SPIN_BUTTON(localPortSpinBox), g_ascii_strtod(local_port, NULL));
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (localPortSpinBox), g_ascii_strtod (local_port, NULL));
 
-    gtk_table_attach_defaults(GTK_TABLE(table), localPortSpinBox, 1, 2, 1, 2);
+    gtk_table_attach_defaults (GTK_TABLE (table), localPortSpinBox, 1, 2, 1, 2);
 
     return frame;
 }
 
-GtkWidget* create_published_address (account_t **a) {
-
-	GtkWidget *table, *frame, *label;
-	gchar *use_tls, *published_address, *published_port, *local_address, *stun_enable, *stun_server, *published_sameas_local;
-
-	// Get the user configuration
-	if (*a) {
-
-		use_tls = g_hash_table_lookup ((*a)->properties,  TLS_ENABLE);
-		published_sameas_local = g_hash_table_lookup ((*a)->properties,  PUBLISHED_SAMEAS_LOCAL);
-
-		if (g_strcasecmp (published_sameas_local, "true") == 0) {
-			published_address = dbus_get_address_from_interface_name (g_hash_table_lookup ((*a)->properties, LOCAL_INTERFACE));
-			published_port = g_hash_table_lookup ((*a)->properties,  LOCAL_PORT);
-		}
-		else {
-			published_address = g_hash_table_lookup ((*a)->properties,  PUBLISHED_ADDRESS);
-			published_port = g_hash_table_lookup ((*a)->properties,  PUBLISHED_PORT);
-		}
-
-		stun_enable = g_hash_table_lookup ((*a)->properties,  ACCOUNT_SIP_STUN_ENABLED);
-		stun_server = g_hash_table_lookup ((*a)->properties,  ACCOUNT_SIP_STUN_SERVER);
-		published_sameas_local = g_hash_table_lookup ((*a)->properties,  PUBLISHED_SAMEAS_LOCAL);
-	}
-
-	gnome_main_section_new_with_table (_("Published address"), &frame, &table, 2, 3);
-	gtk_container_set_border_width (GTK_CONTAINER(table), 10);
-	gtk_table_set_row_spacings (GTK_TABLE (table), 5);
-
-	useStunCheckBox = gtk_check_button_new_with_mnemonic(_("Using STUN"));
-	gtk_table_attach_defaults(GTK_TABLE(table), useStunCheckBox, 0, 1, 0, 1);
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(useStunCheckBox), 
-			g_strcasecmp(stun_enable, "true") == 0 ? TRUE: FALSE);
-	gtk_widget_set_sensitive (GTK_WIDGET(useStunCheckBox),
-			g_strcasecmp(use_tls,"true") == 0 ? FALSE: TRUE);
-
-	stunServerLabel = gtk_label_new_with_mnemonic (_("STUN server URL"));
-	gtk_table_attach_defaults(GTK_TABLE(table), stunServerLabel, 0, 1, 1, 2);
-	gtk_misc_set_alignment(GTK_MISC (stunServerLabel), 0, 0.5);
-	stunServerEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (stunServerLabel), stunServerEntry);
-	gtk_entry_set_text(GTK_ENTRY(stunServerEntry), stun_server);
-	gtk_table_attach_defaults(GTK_TABLE(table), stunServerEntry, 1, 2, 1, 2);
-
-	sameAsLocalRadioButton = gtk_radio_button_new_with_mnemonic_from_widget(NULL, _("Same as local parameters"));
-	gtk_table_attach_defaults(GTK_TABLE(table), sameAsLocalRadioButton, 0, 2, 3, 4);
-
-	publishedAddrRadioButton = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(sameAsLocalRadioButton), _("Set published address and port:"));
-	gtk_table_attach_defaults(GTK_TABLE(table), publishedAddrRadioButton, 0, 2, 4, 5);
-
-	if (g_strcasecmp (published_sameas_local, "true") == 0) {
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton), TRUE);
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton), FALSE);
-	} else {
-	        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton), FALSE);
-		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton), TRUE);
-	}
-
-	publishedAddressLabel = gtk_label_new_with_mnemonic (_("Published address"));
-	gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressLabel, 0, 1, 5, 6);
-	gtk_misc_set_alignment(GTK_MISC (publishedAddressLabel), 0, 0.5);
-	publishedAddressEntry = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (publishedAddressLabel), publishedAddressEntry);
-
-	gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), published_address);
-	gtk_table_attach_defaults( GTK_TABLE(table), publishedAddressEntry, 1, 2, 5, 6);
-
-	publishedPortLabel = gtk_label_new_with_mnemonic(_("Published port"));
-	gtk_table_attach_defaults(GTK_TABLE(table), publishedPortLabel, 0, 1, 6, 7);
-	gtk_misc_set_alignment(GTK_MISC (publishedPortLabel), 0, 0.5);
-	publishedPortSpinBox = gtk_spin_button_new_with_range(1, 65535, 1);
-	gtk_label_set_mnemonic_widget(GTK_LABEL (publishedPortLabel), publishedPortSpinBox);
-	gtk_spin_button_set_value(GTK_SPIN_BUTTON(publishedPortSpinBox), g_ascii_strtod(published_port, NULL));
-
-	gtk_table_attach_defaults(GTK_TABLE(table), publishedPortSpinBox, 1, 2, 6, 7);
-
-	// This will trigger a signal, and the above two
-	// widgets need to be instanciated before that.
-	g_signal_connect(localAddressCombo, "changed", G_CALLBACK(local_interface_changed_cb), localAddressCombo);   
-
-	g_signal_connect(useStunCheckBox, "toggled", G_CALLBACK(use_stun_cb), useStunCheckBox);	
-
-	g_signal_connect(sameAsLocalRadioButton, "toggled", G_CALLBACK(same_as_local_cb), sameAsLocalRadioButton);   
-	g_signal_connect(publishedAddrRadioButton, "toggled", G_CALLBACK(set_published_addr_manually_cb), publishedAddrRadioButton);
-
-	set_published_addr_manually_cb(publishedAddrRadioButton, NULL);
-
-	return frame;
+GtkWidget* create_published_address (account_t **a)
+{
+
+    GtkWidget *table, *frame;
+    gchar *use_tls =NULL;
+    gchar *published_address = NULL;
+    gchar *published_port = NULL;
+    gchar *stun_enable = NULL;
+    gchar *stun_server = NULL;
+    gchar *published_sameas_local = NULL;
+
+    // Get the user configuration
+    if (*a) {
+
+        use_tls = g_hash_table_lookup ( (*a)->properties,  TLS_ENABLE);
+        published_sameas_local = g_hash_table_lookup ( (*a)->properties,  PUBLISHED_SAMEAS_LOCAL);
+
+        if (g_strcasecmp (published_sameas_local, "true") == 0) {
+            published_address = dbus_get_address_from_interface_name (g_hash_table_lookup ( (*a)->properties, LOCAL_INTERFACE));
+            published_port = g_hash_table_lookup ( (*a)->properties,  LOCAL_PORT);
+        } else {
+            published_address = g_hash_table_lookup ( (*a)->properties,  PUBLISHED_ADDRESS);
+            published_port = g_hash_table_lookup ( (*a)->properties,  PUBLISHED_PORT);
+        }
+
+        stun_enable = g_hash_table_lookup ( (*a)->properties,  ACCOUNT_SIP_STUN_ENABLED);
+        stun_server = g_hash_table_lookup ( (*a)->properties,  ACCOUNT_SIP_STUN_SERVER);
+        published_sameas_local = g_hash_table_lookup ( (*a)->properties,  PUBLISHED_SAMEAS_LOCAL);
+    }
+
+    gnome_main_section_new_with_table (_ ("Published address"), &frame, &table, 2, 3);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 5);
+
+    useStunCheckBox = gtk_check_button_new_with_mnemonic (_ ("Using STUN"));
+    gtk_table_attach_defaults (GTK_TABLE (table), useStunCheckBox, 0, 1, 0, 1);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (useStunCheckBox),
+                                  g_strcasecmp (stun_enable, "true") == 0 ? TRUE: FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (useStunCheckBox),
+                              g_strcasecmp (use_tls,"true") == 0 ? FALSE: TRUE);
+
+    stunServerLabel = gtk_label_new_with_mnemonic (_ ("STUN server URL"));
+    gtk_table_attach_defaults (GTK_TABLE (table), stunServerLabel, 0, 1, 1, 2);
+    gtk_misc_set_alignment (GTK_MISC (stunServerLabel), 0, 0.5);
+    stunServerEntry = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (stunServerLabel), stunServerEntry);
+    gtk_entry_set_text (GTK_ENTRY (stunServerEntry), stun_server);
+    gtk_table_attach_defaults (GTK_TABLE (table), stunServerEntry, 1, 2, 1, 2);
+
+    sameAsLocalRadioButton = gtk_radio_button_new_with_mnemonic_from_widget (NULL, _ ("Same as local parameters"));
+    gtk_table_attach_defaults (GTK_TABLE (table), sameAsLocalRadioButton, 0, 2, 3, 4);
+
+    publishedAddrRadioButton = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (sameAsLocalRadioButton), _ ("Set published address and port:"));
+    gtk_table_attach_defaults (GTK_TABLE (table), publishedAddrRadioButton, 0, 2, 4, 5);
+
+    if (g_strcasecmp (published_sameas_local, "true") == 0) {
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton), TRUE);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton), FALSE);
+    } else {
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton), FALSE);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (publishedAddrRadioButton), TRUE);
+    }
+
+    publishedAddressLabel = gtk_label_new_with_mnemonic (_ ("Published address"));
+    gtk_table_attach_defaults (GTK_TABLE (table), publishedAddressLabel, 0, 1, 5, 6);
+    gtk_misc_set_alignment (GTK_MISC (publishedAddressLabel), 0, 0.5);
+    publishedAddressEntry = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (publishedAddressLabel), publishedAddressEntry);
+
+    gtk_entry_set_text (GTK_ENTRY (publishedAddressEntry), published_address);
+    gtk_table_attach_defaults (GTK_TABLE (table), publishedAddressEntry, 1, 2, 5, 6);
+
+    publishedPortLabel = gtk_label_new_with_mnemonic (_ ("Published port"));
+    gtk_table_attach_defaults (GTK_TABLE (table), publishedPortLabel, 0, 1, 6, 7);
+    gtk_misc_set_alignment (GTK_MISC (publishedPortLabel), 0, 0.5);
+    publishedPortSpinBox = gtk_spin_button_new_with_range (1, 65535, 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (publishedPortLabel), publishedPortSpinBox);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (publishedPortSpinBox), g_ascii_strtod (published_port, NULL));
+
+    gtk_table_attach_defaults (GTK_TABLE (table), publishedPortSpinBox, 1, 2, 6, 7);
+
+    // This will trigger a signal, and the above two
+    // widgets need to be instanciated before that.
+    g_signal_connect (localAddressCombo, "changed", G_CALLBACK (local_interface_changed_cb), localAddressCombo);
+
+    g_signal_connect (useStunCheckBox, "toggled", G_CALLBACK (use_stun_cb), useStunCheckBox);
+
+    g_signal_connect (sameAsLocalRadioButton, "toggled", G_CALLBACK (same_as_local_cb), sameAsLocalRadioButton);
+    g_signal_connect (publishedAddrRadioButton, "toggled", G_CALLBACK (set_published_addr_manually_cb), publishedAddrRadioButton);
+
+    set_published_addr_manually_cb (publishedAddrRadioButton, NULL);
+
+    return frame;
 }
 
-GtkWidget* create_advanced_tab (account_t **a) {
+GtkWidget* create_advanced_tab (account_t **a)
+{
+
+    // Build the advanced tab, to appear on the account configuration panel
+    DEBUG ("Config: Build advanced tab");
+
+    GtkWidget *ret, *frame;
 
-	// Build the advanced tab, to appear on the account configuration panel
-        DEBUG("Config: Build advanced tab")
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
 
-	GtkWidget *ret, *frame;
+    frame = create_registration_expire (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	ret = gtk_vbox_new (FALSE, 10);
-	gtk_container_set_border_width (GTK_CONTAINER(ret), 10);
+    frame = create_network (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	frame = create_registration_expire (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    frame = create_published_address (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	frame = create_network (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    gtk_widget_show_all (ret);
 
-	frame = create_published_address (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    use_stun_cb (GTK_WIDGET (useStunCheckBox), NULL);
 
-	gtk_widget_show_all (ret);
+    set_published_addr_manually_cb (GTK_WIDGET (publishedAddrRadioButton), NULL);
 
-	use_stun_cb (GTK_WIDGET (useStunCheckBox), NULL);
+    return ret;
+}
 
-	set_published_addr_manually_cb(GTK_WIDGET (publishedAddrRadioButton), NULL);
+void ringtone_enabled (GtkWidget *widget UNUSED, gpointer fileChooser, const gchar *accountID UNUSED)
+{
+    gboolean isEnabled = gtk_widget_get_sensitive (GTK_WIDGET (fileChooser));
 
-	return ret;
+    if (isEnabled) {
+        gtk_widget_set_sensitive (GTK_WIDGET (fileChooser), FALSE);
+    } else {
+        gtk_widget_set_sensitive (GTK_WIDGET (fileChooser), TRUE);
+    }
 }
 
-GtkWidget* create_codecs_configuration (account_t **a) {
 
-        // Main widget
-        GtkWidget *ret, *codecs, *dtmf, *box, *frame, *sipinfo, *table;
-        account_t *currentAccount = *a;
-        gchar *currentDtmfType = "";
-        gboolean dtmf_are_rtp = TRUE;
-	gpointer p;
+GtkWidget* create_codecs_configuration (account_t **a)
+{
+
+    // Main widget
+    GtkWidget *ret, *codecs, *dtmf, *box, *frame, *sipinfo, *table;
+    account_t *currentAccount = *a;
+    gchar *currentDtmfType = "";
+    gboolean dtmf_are_rtp = TRUE;
+    gpointer p;
+
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
+
+    box = codecs_box (a);
+
+    // Box for the codecs
+    gnome_main_section_new (_ ("Codecs"), &codecs);
+    gtk_box_pack_start (GTK_BOX (ret), codecs, FALSE, FALSE, 0);
+    gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
+    gtk_widget_show (codecs);
+    gtk_container_add (GTK_CONTAINER (codecs) , box);
 
-        ret = gtk_vbox_new(FALSE, 10);
-        gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+    // Add DTMF type selection for SIP account only
+    p = g_hash_table_lookup (currentAccount->properties, g_strdup (ACCOUNT_TYPE));
 
-        box = codecs_box (a);
+    if (g_strcmp0 (p, "SIP") == 0) {
 
-        // Box for the codecs
-        gnome_main_section_new (_("Codecs"), &codecs);
-        gtk_box_pack_start (GTK_BOX(ret), codecs, FALSE, FALSE, 0);
-        gtk_widget_set_size_request (GTK_WIDGET (codecs), -1, 200);
-        gtk_widget_show (codecs);
-        gtk_container_add (GTK_CONTAINER (codecs) , box);
+        // Box for dtmf
+        gnome_main_section_new_with_table (_ ("DTMF"), &dtmf, &table, 1, 2);
+        gtk_box_pack_start (GTK_BOX (ret), dtmf, FALSE, FALSE, 0);
+        gtk_widget_show (dtmf);
 
-	// Add DTMF type selection for SIP account only
-	p = g_hash_table_lookup(currentAccount->properties, g_strdup(ACCOUNT_TYPE));
-	if(g_strcmp0(p, "SIP") == 0) {
-	
-	  // Box for dtmf
-	  gnome_main_section_new_with_table (_("DTMF"), &dtmf, &table, 1, 2);
-	  gtk_box_pack_start (GTK_BOX(ret), dtmf, FALSE, FALSE, 0);
-	  gtk_widget_show (dtmf);
 
+        currentDtmfType = g_hash_table_lookup (currentAccount->properties, g_strdup (ACCOUNT_DTMF_TYPE));
 
-	  currentDtmfType = g_hash_table_lookup (currentAccount->properties, g_strdup(ACCOUNT_DTMF_TYPE));
-	  if (g_strcasecmp(currentDtmfType, OVERRTP) != 0) {
+        if (g_strcasecmp (currentDtmfType, OVERRTP) != 0) {
             dtmf_are_rtp = FALSE;
-	  }
+        }
+
+        overrtp = gtk_radio_button_new_with_label (NULL, _ ("RTP"));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (overrtp), dtmf_are_rtp);
+        gtk_table_attach (GTK_TABLE (table), overrtp, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+        sipinfo = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (overrtp),  _ ("SIP"));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sipinfo), !dtmf_are_rtp);
+        g_signal_connect (G_OBJECT (sipinfo), "clicked", G_CALLBACK (select_dtmf_type), NULL);
+        gtk_table_attach (GTK_TABLE (table), sipinfo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    }
+
+    // Box for the ringtones
+    gnome_main_section_new_with_table (_ ("Ringtones"), &frame, &table, 1, 2);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    fileChooser = gtk_file_chooser_button_new (_ ("Choose a ringtone"), GTK_FILE_CHOOSER_ACTION_OPEN);
+
+    p = g_hash_table_lookup (currentAccount->properties, g_strdup (CONFIG_RINGTONE_ENABLED));
+    gboolean ringtoneEnabled = (g_strcmp0 (p, "true") == 0) ? TRUE : FALSE;
+
+    enableTone = gtk_check_button_new_with_mnemonic (_ ("_Enable ringtones"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enableTone), ringtoneEnabled);
+    g_signal_connect (G_OBJECT (enableTone) , "clicked" , G_CALLBACK (ringtone_enabled), fileChooser);
+    gtk_table_attach (GTK_TABLE (table), enableTone, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-	  overrtp = gtk_radio_button_new_with_label( NULL, _("RTP") );
-	  gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(overrtp), dtmf_are_rtp);
-	  gtk_table_attach ( GTK_TABLE( table ), overrtp, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    // file chooser button
+    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fileChooser) , g_get_home_dir());
+    p = g_hash_table_lookup (currentAccount->properties, g_strdup (CONFIG_RINGTONE_PATH));
+    gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (fileChooser) , p);
+    gtk_widget_set_sensitive (GTK_WIDGET (fileChooser), ringtoneEnabled);
 
-	  sipinfo = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(overrtp),  _("SIP"));
-	  gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(sipinfo), !dtmf_are_rtp);
-	  g_signal_connect(G_OBJECT(sipinfo), "clicked", G_CALLBACK(select_dtmf_type), NULL);
-	  gtk_table_attach ( GTK_TABLE( table ), sipinfo, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	}
+    GtkFileFilter *filter = gtk_file_filter_new();
+    gtk_file_filter_set_name (filter , _ ("Audio Files"));
+    gtk_file_filter_add_pattern (filter , "*.wav");
+    gtk_file_filter_add_pattern (filter , "*.ul");
+    gtk_file_filter_add_pattern (filter , "*.au");
+    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fileChooser) , filter);
+    gtk_table_attach (GTK_TABLE (table), fileChooser, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-        gtk_widget_show_all(ret);
 
-        return ret;
+
+    gtk_widget_show_all (ret);
+
+    return ret;
 
 }
 
-void show_account_window (account_t * a) {
+void show_account_window (account_t * a)
+{
 
     GtkWidget * notebook;
-    GtkWidget *tab, *codecs_tab, *ip_tab; 
+    GtkWidget *tab, *codecs_tab, *ip_tab;
     gint response;
     account_t *currentAccount;
-  
-    // In case the published address is same than local, 
-    // we must resolve published address from interface name 
+
+
+    // Firstly we reset
+    reset();
+
+    // In case the published address is same than local,
+    // we must resolve published address from interface name
     gchar * local_interface;
     gchar * published_address;
-  
-    currentAccount = a;   
+
+    currentAccount = a;
 
     if (currentAccount == NULL) {
-      currentAccount = g_new0(account_t, 1);
-      currentAccount->properties = dbus_account_details(NULL);
-      currentAccount->accountID = "new";    
-      sflphone_fill_codec_list_per_account (&currentAccount);
-      DEBUG("Config: Account is NULL. Will fetch default values");      
+        currentAccount = g_new0 (account_t, 1);
+        currentAccount->properties = dbus_account_details (NULL);
+        currentAccount->accountID = "new";
+        sflphone_fill_codec_list_per_account (&currentAccount);
+        DEBUG ("Config: Account is NULL. Will fetch default values");
     }
 
-    dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Account settings"),
-						     GTK_WINDOW(get_main_window()),
-						     GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-						     GTK_STOCK_CANCEL,
-						     GTK_RESPONSE_CANCEL,
-						     GTK_STOCK_APPLY,				
-						     GTK_RESPONSE_ACCEPT,
-						     NULL));
-    
-    gtk_dialog_set_has_separator(dialog, FALSE);
-    gtk_container_set_border_width (GTK_CONTAINER(dialog), 0);
-    
+    dialog = GTK_DIALOG (gtk_dialog_new_with_buttons (_ ("Account settings"),
+                         GTK_WINDOW (get_main_window()),
+                         GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                         GTK_STOCK_CANCEL,
+                         GTK_RESPONSE_CANCEL,
+                         GTK_STOCK_APPLY,
+                         GTK_RESPONSE_ACCEPT,
+                         NULL));
+
+    gtk_dialog_set_has_separator (dialog, FALSE);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 0);
+
     notebook = gtk_notebook_new();
-    gtk_box_pack_start(GTK_BOX (dialog->vbox), notebook, TRUE, TRUE, 0);
-    gtk_container_set_border_width(GTK_CONTAINER(notebook), 10);
-    gtk_widget_show(notebook);
+    gtk_box_pack_start (GTK_BOX (dialog->vbox), notebook, TRUE, TRUE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (notebook), 10);
+    gtk_widget_show (notebook);
 
     // We do not need the global settings for the IP2IP account
     if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
-      
-      /* General Settings */
-      tab = create_basic_tab(&currentAccount);
-      
-      gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Basic")));
-      gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
+
+        /* General Settings */
+        tab = create_basic_tab (&currentAccount);
+
+        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Basic")));
+        gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
 
 
     }
+
     /* Codecs */
     codecs_tab = create_codecs_configuration (&currentAccount);
-    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), codecs_tab, gtk_label_new(_("Codecs")));
-    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), codecs_tab);    
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), codecs_tab, gtk_label_new (_ ("Codecs")));
+    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), codecs_tab);
 
     // Get current protocol for this account protocol
     gchar *currentProtocol = "SIP";
-    currentProtocol = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
+
+    if (protocolComboBox)
+        currentProtocol = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (protocolComboBox));
 
     // Do not need advanced or security one for the IP2IP account
     if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
 
-	/* Advanced */
-	advanced_tab = create_advanced_tab(&currentAccount);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), advanced_tab, gtk_label_new(_("Advanced")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook), advanced_tab);
-	
-	/* Security */
-	security_tab = create_security_tab (&currentAccount);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), security_tab, gtk_label_new(_("Security")));
-	gtk_notebook_page_num(GTK_NOTEBOOK(notebook),security_tab);
+        /* Advanced */
+        advanced_tab = create_advanced_tab (&currentAccount);
+        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), advanced_tab, gtk_label_new (_ ("Advanced")));
+        gtk_notebook_page_num (GTK_NOTEBOOK (notebook), advanced_tab);
 
-    }
-    else {
+        /* Security */
+        security_tab = create_security_tab (&currentAccount);
+        gtk_notebook_append_page (GTK_NOTEBOOK (notebook), security_tab, gtk_label_new (_ ("Security")));
+        gtk_notebook_page_num (GTK_NOTEBOOK (notebook),security_tab);
+
+    } else {
 
-      /* Custom tab for the IP to IP profile */
-      ip_tab = create_direct_ip_calls_tab (&currentAccount);
-      gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), ip_tab, gtk_label_new(_("Network")));
-      gtk_notebook_page_num (GTK_NOTEBOOK (notebook), ip_tab);
+        /* Custom tab for the IP to IP profile */
+        ip_tab = create_direct_ip_calls_tab (&currentAccount);
+        gtk_notebook_prepend_page (GTK_NOTEBOOK (notebook), ip_tab, gtk_label_new (_ ("Network")));
+        gtk_notebook_page_num (GTK_NOTEBOOK (notebook), ip_tab);
     }
 
     // Emit signal to hide advanced and security tabs in case of IAX
-    g_signal_emit_by_name (GTK_WIDGET(protocolComboBox), "changed", NULL);
+    if (protocolComboBox)
+        g_signal_emit_by_name (GTK_WIDGET (protocolComboBox), "changed", NULL);
 
     gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook) ,  0);
 
@@ -1330,199 +1382,221 @@ void show_account_window (account_t * a) {
     /* Run dialog */
     /**************/
     response = gtk_dialog_run (GTK_DIALOG (dialog));
-    
+
     // Update protocol in case it changed
-    gchar *proto = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(protocolComboBox));
+    gchar *proto = NULL;
+
+    if (protocolComboBox)
+        proto = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (protocolComboBox));
+    else
+        proto = "SIP";
 
     // If cancel button is pressed
-    if(response == GTK_RESPONSE_CANCEL) {
-      gtk_widget_destroy (GTK_WIDGET(dialog));
-      return;
+    if (response == GTK_RESPONSE_CANCEL) {
+        gtk_widget_destroy (GTK_WIDGET (dialog));
+        return;
     }
-    
-    // If accept button is 
+
+    // If accept button is
     if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
-      
-
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_ALIAS),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryAlias))));
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_TYPE),
-			   g_strdup(proto));
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_HOSTNAME),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryHostname))));
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_USERNAME),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryUsername))));
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_PASSWORD),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryPassword))));
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_MAILBOX),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryMailbox))));   
+
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (ACCOUNT_ALIAS),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (entryAlias))));
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (ACCOUNT_TYPE),
+                              g_strdup (proto));
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (ACCOUNT_HOSTNAME),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (entryHostname))));
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (ACCOUNT_USERNAME),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (entryUsername))));
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (ACCOUNT_PASSWORD),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (entryPassword))));
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (ACCOUNT_MAILBOX),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (entryMailbox))));
+
+        // Variable used to update credentials
+        current_username = (gchar *) g_hash_table_lookup (currentAccount->properties, g_strdup (ACCOUNT_USERNAME));
+
     }
 
+    if (proto && strcmp (proto, "SIP") == 0) {
+
+        if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
+
+            g_hash_table_replace (currentAccount->properties,
+                                  g_strdup (ACCOUNT_RESOLVE_ONCE),
+                                  g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (entryResolveNameOnlyOnce)) ? "false": "true"));
+
+            g_hash_table_replace (currentAccount->properties,
+                                  g_strdup (ACCOUNT_REGISTRATION_EXPIRE),
+                                  g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (expireSpinBox))));
+
+            /*
+            // TODO: uncomment this code and implement route
+            g_hash_table_replace(currentAccount->properties,
+            		     g_strdup(ACCOUNT_ROUTE),
+            		     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryRouteSet))));
+            */
+
+            g_hash_table_replace (currentAccount->properties,
+                                  g_strdup (ACCOUNT_USERAGENT),
+                                  g_strdup (gtk_entry_get_text (GTK_ENTRY (entryUseragent))));
+
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_SIP_STUN_ENABLED),
+                                  g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (useStunCheckBox)) ? "true":"false"));
+
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_SIP_STUN_SERVER),
+                                  g_strdup (gtk_entry_get_text (GTK_ENTRY (stunServerEntry))));
+
+            g_hash_table_replace (currentAccount->properties, g_strdup (PUBLISHED_SAMEAS_LOCAL), g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton)) ? "true":"false"));
+
+            if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sameAsLocalRadioButton))) {
+
+                g_hash_table_replace (currentAccount->properties,
+                                      g_strdup (PUBLISHED_PORT),
+                                      g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (publishedPortSpinBox))));
+
+                g_hash_table_replace (currentAccount->properties,
+                                      g_strdup (PUBLISHED_ADDRESS),
+                                      g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (publishedAddressEntry))));
+            } else {
+
+                g_hash_table_replace (currentAccount->properties,
+                                      g_strdup (PUBLISHED_PORT),
+                                      g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (localPortSpinBox))));
+                local_interface = g_strdup ( (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo)));
+
+                published_address = dbus_get_address_from_interface_name (local_interface);
 
-    if (strcmp (proto, "SIP") == 0) {
-      
-      if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
-
-	g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_RESOLVE_ONCE),
-			   g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(entryResolveNameOnlyOnce)) ? "false": "true"));
-
-	g_hash_table_replace(currentAccount->properties,
-			   g_strdup(ACCOUNT_REGISTRATION_EXPIRE),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(expireSpinBox))));
-	
-	/*
-	// TODO: uncomment this code and implement route 
-	g_hash_table_replace(currentAccount->properties,
-			     g_strdup(ACCOUNT_ROUTE),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(entryRouteSet))));
-	*/
-	
-	g_hash_table_replace(currentAccount->properties, 
-			     g_strdup(ACCOUNT_USERAGENT), 
-			     g_strdup(gtk_entry_get_text (GTK_ENTRY(entryUseragent))));
-
-	g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_ENABLED), 
-			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useStunCheckBox)) ? "true":"false"));
-	
-	g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SIP_STUN_SERVER), 
-			     g_strdup(gtk_entry_get_text(GTK_ENTRY(stunServerEntry))));
-	
-	g_hash_table_replace(currentAccount->properties, g_strdup(PUBLISHED_SAMEAS_LOCAL), g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton)) ? "true":"false"));	
-
-	if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(sameAsLocalRadioButton))) {
-	  
-	  g_hash_table_replace(currentAccount->properties,
-			       g_strdup(PUBLISHED_PORT),
-			       g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedPortSpinBox))));
-
-	  g_hash_table_replace(currentAccount->properties,
-			       g_strdup(PUBLISHED_ADDRESS),
-			       g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(publishedAddressEntry))));
-	}
-	else {
-	  
-	  g_hash_table_replace(currentAccount->properties,
-			       g_strdup(PUBLISHED_PORT),
-			       g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
-	  local_interface = g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)));
-	  
-	  published_address = dbus_get_address_from_interface_name(local_interface);
-	      
-	  g_hash_table_replace(currentAccount->properties,
-			       g_strdup(PUBLISHED_ADDRESS),
-			       published_address);
-	}
-
-	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(overrtp))) {
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_DTMF_TYPE), g_strdup(OVERRTP));
-	}
-	else {
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_DTMF_TYPE), g_strdup(SIPINFO));
-	}
-	
-	gchar* keyExchange = (gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(keyExchangeCombo));
-	
-	if (g_strcasecmp(keyExchange, "ZRTP") == 0) {
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(ZRTP));
-	}
-	
-	else if(g_strcasecmp(keyExchange, "SDES") == 0) {
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("true"));
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup(SDES));
-	}
-	
-	else {
-	  g_hash_table_replace(currentAccount->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup("false"));
-	}
-	
-	g_hash_table_replace(currentAccount->properties, g_strdup(TLS_ENABLE), 
-			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(useSipTlsCheckBox)) ? "true":"false"));
-      }
-      
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(LOCAL_INTERFACE),
-			   g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo))));
-	  
-      g_hash_table_replace(currentAccount->properties,
-			   g_strdup(LOCAL_PORT),
-			   g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(localPortSpinBox))));
+                g_hash_table_replace (currentAccount->properties,
+                                      g_strdup (PUBLISHED_ADDRESS),
+                                      published_address);
+            }
+
+        }
+
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (overrtp))) {
+            DEBUG ("Config: Set dtmf over rtp");
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_DTMF_TYPE), g_strdup (OVERRTP));
+        } else {
+            DEBUG ("Config: Set dtmf over sip");
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_DTMF_TYPE), g_strdup (SIPINFO));
+        }
+
+        gchar* keyExchange = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (keyExchangeCombo));
+
+        if (g_strcasecmp (keyExchange, "ZRTP") == 0) {
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_SRTP_ENABLED), g_strdup ("true"));
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_KEY_EXCHANGE), g_strdup (ZRTP));
+        }
+
+        else if (g_strcasecmp (keyExchange, "SDES") == 0) {
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_SRTP_ENABLED), g_strdup ("true"));
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_KEY_EXCHANGE), g_strdup (SDES));
+        }
+
+        else {
+            g_hash_table_replace (currentAccount->properties, g_strdup (ACCOUNT_SRTP_ENABLED), g_strdup ("false"));
+        }
+
+        g_hash_table_replace (currentAccount->properties, g_strdup (TLS_ENABLE),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (useSipTlsCheckBox)) ? "true":"false"));
+
+        gboolean toneEnabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (enableTone));
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (CONFIG_RINGTONE_ENABLED),
+                              g_strdup (toneEnabled ? "true" : "false"));
+
+
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (CONFIG_RINGTONE_PATH),
+                              g_strdup ( (gchar *) gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fileChooser))));
+
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (LOCAL_INTERFACE),
+                              g_strdup ( (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo))));
+
+        g_hash_table_replace (currentAccount->properties,
+                              g_strdup (LOCAL_PORT),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (localPortSpinBox))));
 
     }
-    
-    if (strcmp(currentProtocol, "SIP") == 0) {
-
-      /* Set new credentials if any */
-      DEBUG("Config: Setting credentials"); 
-      if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
-      
-	/* This hack is necessary because of the way the 
-	 * configuration file is made (.ini at that time).
-	 * and deleting account per account is too much 
-	 * of a trouble. 
-	 */
-	dbus_delete_all_credential(currentAccount);
-      
-	GPtrArray * credential = getNewCredential(currentAccount->properties);         
-	currentAccount->credential_information = credential;
-	if(currentAccount->credential_information != NULL) {
-	  int i;
-	  for(i = 0; i < currentAccount->credential_information->len; i++) {
-	    dbus_set_credential(currentAccount, i);
-	  }
-	  dbus_set_number_of_credential(currentAccount, currentAccount->credential_information->len);
-	}
-      }
+
+    if (currentProtocol && strcmp (currentProtocol, "SIP") == 0) {
+
+        /* Set new credentials if any */
+        DEBUG ("Config: Setting credentials");
+
+        if (g_strcasecmp (currentAccount->accountID, IP2IP) != 0) {
+
+            /* This hack is necessary because of the way the
+             * configuration file is made (.ini at that time).
+             * and deleting account per account is too much
+             * of a trouble.
+             */
+            dbus_delete_all_credential (currentAccount);
+
+            DEBUG ("Config: Get new credentials");
+            GPtrArray * credential = getNewCredential (currentAccount->properties);
+            currentAccount->credential_information = credential;
+
+            if (currentAccount->credential_information != NULL) {
+                guint i;
+
+                for (i = 0; i < currentAccount->credential_information->len; i++) {
+                    DEBUG ("Create new credential");
+                    dbus_set_credential (currentAccount, i);
+                }
+            }
+        }
     }
 
     /** @todo Verify if it's the best condition to check */
-    if (g_strcasecmp(currentAccount->accountID, "new") == 0) {
-      dbus_add_account(currentAccount);
-    }
-    else {
-      dbus_set_account_details(currentAccount);
+    if (g_strcasecmp (currentAccount->accountID, "new") == 0) {
+        dbus_add_account (currentAccount);
+    } else {
+        dbus_set_account_details (currentAccount);
     }
-    
+
     // Perpetuate changes to the deamon
     codec_list_update_to_daemon (currentAccount);
-    
-    gtk_widget_destroy (GTK_WIDGET(dialog));
-} 
 
-GtkWidget* create_direct_ip_calls_tab (account_t **a) {
+    gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+GtkWidget* create_direct_ip_calls_tab (account_t **a)
+{
 
-	GtkWidget *ret, *frame, *label;
-	gchar *description;
+    GtkWidget *ret, *frame, *label;
+    gchar *description;
 
-	ret = gtk_vbox_new(FALSE, 10);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
 
-	description = g_markup_printf_escaped(_("This profile is used when you want to reach a remote peer simply by typing a sip URI such as <b>sip:remotepeer</b>. The settings you define here will also be used if no account can be matched to an incoming or outgoing call."));
-	label = gtk_label_new (NULL);
-	gtk_label_set_markup (GTK_LABEL (label), description);
-	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);    
-	gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0);
+    description = g_markup_printf_escaped (_ ("This profile is used when you want to reach a remote peer simply by typing a sip URI such as <b>sip:remotepeer</b>. The settings you define here will also be used if no account can be matched to an incoming or outgoing call."));
+    label = gtk_label_new (NULL);
+    gtk_label_set_markup (GTK_LABEL (label), description);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_box_pack_start (GTK_BOX (ret), label, FALSE, FALSE, 0);
 
-	GtkRequisition requisition;
-	gtk_widget_size_request (GTK_WIDGET (ret), &requisition);
-	gtk_widget_set_size_request (GTK_WIDGET (label), 350, -1);        
-	gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+    GtkRequisition requisition;
+    gtk_widget_size_request (GTK_WIDGET (ret), &requisition);
+    gtk_widget_set_size_request (GTK_WIDGET (label), 350, -1);
+    gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
 
-	frame = create_network (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    frame = create_network (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	frame = create_security_widget (a);
-	gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+    frame = create_security_widget (a);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
 
-	gtk_widget_show_all (ret);
-	return ret;
+    gtk_widget_show_all (ret);
+    return ret;
 
 }
 
diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.h b/sflphone-client-gnome/src/config/accountconfigdialog.h
index dee7c8d33e3742dbc8600985d8d480f7a2653531..ecfd97cf1b9c9d1c1751f98935b47539f2b5ed0d 100644
--- a/sflphone-client-gnome/src/config/accountconfigdialog.h
+++ b/sflphone-client-gnome/src/config/accountconfigdialog.h
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -28,7 +28,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __ACCOUNTWINDOW_H__
 #define __ACCOUNTWINDOW_H__
 /** @file accountconfigdialog.h
@@ -39,10 +39,10 @@
 #include "preferencesdialog.h"
 #include "accountlist.h"
 
-/** 
- * Display the main account widget 
+/**
+ * Display the main account widget
  * @param a The account you want to edit or null for a new account
- */  
+ */
 void show_account_window (account_t *a);
 
 GtkWidget* create_registration_expire (account_t **a);
@@ -50,4 +50,4 @@ GtkWidget* create_registration_expire (account_t **a);
 GtkWidget* create_direct_ip_calls_tab (account_t **a);
 
 
-#endif 
+#endif
diff --git a/sflphone-client-gnome/src/config/accountlistconfigdialog.c b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
index 0c6a975e8e342d29ee5d039adf1729361034ed48..eddf58f7dc177ce82b1f8d51f6d8200f5e59bfd0 100644
--- a/sflphone-client-gnome/src/config/accountlistconfigdialog.c
+++ b/sflphone-client-gnome/src/config/accountlistconfigdialog.c
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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.
@@ -36,6 +36,7 @@
 #include <actions.h>
 #include <utils.h>
 #include <string.h>
+#include <libgnome/gnome-help.h>
 
 #define CONTEXT_ID_REGISTRATION 0
 
@@ -50,49 +51,83 @@ GtkListStore * accountStore;
 
 GtkDialog * accountListDialog = NULL;
 
-account_t * selectedAccount = NULL;      
+account_t * selectedAccount = NULL;
 // Account properties
 enum {
-	COLUMN_ACCOUNT_ALIAS,
-	COLUMN_ACCOUNT_TYPE,
-	COLUMN_ACCOUNT_STATUS,
-	COLUMN_ACCOUNT_ACTIVE,
-	COLUMN_ACCOUNT_DATA,
-	COLUMN_ACCOUNT_COUNT
+    COLUMN_ACCOUNT_ALIAS,
+    COLUMN_ACCOUNT_TYPE,
+    COLUMN_ACCOUNT_STATUS,
+    COLUMN_ACCOUNT_ACTIVE,
+    COLUMN_ACCOUNT_DATA,
+    COLUMN_ACCOUNT_COUNT
 };
 
+/**
+ * Delete an account
+ */
+static void delete_account_cb (void)
+{
+
+    if (selectedAccount != NULL) {
+        dbus_remove_account (selectedAccount->accountID);
+    }
+}
+
+
+/**
+ * Edit an account
+ */
+static void edit_account_cb (void)
+{
+
+    if (selectedAccount != NULL) {
+        show_account_window (selectedAccount);
+    }
+}
+
+/**
+ * Add an account
+ */
+static void add_account_cb (void)
+{
+
+    show_account_window (NULL);
+}
+
 /**
  * Fills the treelist with accounts
  */
-void account_list_config_dialog_fill() {
+void account_list_config_dialog_fill()
+{
+
+    if (accountListDialog == NULL) {
+        DEBUG ("Dialog is not opened");
+        return;
+    }
 
-	if (accountListDialog == NULL) {
-		DEBUG("Dialog is not opened");
-		return;
-	}
+    GtkTreeIter iter;
 
-	GtkTreeIter iter;
+    gtk_list_store_clear (accountStore);
 
-	gtk_list_store_clear(accountStore);
+    unsigned int i;
 
-	unsigned int i;
-	for(i = 0; i < account_list_get_size(); i++) {
-		account_t * a = account_list_get_nth (i);
+    for (i = 0; i < account_list_get_size(); i++) {
+        account_t * a = account_list_get_nth (i);
 
-		if (a) {
-			gtk_list_store_append (accountStore, &iter);
+        if (a) {
+            gtk_list_store_append (accountStore, &iter);
 
-			DEBUG("Filling accounts: Account is enabled :%s", g_hash_table_lookup(a->properties, ACCOUNT_ENABLED));
+            DEBUG ("Filling accounts: Account is enabled :%s", g_hash_table_lookup (a->properties, ACCOUNT_ENABLED));
 
-			gtk_list_store_set(accountStore, &iter,
-					COLUMN_ACCOUNT_ALIAS, g_hash_table_lookup(a->properties, ACCOUNT_ALIAS),  // Name
-					COLUMN_ACCOUNT_TYPE, g_hash_table_lookup(a->properties, ACCOUNT_TYPE),   // Protocol
-					COLUMN_ACCOUNT_STATUS, account_state_name(a->state),      // Status
-					COLUMN_ACCOUNT_ACTIVE, (g_strcasecmp(g_hash_table_lookup(a->properties, ACCOUNT_ENABLED),"true") == 0)? TRUE:FALSE,  // Enable/Disable
-					COLUMN_ACCOUNT_DATA, a,   // Pointer
-					-1);
-		}
-	}
+            gtk_list_store_set (accountStore, &iter,
+                                COLUMN_ACCOUNT_ALIAS, g_hash_table_lookup (a->properties, ACCOUNT_ALIAS), // Name
+                                COLUMN_ACCOUNT_TYPE, g_hash_table_lookup (a->properties, ACCOUNT_TYPE),  // Protocol
+                                COLUMN_ACCOUNT_STATUS, account_state_name (a->state),     // Status
+                                COLUMN_ACCOUNT_ACTIVE, (g_strcasecmp (g_hash_table_lookup (a->properties, ACCOUNT_ENABLED),"true") == 0) ? TRUE:FALSE,  // Enable/Disable
+                                COLUMN_ACCOUNT_DATA, a,   // Pointer
+                                -1);
+        }
+    }
 
 }
 
@@ -101,497 +136,473 @@ void account_list_config_dialog_fill() {
 /**
  * Call back when the user click on an account in the list
  */
-	static void
-select_account_cb(GtkTreeSelection *selection, GtkTreeModel *model)
+static void
+select_account_cb (GtkTreeSelection *selection, GtkTreeModel *model)
 {
-	GtkTreeIter iter;
-	GValue val;
-	gchar *state;
-
-	memset (&val, 0, sizeof(val));
-	if (!gtk_tree_selection_get_selected(selection, &model, &iter))
-	{
-		selectedAccount = NULL;
-		gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(editButton), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);                
-		return;
-	}
-
-	// The Gvalue will be initialized in the following function
-	gtk_tree_model_get_value(model, &iter, COLUMN_ACCOUNT_DATA, &val);
-
-	selectedAccount = (account_t*)g_value_get_pointer(&val);
-	g_value_unset(&val);
-
-	if(selectedAccount != NULL) {
-		gtk_widget_set_sensitive(GTK_WIDGET(editButton), TRUE);
-		if (g_strcasecmp (selectedAccount->accountID, IP2IP) != 0) {
-			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), TRUE);
-			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), TRUE);
-			gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), TRUE);      
-
-			/* Update status bar about current registration state */
-			gtk_statusbar_pop (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION);
-
-			if (selectedAccount->protocol_state_description != NULL  
-				&& selectedAccount->protocol_state_code != 0) {
-
-				gchar * response = g_strdup_printf(
-					_("Server returned \"%s\" (%d)"),
-					selectedAccount->protocol_state_description, 
-					selectedAccount->protocol_state_code);
-				gchar * message = g_strconcat(
-					account_state_name(selectedAccount->state), 
-					". ", 
-					response,
-					NULL);
-
-				gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
-
-				g_free(response);
-				g_free(message);
-
-			} else {
-				state = (gchar*) account_state_name (selectedAccount->state);        
-				gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, state);        
-			}
-		}
-		else {
-			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
-			gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
-			gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);      
-		}
-	}
-
-	DEBUG("Selecting account in account window");
+    GtkTreeIter iter;
+    GValue val;
+    gchar *state;
+
+    memset (&val, 0, sizeof (val));
+
+    if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+        selectedAccount = NULL;
+        gtk_widget_set_sensitive (GTK_WIDGET (accountMoveUpButton), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (accountMoveDownButton), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (editButton), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (deleteButton), FALSE);
+        return;
+    }
+
+    // The Gvalue will be initialized in the following function
+    gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_DATA, &val);
+
+    selectedAccount = (account_t*) g_value_get_pointer (&val);
+    g_value_unset (&val);
+
+    if (selectedAccount != NULL) {
+        gtk_widget_set_sensitive (GTK_WIDGET (editButton), TRUE);
+
+        if (g_strcasecmp (selectedAccount->accountID, IP2IP) != 0) {
+            gtk_widget_set_sensitive (GTK_WIDGET (accountMoveUpButton), TRUE);
+            gtk_widget_set_sensitive (GTK_WIDGET (accountMoveDownButton), TRUE);
+            gtk_widget_set_sensitive (GTK_WIDGET (deleteButton), TRUE);
+
+            /* Update status bar about current registration state */
+            gtk_statusbar_pop (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION);
+
+            if (selectedAccount->protocol_state_description != NULL
+                    && selectedAccount->protocol_state_code != 0) {
+
+                gchar * response = g_strdup_printf (
+                                       _ ("Server returned \"%s\" (%d)"),
+                                       selectedAccount->protocol_state_description,
+                                       selectedAccount->protocol_state_code);
+                gchar * message = g_strconcat (
+                                      account_state_name (selectedAccount->state),
+                                      ". ",
+                                      response,
+                                      NULL);
+
+                gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
+
+                g_free (response);
+                g_free (message);
+
+            } else {
+                state = (gchar*) account_state_name (selectedAccount->state);
+                gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, state);
+            }
+        } else {
+            gtk_widget_set_sensitive (GTK_WIDGET (accountMoveUpButton), FALSE);
+            gtk_widget_set_sensitive (GTK_WIDGET (accountMoveDownButton), FALSE);
+            gtk_widget_set_sensitive (GTK_WIDGET (deleteButton), FALSE);
+        }
+    }
+
+    DEBUG ("Selecting account in account window");
 }
 
-static void enable_account_cb (GtkCellRendererToggle *rend UNUSED, gchar* path,  gpointer data ) {
-
-	GtkTreeIter iter;
-	GtkTreePath *treePath;    
-	GtkTreeModel *model;
-	gboolean enable;
-	account_t* acc ;
-
-	// The IP2IP profile can't be disabled
-	if (g_strcasecmp (path, "0") == 0)
-		return;
-
-	// Get pointer on object
-	treePath = gtk_tree_path_new_from_string(path);
-	model = gtk_tree_view_get_model(GTK_TREE_VIEW(data));
-	gtk_tree_model_get_iter(model, &iter, treePath);
-	gtk_tree_model_get(model, &iter,
-			COLUMN_ACCOUNT_ACTIVE, &enable,
-			COLUMN_ACCOUNT_DATA, &acc,
-			-1);
-	
-	enable = !enable;
-
-	DEBUG("Account is %d enabled", enable);
-	// Store value
-	gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-			COLUMN_ACCOUNT_ACTIVE, enable,
-			-1);
-
-	// Modify account state
-	gchar * registrationState;
-	if (enable == TRUE) {
-		registrationState = g_strdup("true");
-	} else {
-		registrationState = g_strdup("false");
-	}
-	DEBUG("Replacing with %s", registrationState);
-	g_hash_table_replace( acc->properties , g_strdup(ACCOUNT_ENABLED), registrationState);
-
-	dbus_send_register(acc->accountID, enable);
+static void enable_account_cb (GtkCellRendererToggle *rend UNUSED, gchar* path,  gpointer data)
+{
+
+    GtkTreeIter iter;
+    GtkTreePath *treePath;
+    GtkTreeModel *model;
+    gboolean enable;
+    account_t* acc ;
+
+    // The IP2IP profile can't be disabled
+    if (g_strcasecmp (path, "0") == 0)
+        return;
+
+    // Get pointer on object
+    treePath = gtk_tree_path_new_from_string (path);
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (data));
+    gtk_tree_model_get_iter (model, &iter, treePath);
+    gtk_tree_model_get (model, &iter,
+                        COLUMN_ACCOUNT_ACTIVE, &enable,
+                        COLUMN_ACCOUNT_DATA, &acc,
+                        -1);
+
+    enable = !enable;
+
+    DEBUG ("Account is %d enabled", enable);
+    // Store value
+    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                        COLUMN_ACCOUNT_ACTIVE, enable,
+                        -1);
+
+    // Modify account state
+    gchar * registrationState;
+
+    if (enable == TRUE) {
+        registrationState = g_strdup ("true");
+    } else {
+        registrationState = g_strdup ("false");
+    }
+
+    DEBUG ("Replacing with %s", registrationState);
+    g_hash_table_replace (acc->properties , g_strdup (ACCOUNT_ENABLED), registrationState);
+
+    dbus_send_register (acc->accountID, enable);
 
 }
 
 /**
  * Move account in list depending on direction and selected account
  */
-static void account_move (gboolean moveUp, gpointer data) {
-
-	GtkTreeIter iter;
-	GtkTreeIter *iter2;
-	GtkTreeView *treeView;
-	GtkTreeModel *model;
-	GtkTreeSelection *selection;
-	GtkTreePath *treePath;
-	gchar *path;
-
-	// Get view, model and selection of codec store
-	treeView = GTK_TREE_VIEW (data);
-	model = gtk_tree_view_get_model (GTK_TREE_VIEW(treeView));
-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(treeView));
-
-	// Find selected iteration and create a copy
-	gtk_tree_selection_get_selected (GTK_TREE_SELECTION(selection), &model, &iter);
-	iter2 = gtk_tree_iter_copy (&iter);
-
-	// Find path of iteration
-	path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter);
-
-	// The first real account in the list can't move up because of the IP2IP account
-	// It can still move down though
-	if (g_strcasecmp (path, "1") == 0 && moveUp)
-		return;
-
-	treePath = gtk_tree_path_new_from_string(path);
-	gint *indices = gtk_tree_path_get_indices(treePath);
-	gint indice = indices[0];
-
-	// Depending on button direction get new path
-	if(moveUp)
-		gtk_tree_path_prev(treePath);
-	else
-		gtk_tree_path_next(treePath);
-	gtk_tree_model_get_iter(model, &iter, treePath);
-
-	// Swap iterations if valid
-	if(gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
-		gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
-
-	// Scroll to new position
-	gtk_tree_view_scroll_to_cell (treeView, treePath, NULL, FALSE, 0, 0);
-
-	// Free resources
-	gtk_tree_path_free(treePath);
-	gtk_tree_iter_free(iter2);
-	g_free(path);
-
-	// Perpetuate changes in account queue
-	if(moveUp)
-		account_list_move_up(indice);
-	else
-		account_list_move_down(indice);
-
-
-	// Set the order in the configuration file
-	dbus_set_accounts_order (account_list_get_ordered_list ());
+static void account_move (gboolean moveUp, gpointer data)
+{
+
+    GtkTreeIter iter;
+    GtkTreeIter *iter2;
+    GtkTreeView *treeView;
+    GtkTreeModel *model;
+    GtkTreeSelection *selection;
+    GtkTreePath *treePath;
+    gchar *path;
+
+    // Get view, model and selection of codec store
+    treeView = GTK_TREE_VIEW (data);
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeView));
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView));
+
+    // Find selected iteration and create a copy
+    gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter);
+    iter2 = gtk_tree_iter_copy (&iter);
+
+    // Find path of iteration
+    path = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL (model), &iter);
+
+    // The first real account in the list can't move up because of the IP2IP account
+    // It can still move down though
+    if (g_strcasecmp (path, "1") == 0 && moveUp)
+        return;
+
+    treePath = gtk_tree_path_new_from_string (path);
+    gint *indices = gtk_tree_path_get_indices (treePath);
+    gint indice = indices[0];
+
+    // Depending on button direction get new path
+    if (moveUp)
+        gtk_tree_path_prev (treePath);
+    else
+        gtk_tree_path_next (treePath);
+
+    gtk_tree_model_get_iter (model, &iter, treePath);
+
+    // Swap iterations if valid
+    if (gtk_list_store_iter_is_valid (GTK_LIST_STORE (model), &iter))
+        gtk_list_store_swap (GTK_LIST_STORE (model), &iter, iter2);
+
+    // Scroll to new position
+    gtk_tree_view_scroll_to_cell (treeView, treePath, NULL, FALSE, 0, 0);
+
+    // Free resources
+    gtk_tree_path_free (treePath);
+    gtk_tree_iter_free (iter2);
+    g_free (path);
+
+    // Perpetuate changes in account queue
+    if (moveUp)
+        account_list_move_up (indice);
+    else
+        account_list_move_down (indice);
+
+
+    // Set the order in the configuration file
+    dbus_set_accounts_order (account_list_get_ordered_list ());
 }
 
 /**
  * Called from move up account button signal
  */
-	static void
-account_move_up_cb(GtkButton *button UNUSED, gpointer data)
+static void
+account_move_up_cb (GtkButton *button UNUSED, gpointer data)
 {
-	// Change tree view ordering and get indice changed
-	account_move(TRUE, data);
+    // Change tree view ordering and get indice changed
+    account_move (TRUE, data);
 }
 
 /**
  * Called from move down account button signal
  */
-	static void
-account_move_down_cb(GtkButton *button UNUSED, gpointer data)
+static void
+account_move_down_cb (GtkButton *button UNUSED, gpointer data)
 {
-	// Change tree view ordering and get indice changed
-	account_move(FALSE, data);
+    // Change tree view ordering and get indice changed
+    account_move (FALSE, data);
 }
 
-	static void 
-help_contents_cb (GtkWidget * widget,
-		gpointer data UNUSED)
+static void
+help_contents_cb (GtkWidget * widget UNUSED,
+                  gpointer data UNUSED)
 {
-	GError *error = NULL;
+    GError *error = NULL;
 
-	//gboolean success = gtk_show_uri (NULL, "ghelp: sflphone.xml", GDK_CURRENT_TIME, &error);
-	gnome_help_display ("sflphone.xml", "accounts", &error);
+    gnome_help_display ("sflphone.xml", "accounts", &error);
 
-	if (error != NULL)
-	{    
-		g_warning ("%s", error->message);
+    if (error != NULL) {
+        g_warning ("%s", error->message);
 
-		g_error_free (error);
-	}    
+        g_error_free (error);
+    }
 }
 
-	static void
-close_dialog_cb (GtkWidget * widget,
-		gpointer data UNUSED)
+static void
+close_dialog_cb (GtkWidget * widget UNUSED,
+                 gpointer data UNUSED)
 {
-	gtk_dialog_response(GTK_DIALOG(accountListDialog), GTK_RESPONSE_ACCEPT);
+    gtk_dialog_response (GTK_DIALOG (accountListDialog), GTK_RESPONSE_ACCEPT);
 
 }
 
-void highlight_ip_profile (GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) {
-
-	GValue val;
-	account_t *current;
-
-	memset (&val, 0, sizeof(val));
-	gtk_tree_model_get_value(tree_model, iter, COLUMN_ACCOUNT_DATA, &val);
-	current = (account_t*) g_value_get_pointer(&val);
-
-	g_value_unset (&val);
-
-	if (current != NULL) {
+void highlight_ip_profile (GtkTreeViewColumn *col UNUSED, GtkCellRenderer *rend, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data UNUSED)
+{
 
-		// Make the first line appear differently
-		(g_strcasecmp (current->accountID, IP2IP) == 0) ? g_object_set (G_OBJECT (rend), "weight", PANGO_WEIGHT_THIN, 
-																					 "style", PANGO_STYLE_ITALIC, 
-																					 "stretch", PANGO_STRETCH_ULTRA_EXPANDED,
-																					 "scale", 0.95,
-																					 NULL) : 
-														g_object_set (G_OBJECT (rend), "weight", PANGO_WEIGHT_MEDIUM, 
-																					 "style", PANGO_STYLE_NORMAL, 
-																					 "stretch", PANGO_STRETCH_NORMAL,
-																					 "scale", 1.0,
-																					 NULL) ; 
-	}
+    GValue val;
+    account_t *current;
+
+    memset (&val, 0, sizeof (val));
+    gtk_tree_model_get_value (tree_model, iter, COLUMN_ACCOUNT_DATA, &val);
+    current = (account_t*) g_value_get_pointer (&val);
+
+    g_value_unset (&val);
+
+    if (current != NULL) {
+
+        // Make the first line appear differently
+        (g_strcasecmp (current->accountID, IP2IP) == 0) ? g_object_set (G_OBJECT (rend), "weight", PANGO_WEIGHT_THIN,
+                "style", PANGO_STYLE_ITALIC,
+                "stretch", PANGO_STRETCH_ULTRA_EXPANDED,
+                "scale", 0.95,
+                NULL) :
+        g_object_set (G_OBJECT (rend), "weight", PANGO_WEIGHT_MEDIUM,
+                      "style", PANGO_STYLE_NORMAL,
+                      "stretch", PANGO_STRETCH_NORMAL,
+                      "scale", 1.0,
+                      NULL) ;
+    }
 }
 
-void highlight_registration (GtkTreeViewColumn *col, GtkCellRenderer *rend, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) {
+void highlight_registration (GtkTreeViewColumn *col UNUSED, GtkCellRenderer *rend, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data UNUSED)
+{
 
-	GValue val;
-	account_t *current;
-	GdkColor green = {0, 255, 0, 0};
+    GValue val;
+    account_t *current;
 
-	memset (&val, 0, sizeof(val));
-	gtk_tree_model_get_value(tree_model, iter, COLUMN_ACCOUNT_DATA, &val);
-	current = (account_t*) g_value_get_pointer(&val);
+    memset (&val, 0, sizeof (val));
+    gtk_tree_model_get_value (tree_model, iter, COLUMN_ACCOUNT_DATA, &val);
+    current = (account_t*) g_value_get_pointer (&val);
 
-	g_value_unset (&val);
+    g_value_unset (&val);
 
-	if (current != NULL) {
-		if (g_strcasecmp (current->accountID, IP2IP) != 0) {
-			// Color the account state: green -> registered, otherwise red
-			(current->state == ACCOUNT_STATE_REGISTERED) ? g_object_set (G_OBJECT (rend), "foreground", "Dark Green", NULL) :
-													g_object_set (G_OBJECT (rend), "foreground", "Dark Red", NULL);
-		}
-		else 
-			g_object_set (G_OBJECT (rend), "foreground", "Black", NULL);
-	}
+    if (current != NULL) {
+        if (g_strcasecmp (current->accountID, IP2IP) != 0) {
+            // Color the account state: green -> registered, otherwise red
+            (current->state == ACCOUNT_STATE_REGISTERED) ? g_object_set (G_OBJECT (rend), "foreground", "Dark Green", NULL) :
+            g_object_set (G_OBJECT (rend), "foreground", "Dark Red", NULL);
+        } else
+            g_object_set (G_OBJECT (rend), "foreground", "Black", NULL);
+    }
 
 }
 
 /**
  * Account settings tab
  */
-GtkWidget* create_account_list(GtkDialog * dialog) {
-
-	GtkWidget *table, *scrolledWindow, *buttonBox;
-	GtkCellRenderer *renderer;
-	GtkTreeView * treeView;
-	GtkTreeViewColumn *treeViewColumn;
-	GtkTreeSelection *treeSelection;
-	GtkRequisition requisition;
-
-	selectedAccount = NULL;
-
-	table = gtk_table_new (1, 2, FALSE/* homogeneous */);
-	gtk_table_set_col_spacings(GTK_TABLE(table), 10); 
-	gtk_container_set_border_width (GTK_CONTAINER (table), 10);    
-
-	scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN);
-	gtk_table_attach (GTK_TABLE(table), scrolledWindow, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	accountStore = gtk_list_store_new(COLUMN_ACCOUNT_COUNT,
-			G_TYPE_STRING,  // Name
-			G_TYPE_STRING,  // Protocol
-			G_TYPE_STRING,  // Status
-			G_TYPE_BOOLEAN, // Enabled / Disabled
-			G_TYPE_POINTER  // Pointer to the Object
-			);
-
-	account_list_config_dialog_fill();
-
-	treeView = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL(accountStore)));
-	treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW (treeView));
-	g_signal_connect(G_OBJECT (treeSelection), "changed",
-			G_CALLBACK (select_account_cb),
-			accountStore);
-
-	renderer = gtk_cell_renderer_toggle_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes("Enabled", renderer, "active", COLUMN_ACCOUNT_ACTIVE , NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(treeView), treeViewColumn);
-	g_signal_connect (G_OBJECT(renderer) , "toggled" , G_CALLBACK (enable_account_cb), (gpointer)treeView );
-
-	// gtk_cell_renderer_toggle_set_activatable (renderer, FALSE); 
-
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes ("Alias",
-			renderer,
-			"markup", COLUMN_ACCOUNT_ALIAS,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
-
-	// A double click on the account line opens the window to edit the account
-	g_signal_connect( G_OBJECT( treeView ) , "row-activated" , G_CALLBACK( edit_account_cb ) , NULL );
-	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
-
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Protocol"),
-			renderer,
-			"markup", COLUMN_ACCOUNT_TYPE,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
-	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
-
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes (_("Status"),
-			renderer,
-			"markup", COLUMN_ACCOUNT_STATUS,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(treeView), treeViewColumn);
-	// Highlight IP profile
-	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
-	// Highlight account registration state 
-	gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_registration, NULL, NULL);
-
-	g_object_unref(G_OBJECT(accountStore));
-
-	gtk_container_add (GTK_CONTAINER(scrolledWindow), GTK_WIDGET (treeView));
-
-	/* The buttons to press! */    
-	buttonBox = gtk_vbutton_box_new();
-	gtk_box_set_spacing(GTK_BOX(buttonBox), 10);
-	gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_START);
-	gtk_table_attach (GTK_TABLE(table), buttonBox, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	accountMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
-	gtk_widget_set_sensitive(GTK_WIDGET(accountMoveUpButton), FALSE);
-	gtk_box_pack_start(GTK_BOX(buttonBox), accountMoveUpButton, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(accountMoveUpButton), "clicked", G_CALLBACK(account_move_up_cb), treeView);
-
-	accountMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
-	gtk_widget_set_sensitive(GTK_WIDGET(accountMoveDownButton), FALSE);
-	gtk_box_pack_start(GTK_BOX(buttonBox), accountMoveDownButton, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(accountMoveDownButton), "clicked", G_CALLBACK(account_move_down_cb), treeView);
-
-	addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
-	g_signal_connect_swapped(G_OBJECT(addButton), "clicked",
-			G_CALLBACK(add_account_cb), NULL);
-	gtk_box_pack_start(GTK_BOX(buttonBox), addButton, FALSE, FALSE, 0);
-
-	editButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
-	gtk_widget_set_sensitive(GTK_WIDGET(editButton), FALSE);    
-	g_signal_connect_swapped(G_OBJECT(editButton), "clicked",
-			G_CALLBACK(edit_account_cb), NULL);
-	gtk_box_pack_start(GTK_BOX(buttonBox), editButton, FALSE, FALSE, 0);
-
-	deleteButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
-	gtk_widget_set_sensitive(GTK_WIDGET(deleteButton), FALSE);    
-	g_signal_connect_swapped(G_OBJECT(deleteButton), "clicked",
-			G_CALLBACK(delete_account_cb), NULL);
-	gtk_box_pack_start(GTK_BOX(buttonBox), deleteButton, FALSE, FALSE, 0);
-
-	/* help and close buttons */    
-	GtkWidget * buttonHbox = gtk_hbutton_box_new();
-	gtk_table_attach(GTK_TABLE(table), buttonHbox, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
-
-	GtkWidget * helpButton = gtk_button_new_from_stock (GTK_STOCK_HELP);
-	g_signal_connect_swapped(G_OBJECT(helpButton), "clicked",
-			G_CALLBACK(help_contents_cb), NULL);
-	gtk_box_pack_start(GTK_BOX(buttonHbox), helpButton, FALSE, FALSE, 0);
-
-	GtkWidget * closeButton = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-	g_signal_connect_swapped(G_OBJECT(closeButton), "clicked",  G_CALLBACK(close_dialog_cb), NULL);
-	gtk_box_pack_start(GTK_BOX(buttonHbox), closeButton, FALSE, FALSE, 0);
-
-	gtk_widget_show_all(table);
-	// account_list_config_dialog_fill();
-
-	/* Resize the scrolledWindow for a better view */
-	gtk_widget_size_request(GTK_WIDGET(treeView), &requisition);
-	gtk_widget_set_size_request(GTK_WIDGET(scrolledWindow), requisition.width + 20, requisition.height);
-	GtkRequisition requisitionButton;
-	gtk_widget_size_request(GTK_WIDGET(deleteButton), &requisitionButton);
-	gtk_widget_set_size_request(GTK_WIDGET(closeButton), requisitionButton.width, -1);
-	gtk_widget_set_size_request(GTK_WIDGET(helpButton), requisitionButton.width, -1);    
-
-	gtk_widget_show_all(table);
-
-	return table;
+GtkWidget* create_account_list (GtkDialog * dialog UNUSED)
+{
+
+    GtkWidget *table, *scrolledWindow, *buttonBox;
+    GtkCellRenderer *renderer;
+    GtkTreeView * treeView;
+    GtkTreeViewColumn *treeViewColumn;
+    GtkTreeSelection *treeSelection;
+    GtkRequisition requisition;
+
+    selectedAccount = NULL;
+
+    table = gtk_table_new (1, 2, FALSE/* homogeneous */);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+
+    scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledWindow), GTK_SHADOW_IN);
+    gtk_table_attach (GTK_TABLE (table), scrolledWindow, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    accountStore = gtk_list_store_new (COLUMN_ACCOUNT_COUNT,
+                                       G_TYPE_STRING,  // Name
+                                       G_TYPE_STRING,  // Protocol
+                                       G_TYPE_STRING,  // Status
+                                       G_TYPE_BOOLEAN, // Enabled / Disabled
+                                       G_TYPE_POINTER  // Pointer to the Object
+                                      );
+
+    account_list_config_dialog_fill();
+
+    treeView = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (accountStore)));
+    treeSelection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeView));
+    g_signal_connect (G_OBJECT (treeSelection), "changed",
+                      G_CALLBACK (select_account_cb),
+                      accountStore);
+
+    renderer = gtk_cell_renderer_toggle_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes ("Enabled", renderer, "active", COLUMN_ACCOUNT_ACTIVE , NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), treeViewColumn);
+    g_signal_connect (G_OBJECT (renderer) , "toggled" , G_CALLBACK (enable_account_cb), (gpointer) treeView);
+
+    // gtk_cell_renderer_toggle_set_activatable (renderer, FALSE);
+
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes ("Alias",
+                     renderer,
+                     "markup", COLUMN_ACCOUNT_ALIAS,
+                     NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), treeViewColumn);
+
+    // A double click on the account line opens the window to edit the account
+    g_signal_connect (G_OBJECT (treeView) , "row-activated" , G_CALLBACK (edit_account_cb) , NULL);
+    gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
+
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Protocol"),
+                     renderer,
+                     "markup", COLUMN_ACCOUNT_TYPE,
+                     NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), treeViewColumn);
+    gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
+
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Status"),
+                     renderer,
+                     "markup", COLUMN_ACCOUNT_STATUS,
+                     NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeView), treeViewColumn);
+    // Highlight IP profile
+    gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_ip_profile, NULL, NULL);
+    // Highlight account registration state
+    gtk_tree_view_column_set_cell_data_func (treeViewColumn, renderer, highlight_registration, NULL, NULL);
+
+    g_object_unref (G_OBJECT (accountStore));
+
+    gtk_container_add (GTK_CONTAINER (scrolledWindow), GTK_WIDGET (treeView));
+
+    /* The buttons to press! */
+    buttonBox = gtk_vbutton_box_new();
+    gtk_box_set_spacing (GTK_BOX (buttonBox), 10);
+    gtk_button_box_set_layout (GTK_BUTTON_BOX (buttonBox), GTK_BUTTONBOX_START);
+    gtk_table_attach (GTK_TABLE (table), buttonBox, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    accountMoveUpButton = gtk_button_new_from_stock (GTK_STOCK_GO_UP);
+    gtk_widget_set_sensitive (GTK_WIDGET (accountMoveUpButton), FALSE);
+    gtk_box_pack_start (GTK_BOX (buttonBox), accountMoveUpButton, FALSE, FALSE, 0);
+    g_signal_connect (G_OBJECT (accountMoveUpButton), "clicked", G_CALLBACK (account_move_up_cb), treeView);
+
+    accountMoveDownButton = gtk_button_new_from_stock (GTK_STOCK_GO_DOWN);
+    gtk_widget_set_sensitive (GTK_WIDGET (accountMoveDownButton), FALSE);
+    gtk_box_pack_start (GTK_BOX (buttonBox), accountMoveDownButton, FALSE, FALSE, 0);
+    g_signal_connect (G_OBJECT (accountMoveDownButton), "clicked", G_CALLBACK (account_move_down_cb), treeView);
+
+    addButton = gtk_button_new_from_stock (GTK_STOCK_ADD);
+    g_signal_connect_swapped (G_OBJECT (addButton), "clicked",
+                              G_CALLBACK (add_account_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (buttonBox), addButton, FALSE, FALSE, 0);
+
+    editButton = gtk_button_new_from_stock (GTK_STOCK_EDIT);
+    gtk_widget_set_sensitive (GTK_WIDGET (editButton), FALSE);
+    g_signal_connect_swapped (G_OBJECT (editButton), "clicked",
+                              G_CALLBACK (edit_account_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (buttonBox), editButton, FALSE, FALSE, 0);
+
+    deleteButton = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+    gtk_widget_set_sensitive (GTK_WIDGET (deleteButton), FALSE);
+    g_signal_connect_swapped (G_OBJECT (deleteButton), "clicked",
+                              G_CALLBACK (delete_account_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (buttonBox), deleteButton, FALSE, FALSE, 0);
+
+    /* help and close buttons */
+    GtkWidget * buttonHbox = gtk_hbutton_box_new();
+    gtk_table_attach (GTK_TABLE (table), buttonHbox, 0, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
+
+    GtkWidget * helpButton = gtk_button_new_from_stock (GTK_STOCK_HELP);
+    g_signal_connect_swapped (G_OBJECT (helpButton), "clicked",
+                              G_CALLBACK (help_contents_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (buttonHbox), helpButton, FALSE, FALSE, 0);
+
+    GtkWidget * closeButton = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+    g_signal_connect_swapped (G_OBJECT (closeButton), "clicked",  G_CALLBACK (close_dialog_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (buttonHbox), closeButton, FALSE, FALSE, 0);
+
+    gtk_widget_show_all (table);
+    // account_list_config_dialog_fill();
+
+    /* Resize the scrolledWindow for a better view */
+    gtk_widget_size_request (GTK_WIDGET (treeView), &requisition);
+    gtk_widget_set_size_request (GTK_WIDGET (scrolledWindow), requisition.width + 20, requisition.height);
+    GtkRequisition requisitionButton;
+    gtk_widget_size_request (GTK_WIDGET (deleteButton), &requisitionButton);
+    gtk_widget_set_size_request (GTK_WIDGET (closeButton), requisitionButton.width, -1);
+    gtk_widget_set_size_request (GTK_WIDGET (helpButton), requisitionButton.width, -1);
+
+    gtk_widget_show_all (table);
+
+    return table;
 }
 
-	void
-show_account_list_config_dialog(void)
+void
+show_account_list_config_dialog (void)
 {
-	GtkWidget * accountFrame;
-	GtkWidget * tab;
-
-	accountListDialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Accounts"),
-				GTK_WINDOW(get_main_window()),
-				GTK_DIALOG_DESTROY_WITH_PARENT,
-				NULL));
-
-	/* Set window properties */
-	gtk_dialog_set_has_separator(accountListDialog, FALSE);
-	gtk_container_set_border_width(GTK_CONTAINER(accountListDialog), 0);
-	gtk_window_set_resizable(GTK_WINDOW(accountListDialog), FALSE);
-
-	gnome_main_section_new (_("Configured Accounts"), &accountFrame);
-	gtk_box_pack_start( GTK_BOX(accountListDialog->vbox ), accountFrame , TRUE, TRUE, 0);
-	gtk_widget_show(accountFrame);
-
-	/* Accounts tab */
-	tab = create_account_list(accountListDialog);
-	gtk_widget_show(tab);    
-	gtk_container_add(GTK_CONTAINER(accountFrame), tab);
-
-	/* Status bar for the account list */
-	status_bar = gtk_statusbar_new();
-	gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (status_bar), FALSE);    
-	gtk_widget_show(status_bar);
-	gtk_box_pack_start(GTK_BOX(accountListDialog->vbox ), status_bar, TRUE, TRUE, 0);
-
-	int number_accounts = account_list_get_registered_accounts ();
-	if (number_accounts) {
-		gchar * message = g_strdup_printf(n_("There is %d active account",
-					"There are %d active accounts", number_accounts),
-				number_accounts);
-		gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
-		g_free(message);
-	} else {
-		gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, _("You have no active account"));        
-	}
-
-	gtk_dialog_run(accountListDialog);
-
-	status_bar_display_account ();
-
-	gtk_widget_destroy(GTK_WIDGET(accountListDialog));
-
-	accountListDialog = NULL;
-
-	update_actions ();
-}
+    GtkWidget * accountFrame;
+    GtkWidget * tab;
 
+    accountListDialog = GTK_DIALOG (gtk_dialog_new_with_buttons (_ ("Accounts"),
+                                    GTK_WINDOW (get_main_window()),
+                                    GTK_DIALOG_DESTROY_WITH_PARENT,
+                                    NULL));
 
-/**
- * Delete an account
- */
-static void delete_account_cb (void) {
-	
-	if(selectedAccount != NULL) {
-		dbus_remove_account(selectedAccount->accountID);
-	}
-}
+    /* Set window properties */
+    gtk_dialog_set_has_separator (accountListDialog, FALSE);
+    gtk_container_set_border_width (GTK_CONTAINER (accountListDialog), 0);
+    gtk_window_set_resizable (GTK_WINDOW (accountListDialog), FALSE);
 
+    gnome_main_section_new (_ ("Configured Accounts"), &accountFrame);
+    gtk_box_pack_start (GTK_BOX (accountListDialog->vbox), accountFrame , TRUE, TRUE, 0);
+    gtk_widget_show (accountFrame);
 
-/**
- * Edit an account
- */
-static void edit_account_cb (void) {
+    /* Accounts tab */
+    tab = create_account_list (accountListDialog);
+    gtk_widget_show (tab);
+    gtk_container_add (GTK_CONTAINER (accountFrame), tab);
 
-	if(selectedAccount != NULL) {
-		show_account_window (selectedAccount);
-	} 
-}
+    /* Status bar for the account list */
+    status_bar = gtk_statusbar_new();
+    gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (status_bar), FALSE);
+    gtk_widget_show (status_bar);
+    gtk_box_pack_start (GTK_BOX (accountListDialog->vbox), status_bar, TRUE, TRUE, 0);
 
-/**
- * Add an account
- */
-static void add_account_cb (void) {
+    int number_accounts = account_list_get_registered_accounts ();
+
+    if (number_accounts) {
+        gchar * message = g_strdup_printf (n_ ("There is %d active account",
+                                               "There are %d active accounts", number_accounts),
+                                           number_accounts);
+        gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, message);
+        g_free (message);
+    } else {
+        gtk_statusbar_push (GTK_STATUSBAR (status_bar), CONTEXT_ID_REGISTRATION, _ ("You have no active account"));
+    }
+
+    gtk_dialog_run (accountListDialog);
 
-	show_account_window (NULL);
+    status_bar_display_account ();
+
+    gtk_widget_destroy (GTK_WIDGET (accountListDialog));
+
+    accountListDialog = NULL;
+
+    update_actions ();
 }
+
diff --git a/sflphone-client-gnome/src/config/accountlistconfigdialog.h b/sflphone-client-gnome/src/config/accountlistconfigdialog.h
index a1ec479f2b6d274d4b2d81b0cb5fba673e56c605..090d124962724c1104353bd724a1436f5daa0519 100644
--- a/sflphone-client-gnome/src/config/accountlistconfigdialog.h
+++ b/sflphone-client-gnome/src/config/accountlistconfigdialog.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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.
@@ -34,13 +34,7 @@
 
 #include <sflphone_const.h>
 
-void show_account_list_config_dialog(void);
-void account_list_config_dialog_fill(void);
-   
-static void delete_account_cb (void);
-
-static void add_account_cb (void);
-
-static void edit_account_cb (void);
+void show_account_list_config_dialog (void);
+void account_list_config_dialog_fill (void);
 
 #endif
diff --git a/sflphone-client-gnome/src/config/addressbook-config.c b/sflphone-client-gnome/src/config/addressbook-config.c
index 34a2d05583f31cab857c00a11cfdbb0f90253c28..7f0d2256b181db7e19a7e7dfd3cc9508078de522 100644
--- a/sflphone-client-gnome/src/config/addressbook-config.c
+++ b/sflphone-client-gnome/src/config/addressbook-config.c
@@ -29,6 +29,7 @@
  */
 
 #include "addressbook-config.h"
+#include "searchbar.h"
 #include <contacts/addressbook/eds.h>
 #include <string.h>
 #include <stdlib.h>
@@ -38,13 +39,12 @@ GtkWidget *book_tree_view;
 
 GtkWidget *photo, *cards_label, *scale_label, *scrolled_label, *scrolled_window, *scale_button, *business, *mobile, *home;
 
-enum
-{
+enum {
     COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME, COLUMN_BOOK_UID
 };
 
-    void
-addressbook_config_load_parameters(AddressBook_Config **settings)
+void
+addressbook_config_load_parameters (AddressBook_Config **settings)
 {
 
     GHashTable *_params = NULL;
@@ -56,143 +56,142 @@ addressbook_config_load_parameters(AddressBook_Config **settings)
     // Fetch the settings from D-Bus
     _params = (GHashTable*) dbus_get_addressbook_settings();
 
-    if (_params == NULL)
-    {
+    if (_params == NULL) {
+
+        DEBUG ("Addressbook: No parameters received, use default");
+
         _settings->enable = 1;
         _settings->max_results = 30;
         _settings->display_contact_photo = 0;
         _settings->search_phone_business = 1;
         _settings->search_phone_home = 1;
         _settings->search_phone_mobile = 1;
-    }
-    else
-    {
-        _settings->enable = (gint64) (g_hash_table_lookup (_params, 
-                    ADDRESSBOOK_ENABLE));
-        _settings->max_results = (gint64) (g_hash_table_lookup(_params,
-                    ADDRESSBOOK_MAX_RESULTS));
-        _settings->display_contact_photo = (gint64) (g_hash_table_lookup(_params,
-                    ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
-        _settings->search_phone_business = (gint64) (g_hash_table_lookup(_params,
-                    ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
-        _settings->search_phone_home = (gint64) (g_hash_table_lookup(_params,
-                    ADDRESSBOOK_DISPLAY_PHONE_HOME));
-        _settings->search_phone_mobile = (gint64) (g_hash_table_lookup(_params,
-                    ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
+
+    } else {
+        _settings->enable = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_ENABLE));
+        _settings->max_results = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_MAX_RESULTS));
+        _settings->display_contact_photo = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO));
+        _settings->search_phone_business = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS));
+        _settings->search_phone_home = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_HOME));
+        _settings->search_phone_mobile = (size_t) (g_hash_table_lookup (_params, ADDRESSBOOK_DISPLAY_PHONE_MOBILE));
     }
 
+    DEBUG ("Addressbook: Settings: enabled %d, max_result %d, photo %d, business %d, home %d, mobile %d",
+           _settings->enable, _settings->max_results, _settings->display_contact_photo,
+           _settings->search_phone_business, _settings->search_phone_home, _settings->search_phone_mobile);
+
     *settings = _settings;
 }
 
-    void
-addressbook_config_save_parameters(void)
+void
+addressbook_config_save_parameters (void)
 {
 
     GHashTable *params = NULL;
 
-    params = g_hash_table_new(NULL, g_str_equal);
-    g_hash_table_replace(params, (gpointer) ADDRESSBOOK_ENABLE,
-            (gpointer) addressbook_config->enable);
-    g_hash_table_replace(params, (gpointer) ADDRESSBOOK_MAX_RESULTS,
-            (gpointer) addressbook_config->max_results);
-    g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO,
-            (gpointer) addressbook_config->display_contact_photo);
-    g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS,
-            (gpointer) addressbook_config->search_phone_business);
-    g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME,
-            (gpointer) addressbook_config->search_phone_home);
-    g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE,
-            (gpointer) addressbook_config->search_phone_mobile);
-
-    dbus_set_addressbook_settings(params);
+    params = g_hash_table_new (NULL, g_str_equal);
+    g_hash_table_replace (params, (gpointer) ADDRESSBOOK_ENABLE,
+                          (gpointer) (size_t) addressbook_config->enable);
+    g_hash_table_replace (params, (gpointer) ADDRESSBOOK_MAX_RESULTS,
+                          (gpointer) (size_t) addressbook_config->max_results);
+    g_hash_table_replace (params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO,
+                          (gpointer) (size_t) addressbook_config->display_contact_photo);
+    g_hash_table_replace (params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS,
+                          (gpointer) (size_t) addressbook_config->search_phone_business);
+    g_hash_table_replace (params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME,
+                          (gpointer) (size_t) addressbook_config->search_phone_home);
+    g_hash_table_replace (params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE,
+                          (gpointer) (size_t) addressbook_config->search_phone_mobile);
+
+    dbus_set_addressbook_settings (params);
+
+    update_searchbar_addressbook_list();
 
     // Decrement the reference count
-    g_hash_table_unref(params);
+    g_hash_table_unref (params);
 }
 
 void
-enable_options(){
-
-    if (!addressbook_config->enable)
-    {
-        DEBUG("Disable addressbook options\n");
-        gtk_widget_set_sensitive(photo, FALSE);
-	gtk_widget_set_sensitive(scrolled_label, FALSE);
-	gtk_widget_set_sensitive(cards_label, FALSE);
-        gtk_widget_set_sensitive(scrolled_window, FALSE);
-        gtk_widget_set_sensitive(scale_button, FALSE);
-        gtk_widget_set_sensitive(scale_label, FALSE);
-	gtk_widget_set_sensitive(business, FALSE);
-        gtk_widget_set_sensitive(mobile, FALSE);
-        gtk_widget_set_sensitive(home, FALSE);
-	gtk_widget_set_sensitive(book_tree_view, FALSE);
-        
-	
-    }
-    else
-    {
-      DEBUG("Enable addressbook options\n");
-	gtk_widget_set_sensitive(photo, TRUE);
-	gtk_widget_set_sensitive(scrolled_label, TRUE);
-	gtk_widget_set_sensitive(cards_label, TRUE);
-        gtk_widget_set_sensitive(scrolled_window, TRUE);
-        gtk_widget_set_sensitive(scale_button, TRUE);
-	gtk_widget_set_sensitive(scale_label, TRUE);
-	gtk_widget_set_sensitive(business, TRUE);
-        gtk_widget_set_sensitive(mobile, TRUE);
-        gtk_widget_set_sensitive(home, TRUE);
-	gtk_widget_set_sensitive(book_tree_view, TRUE);
+enable_options()
+{
+
+    if (!addressbook_config->enable) {
+        DEBUG ("Disable addressbook options\n");
+        gtk_widget_set_sensitive (photo, FALSE);
+        gtk_widget_set_sensitive (scrolled_label, FALSE);
+        gtk_widget_set_sensitive (cards_label, FALSE);
+        gtk_widget_set_sensitive (scrolled_window, FALSE);
+        gtk_widget_set_sensitive (scale_button, FALSE);
+        gtk_widget_set_sensitive (scale_label, FALSE);
+        gtk_widget_set_sensitive (business, FALSE);
+        gtk_widget_set_sensitive (mobile, FALSE);
+        gtk_widget_set_sensitive (home, FALSE);
+        gtk_widget_set_sensitive (book_tree_view, FALSE);
+
+
+    } else {
+        DEBUG ("Enable addressbook options\n");
+        gtk_widget_set_sensitive (photo, TRUE);
+        gtk_widget_set_sensitive (scrolled_label, TRUE);
+        gtk_widget_set_sensitive (cards_label, TRUE);
+        gtk_widget_set_sensitive (scrolled_window, TRUE);
+        gtk_widget_set_sensitive (scale_button, TRUE);
+        gtk_widget_set_sensitive (scale_label, TRUE);
+        gtk_widget_set_sensitive (business, TRUE);
+        gtk_widget_set_sensitive (mobile, TRUE);
+        gtk_widget_set_sensitive (home, TRUE);
+        gtk_widget_set_sensitive (book_tree_view, TRUE);
     }
 }
 
-    static void
+static void
 enable_cb (GtkWidget *widget)
 {
 
     addressbook_config->enable
-        = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
 
     enable_options();
 
-    
+
 }
 
-    static void
+static void
 max_results_cb (GtkSpinButton *button)
 {
-    addressbook_config->max_results = gtk_spin_button_get_value_as_int(button);
+    addressbook_config->max_results = gtk_spin_button_get_value_as_int (button);
 }
 
-    static void
-display_contact_photo_cb(GtkWidget *widget)
+static void
+display_contact_photo_cb (GtkWidget *widget)
 {
 
     addressbook_config->display_contact_photo
-        = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
 }
 
-    static void
-search_phone_business_cb(GtkWidget *widget)
+static void
+search_phone_business_cb (GtkWidget *widget)
 {
 
     addressbook_config->search_phone_business
-        = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
 }
 
-    static void
-search_phone_home_cb(GtkWidget *widget)
+static void
+search_phone_home_cb (GtkWidget *widget)
 {
 
-    addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active(
-            GTK_TOGGLE_BUTTON(widget));
+    addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active (
+                                                GTK_TOGGLE_BUTTON (widget));
 }
 
-    static void
-search_phone_mobile_cb(GtkWidget *widget)
+static void
+search_phone_mobile_cb (GtkWidget *widget)
 {
 
     addressbook_config->search_phone_mobile
-        = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+    = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
 }
 
 /**
@@ -200,8 +199,8 @@ search_phone_mobile_cb(GtkWidget *widget)
  * and in configuration files
  */
 static void
-addressbook_config_book_active_toggled(
-        GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data)
+addressbook_config_book_active_toggled (
+    GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data)
 {
     GtkTreeIter iter;
     GtkTreePath *treePath;
@@ -211,66 +210,64 @@ addressbook_config_book_active_toggled(
     gchar* uid;
 
     // Get path of clicked book active toggle box
-    treePath = gtk_tree_path_new_from_string(path);
-    model = gtk_tree_view_get_model(GTK_TREE_VIEW(data));
-    gtk_tree_model_get_iter(model, &iter, treePath);
+    treePath = gtk_tree_path_new_from_string (path);
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (data));
+    gtk_tree_model_get_iter (model, &iter, treePath);
 
     // Get active value  at iteration
-    gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active,
-            COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1);
+    gtk_tree_model_get (model, &iter, COLUMN_BOOK_ACTIVE, &active,
+                        COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1);
 
     // Toggle active value
     active = !active;
 
     // Store value
-    gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_BOOK_ACTIVE, active, -1);
+    gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_BOOK_ACTIVE, active, -1);
 
-    gtk_tree_path_free(treePath);
+    gtk_tree_path_free (treePath);
 
     // Update current memory stored books data
-    books_get_book_data_by_uid(uid)->active = active;
+    books_get_book_data_by_uid (uid)->active = active;
 
     // Save data
 
     gboolean valid;
 
     // Initiate double array char list for one string
-    const gchar** list = (void*) malloc(sizeof(void*));
+    const gchar** list = (void*) malloc (sizeof (void*));
     int c = 0;
 
     /* Get the first iter in the list */
-    valid = gtk_tree_model_get_iter_first(model, &iter);
+    valid = gtk_tree_model_get_iter_first (model, &iter);
 
-    while (valid)
-    {
+    while (valid) {
         // Get active value at iteration
-        gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active,
-                COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1);
+        gtk_tree_model_get (model, &iter, COLUMN_BOOK_ACTIVE, &active,
+                            COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1);
 
-        if (active)
-        {
+        if (active) {
             // Reallocate memory each time
             if (c != 0)
-                list = (void*) realloc(list, (c + 1) * sizeof(void*));
+                list = (void*) realloc (list, (c + 1) * sizeof (void*));
 
-            *(list + c) = uid;
+            * (list + c) = uid;
             c++;
         }
 
-        valid = gtk_tree_model_iter_next(model, &iter);
+        valid = gtk_tree_model_iter_next (model, &iter);
     }
 
     // Allocate NULL array at the end for Dbus
-    list = (void*) realloc(list, (c + 1) * sizeof(void*));
-    *(list + c) = NULL;
+    list = (void*) realloc (list, (c + 1) * sizeof (void*));
+    * (list + c) = NULL;
 
     // Call daemon to store in config file
-    dbus_set_addressbook_list(list);
+    dbus_set_addressbook_list (list);
 
-    free(list);
+    free (list);
 }
 
-    static void
+static void
 addressbook_config_fill_book_list()
 {
     GtkTreeIter list_store_iterator;
@@ -280,28 +277,27 @@ addressbook_config_fill_book_list()
     GSList *books_data = addressbook_get_books_data();
 
     // Get model of view and clear it
-    store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view)));
-    gtk_list_store_clear(store);
+    store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (book_tree_view)));
+    gtk_list_store_clear (store);
 
     // Populate window
     for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
-            = book_list_iterator->next)
-    {
+            = book_list_iterator->next) {
         book_data = (book_data_t *) book_list_iterator->data;
-        gtk_list_store_append(store, &list_store_iterator);
-        gtk_list_store_set(store, &list_store_iterator, COLUMN_BOOK_ACTIVE,
-                book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME,
-                book_data->name, -1);
+        gtk_list_store_append (store, &list_store_iterator);
+        gtk_list_store_set (store, &list_store_iterator, COLUMN_BOOK_ACTIVE,
+                            book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME,
+                            book_data->name, -1);
     }
 
-    store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view)));
+    store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (book_tree_view)));
 }
 
-    GtkWidget*
+GtkWidget*
 create_addressbook_settings()
 {
 
-    GtkWidget *ret, *result_frame, *table, *value, *label, *item;
+    GtkWidget *ret, *result_frame, *table, *value, *item;
 
     GtkListStore *store;
     GtkCellRenderer *renderer;
@@ -309,140 +305,140 @@ create_addressbook_settings()
     GtkTreeViewColumn *tree_view_column;
 
     // Load the user value
-    addressbook_config_load_parameters(&addressbook_config);
+    addressbook_config_load_parameters (&addressbook_config);
 
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
 
-    gnome_main_section_new_with_table (_("General"), &result_frame, &table, 3, 3);
-    gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0);
+    gnome_main_section_new_with_table (_ ("General"), &result_frame, &table, 3, 3);
+    gtk_box_pack_start (GTK_BOX (ret), result_frame, FALSE, FALSE, 0);
     // gtk_widget_show (result_frame);
 
 
     // PHOTO DISPLAY
-    item = gtk_check_button_new_with_mnemonic( _("_Use Evolution address books"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->enable);
-    g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (enable_cb), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    item = gtk_check_button_new_with_mnemonic (_ ("_Use Evolution address books"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (item), addressbook_config->enable);
+    g_signal_connect (G_OBJECT (item) , "clicked" , G_CALLBACK (enable_cb), NULL);
+    gtk_table_attach (GTK_TABLE (table), item, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     // SCALE BUTTON - NUMBER OF RESULTS
-    scale_button = gtk_hbox_new(FALSE, 0);
-    scale_label = gtk_label_new (_("Download limit :"));
-    gtk_box_pack_start(GTK_BOX(scale_button),scale_label,FALSE,FALSE,0);
-    value = gtk_spin_button_new_with_range(1, 500, 1);
+    scale_button = gtk_hbox_new (FALSE, 0);
+    scale_label = gtk_label_new (_ ("Download limit :"));
+    gtk_box_pack_start (GTK_BOX (scale_button),scale_label,FALSE,FALSE,0);
+    value = gtk_spin_button_new_with_range (1, 500, 1);
     gtk_label_set_mnemonic_widget (GTK_LABEL (scale_label), value);
-    gtk_spin_button_set_value (GTK_SPIN_BUTTON( value ) , addressbook_config->max_results);
-    g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL );
-    gtk_box_pack_start(GTK_BOX(scale_button),value,TRUE,TRUE,10);
-    gtk_table_attach ( GTK_TABLE( table ), scale_button, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0);
-    cards_label = gtk_label_new(_("cards"));
-    gtk_table_attach( GTK_TABLE(table), cards_label, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_show_all(scale_button);
-    
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (value) , addressbook_config->max_results);
+    g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK (max_results_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (scale_button),value,TRUE,TRUE,10);
+    gtk_table_attach (GTK_TABLE (table), scale_button, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0);
+    cards_label = gtk_label_new (_ ("cards"));
+    gtk_table_attach (GTK_TABLE (table), cards_label, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_show_all (scale_button);
+
 
     // PHOTO DISPLAY
-    photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo);
-    g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    
+    photo = gtk_check_button_new_with_mnemonic (_ ("_Display contact photo if available"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (photo), addressbook_config->display_contact_photo);
+    g_signal_connect (G_OBJECT (photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL);
+    gtk_table_attach (GTK_TABLE (table), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
 
 
     // Fields
-    gnome_main_section_new_with_table (_("Fields from Evolution's address books"), &result_frame, &table, 1, 3);
-    gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0);
+    gnome_main_section_new_with_table (_ ("Fields from Evolution's address books"), &result_frame, &table, 1, 3);
+    gtk_box_pack_start (GTK_BOX (ret), result_frame, FALSE, FALSE, 0);
     // gtk_widget_show (result_frame);
 
-    business = gtk_check_button_new_with_mnemonic( _("_Work"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(business), addressbook_config->search_phone_business);
-    g_signal_connect (G_OBJECT(business) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL);
-    gtk_table_attach ( GTK_TABLE( table ), business, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive(business, FALSE);
+    business = gtk_check_button_new_with_mnemonic (_ ("_Work"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (business), addressbook_config->search_phone_business);
+    g_signal_connect (G_OBJECT (business) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL);
+    gtk_table_attach (GTK_TABLE (table), business, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (business, FALSE);
+
+    home = gtk_check_button_new_with_mnemonic (_ ("_Home"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (home), addressbook_config->search_phone_home);
+    g_signal_connect (G_OBJECT (home) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL);
+    gtk_table_attach (GTK_TABLE (table), home, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (home, FALSE);
 
-    home = gtk_check_button_new_with_mnemonic( _("_Home"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(home), addressbook_config->search_phone_home);
-    g_signal_connect (G_OBJECT(home) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL);
-    gtk_table_attach ( GTK_TABLE( table ), home, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive(home, FALSE);
+    mobile = gtk_check_button_new_with_mnemonic (_ ("_Mobile"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mobile), addressbook_config->search_phone_mobile);
+    g_signal_connect (G_OBJECT (mobile) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL);
+    gtk_table_attach (GTK_TABLE (table), mobile, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-    mobile = gtk_check_button_new_with_mnemonic( _("_Mobile"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(mobile), addressbook_config->search_phone_mobile);
-    g_signal_connect (G_OBJECT(mobile) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL);
-    gtk_table_attach ( GTK_TABLE( table ), mobile, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    
 
     // Address Book
-    gnome_main_section_new_with_table (_("Address Books"), &result_frame, &table, 2, 3);
-    gtk_box_pack_start(GTK_BOX(ret), result_frame, TRUE, TRUE, 0);
+    gnome_main_section_new_with_table (_ ("Address Books"), &result_frame, &table, 2, 3);
+    gtk_box_pack_start (GTK_BOX (ret), result_frame, TRUE, TRUE, 0);
     gtk_widget_show (result_frame);
 
-    scrolled_label = gtk_label_new (_("Select which Evolution address books to use"));
-    gtk_misc_set_alignment(GTK_MISC(scrolled_label), 0.00, 0.2);
-    
-    gtk_table_attach ( GTK_TABLE( table ), scrolled_label, 1, 4, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive(scrolled_label, FALSE);
+    scrolled_label = gtk_label_new (_ ("Select which Evolution address books to use"));
+    gtk_misc_set_alignment (GTK_MISC (scrolled_label), 0.00, 0.2);
+
+    gtk_table_attach (GTK_TABLE (table), scrolled_label, 1, 4, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (scrolled_label, FALSE);
 
-    scrolled_window = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN);
+    scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
 
-    gtk_table_attach ( GTK_TABLE( table ), scrolled_window, 1, 4, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_table_attach (GTK_TABLE (table), scrolled_window, 1, 4, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
 
 
-    store = gtk_list_store_new(3,
-            G_TYPE_BOOLEAN,             // Active
-            G_TYPE_STRING,             // uid
-            G_TYPE_STRING              // Name
-            );
+    store = gtk_list_store_new (3,
+                                G_TYPE_BOOLEAN,             // Active
+                                G_TYPE_STRING,             // uid
+                                G_TYPE_STRING              // Name
+                               );
 
     // Create tree view with list store
-    book_tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+    book_tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
 
     // Get tree selection manager
-    tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(book_tree_view));
+    tree_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (book_tree_view));
 
     // Active column
     renderer = gtk_cell_renderer_toggle_new();
-    tree_view_column = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column);
+    tree_view_column = gtk_tree_view_column_new_with_attributes ("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (book_tree_view), tree_view_column);
 
     // Toggle active property on clicked
-    g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(addressbook_config_book_active_toggled), (gpointer)book_tree_view);
+    g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (addressbook_config_book_active_toggled), (gpointer) book_tree_view);
 
     // Name column
     renderer = gtk_cell_renderer_text_new();
-    tree_view_column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL);
-    gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column);
+    tree_view_column = gtk_tree_view_column_new_with_attributes (_ ("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (book_tree_view), tree_view_column);
 
-    g_object_unref(G_OBJECT(store));
-    gtk_container_add(GTK_CONTAINER(scrolled_window), book_tree_view);
+    g_object_unref (G_OBJECT (store));
+    gtk_container_add (GTK_CONTAINER (scrolled_window), book_tree_view);
 
     addressbook_config_fill_book_list();
 
-    gtk_widget_show_all(ret);
+    gtk_widget_show_all (ret);
 
     enable_options();
 
     return ret;
 }
 
-    gboolean
-addressbook_display(AddressBook_Config *settings, const gchar *field)
+gboolean
+addressbook_display (AddressBook_Config *settings, const gchar *field)
 {
 
     gboolean display = FALSE;
 
-    if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0)
+    if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0)
         display = (settings->display_contact_photo == 1) ? TRUE : FALSE;
 
-    else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0)
+    else if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0)
         display = (settings->search_phone_business == 1) ? TRUE : FALSE;
 
-    else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0)
+    else if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0)
         display = (settings->search_phone_home == 1) ? TRUE : FALSE;
 
-    else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0)
+    else if (g_strcasecmp (field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0)
         display = (settings->search_phone_mobile == 1) ? TRUE : FALSE;
 
     else
diff --git a/sflphone-client-gnome/src/config/addressbook-config.h b/sflphone-client-gnome/src/config/addressbook-config.h
index fb419e876db7d59fd59f0de69909211ccff7078e..cd03bba833a9da0249424b49d91800b00bfd6eac 100644
--- a/sflphone-client-gnome/src/config/addressbook-config.h
+++ b/sflphone-client-gnome/src/config/addressbook-config.h
@@ -46,23 +46,22 @@ G_BEGIN_DECLS
 #define ADDRESSBOOK_DISPLAY_PHONE_HOME       "ADDRESSBOOK_DISPLAY_PHONE_HOME"
 #define ADDRESSBOOK_DISPLAY_PHONE_MOBILE     "ADDRESSBOOK_DISPLAY_PHONE_MOBILE"
 
-typedef struct _AddressBook_Config
-{
-	// gint64: a signed integer guaranteed to be 64 bits on all platforms
-	// To print or scan values of this type, use G_GINT64_MODIFIER and/or G_GINT64_FORMAT
-    gint64 enable;
-    gint64 max_results;
-    gint64 display_contact_photo;
-    gint64 search_phone_home;
-    gint64 search_phone_business;
-    gint64 search_phone_mobile;
+typedef struct _AddressBook_Config {
+    // gint64: a signed integer guaranteed to be 64 bits on all platforms
+    // To print or scan values of this type, use G_GINT64_MODIFIER and/or G_GINT64_FORMAT
+    gint enable;
+    gint max_results;
+    gint display_contact_photo;
+    gint search_phone_home;
+    gint search_phone_business;
+    gint search_phone_mobile;
 } AddressBook_Config;
 
 /**
  * Save the parameters through D-BUS
  */
 void
-addressbook_config_save_parameters(void);
+addressbook_config_save_parameters (void);
 
 /**
  * Initialize the address book structure, and retrieve the saved parameters through D-Bus
@@ -70,10 +69,10 @@ addressbook_config_save_parameters(void);
  * @param settings  The addressbook structure
  */
 void
-addressbook_config_load_parameters(AddressBook_Config **settings);
+addressbook_config_load_parameters (AddressBook_Config **settings);
 
 gboolean
-addressbook_display(AddressBook_Config *settings, const gchar *field);
+addressbook_display (AddressBook_Config *settings, const gchar *field);
 
 GtkWidget*
 create_addressbook_settings();
diff --git a/sflphone-client-gnome/src/config/assistant.c b/sflphone-client-gnome/src/config/assistant.c
index 7b5c342a81312a6c0b292aa3bdcd9511a980de53..71d3d654407f346ab3b413d15416179b99faefa0 100644
--- a/sflphone-client-gnome/src/config/assistant.c
+++ b/sflphone-client-gnome/src/config/assistant.c
@@ -54,25 +54,26 @@ char message[1024];
 /**
  * Forward function
  */
-static gint forward_page_func( gint current_page , gpointer data );
+static gint forward_page_func (gint current_page , gpointer data);
 
 /**
  * Page template
  */
-static GtkWidget* create_vbox(GtkAssistantPageType type, const gchar *title, const gchar *section);
-void prefill_sip(void) ;
-
-void set_account_type( GtkWidget* widget , gpointer data UNUSED ) {
-	if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( widget )) ){
-		account_type = _SIP;
-	}else{
-		account_type = _IAX ;
-	}
+static GtkWidget* create_vbox (GtkAssistantPageType type, const gchar *title, const gchar *section);
+void prefill_sip (void) ;
+
+void set_account_type (GtkWidget* widget , gpointer data UNUSED)
+{
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+        account_type = _SIP;
+    } else {
+        account_type = _IAX ;
+    }
 }
 
-static void show_password_cb (GtkWidget *widget, gpointer data)
+static void show_password_cb (GtkWidget *widget UNUSED, gpointer data)
 {
-	gtk_entry_set_visibility (GTK_ENTRY (data), !gtk_entry_get_visibility (GTK_ENTRY (data)));
+    gtk_entry_set_visibility (GTK_ENTRY (data), !gtk_entry_get_visibility (GTK_ENTRY (data)));
 }
 
 
@@ -80,36 +81,38 @@ static void show_password_cb (GtkWidget *widget, gpointer data)
  * Fills string message with the final message of account registration
  * with alias, server and username specified.
  */
-void getMessageSummary( char * message , const gchar * alias, const gchar * server, const gchar * username, const gboolean zrtp) 
+void getMessageSummary (char * message , const gchar * alias, const gchar * server, const gchar * username, const gboolean zrtp)
 {
-	char var[64];
-	sprintf( message, _("This assistant is now finished."));
-	strcat( message, "\n" );
-	strcat( message, _("You can at any time check your registration state or modify your accounts parameters in the Options/Accounts window."));
-	strcat( message, "\n\n");
-	
-	strcat( message, _("Alias"));
-	sprintf( var, " :   %s\n", alias);
-	strcat( message, var);
-	
-	strcat( message, _("Server"));
-	sprintf( var, " :   %s\n", server);
-	strcat( message, var);
-	
-	strcat( message, _("Username"));
-	sprintf( var, " :   %s\n", username);
-	strcat( message, var);
-	
-    strcat( message, _("Security: "));
-	if (zrtp) {
-	    strcat( message, _("SRTP/ZRTP draft-zimmermann"));
-	} else {
-	    strcat( message, _("None"));
-	}
+    char var[64];
+    sprintf (message, _ ("This assistant is now finished."));
+    strcat (message, "\n");
+    strcat (message, _ ("You can at any time check your registration state or modify your accounts parameters in the Options/Accounts window."));
+    strcat (message, "\n\n");
+
+    strcat (message, _ ("Alias"));
+    sprintf (var, " :   %s\n", alias);
+    strcat (message, var);
+
+    strcat (message, _ ("Server"));
+    sprintf (var, " :   %s\n", server);
+    strcat (message, var);
+
+    strcat (message, _ ("Username"));
+    sprintf (var, " :   %s\n", username);
+    strcat (message, var);
+
+    strcat (message, _ ("Security: "));
+
+    if (zrtp) {
+        strcat (message, _ ("SRTP/ZRTP draft-zimmermann"));
+    } else {
+        strcat (message, _ ("None"));
+    }
 }
 
-void set_sflphone_org( GtkWidget* widget , gpointer data UNUSED ) {
-	use_sflphone_org = (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))?1:0) ;
+void set_sflphone_org (GtkWidget* widget , gpointer data UNUSED)
+{
+    use_sflphone_org = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) ?1:0) ;
 }
 
 
@@ -118,9 +121,11 @@ void set_sflphone_org( GtkWidget* widget , gpointer data UNUSED ) {
  * Callback when the close button of the dialog is clicked
  * Action : close the assistant widget and get back to sflphone main window
  */
-static void close_callback( void ) {
-	gtk_widget_destroy(wiz->assistant);
-	g_free(wiz); wiz = NULL;
+static void close_callback (void)
+{
+    gtk_widget_destroy (wiz->assistant);
+    g_free (wiz);
+    wiz = NULL;
 
     status_bar_display_account ();
 }
@@ -129,10 +134,12 @@ static void close_callback( void ) {
  * Callback when the cancel button of the dialog is clicked
  * Action : close the assistant widget and get back to sflphone main window
  */
-static void cancel_callback( void ) {
-	gtk_widget_destroy(wiz->assistant);
-	g_free(wiz); wiz = NULL;
-    
+static void cancel_callback (void)
+{
+    gtk_widget_destroy (wiz->assistant);
+    g_free (wiz);
+    wiz = NULL;
+
     status_bar_display_account ();
 }
 
@@ -140,536 +147,562 @@ static void cancel_callback( void ) {
  * Callback when the button apply is clicked
  * Action : Set the account parameters with the entries values and called dbus_add_account
  */
-static void sip_apply_callback( void ) {
-	if(use_sflphone_org){
-		prefill_sip();
-		account_type = _SIP;
-	}
-	if( account_type == _SIP ) {
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ALIAS), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_alias))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ENABLED), g_strdup("true"));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_voicemail))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_TYPE), g_strdup("SIP"));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_HOSTNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_server))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_PASSWORD), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_password))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_USERNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->sip_username))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_SIP_STUN_ENABLED), g_strdup((gchar *)(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wiz->enable))? "true":"false")));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_SIP_STUN_SERVER), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->addr))));
-
-        if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wiz->zrtp_enable)) == TRUE) {
-        	    g_hash_table_insert(current->properties, g_strdup(ACCOUNT_SRTP_ENABLED), g_strdup((gchar *)"true"));
-        	    g_hash_table_insert(current->properties, g_strdup(ACCOUNT_KEY_EXCHANGE), g_strdup((gchar *)ZRTP));
-        	    g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ZRTP_DISPLAY_SAS), g_strdup((gchar *)"true"));
-        	    g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ZRTP_NOT_SUPP_WARNING), g_strdup((gchar *)"true"));
-        	    g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ZRTP_HELLO_HASH), g_strdup((gchar *)"true"));
-        	    g_hash_table_insert(current->properties, g_strdup(ACCOUNT_DISPLAY_SAS_ONCE), g_strdup((gchar *)"false"));
+static void sip_apply_callback (void)
+{
+    if (use_sflphone_org) {
+        prefill_sip();
+        account_type = _SIP;
+    }
+
+    if (account_type == _SIP) {
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ALIAS), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->sip_alias))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ENABLED), g_strdup ("true"));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_MAILBOX), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->sip_voicemail))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_TYPE), g_strdup ("SIP"));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_HOSTNAME), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->sip_server))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_PASSWORD), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->sip_password))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_USERNAME), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->sip_username))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_SIP_STUN_ENABLED), g_strdup ( (gchar *) (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (wiz->enable)) ? "true":"false")));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_SIP_STUN_SERVER), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->addr))));
+
+        if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (wiz->zrtp_enable)) == TRUE) {
+            g_hash_table_insert (current->properties, g_strdup (ACCOUNT_SRTP_ENABLED), g_strdup ( (gchar *) "true"));
+            g_hash_table_insert (current->properties, g_strdup (ACCOUNT_KEY_EXCHANGE), g_strdup ( (gchar *) ZRTP));
+            g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ZRTP_DISPLAY_SAS), g_strdup ( (gchar *) "true"));
+            g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ZRTP_NOT_SUPP_WARNING), g_strdup ( (gchar *) "true"));
+            g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ZRTP_HELLO_HASH), g_strdup ( (gchar *) "true"));
+            g_hash_table_insert (current->properties, g_strdup (ACCOUNT_DISPLAY_SAS_ONCE), g_strdup ( (gchar *) "false"));
         }
 
 
-	// Add default interface info
-	gchar ** iface_list = NULL;
-	iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
+        // Add default interface info
+        gchar ** iface_list = NULL;
+        iface_list = (gchar**) dbus_get_all_ip_interface_by_name();
         gchar ** iface = NULL;
 
-	// select the first interface available
-	iface = iface_list;
-	DEBUG("Selected interface %s", *iface);
+        // select the first interface available
+        iface = iface_list;
+        DEBUG ("Selected interface %s", *iface);
 
-	g_hash_table_insert(current->properties, g_strdup(LOCAL_INTERFACE), g_strdup((gchar *)*iface));
+        g_hash_table_insert (current->properties, g_strdup (LOCAL_INTERFACE), g_strdup ( (gchar *) *iface));
 
-	g_hash_table_insert(current->properties, g_strdup(PUBLISHED_ADDRESS), g_strdup((gchar *)*iface));
+        g_hash_table_insert (current->properties, g_strdup (PUBLISHED_ADDRESS), g_strdup ( (gchar *) *iface));
 
-	dbus_add_account( current );
-	getMessageSummary(message, 
-			  gtk_entry_get_text (GTK_ENTRY(wiz->sip_alias)),
-			  gtk_entry_get_text (GTK_ENTRY(wiz->sip_server)),
-			  gtk_entry_get_text (GTK_ENTRY(wiz->sip_username)),
-			  (gboolean)(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wiz->zrtp_enable)))
-			  );
+        dbus_add_account (current);
+        getMessageSummary (message,
+                           gtk_entry_get_text (GTK_ENTRY (wiz->sip_alias)),
+                           gtk_entry_get_text (GTK_ENTRY (wiz->sip_server)),
+                           gtk_entry_get_text (GTK_ENTRY (wiz->sip_username)),
+                           (gboolean) (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (wiz->zrtp_enable)))
+                          );
 
-	gtk_label_set_text (GTK_LABEL(wiz->label_summary), message);
-	}
+        gtk_label_set_text (GTK_LABEL (wiz->label_summary), message);
+    }
 }
 
 /**
  * Callback when the button apply is clicked
  * Action : Set the account parameters with the entries values and called dbus_add_account
  */
-static void iax_apply_callback( void ) {
-	if( account_type == _IAX) {
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ALIAS), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_alias))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_ENABLED), g_strdup("true"));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_MAILBOX), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_voicemail))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_TYPE), g_strdup("IAX"));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_USERNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_username))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_HOSTNAME), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_server))));
-		g_hash_table_insert(current->properties, g_strdup(ACCOUNT_PASSWORD), g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(wiz->iax_password))));
-
-		dbus_add_account( current );
-		getMessageSummary(message, 
-			gtk_entry_get_text (GTK_ENTRY(wiz->iax_alias)),
-			gtk_entry_get_text (GTK_ENTRY(wiz->iax_server)),
-			gtk_entry_get_text (GTK_ENTRY(wiz->iax_username)),
-			FALSE
-		) ;
-
-		gtk_label_set_text (GTK_LABEL(wiz->label_summary), message);
-	}
+static void iax_apply_callback (void)
+{
+    if (account_type == _IAX) {
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ALIAS), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->iax_alias))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_ENABLED), g_strdup ("true"));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_MAILBOX), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->iax_voicemail))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_TYPE), g_strdup ("IAX"));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_USERNAME), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->iax_username))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_HOSTNAME), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->iax_server))));
+        g_hash_table_insert (current->properties, g_strdup (ACCOUNT_PASSWORD), g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (wiz->iax_password))));
+
+        dbus_add_account (current);
+        getMessageSummary (message,
+                           gtk_entry_get_text (GTK_ENTRY (wiz->iax_alias)),
+                           gtk_entry_get_text (GTK_ENTRY (wiz->iax_server)),
+                           gtk_entry_get_text (GTK_ENTRY (wiz->iax_username)),
+                           FALSE
+                          ) ;
+
+        gtk_label_set_text (GTK_LABEL (wiz->label_summary), message);
+    }
 }
 
-void enable_stun( GtkWidget* widget ) {
-	gtk_widget_set_sensitive( GTK_WIDGET( wiz->addr ), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)));
+void enable_stun (GtkWidget* widget)
+{
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->addr), gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)));
 }
 
-void build_wizard( void ) {
-        use_sflphone_org = 1;
-	if (wiz)
-		return ;
-
-	wiz = ( struct _wizard* )g_malloc( sizeof( struct _wizard));
-	current = g_new0(account_t, 1);
-	current->properties = NULL;
-	current->properties = dbus_account_details(NULL);	
-	if (current->properties == NULL) {
-	    DEBUG("Failed to get default values. Creating from scratch");
-	    current->properties = g_hash_table_new(NULL, g_str_equal);
-	}
+void build_wizard (void)
+{
+    use_sflphone_org = 1;
+
+    if (wiz)
+        return ;
+
+    wiz = (struct _wizard*) g_malloc (sizeof (struct _wizard));
+    current = g_new0 (account_t, 1);
+    current->properties = NULL;
+    current->properties = dbus_account_details (NULL);
+
+    if (current->properties == NULL) {
+        DEBUG ("Failed to get default values. Creating from scratch");
+        current->properties = g_hash_table_new (NULL, g_str_equal);
+    }
+
     current->accountID = "new";
 
-	wiz->assistant = gtk_assistant_new();
+    wiz->assistant = gtk_assistant_new();
 
-	gtk_window_set_title( GTK_WINDOW(wiz->assistant), _("SFLphone account creation wizard") );
-	gtk_window_set_position(GTK_WINDOW(wiz->assistant), GTK_WIN_POS_CENTER);
-	gtk_window_set_default_size(GTK_WINDOW(wiz->assistant), 200 , 200);
+    gtk_window_set_title (GTK_WINDOW (wiz->assistant), _ ("SFLphone account creation wizard"));
+    gtk_window_set_position (GTK_WINDOW (wiz->assistant), GTK_WIN_POS_CENTER);
+    gtk_window_set_default_size (GTK_WINDOW (wiz->assistant), 200 , 200);
 
-	build_intro();
-	build_sfl_or_account();
-	build_select_account();
-	build_sip_account_configuration();
-	build_nat_settings();
-	build_iax_account_configuration();
-	build_email_configuration();
-	build_summary();
+    build_intro();
+    build_sfl_or_account();
+    build_select_account();
+    build_sip_account_configuration();
+    build_nat_settings();
+    build_iax_account_configuration();
+    build_email_configuration();
+    build_summary();
 
-	g_signal_connect(G_OBJECT(wiz->assistant), "close" , G_CALLBACK(close_callback), NULL);
+    g_signal_connect (G_OBJECT (wiz->assistant), "close" , G_CALLBACK (close_callback), NULL);
 
-	g_signal_connect(G_OBJECT(wiz->assistant), "cancel" , G_CALLBACK(cancel_callback), NULL);
+    g_signal_connect (G_OBJECT (wiz->assistant), "cancel" , G_CALLBACK (cancel_callback), NULL);
 
-	gtk_widget_show_all(wiz->assistant);
+    gtk_widget_show_all (wiz->assistant);
 
-	gtk_assistant_set_forward_page_func( GTK_ASSISTANT( wiz->assistant ), (GtkAssistantPageFunc) forward_page_func , NULL , NULL );
-	gtk_assistant_update_buttons_state(GTK_ASSISTANT(wiz->assistant));
+    gtk_assistant_set_forward_page_func (GTK_ASSISTANT (wiz->assistant), (GtkAssistantPageFunc) forward_page_func , NULL , NULL);
+    gtk_assistant_update_buttons_state (GTK_ASSISTANT (wiz->assistant));
 }
 
-GtkWidget* build_intro() {
-	GtkWidget *label;
+GtkWidget* build_intro()
+{
+    GtkWidget *label;
 
-	wiz->intro = create_vbox( GTK_ASSISTANT_PAGE_INTRO  , "SFLphone GNOME client" , _("Welcome to the Account creation wizard of SFLphone!"));
-	label = gtk_label_new(_("This installation wizard will help you configure an account.")) ;
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
-	gtk_widget_set_size_request(GTK_WIDGET(label), 380, -1);
-	gtk_box_pack_start(GTK_BOX(wiz->intro), label, FALSE, TRUE, 0);
+    wiz->intro = create_vbox (GTK_ASSISTANT_PAGE_INTRO  , "SFLphone GNOME client" , _ ("Welcome to the Account creation wizard of SFLphone!"));
+    label = gtk_label_new (_ ("This installation wizard will help you configure an account.")) ;
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+    gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+    gtk_widget_set_size_request (GTK_WIDGET (label), 380, -1);
+    gtk_box_pack_start (GTK_BOX (wiz->intro), label, FALSE, TRUE, 0);
 
-	gtk_assistant_set_page_complete(GTK_ASSISTANT(wiz->assistant),  wiz->intro, TRUE);
-	return wiz->intro;
+    gtk_assistant_set_page_complete (GTK_ASSISTANT (wiz->assistant),  wiz->intro, TRUE);
+    return wiz->intro;
 }
 
-GtkWidget* build_select_account() {
-	GtkWidget* sip;
-	GtkWidget* iax;
+GtkWidget* build_select_account()
+{
+    GtkWidget* sip;
+    GtkWidget* iax;
 
-	wiz->protocols = create_vbox( GTK_ASSISTANT_PAGE_CONTENT , _("VoIP Protocols") , _("Select an account type"));
+    wiz->protocols = create_vbox (GTK_ASSISTANT_PAGE_CONTENT , _ ("VoIP Protocols") , _ ("Select an account type"));
 
-	sip = gtk_radio_button_new_with_label(NULL, _("SIP (Session Initiation Protocol)"));
-	gtk_box_pack_start( GTK_BOX(wiz->protocols) , sip , TRUE, TRUE, 0);
-	iax = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sip), _("IAX2 (InterAsterix Exchange)"));
-	gtk_box_pack_start( GTK_BOX(wiz->protocols) , iax , TRUE, TRUE, 0);
+    sip = gtk_radio_button_new_with_label (NULL, _ ("SIP (Session Initiation Protocol)"));
+    gtk_box_pack_start (GTK_BOX (wiz->protocols) , sip , TRUE, TRUE, 0);
+    iax = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (sip), _ ("IAX2 (InterAsterix Exchange)"));
+    gtk_box_pack_start (GTK_BOX (wiz->protocols) , iax , TRUE, TRUE, 0);
 
-	g_signal_connect(G_OBJECT( sip ) , "clicked" , G_CALLBACK( set_account_type ) , NULL );
+    g_signal_connect (G_OBJECT (sip) , "clicked" , G_CALLBACK (set_account_type) , NULL);
 
-	gtk_assistant_set_page_complete(GTK_ASSISTANT(wiz->assistant),  wiz->protocols, TRUE);
-	return wiz->protocols;
+    gtk_assistant_set_page_complete (GTK_ASSISTANT (wiz->assistant),  wiz->protocols, TRUE);
+    return wiz->protocols;
 }
 
 
-GtkWidget* build_sfl_or_account() {
-	GtkWidget* sfl;
-	GtkWidget* cus;
+GtkWidget* build_sfl_or_account()
+{
+    GtkWidget* sfl;
+    GtkWidget* cus;
 
-	wiz->sflphone_org = create_vbox( GTK_ASSISTANT_PAGE_CONTENT , _("Account") , _("Please select one of the following options"));
+    wiz->sflphone_org = create_vbox (GTK_ASSISTANT_PAGE_CONTENT , _ ("Account") , _ ("Please select one of the following options"));
 
-	sfl = gtk_radio_button_new_with_label( NULL, _("Create a free SIP/IAX2 account on sflphone.org"));
-	gtk_box_pack_start( GTK_BOX(wiz->sflphone_org) , sfl , TRUE, TRUE, 0);
-	cus = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(sfl), _("Register an existing SIP or IAX2 account"));
-	gtk_box_pack_start( GTK_BOX(wiz->sflphone_org) , cus , TRUE, TRUE, 0);
-	g_signal_connect(G_OBJECT( sfl ) , "clicked" , G_CALLBACK( set_sflphone_org ) , NULL );
+    sfl = gtk_radio_button_new_with_label (NULL, _ ("Create a free SIP/IAX2 account on sflphone.org"));
+    gtk_box_pack_start (GTK_BOX (wiz->sflphone_org) , sfl , TRUE, TRUE, 0);
+    cus = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (sfl), _ ("Register an existing SIP or IAX2 account"));
+    gtk_box_pack_start (GTK_BOX (wiz->sflphone_org) , cus , TRUE, TRUE, 0);
+    g_signal_connect (G_OBJECT (sfl) , "clicked" , G_CALLBACK (set_sflphone_org) , NULL);
 
-	return wiz->sflphone_org;
+    return wiz->sflphone_org;
 }
 
 
-GtkWidget* build_sip_account_configuration( void ) {
-	GtkWidget* table;
-	GtkWidget* label;
-    GtkWidget *image;
-	GtkWidget * clearTextCheckbox;
-
-	wiz->sip_account = create_vbox( GTK_ASSISTANT_PAGE_CONTENT , _("SIP account settings") , _("Please fill the following information"));
-	// table
-	table = gtk_table_new ( 7, 2  ,  FALSE/* homogeneous */);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_box_pack_start( GTK_BOX(wiz->sip_account) , table , TRUE, TRUE, 0);
-
-	// alias field
-	label = gtk_label_new_with_mnemonic (_("_Alias"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->sip_alias = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_alias);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->sip_alias, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	// server field
-	label = gtk_label_new_with_mnemonic (_("_Host name"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->sip_server = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_server);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->sip_server, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	// username field
-	label = gtk_label_new_with_mnemonic (_("_User name"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+GtkWidget* build_sip_account_configuration (void)
+{
+    GtkWidget* table;
+    GtkWidget* label;
+    GtkWidget * clearTextCheckbox;
+
+    wiz->sip_account = create_vbox (GTK_ASSISTANT_PAGE_CONTENT , _ ("SIP account settings") , _ ("Please fill the following information"));
+    // table
+    table = gtk_table_new (7, 2  ,  FALSE/* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    gtk_box_pack_start (GTK_BOX (wiz->sip_account) , table , TRUE, TRUE, 0);
+
+    // alias field
+    label = gtk_label_new_with_mnemonic (_ ("_Alias"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->sip_alias = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_alias);
+    gtk_table_attach (GTK_TABLE (table), wiz->sip_alias, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    // server field
+    label = gtk_label_new_with_mnemonic (_ ("_Host name"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->sip_server = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_server);
+    gtk_table_attach (GTK_TABLE (table), wiz->sip_server, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    // username field
+    label = gtk_label_new_with_mnemonic (_ ("_User name"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
-	wiz->sip_username = gtk_entry_new();
-    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (wiz->sip_username), GTK_ENTRY_ICON_PRIMARY, gdk_pixbuf_new_from_file(ICONS_DIR "/stock_person.svg", NULL));
+    wiz->sip_username = gtk_entry_new();
+    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (wiz->sip_username), GTK_ENTRY_ICON_PRIMARY, gdk_pixbuf_new_from_file (ICONS_DIR "/stock_person.svg", NULL));
 #else
-	wiz->sip_username = sexy_icon_entry_new();
-	image = gtk_image_new_from_file( ICONS_DIR "/stock_person.svg" );
-	sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(wiz->sip_username), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    wiz->sip_username = sexy_icon_entry_new();
+    image = gtk_image_new_from_file (ICONS_DIR "/stock_person.svg");
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (wiz->sip_username), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_username);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->sip_username, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	// password field
-        
-	label = gtk_label_new_with_mnemonic (_("_Password"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_username);
+    gtk_table_attach (GTK_TABLE (table), wiz->sip_username, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    // password field
+
+    label = gtk_label_new_with_mnemonic (_ ("_Password"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
-	wiz->sip_password = gtk_entry_new();
+    wiz->sip_password = gtk_entry_new();
     gtk_entry_set_icon_from_stock (GTK_ENTRY (wiz->sip_password), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
 #else
-        
 
-	wiz->sip_password = sexy_icon_entry_new();
-	image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
-	sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(wiz->sip_password), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+
+    wiz->sip_password = sexy_icon_entry_new();
+    image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (wiz->sip_password), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_password);
-	gtk_entry_set_visibility(GTK_ENTRY(wiz->sip_password), FALSE);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->sip_password, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	
-	clearTextCheckbox = gtk_check_button_new_with_mnemonic (_("Show password"));
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_password);
+    gtk_entry_set_visibility (GTK_ENTRY (wiz->sip_password), FALSE);
+    gtk_table_attach (GTK_TABLE (table), wiz->sip_password, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    clearTextCheckbox = gtk_check_button_new_with_mnemonic (_ ("Show password"));
     g_signal_connect (clearTextCheckbox, "toggled", G_CALLBACK (show_password_cb), wiz->sip_password);
     gtk_table_attach (GTK_TABLE (table), clearTextCheckbox, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     // voicemail number field
-	label = gtk_label_new_with_mnemonic (_("_Voicemail number"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->sip_voicemail = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_voicemail);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->sip_voicemail, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new_with_mnemonic (_ ("_Voicemail number"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->sip_voicemail = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->sip_voicemail);
+    gtk_table_attach (GTK_TABLE (table), wiz->sip_voicemail, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     // Security options
-	wiz->zrtp_enable = gtk_check_button_new_with_mnemonic(_("Secure communications with _ZRTP"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wiz->zrtp_enable), FALSE);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->zrtp_enable, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_widget_set_sensitive( GTK_WIDGET( wiz->zrtp_enable ) , TRUE );
-	
-	//gtk_assistant_set_page_complete(GTK_ASSISTANT(wiz->assistant),  wiz->sip_account, TRUE);
-	return wiz->sip_account;
+    wiz->zrtp_enable = gtk_check_button_new_with_mnemonic (_ ("Secure communications with _ZRTP"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wiz->zrtp_enable), FALSE);
+    gtk_table_attach (GTK_TABLE (table), wiz->zrtp_enable, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->zrtp_enable) , TRUE);
+
+    //gtk_assistant_set_page_complete(GTK_ASSISTANT(wiz->assistant),  wiz->sip_account, TRUE);
+    return wiz->sip_account;
 }
 
-GtkWidget* build_email_configuration( void ) {
-	GtkWidget* label;
-	GtkWidget*  table;
+GtkWidget* build_email_configuration (void)
+{
+    GtkWidget* label;
+    GtkWidget*  table;
 
-	wiz->email = create_vbox( GTK_ASSISTANT_PAGE_CONTENT , _("Optional email address") , _("This email address will be used to send your voicemail messages."));
+    wiz->email = create_vbox (GTK_ASSISTANT_PAGE_CONTENT , _ ("Optional email address") , _ ("This email address will be used to send your voicemail messages."));
 
-	table = gtk_table_new ( 4, 2  ,  FALSE/* homogeneous */);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_box_pack_start( GTK_BOX(wiz->email) , table , TRUE, TRUE, 0);
+    table = gtk_table_new (4, 2  ,  FALSE/* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    gtk_box_pack_start (GTK_BOX (wiz->email) , table , TRUE, TRUE, 0);
 
-	// email field
-	label = gtk_label_new_with_mnemonic (_("_Email address"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->mailbox = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->mailbox);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->mailbox, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    // email field
+    label = gtk_label_new_with_mnemonic (_ ("_Email address"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->mailbox = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->mailbox);
+    gtk_table_attach (GTK_TABLE (table), wiz->mailbox, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     // Security options
-	wiz->zrtp_enable = gtk_check_button_new_with_mnemonic(_("Secure communications with _ZRTP"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wiz->zrtp_enable), FALSE);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->zrtp_enable, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_widget_set_sensitive( GTK_WIDGET( wiz->zrtp_enable ) , TRUE );
-	
-	return wiz->email;
+    wiz->zrtp_enable = gtk_check_button_new_with_mnemonic (_ ("Secure communications with _ZRTP"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wiz->zrtp_enable), FALSE);
+    gtk_table_attach (GTK_TABLE (table), wiz->zrtp_enable, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->zrtp_enable) , TRUE);
+
+    return wiz->email;
 }
 
-GtkWidget* build_iax_account_configuration( void ) {
-	GtkWidget* label;
-	GtkWidget*  table;
-    GtkWidget *image;
-	GtkWidget * clearTextCheckbox;
-
-	wiz->iax_account = create_vbox( GTK_ASSISTANT_PAGE_CONFIRM , _("IAX2 account settings") , _("Please fill the following information"));
-
-	table = gtk_table_new ( 6, 2  ,  FALSE/* homogeneous */);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_box_pack_start( GTK_BOX(wiz->iax_account) , table , TRUE, TRUE, 0);
-
-	// alias field
-	label = gtk_label_new_with_mnemonic (_("_Alias"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->iax_alias = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_alias);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->iax_alias, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	// server field
-	label = gtk_label_new_with_mnemonic (_("_Host name"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->iax_server = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_server);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->iax_server, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	// username field
-	label = gtk_label_new_with_mnemonic (_("_User name"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+GtkWidget* build_iax_account_configuration (void)
+{
+    GtkWidget* label;
+    GtkWidget*  table;
+    GtkWidget * clearTextCheckbox;
+
+    wiz->iax_account = create_vbox (GTK_ASSISTANT_PAGE_CONFIRM , _ ("IAX2 account settings") , _ ("Please fill the following information"));
+
+    table = gtk_table_new (6, 2  ,  FALSE/* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    gtk_box_pack_start (GTK_BOX (wiz->iax_account) , table , TRUE, TRUE, 0);
+
+    // alias field
+    label = gtk_label_new_with_mnemonic (_ ("_Alias"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->iax_alias = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_alias);
+    gtk_table_attach (GTK_TABLE (table), wiz->iax_alias, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    // server field
+    label = gtk_label_new_with_mnemonic (_ ("_Host name"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->iax_server = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_server);
+    gtk_table_attach (GTK_TABLE (table), wiz->iax_server, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    // username field
+    label = gtk_label_new_with_mnemonic (_ ("_User name"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
-	wiz->iax_username = gtk_entry_new();
-    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (wiz->iax_username), GTK_ENTRY_ICON_PRIMARY, gdk_pixbuf_new_from_file(ICONS_DIR "/stock_person.svg", NULL));
+    wiz->iax_username = gtk_entry_new();
+    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (wiz->iax_username), GTK_ENTRY_ICON_PRIMARY, gdk_pixbuf_new_from_file (ICONS_DIR "/stock_person.svg", NULL));
 #else
-	wiz->iax_username = sexy_icon_entry_new();
-	image = gtk_image_new_from_file( ICONS_DIR "/stock_person.svg" );
-	sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(wiz->iax_username), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    wiz->iax_username = sexy_icon_entry_new();
+    image = gtk_image_new_from_file (ICONS_DIR "/stock_person.svg");
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (wiz->iax_username), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_username);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->iax_username, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_username);
+    gtk_table_attach (GTK_TABLE (table), wiz->iax_username, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-	// password field
-	label = gtk_label_new_with_mnemonic (_("_Password"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
+    // password field
+    label = gtk_label_new_with_mnemonic (_ ("_Password"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 #if GTK_CHECK_VERSION(2,16,0)
-	wiz->iax_password = gtk_entry_new();
+    wiz->iax_password = gtk_entry_new();
     gtk_entry_set_icon_from_stock (GTK_ENTRY (wiz->iax_password), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
 #else
-	wiz->iax_password = sexy_icon_entry_new();
-	image = gtk_image_new_from_stock( GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
-	sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(wiz->iax_password), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    wiz->iax_password = sexy_icon_entry_new();
+    image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (wiz->iax_password), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_password);
-	gtk_entry_set_visibility(GTK_ENTRY(wiz->iax_password), FALSE);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->iax_password, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_password);
+    gtk_entry_set_visibility (GTK_ENTRY (wiz->iax_password), FALSE);
+    gtk_table_attach (GTK_TABLE (table), wiz->iax_password, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-	clearTextCheckbox = gtk_check_button_new_with_mnemonic (_("Show password"));
+    clearTextCheckbox = gtk_check_button_new_with_mnemonic (_ ("Show password"));
     g_signal_connect (clearTextCheckbox, "toggled", G_CALLBACK (show_password_cb), wiz->iax_password);
     gtk_table_attach (GTK_TABLE (table), clearTextCheckbox, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     // voicemail number field
-	label = gtk_label_new_with_mnemonic (_("_Voicemail number"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->iax_voicemail = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_voicemail);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->iax_voicemail, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new_with_mnemonic (_ ("_Voicemail number"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->iax_voicemail = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->iax_voicemail);
+    gtk_table_attach (GTK_TABLE (table), wiz->iax_voicemail, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-	current -> state = ACCOUNT_STATE_UNREGISTERED;
+    current -> state = ACCOUNT_STATE_UNREGISTERED;
 
-	g_signal_connect( G_OBJECT( wiz->assistant ) , "apply" , G_CALLBACK( iax_apply_callback ), NULL);
+    g_signal_connect (G_OBJECT (wiz->assistant) , "apply" , G_CALLBACK (iax_apply_callback), NULL);
 
-	return wiz->iax_account;
+    return wiz->iax_account;
 }
 
-GtkWidget* build_nat_settings( void ) {
-	GtkWidget* label;
-	GtkWidget* table;
-
-	wiz->nat = create_vbox( GTK_ASSISTANT_PAGE_CONFIRM , _("Network Address Translation (NAT)") , _("You should probably enable this if you are behind a firewall."));
-
-	// table
-	table = gtk_table_new ( 2, 2  ,  FALSE/* homogeneous */);
-	gtk_table_set_row_spacings( GTK_TABLE(table), 10);
-	gtk_table_set_col_spacings( GTK_TABLE(table), 10);
-	gtk_box_pack_start( GTK_BOX(wiz->nat), table , TRUE, TRUE, 0);
-
-	// enable
-	wiz->enable = gtk_check_button_new_with_mnemonic(_("E_nable STUN"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(wiz->enable), FALSE);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->enable, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_widget_set_sensitive( GTK_WIDGET( wiz->enable ) , TRUE );
-	g_signal_connect( G_OBJECT( GTK_TOGGLE_BUTTON(wiz->enable)) , "toggled" , G_CALLBACK( enable_stun ), NULL);
-
-	// server address
-	label = gtk_label_new_with_mnemonic (_("_STUN server"));
-	gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-	wiz->addr = gtk_entry_new();
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->addr);
-	gtk_table_attach ( GTK_TABLE( table ), wiz->addr, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_widget_set_sensitive( GTK_WIDGET( wiz->addr ), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(wiz->enable)));
-
-	g_signal_connect( G_OBJECT( wiz->assistant ) , "apply" , G_CALLBACK( sip_apply_callback ), NULL);
-
-	return wiz->nat;
+GtkWidget* build_nat_settings (void)
+{
+    GtkWidget* label;
+    GtkWidget* table;
+
+    wiz->nat = create_vbox (GTK_ASSISTANT_PAGE_CONFIRM , _ ("Network Address Translation (NAT)") , _ ("You should probably enable this if you are behind a firewall."));
+
+    // table
+    table = gtk_table_new (2, 2  ,  FALSE/* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 10);
+    gtk_box_pack_start (GTK_BOX (wiz->nat), table , TRUE, TRUE, 0);
+
+    // enable
+    wiz->enable = gtk_check_button_new_with_mnemonic (_ ("E_nable STUN"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wiz->enable), FALSE);
+    gtk_table_attach (GTK_TABLE (table), wiz->enable, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->enable) , TRUE);
+    g_signal_connect (G_OBJECT (GTK_TOGGLE_BUTTON (wiz->enable)) , "toggled" , G_CALLBACK (enable_stun), NULL);
+
+    // server address
+    label = gtk_label_new_with_mnemonic (_ ("_STUN server"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    wiz->addr = gtk_entry_new();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), wiz->addr);
+    gtk_table_attach (GTK_TABLE (table), wiz->addr, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->addr), gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (wiz->enable)));
+
+    g_signal_connect (G_OBJECT (wiz->assistant) , "apply" , G_CALLBACK (sip_apply_callback), NULL);
+
+    return wiz->nat;
 }
 
-GtkWidget* build_summary() {
-	wiz->summary = create_vbox( GTK_ASSISTANT_PAGE_SUMMARY  , _("Account Registration") , _("Congratulations!"));
+GtkWidget* build_summary()
+{
+    wiz->summary = create_vbox (GTK_ASSISTANT_PAGE_SUMMARY  , _ ("Account Registration") , _ ("Congratulations!"));
 
-	strcpy(message,"");
-	wiz->label_summary = gtk_label_new(message) ;
-	gtk_label_set_selectable (GTK_LABEL(wiz->label_summary), TRUE);
-	gtk_misc_set_alignment(GTK_MISC(wiz->label_summary), 0, 0);
-	gtk_label_set_line_wrap(GTK_LABEL(wiz->label_summary), TRUE);
-	//gtk_widget_set_size_request(GTK_WIDGET(wiz->label_summary), 380, -1);
-	gtk_box_pack_start(GTK_BOX(wiz->summary), wiz->label_summary, FALSE, TRUE, 0);
+    strcpy (message,"");
+    wiz->label_summary = gtk_label_new (message) ;
+    gtk_label_set_selectable (GTK_LABEL (wiz->label_summary), TRUE);
+    gtk_misc_set_alignment (GTK_MISC (wiz->label_summary), 0, 0);
+    gtk_label_set_line_wrap (GTK_LABEL (wiz->label_summary), TRUE);
+    //gtk_widget_set_size_request(GTK_WIDGET(wiz->label_summary), 380, -1);
+    gtk_box_pack_start (GTK_BOX (wiz->summary), wiz->label_summary, FALSE, TRUE, 0);
 
-	return wiz->summary;
+    return wiz->summary;
 }
 
-GtkWidget* build_registration_error() {
-	GtkWidget *label;
-	wiz->reg_failed = create_vbox( GTK_ASSISTANT_PAGE_SUMMARY  , "Account Registration" , "Registration error");
+GtkWidget* build_registration_error()
+{
+    GtkWidget *label;
+    wiz->reg_failed = create_vbox (GTK_ASSISTANT_PAGE_SUMMARY  , "Account Registration" , "Registration error");
 
-	label = gtk_label_new(" Please correct the information.") ;
-	gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-	gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
-	gtk_widget_set_size_request(GTK_WIDGET(label), 380, -1);
-	gtk_box_pack_start(GTK_BOX(wiz->reg_failed), label, FALSE, TRUE, 0);
+    label = gtk_label_new (" Please correct the information.") ;
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+    gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+    gtk_widget_set_size_request (GTK_WIDGET (label), 380, -1);
+    gtk_box_pack_start (GTK_BOX (wiz->reg_failed), label, FALSE, TRUE, 0);
 
-	return wiz->reg_failed;
+    return wiz->reg_failed;
 }
 
-void set_sip_infos_sentivite(gboolean b) {
-	gtk_widget_set_sensitive(GTK_WIDGET(wiz->sip_alias), b);
-	gtk_widget_set_sensitive(GTK_WIDGET(wiz->sip_server), b);
-	gtk_widget_set_sensitive(GTK_WIDGET(wiz->sip_username), b);
-	gtk_widget_set_sensitive(GTK_WIDGET(wiz->sip_password), b);
+void set_sip_infos_sentivite (gboolean b)
+{
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->sip_alias), b);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->sip_server), b);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->sip_username), b);
+    gtk_widget_set_sensitive (GTK_WIDGET (wiz->sip_password), b);
 }
 
-void prefill_sip(void) {
-	if (use_sflphone_org == 1) {
- 		char alias[300];
- 		char *email;
- 		email = (char *)gtk_entry_get_text (GTK_ENTRY(wiz->mailbox) );
- 		rest_account ra = get_rest_account(SFLPHONE_ORG_SERVER,email);
- 		if (ra.success) {
-			set_sip_infos_sentivite(FALSE);
-			strcpy(alias,ra.user);
-			strcat(alias,"@");
-			strcat(alias,"sip.sflphone.org");
-			gtk_entry_set_text (GTK_ENTRY(wiz->sip_alias),alias );
-			gtk_entry_set_text (GTK_ENTRY(wiz->sip_server), SFLPHONE_ORG_SERVER);
-			gtk_entry_set_text (GTK_ENTRY(wiz->sip_username), ra.user);
-			gtk_entry_set_text (GTK_ENTRY(wiz->sip_password), ra.passwd);
- 		}
-	}
+void prefill_sip (void)
+{
+    if (use_sflphone_org == 1) {
+        char alias[300];
+        char *email;
+        email = (char *) gtk_entry_get_text (GTK_ENTRY (wiz->mailbox));
+        rest_account ra = get_rest_account (SFLPHONE_ORG_SERVER,email);
+
+        if (ra.success) {
+            set_sip_infos_sentivite (FALSE);
+            strcpy (alias,ra.user);
+            strcat (alias,"@");
+            strcat (alias,"sip.sflphone.org");
+            gtk_entry_set_text (GTK_ENTRY (wiz->sip_alias),alias);
+            gtk_entry_set_text (GTK_ENTRY (wiz->sip_server), SFLPHONE_ORG_SERVER);
+            gtk_entry_set_text (GTK_ENTRY (wiz->sip_username), ra.user);
+            gtk_entry_set_text (GTK_ENTRY (wiz->sip_password), ra.passwd);
+        }
+    }
 }
 
 typedef enum {
-	PAGE_INTRO,
-	PAGE_SFL,
-	PAGE_TYPE,
-	PAGE_SIP,
-	PAGE_STUN,
-	PAGE_IAX,
-	PAGE_EMAIL,
-	PAGE_SUMMARY
+    PAGE_INTRO,
+    PAGE_SFL,
+    PAGE_TYPE,
+    PAGE_SIP,
+    PAGE_STUN,
+    PAGE_IAX,
+    PAGE_EMAIL,
+    PAGE_SUMMARY
 } assistant_state;
 
-static gint forward_page_func( gint current_page , gpointer data UNUSED) {
- 	gint next_page = 0;
-
-	switch( current_page ){
-		case PAGE_INTRO:
-			next_page = PAGE_SFL;
-			break;
-		case PAGE_SFL:
- 			if (use_sflphone_org) {
-				next_page = PAGE_EMAIL;
- 			} else
-				next_page = PAGE_TYPE;
-			break;
-		case PAGE_TYPE:
- 			if( account_type == _SIP ) {
-				set_sip_infos_sentivite(TRUE);
-				next_page = PAGE_SIP;
- 			} else
-				next_page = PAGE_IAX;
-			break;
-		case PAGE_SIP:
-			next_page = PAGE_STUN;
-			break;
-		case PAGE_EMAIL:
-			next_page = PAGE_STUN;
-			break;
-		case PAGE_STUN:
-			next_page = PAGE_SUMMARY;
-			break;
-		case PAGE_IAX:
-			next_page = PAGE_SUMMARY;
-			break;
-		case PAGE_SUMMARY:
-			next_page = PAGE_SUMMARY;
-			break;
-		default:
-			next_page = -1;
-	}
-	return next_page;
+static gint forward_page_func (gint current_page , gpointer data UNUSED)
+{
+    gint next_page = 0;
+
+    switch (current_page) {
+        case PAGE_INTRO:
+            next_page = PAGE_SFL;
+            break;
+        case PAGE_SFL:
+
+            if (use_sflphone_org) {
+                next_page = PAGE_EMAIL;
+            } else
+                next_page = PAGE_TYPE;
+
+            break;
+        case PAGE_TYPE:
+
+            if (account_type == _SIP) {
+                set_sip_infos_sentivite (TRUE);
+                next_page = PAGE_SIP;
+            } else
+                next_page = PAGE_IAX;
+
+            break;
+        case PAGE_SIP:
+            next_page = PAGE_STUN;
+            break;
+        case PAGE_EMAIL:
+            next_page = PAGE_STUN;
+            break;
+        case PAGE_STUN:
+            next_page = PAGE_SUMMARY;
+            break;
+        case PAGE_IAX:
+            next_page = PAGE_SUMMARY;
+            break;
+        case PAGE_SUMMARY:
+            next_page = PAGE_SUMMARY;
+            break;
+        default:
+            next_page = -1;
+    }
+
+    return next_page;
 }
 
 
-static GtkWidget* create_vbox(GtkAssistantPageType type, const gchar *title, const gchar *section) {
-	GtkWidget *vbox;
-	GtkWidget *label;
-	gchar *str;
+static GtkWidget* create_vbox (GtkAssistantPageType type, const gchar *title, const gchar *section)
+{
+    GtkWidget *vbox;
+    GtkWidget *label;
+    gchar *str;
+
+    vbox = gtk_vbox_new (FALSE, 6);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 24);
 
-	vbox = gtk_vbox_new(FALSE, 6);
-	gtk_container_set_border_width(GTK_CONTAINER(vbox), 24);
+    gtk_assistant_append_page (GTK_ASSISTANT (wiz->assistant), vbox);
+    gtk_assistant_set_page_type (GTK_ASSISTANT (wiz->assistant), vbox, type);
+    str = g_strdup_printf (" %s", title);
+    gtk_assistant_set_page_title (GTK_ASSISTANT (wiz->assistant), vbox, str);
 
-	gtk_assistant_append_page(GTK_ASSISTANT(wiz->assistant), vbox);
-	gtk_assistant_set_page_type(GTK_ASSISTANT(wiz->assistant), vbox, type);
-	str = g_strdup_printf(" %s", title);
-	gtk_assistant_set_page_title(GTK_ASSISTANT(wiz->assistant), vbox, str);
+    g_free (str);
 
-	g_free(str);
+    gtk_assistant_set_page_complete (GTK_ASSISTANT (wiz->assistant), vbox, TRUE);
 
-	gtk_assistant_set_page_complete(GTK_ASSISTANT(wiz->assistant), vbox, TRUE);
+    wiz->logo = gdk_pixbuf_new_from_file (LOGO, NULL);
+    gtk_assistant_set_page_header_image (GTK_ASSISTANT (wiz->assistant),vbox, wiz->logo);
+    g_object_unref (wiz->logo);
 
-	wiz->logo = gdk_pixbuf_new_from_file(LOGO, NULL);
-	gtk_assistant_set_page_header_image(GTK_ASSISTANT(wiz->assistant),vbox, wiz->logo);
-	g_object_unref(wiz->logo);
+    if (section) {
+        label = gtk_label_new (NULL);
+        str = g_strdup_printf ("<b>%s</b>\n", section);
+        gtk_label_set_markup (GTK_LABEL (label), str);
+        g_free (str);
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+        gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+    }
 
-	if (section) {
-		label = gtk_label_new(NULL);
-		str = g_strdup_printf("<b>%s</b>\n", section);
-		gtk_label_set_markup(GTK_LABEL(label), str);
-		g_free(str);
-		gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
-		gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-	}
-	return vbox;
+    return vbox;
 }
 
 #endif // GTK_CHECK_VERSION
diff --git a/sflphone-client-gnome/src/config/assistant.h b/sflphone-client-gnome/src/config/assistant.h
index 2ac083e04cb5d26ab14208291d50896a2bbe5f00..314ac7624e3e14e1fc0e3d6f3e66f5aedb486eb8 100644
--- a/sflphone-client-gnome/src/config/assistant.h
+++ b/sflphone-client-gnome/src/config/assistant.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -42,49 +42,48 @@
 #define _SIP  0
 #define _IAX  1
 
-struct _wizard
-{
-  GtkWidget *window;
-  GtkWidget *assistant;
-  GdkPixbuf *logo;
-  GtkWidget *intro;
-  /** Page 1  - Protocol selection */
-  GtkWidget *account_type;
-  GtkWidget *protocols;
-  GtkWidget *sip;
-  GtkWidget *email;
-  GtkWidget *iax;
-  /** Page 2 - SIP account creation */
-  GtkWidget *sip_account;
-  GtkWidget *sip_alias;
-  GtkWidget *sip_server;
-  GtkWidget *sip_username;
-  GtkWidget *sip_password;
-  GtkWidget *sip_voicemail;
-  GtkWidget *test;
-  GtkWidget *state;
-  GtkWidget *mailbox;
-  GtkWidget *zrtp_enable;
-  /** Page 3 - IAX account creation */
-  GtkWidget *iax_account;
-  GtkWidget *iax_alias;
-  GtkWidget *iax_server;
-  GtkWidget *iax_username;
-  GtkWidget *iax_password;
-  GtkWidget *iax_voicemail;
-  /** Page 4 - Nat detection */
-  GtkWidget *nat;
-  GtkWidget *enable;
-  GtkWidget *addr;
-  /** Page 5 - Registration successful*/
-  GtkWidget *summary;
-  GtkWidget *label_summary;
-  /** Page 6 - Registration failed*/
-  GtkWidget *reg_failed;
-
-  GtkWidget *sflphone_org;
-  
-}; 
+struct _wizard {
+    GtkWidget *window;
+    GtkWidget *assistant;
+    GdkPixbuf *logo;
+    GtkWidget *intro;
+    /** Page 1  - Protocol selection */
+    GtkWidget *account_type;
+    GtkWidget *protocols;
+    GtkWidget *sip;
+    GtkWidget *email;
+    GtkWidget *iax;
+    /** Page 2 - SIP account creation */
+    GtkWidget *sip_account;
+    GtkWidget *sip_alias;
+    GtkWidget *sip_server;
+    GtkWidget *sip_username;
+    GtkWidget *sip_password;
+    GtkWidget *sip_voicemail;
+    GtkWidget *test;
+    GtkWidget *state;
+    GtkWidget *mailbox;
+    GtkWidget *zrtp_enable;
+    /** Page 3 - IAX account creation */
+    GtkWidget *iax_account;
+    GtkWidget *iax_alias;
+    GtkWidget *iax_server;
+    GtkWidget *iax_username;
+    GtkWidget *iax_password;
+    GtkWidget *iax_voicemail;
+    /** Page 4 - Nat detection */
+    GtkWidget *nat;
+    GtkWidget *enable;
+    GtkWidget *addr;
+    /** Page 5 - Registration successful*/
+    GtkWidget *summary;
+    GtkWidget *label_summary;
+    /** Page 6 - Registration failed*/
+    GtkWidget *reg_failed;
+
+    GtkWidget *sflphone_org;
+
+};
 
 /**
  * @file druid.h
@@ -94,7 +93,7 @@ struct _wizard
 /**
  * Callbacks functions
  */
-void set_account_type( GtkWidget* widget , gpointer data );
+void set_account_type (GtkWidget* widget , gpointer data);
 
 //static void cancel_callback( void );
 
@@ -103,20 +102,20 @@ void set_account_type( GtkWidget* widget , gpointer data );
 //static void sip_apply_callback( void );
 //static void iax_apply_callback( void );
 
-void enable_stun( GtkWidget *widget );
+void enable_stun (GtkWidget *widget);
 
 /**
  * Related-pages function
  */
 void build_wizard();
-GtkWidget* build_intro( void );
-GtkWidget* build_select_account( void );
-GtkWidget* build_sip_account_configuration( void );
-GtkWidget* build_nat_settings( void );
-GtkWidget* build_iax_account_configuration( void );
-GtkWidget* build_summary( void );
-GtkWidget* build_registration_error( void );
-GtkWidget* build_email_configuration( void );
+GtkWidget* build_intro (void);
+GtkWidget* build_select_account (void);
+GtkWidget* build_sip_account_configuration (void);
+GtkWidget* build_nat_settings (void);
+GtkWidget* build_iax_account_configuration (void);
+GtkWidget* build_summary (void);
+GtkWidget* build_registration_error (void);
+GtkWidget* build_email_configuration (void);
 GtkWidget* build_sfl_or_account (void);
 
 /**
diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c
index 62abf5a4e247aa7f719f379586c0a66451bead96..7413c6047954919818591109d5e58f40ec84ee18 100644
--- a/sflphone-client-gnome/src/config/audioconf.c
+++ b/sflphone-client-gnome/src/config/audioconf.c
@@ -28,16 +28,21 @@
  *  as that of the covered work.
  */
 
+
 #include <audioconf.h>
 #include <utils.h>
 #include <string.h>
+#include <eel-gconf-extensions.h>
+#include "dbus/dbus.h"
 
 GtkListStore *pluginlist;
 GtkListStore *outputlist;
 GtkListStore *inputlist;
+GtkListStore *ringtonelist;
 
 GtkWidget *output;
 GtkWidget *input;
+GtkWidget *ringtone;
 GtkWidget *plugin;
 GtkWidget *codecMoveUpButton;
 GtkWidget *codecMoveDownButton;
@@ -45,871 +50,944 @@ GtkWidget *codecTreeView;		// View used instead of store to get access to select
 GtkWidget *pulse;
 GtkWidget *alsabox;
 GtkWidget *alsa_conf;
+GtkWidget *noisebox;
 GtkWidget *noise_conf;
 
 // Codec properties ID
 enum {
-	COLUMN_CODEC_ACTIVE,
-	COLUMN_CODEC_NAME,
-	COLUMN_CODEC_FREQUENCY,
-	COLUMN_CODEC_BITRATE,
-	COLUMN_CODEC_BANDWIDTH,
-	CODEC_COLUMN_COUNT
+    COLUMN_CODEC_ACTIVE,
+    COLUMN_CODEC_NAME,
+    COLUMN_CODEC_FREQUENCY,
+    COLUMN_CODEC_BITRATE,
+    COLUMN_CODEC_BANDWIDTH,
+    CODEC_COLUMN_COUNT
 };
 
 /**
  * Fills the tree list with supported codecs
  */
-void preferences_dialog_fill_codec_list (account_t **a) {
-
-	GtkListStore *codecStore;
-	GtkTreeIter iter;
-	GQueue *current;
-
-	// Get model of view and clear it
-	codecStore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView)));
-	gtk_list_store_clear (codecStore);
-
-	if ((*a) != NULL) {
-		current = (*a)->codecs;
-	}
-	else {
-		// Failover
-		current = get_system_codec_list ();
-	}
-
-
-	// Insert codecs
-	unsigned int i;
-	for(i = 0; i < current->length; i++)
-	{
-		codec_t *c = codec_list_get_nth (i, current);
-		if (c)
-		{
-			DEBUG ("%s", c->name);
-			gtk_list_store_append (codecStore, &iter);
-			gtk_list_store_set (codecStore, &iter,
-					COLUMN_CODEC_ACTIVE,	c->is_active,									// Active
-					COLUMN_CODEC_NAME,		c->name,										// Name
-					COLUMN_CODEC_FREQUENCY,	g_strdup_printf("%d kHz", c->sample_rate/1000),	// Frequency (kHz)
-					COLUMN_CODEC_BITRATE,	g_strdup_printf("%.1f kbps", c->_bitrate),		// Bitrate (kbps)
-					COLUMN_CODEC_BANDWIDTH,	g_strdup_printf("%.1f kbps", c->_bandwidth),	// Bandwidth (kpbs)
-					-1);
-		}
-	}
+void preferences_dialog_fill_codec_list (account_t **a)
+{
+
+    GtkListStore *codecStore;
+    GtkTreeIter iter;
+    GQueue *current;
+
+    // Get model of view and clear it
+    codecStore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView)));
+    gtk_list_store_clear (codecStore);
+
+    if ( (*a) != NULL) {
+        current = (*a)->codecs;
+    } else {
+        // Failover
+        current = get_system_codec_list ();
+    }
+
+
+    // Insert codecs
+    unsigned int i;
+
+    for (i = 0; i < current->length; i++) {
+        codec_t *c = codec_list_get_nth (i, current);
+
+        if (c) {
+            DEBUG ("%s", c->name);
+            gtk_list_store_append (codecStore, &iter);
+            gtk_list_store_set (codecStore, &iter,
+                                COLUMN_CODEC_ACTIVE,	c->is_active,									// Active
+                                COLUMN_CODEC_NAME,		c->name,										// Name
+                                COLUMN_CODEC_FREQUENCY,	g_strdup_printf ("%d kHz", c->sample_rate/1000),	// Frequency (kHz)
+                                COLUMN_CODEC_BITRATE,	g_strdup_printf ("%.1f kbps", c->_bitrate),		// Bitrate (kbps)
+                                COLUMN_CODEC_BANDWIDTH,	g_strdup_printf ("%.1f kbps", c->_bandwidth),	// Bandwidth (kpbs)
+                                -1);
+        }
+    }
 }
 
 /**
  * Fill store with output audio plugins
  */
-	void
-preferences_dialog_fill_output_audio_plugin_list()
+void
+preferences_dialog_fill_audio_plugin_list()
 {
-	GtkTreeIter iter;
-	gchar** list;
-	gchar* managerName;
-
-	gtk_list_store_clear(pluginlist);
-
-	// Call dbus to retreive list
-	list = dbus_get_output_audio_plugin_list();
-	// For each API name included in list
-	int c = 0;
-
-	if (list != NULL){
-		for(managerName = list[c]; managerName != NULL; managerName = list[c])
-		{
-			c++;
-			gtk_list_store_append(pluginlist, &iter);
-			gtk_list_store_set(pluginlist, &iter, 0 , managerName, -1);
-		}
-	}
-	list = NULL;
+    GtkTreeIter iter;
+    gchar** list;
+    gchar* managerName;
+
+    gtk_list_store_clear (pluginlist);
+
+    // Call dbus to retreive list
+    list = dbus_get_audio_plugin_list();
+    // For each API name included in list
+    int c = 0;
+
+    if (list != NULL) {
+        for (managerName = list[c]; managerName != NULL; managerName = list[c]) {
+            c++;
+            gtk_list_store_append (pluginlist, &iter);
+            gtk_list_store_set (pluginlist, &iter, 0 , managerName, -1);
+        }
+    }
+
+    list = NULL;
 }
 
+
 /**
  * Fill output audio device store
  */
-	void
+void
 preferences_dialog_fill_output_audio_device_list()
 {
 
-	GtkTreeIter iter;
-	gchar** list;
-	gchar** audioDevice;
-	int index;
-
-	gtk_list_store_clear(outputlist);
-
-	// Call dbus to retreive list
-	list = dbus_get_audio_output_device_list();
-
-	// For each device name included in list
-	int c = 0;
-	for(audioDevice = list; *list ; list++)
-	{
-		index = dbus_get_audio_device_index( *list );
-		gtk_list_store_append(outputlist, &iter);
-		gtk_list_store_set(outputlist, &iter, 0, *list, 1, index, -1);
-		c++;
-	}
+    GtkTreeIter iter;
+    gchar** list;
+    gchar** audioDevice;
+    int index;
+
+    gtk_list_store_clear (outputlist);
+
+    // Call dbus to retreive list
+    list = dbus_get_audio_output_device_list();
+
+    // For each device name included in list
+    int c = 0;
+
+    for (audioDevice = list; *list ; list++) {
+        index = dbus_get_audio_device_index (*list);
+        gtk_list_store_append (outputlist, &iter);
+        gtk_list_store_set (outputlist, &iter, 0, *list, 1, index, -1);
+        c++;
+    }
+}
+
+
+/**
+ * Fill rigntone audio device store
+ */
+
+void
+preferences_dialog_fill_ringtone_audio_device_list()
+{
+
+    GtkTreeIter iter;
+    gchar** list;
+    gchar** audioDevice;
+    int index;
+
+    gtk_list_store_clear (ringtonelist);
+
+    // Call dbus to retreive output device
+    list = dbus_get_audio_output_device_list();
+
+    // For each device name in the list
+    int c = 0;
+
+    for (audioDevice = list; *list; list++) {
+        index = dbus_get_audio_device_index (*list);
+        gtk_list_store_append (ringtonelist, &iter);
+        gtk_list_store_set (ringtonelist, &iter, 0, *list, 1, index, -1);
+        c++;
+    }
 }
 
+
+
 /**
  * Select active output audio device
  */
-	void
+void
 select_active_output_audio_device()
 {
-	if( SHOW_ALSA_CONF )
-	{
-
-		GtkTreeModel* model;
-		GtkTreeIter iter;
-		gchar** devices;
-		int currentDeviceIndex;
-		int deviceIndex;
-
-		// Select active output device on server
-		devices = dbus_get_current_audio_devices_index();
-		currentDeviceIndex = atoi(devices[0]);
-		DEBUG("audio device index for output = %d", currentDeviceIndex);
-		model = gtk_combo_box_get_model(GTK_COMBO_BOX(output));
-
-		// Find the currently set output device
-		gtk_tree_model_get_iter_first(model, &iter);
-		do {
-			gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
-			if(deviceIndex == currentDeviceIndex)
-			{
-				// Set current iteration the active one
-				gtk_combo_box_set_active_iter(GTK_COMBO_BOX(output), &iter);
-				return;
-			}
-		} while(gtk_tree_model_iter_next(model, &iter));
-
-		// No index was found, select first one
-		WARN("Warning : No active output device found");
-		gtk_combo_box_set_active(GTK_COMBO_BOX(output), 0);
-	}
+    if (SHOW_ALSA_CONF) {
+
+        GtkTreeModel* model;
+        GtkTreeIter iter;
+        gchar** devices;
+        int currentDeviceIndex;
+        int deviceIndex;
+
+        // Select active output device on server
+        devices = dbus_get_current_audio_devices_index();
+        currentDeviceIndex = atoi (devices[0]);
+        DEBUG ("audio device index for output = %d", currentDeviceIndex);
+        model = gtk_combo_box_get_model (GTK_COMBO_BOX (output));
+
+        // Find the currently set output device
+        gtk_tree_model_get_iter_first (model, &iter);
+
+        do {
+            gtk_tree_model_get (model, &iter, 1, &deviceIndex, -1);
+
+            if (deviceIndex == currentDeviceIndex) {
+                // Set current iteration the active one
+                gtk_combo_box_set_active_iter (GTK_COMBO_BOX (output), &iter);
+                return;
+            }
+        } while (gtk_tree_model_iter_next (model, &iter));
+
+        // No index was found, select first one
+        WARN ("Warning : No active output device found");
+        gtk_combo_box_set_active (GTK_COMBO_BOX (output), 0);
+    }
+}
+
+
+/**
+ * Select active output audio device
+ */
+void
+select_active_ringtone_audio_device()
+{
+    if (SHOW_ALSA_CONF) {
+
+        GtkTreeModel* model;
+        GtkTreeIter iter;
+        gchar** devices;
+        int currentDeviceIndex;
+        int deviceIndex;
+
+        // Select active ringtone device on server
+        devices = dbus_get_current_audio_devices_index();
+        currentDeviceIndex = atoi (devices[2]);
+        DEBUG ("audio device index for ringtone = %d", currentDeviceIndex);
+        model = gtk_combo_box_get_model (GTK_COMBO_BOX (ringtone));
+
+        // Find the currently set ringtone device
+        gtk_tree_model_get_iter_first (model, &iter);
+
+        do {
+            gtk_tree_model_get (model, &iter, 1, &deviceIndex, -1);
+
+            if (deviceIndex == currentDeviceIndex) {
+                // Set current iteration the active one
+                gtk_combo_box_set_active_iter (GTK_COMBO_BOX (ringtone), &iter);
+                return;
+            }
+        } while (gtk_tree_model_iter_next (model, &iter));
+
+        // No index was found, select first one
+        WARN ("Warning : No active ringtone device found");
+        gtk_combo_box_set_active (GTK_COMBO_BOX (ringtone), 0);
+    }
 }
 
 /**
  * Fill input audio device store
  */
-	void
+void
 preferences_dialog_fill_input_audio_device_list()
 {
 
-	GtkTreeIter iter;
-	gchar** list;
-	gchar** audioDevice;
-	int index ;
-	gtk_list_store_clear(inputlist);
-
-	// Call dbus to retreive list
-	list = dbus_get_audio_input_device_list();
-
-	// For each device name included in list
-	//int c = 0;
-	for(audioDevice = list; *list; list++)
-	{
-		index = dbus_get_audio_device_index( *list );
-		gtk_list_store_append(inputlist, &iter);
-		gtk_list_store_set(inputlist, &iter, 0, *list, 1, index, -1);
-		//c++;
-	}
+    GtkTreeIter iter;
+    gchar** list;
+    gchar** audioDevice;
+    int index ;
+    gtk_list_store_clear (inputlist);
+
+    // Call dbus to retreive list
+    list = dbus_get_audio_input_device_list();
+
+    // For each device name included in list
+    //int c = 0;
+    for (audioDevice = list; *list; list++) {
+        index = dbus_get_audio_device_index (*list);
+        gtk_list_store_append (inputlist, &iter);
+        gtk_list_store_set (inputlist, &iter, 0, *list, 1, index, -1);
+        //c++;
+    }
 
 }
 
 /**
  * Select active input audio device
  */
-	void
+void
 select_active_input_audio_device()
 {
-	if( SHOW_ALSA_CONF)
-	{
-
-		GtkTreeModel* model;
-		GtkTreeIter iter;
-		gchar** devices;
-		int currentDeviceIndex;
-		int deviceIndex;
-
-		// Select active input device on server
-		devices = dbus_get_current_audio_devices_index();
-		currentDeviceIndex = atoi(devices[1]);
-		model = gtk_combo_box_get_model(GTK_COMBO_BOX(input));
-
-		// Find the currently set input device
-		gtk_tree_model_get_iter_first(model, &iter);
-		do {
-			gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
-			if(deviceIndex == currentDeviceIndex)
-			{
-				// Set current iteration the active one
-				gtk_combo_box_set_active_iter(GTK_COMBO_BOX(input), &iter);
-				return;
-			}
-		} while(gtk_tree_model_iter_next(model, &iter));
-
-		// No index was found, select first one
-		WARN("Warning : No active input device found");
-		gtk_combo_box_set_active(GTK_COMBO_BOX(input), 0);
-	}
+    if (SHOW_ALSA_CONF) {
+
+        GtkTreeModel* model;
+        GtkTreeIter iter;
+        gchar** devices;
+        int currentDeviceIndex;
+        int deviceIndex;
+
+        // Select active input device on server
+        devices = dbus_get_current_audio_devices_index();
+        currentDeviceIndex = atoi (devices[1]);
+        model = gtk_combo_box_get_model (GTK_COMBO_BOX (input));
+
+        // Find the currently set input device
+        gtk_tree_model_get_iter_first (model, &iter);
+
+        do {
+            gtk_tree_model_get (model, &iter, 1, &deviceIndex, -1);
+
+            if (deviceIndex == currentDeviceIndex) {
+                // Set current iteration the active one
+                gtk_combo_box_set_active_iter (GTK_COMBO_BOX (input), &iter);
+                return;
+            }
+        } while (gtk_tree_model_iter_next (model, &iter));
+
+        // No index was found, select first one
+        WARN ("Warning : No active input device found");
+        gtk_combo_box_set_active (GTK_COMBO_BOX (input), 0);
+    }
 }
 
 /**
  * Select the output audio plugin by calling the server
  */
-	static void
-select_output_audio_plugin(GtkComboBox* widget, gpointer data UNUSED)
+static void
+select_output_audio_plugin (GtkComboBox* widget, gpointer data UNUSED)
 {
-	GtkTreeModel* model;
-	GtkTreeIter iter;
-	int comboBoxIndex;
-	gchar* pluginName;
-
-	comboBoxIndex = gtk_combo_box_get_active(widget);
-
-	if(comboBoxIndex >= 0)
-	{
-		model = gtk_combo_box_get_model(widget);
-		gtk_combo_box_get_active_iter(widget, &iter);
-		gtk_tree_model_get(model, &iter, 0, &pluginName, -1);
-		dbus_set_output_audio_plugin(pluginName);
-		//update_combo_box( pluginName);
-	}
+    GtkTreeModel* model;
+    GtkTreeIter iter;
+    int comboBoxIndex;
+    gchar* pluginName;
+
+    comboBoxIndex = gtk_combo_box_get_active (widget);
+
+    if (comboBoxIndex >= 0) {
+        model = gtk_combo_box_get_model (widget);
+        gtk_combo_box_get_active_iter (widget, &iter);
+        gtk_tree_model_get (model, &iter, 0, &pluginName, -1);
+        dbus_set_audio_plugin (pluginName);
+        //update_combo_box( pluginName);
+    }
 }
 
 /**
  * Select active output audio plugin
  */
-	void
+void
 select_active_output_audio_plugin()
 {
-	GtkTreeModel* model;
-	GtkTreeIter iter;
-	gchar* pluginname;
-	gchar* tmp;
-
-	// Select active output device on server
-	pluginname = dbus_get_current_audio_output_plugin();
-	tmp = pluginname;
-	model = gtk_combo_box_get_model(GTK_COMBO_BOX(plugin));
-
-	// Find the currently alsa plugin
-	gtk_tree_model_get_iter_first(model, &iter);
-	do {
-		gtk_tree_model_get(model, &iter, 0, &pluginname , -1);
-		if( g_strcasecmp( tmp , pluginname ) == 0 )
-		{
-			// Set current iteration the active one
-			gtk_combo_box_set_active_iter(GTK_COMBO_BOX(plugin), &iter);
-			//update_combo_box( plugin );
-			return;
-		}
-	} while(gtk_tree_model_iter_next(model, &iter));
-
-	// No index was found, select first one
-	WARN("Warning : No active output device found");
-	gtk_combo_box_set_active(GTK_COMBO_BOX(plugin), 0);
+    GtkTreeModel* model;
+    GtkTreeIter iter;
+    gchar* pluginname;
+    gchar* tmp;
+
+    // Select active output device on server
+    pluginname = dbus_get_current_audio_output_plugin();
+    tmp = pluginname;
+    model = gtk_combo_box_get_model (GTK_COMBO_BOX (plugin));
+
+    // Find the currently alsa plugin
+    gtk_tree_model_get_iter_first (model, &iter);
+
+    do {
+        gtk_tree_model_get (model, &iter, 0, &pluginname , -1);
+
+        if (g_strcasecmp (tmp , pluginname) == 0) {
+            // Set current iteration the active one
+            gtk_combo_box_set_active_iter (GTK_COMBO_BOX (plugin), &iter);
+            //update_combo_box( plugin );
+            return;
+        }
+    } while (gtk_tree_model_iter_next (model, &iter));
+
+    // No index was found, select first one
+    WARN ("Warning : No active output device found");
+    gtk_combo_box_set_active (GTK_COMBO_BOX (plugin), 0);
 }
 
 
 /**
  * Set the audio output device on the server with its index
  */
-	static void
-select_audio_output_device(GtkComboBox* comboBox, gpointer data UNUSED)
+static void
+select_audio_output_device (GtkComboBox* comboBox, gpointer data UNUSED)
 {
-	GtkTreeModel* model;
-	GtkTreeIter iter;
-	int comboBoxIndex;
-	int deviceIndex;
+    GtkTreeModel* model;
+    GtkTreeIter iter;
+    int comboBoxIndex;
+    int deviceIndex;
 
-	comboBoxIndex = gtk_combo_box_get_active(comboBox);
+    comboBoxIndex = gtk_combo_box_get_active (comboBox);
 
-	if(comboBoxIndex >= 0)
-	{
-		model = gtk_combo_box_get_model(comboBox);
-		gtk_combo_box_get_active_iter(comboBox, &iter);
-		gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
+    if (comboBoxIndex >= 0) {
+        model = gtk_combo_box_get_model (comboBox);
+        gtk_combo_box_get_active_iter (comboBox, &iter);
+        gtk_tree_model_get (model, &iter, 1, &deviceIndex, -1);
 
-		dbus_set_audio_output_device(deviceIndex);
-	}
+        dbus_set_audio_output_device (deviceIndex);
+    }
 }
 
 /**
  * Set the audio input device on the server with its index
  */
-	static void
-select_audio_input_device(GtkComboBox* comboBox, gpointer data UNUSED)
+static void
+select_audio_input_device (GtkComboBox* comboBox, gpointer data UNUSED)
+{
+    GtkTreeModel* model;
+    GtkTreeIter iter;
+    int comboBoxIndex;
+    int deviceIndex;
+
+    comboBoxIndex = gtk_combo_box_get_active (comboBox);
+
+    if (comboBoxIndex >= 0) {
+        model = gtk_combo_box_get_model (comboBox);
+        gtk_combo_box_get_active_iter (comboBox, &iter);
+        gtk_tree_model_get (model, &iter, 1, &deviceIndex, -1);
+
+        dbus_set_audio_input_device (deviceIndex);
+    }
+}
+
+
+/**
++ * Set the audio ringtone device on the server with its index
++ */
+static void
+select_audio_ringtone_device (GtkComboBox *comboBox, gpointer data UNUSED)
 {
-	GtkTreeModel* model;
-	GtkTreeIter iter;
-	int comboBoxIndex;
-	int deviceIndex;
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+    int comboBoxIndex;
+    int deviceIndex;
+
+    comboBoxIndex = gtk_combo_box_get_active (comboBox);
 
-	comboBoxIndex = gtk_combo_box_get_active(comboBox);
+    if (comboBoxIndex >= 0) {
+        model = gtk_combo_box_get_model (comboBox);
+        gtk_combo_box_get_active_iter (comboBox, &iter);
 
-	if(comboBoxIndex >= 0)
-	{
-		model = gtk_combo_box_get_model(comboBox);
-		gtk_combo_box_get_active_iter(comboBox, &iter);
-		gtk_tree_model_get(model, &iter, 1, &deviceIndex, -1);
+        gtk_tree_model_get (model, &iter, 1, &deviceIndex, -1);
 
-		dbus_set_audio_input_device(deviceIndex);
-	}
+        dbus_set_audio_ringtone_device (deviceIndex);
+    }
 }
 
+
 /**
  * Toggle move buttons on if a codec is selected, off elsewise
  */
-	static void
-select_codec(GtkTreeSelection *selection, GtkTreeModel *model)
+static void
+select_codec (GtkTreeSelection *selection, GtkTreeModel *model)
 {
-	GtkTreeIter iter;
-
-	if(!gtk_tree_selection_get_selected(selection, &model, &iter))
-	{
-		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
-		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
-	}
-	else
-	{
-		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), TRUE);
-		gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), TRUE);
-	}
+    GtkTreeIter iter;
+
+    if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+        gtk_widget_set_sensitive (GTK_WIDGET (codecMoveUpButton), FALSE);
+        gtk_widget_set_sensitive (GTK_WIDGET (codecMoveDownButton), FALSE);
+    } else {
+        gtk_widget_set_sensitive (GTK_WIDGET (codecMoveUpButton), TRUE);
+        gtk_widget_set_sensitive (GTK_WIDGET (codecMoveDownButton), TRUE);
+    }
 }
 
 /**
  * Toggle active value of codec on click and update changes to the deamon
  * and in configuration files
  */
-	static void
-codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data )
+static void
+codec_active_toggled (GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data)
 {
-	GtkTreeIter iter;
-	GtkTreePath *treePath;
-	GtkTreeModel *model;
-	gboolean active;
-	char* name;
-	char* srate;
-	codec_t* codec;
-	account_t *acc;
-
-	// Get path of clicked codec active toggle box
-	treePath = gtk_tree_path_new_from_string(path);
-	model = gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView));
-	gtk_tree_model_get_iter(model, &iter, treePath);
-
-	// Retrieve userdata
-	acc = (account_t*) data;
-
-	if (!acc)
-		ERROR ("Aie, no account selected");
-
-	// Get active value and name at iteration
-	gtk_tree_model_get(model, &iter,
-			COLUMN_CODEC_ACTIVE, &active,
-			COLUMN_CODEC_NAME, &name,
-			COLUMN_CODEC_FREQUENCY, &srate,
-			-1);
-
-	printf("%s, %s\n", name, srate);
-	printf("%i\n", g_queue_get_length (acc->codecs));
-
-	// codec_list_get_by_name(name);
-	if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"8 kHz")==0))
-		codec = codec_list_get_by_payload((gconstpointer) 110, acc->codecs);
-	else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"16 kHz")==0))
-		codec = codec_list_get_by_payload((gconstpointer) 111, acc->codecs);
-	else if ((g_strcasecmp(name,"speex")==0) && (g_strcasecmp(srate,"32 kHz")==0))
-		codec = codec_list_get_by_payload((gconstpointer) 112, acc->codecs);
-	else
-		codec = codec_list_get_by_name ((gconstpointer) name, acc->codecs);
-
-	// Toggle active value
-	active = !active;
-
-	// Store value
-	gtk_list_store_set(GTK_LIST_STORE(model), &iter,
-			COLUMN_CODEC_ACTIVE, active,
-			-1);
-
-	gtk_tree_path_free(treePath);
-
-	// Modify codec queue to represent change
-	if (active)
-		codec_set_active (&codec);
-	else
-		codec_set_inactive (&codec);
-
-	// Perpetuate changes to the deamon
-	// codec_list_update_to_daemon (acc);
+    GtkTreeIter iter;
+    GtkTreePath *treePath;
+    GtkTreeModel *model;
+    gboolean active;
+    char* name;
+    char* srate;
+    codec_t* codec;
+    account_t *acc;
+
+    // Get path of clicked codec active toggle box
+    treePath = gtk_tree_path_new_from_string (path);
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView));
+    gtk_tree_model_get_iter (model, &iter, treePath);
+
+    // Retrieve userdata
+    acc = (account_t*) data;
+
+    if (!acc)
+        ERROR ("Aie, no account selected");
+
+    // Get active value and name at iteration
+    gtk_tree_model_get (model, &iter,
+                        COLUMN_CODEC_ACTIVE, &active,
+                        COLUMN_CODEC_NAME, &name,
+                        COLUMN_CODEC_FREQUENCY, &srate,
+                        -1);
+
+    printf ("%s, %s\n", name, srate);
+    printf ("%i\n", g_queue_get_length (acc->codecs));
+
+    // codec_list_get_by_name(name);
+    if ( (g_strcasecmp (name,"speex") ==0) && (g_strcasecmp (srate,"8 kHz") ==0))
+        codec = codec_list_get_by_payload ( (gconstpointer) 110, acc->codecs);
+    else if ( (g_strcasecmp (name,"speex") ==0) && (g_strcasecmp (srate,"16 kHz") ==0))
+        codec = codec_list_get_by_payload ( (gconstpointer) 111, acc->codecs);
+    else if ( (g_strcasecmp (name,"speex") ==0) && (g_strcasecmp (srate,"32 kHz") ==0))
+        codec = codec_list_get_by_payload ( (gconstpointer) 112, acc->codecs);
+    else
+        codec = codec_list_get_by_name ( (gconstpointer) name, acc->codecs);
+
+    // Toggle active value
+    active = !active;
+
+    // Store value
+    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+                        COLUMN_CODEC_ACTIVE, active,
+                        -1);
+
+    gtk_tree_path_free (treePath);
+
+    // Modify codec queue to represent change
+    if (active)
+        codec_set_active (&codec);
+    else
+        codec_set_inactive (&codec);
+
+    // Perpetuate changes to the deamon
+    // codec_list_update_to_daemon (acc);
 }
 
 /**
  * Move codec in list depending on direction and selected codec and
  * update changes in the daemon list and the configuration files
  */
-static void codec_move (gboolean moveUp, gpointer data) {
-
-	GtkTreeIter iter;
-	GtkTreeIter *iter2;
-	GtkTreeView *treeView;
-	GtkTreeModel *model;
-	GtkTreeSelection *selection;
-	GtkTreePath *treePath;
-	gchar *path;
-	account_t *acc;
-	GQueue *acc_q;
-
-	// Get view, model and selection of codec store
-	model = gtk_tree_view_get_model(GTK_TREE_VIEW(codecTreeView));
-	selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
-
-	// Retrieve the user data
-	acc = (account_t*) data;
-	if (acc)
-		acc_q = acc->codecs;
-
-	// Find selected iteration and create a copy
-	gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter);
-	iter2 = gtk_tree_iter_copy(&iter);
-
-	// Find path of iteration
-	path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(model), &iter);
-	treePath = gtk_tree_path_new_from_string(path);
-	gint *indices = gtk_tree_path_get_indices(treePath);
-	gint indice = indices[0];
-
-	// Depending on button direction get new path
-	if(moveUp)
-		gtk_tree_path_prev(treePath);
-	else
-		gtk_tree_path_next(treePath);
-	gtk_tree_model_get_iter(model, &iter, treePath);
-
-	// Swap iterations if valid
-	if(gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
-		gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter2);
-
-	// Scroll to new position
-	gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (codecTreeView), treePath, NULL, FALSE, 0, 0);
-
-	// Free resources
-	gtk_tree_path_free(treePath);
-	gtk_tree_iter_free(iter2);
-	g_free(path);
-
-	// Perpetuate changes in codec queue
-	if(moveUp)
-		codec_list_move_codec_up (indice, &acc_q);
-	else
-		codec_list_move_codec_down (indice, &acc_q);
+static void codec_move (gboolean moveUp, gpointer data)
+{
+
+    GtkTreeIter iter;
+    GtkTreeIter *iter2;
+    GtkTreeModel *model;
+    GtkTreeSelection *selection;
+    GtkTreePath *treePath;
+    gchar *path;
+    account_t *acc;
+    GQueue *acc_q;
+
+    // Get view, model and selection of codec store
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (codecTreeView));
+    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (codecTreeView));
+
+    // Retrieve the user data
+    acc = (account_t*) data;
+
+    if (acc)
+        acc_q = acc->codecs;
+
+    // Find selected iteration and create a copy
+    gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), &model, &iter);
+    iter2 = gtk_tree_iter_copy (&iter);
+
+    // Find path of iteration
+    path = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL (model), &iter);
+    treePath = gtk_tree_path_new_from_string (path);
+    gint *indices = gtk_tree_path_get_indices (treePath);
+    gint indice = indices[0];
+
+    // Depending on button direction get new path
+    if (moveUp)
+        gtk_tree_path_prev (treePath);
+    else
+        gtk_tree_path_next (treePath);
+
+    gtk_tree_model_get_iter (model, &iter, treePath);
+
+    // Swap iterations if valid
+    if (gtk_list_store_iter_is_valid (GTK_LIST_STORE (model), &iter))
+        gtk_list_store_swap (GTK_LIST_STORE (model), &iter, iter2);
+
+    // Scroll to new position
+    gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (codecTreeView), treePath, NULL, FALSE, 0, 0);
+
+    // Free resources
+    gtk_tree_path_free (treePath);
+    gtk_tree_iter_free (iter2);
+    g_free (path);
+
+    // Perpetuate changes in codec queue
+    if (moveUp)
+        codec_list_move_codec_up (indice, &acc_q);
+    else
+        codec_list_move_codec_down (indice, &acc_q);
 
 }
 
 /**
  * Called from move up codec button signal
  */
-static void codec_move_up (GtkButton *button UNUSED, gpointer data) {
+static void codec_move_up (GtkButton *button UNUSED, gpointer data)
+{
 
-	// Change tree view ordering and get indice changed
-	codec_move (TRUE, data);
+    // Change tree view ordering and get indice changed
+    codec_move (TRUE, data);
 }
 
 /**
  * Called from move down codec button signal
  */
-static void codec_move_down(GtkButton *button UNUSED, gpointer data) {
-
-	// Change tree view ordering and get indice changed
-	codec_move (FALSE, data);
-}
-
-	int
-is_ringtone_enabled( void )
+static void codec_move_down (GtkButton *button UNUSED, gpointer data)
 {
-	return dbus_is_ringtone_enabled();
-}
 
-	void
-ringtone_enabled( void )
-{
-	dbus_ringtone_enabled();
+    // Change tree view ordering and get indice changed
+    codec_move (FALSE, data);
 }
 
-	void
-ringtone_changed( GtkFileChooser *chooser , GtkLabel *label UNUSED)
+GtkWidget* codecs_box (account_t **a)
 {
-	gchar* tone = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( chooser ));
-	dbus_set_ringtone_choice( tone );
+    GtkWidget *ret;
+    GtkWidget *scrolledWindow;
+    GtkWidget *buttonBox;
+
+    GtkListStore *codecStore;
+    GtkCellRenderer *renderer;
+    GtkTreeSelection *treeSelection;
+    GtkTreeViewColumn *treeViewColumn;
+
+    ret = gtk_hbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
+
+    scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledWindow), GTK_SHADOW_IN);
+
+    gtk_box_pack_start (GTK_BOX (ret), scrolledWindow, TRUE, TRUE, 0);
+    codecStore = gtk_list_store_new (CODEC_COLUMN_COUNT,
+                                     G_TYPE_BOOLEAN,		// Active
+                                     G_TYPE_STRING,		// Name
+                                     G_TYPE_STRING,		// Frequency
+                                     G_TYPE_STRING,		// Bit rate
+                                     G_TYPE_STRING		// Bandwith
+                                    );
+
+    // Create codec tree view with list store
+    codecTreeView = gtk_tree_view_new_with_model (GTK_TREE_MODEL (codecStore));
+
+    // Get tree selection manager
+    treeSelection = gtk_tree_view_get_selection (GTK_TREE_VIEW (codecTreeView));
+    g_signal_connect (G_OBJECT (treeSelection), "changed",
+                      G_CALLBACK (select_codec),
+                      codecStore);
+
+    // Active column
+    renderer = gtk_cell_renderer_toggle_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes ("", renderer, "active", COLUMN_CODEC_ACTIVE, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (codecTreeView), treeViewColumn);
+
+    // Toggle codec active property on clicked
+    g_signal_connect (G_OBJECT (renderer), "toggled", G_CALLBACK (codec_active_toggled), (gpointer) *a);
+
+    // Name column
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Name"), renderer, "markup", COLUMN_CODEC_NAME, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (codecTreeView), treeViewColumn);
+
+    // Bit rate column
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Frequency"), renderer, "text", COLUMN_CODEC_FREQUENCY, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (codecTreeView), treeViewColumn);
+
+    // Bandwith column
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Bitrate"), renderer, "text", COLUMN_CODEC_BITRATE, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (codecTreeView), treeViewColumn);
+
+    // Frequency column
+    renderer = gtk_cell_renderer_text_new();
+    treeViewColumn = gtk_tree_view_column_new_with_attributes (_ ("Bandwidth"), renderer, "text", COLUMN_CODEC_BANDWIDTH, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (codecTreeView), treeViewColumn);
+
+    g_object_unref (G_OBJECT (codecStore));
+    gtk_container_add (GTK_CONTAINER (scrolledWindow), codecTreeView);
+
+    // Create button box
+    buttonBox = gtk_vbox_new (FALSE, 0);
+    gtk_container_set_border_width (GTK_CONTAINER (buttonBox), 10);
+    gtk_box_pack_start (GTK_BOX (ret), buttonBox, FALSE, FALSE, 0);
+
+    codecMoveUpButton = gtk_button_new_from_stock (GTK_STOCK_GO_UP);
+    gtk_widget_set_sensitive (GTK_WIDGET (codecMoveUpButton), FALSE);
+    gtk_box_pack_start (GTK_BOX (buttonBox), codecMoveUpButton, FALSE, FALSE, 0);
+    g_signal_connect (G_OBJECT (codecMoveUpButton), "clicked", G_CALLBACK (codec_move_up), *a);
+
+    codecMoveDownButton = gtk_button_new_from_stock (GTK_STOCK_GO_DOWN);
+    gtk_widget_set_sensitive (GTK_WIDGET (codecMoveDownButton), FALSE);
+    gtk_box_pack_start (GTK_BOX (buttonBox), codecMoveDownButton, FALSE, FALSE, 0);
+    g_signal_connect (G_OBJECT (codecMoveDownButton), "clicked", G_CALLBACK (codec_move_down), *a);
+
+    preferences_dialog_fill_codec_list (a);
+
+    return ret;
 }
 
-	gchar*
-get_ringtone_choice( void )
+void
+select_audio_manager (void)
 {
-	return dbus_get_ringtone_choice();
-}
+    DEBUG ("audio manager selected");
+
+    if (!SHOW_ALSA_CONF && !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pulse))) {
+        dbus_set_audio_manager (ALSA);
+        DEBUG (" display alsa conf panel");
+        alsabox = alsa_box();
+        gtk_container_add (GTK_CONTAINER (alsa_conf) , alsabox);
+        gtk_widget_show (alsa_conf);
+        gtk_widget_set_sensitive (GTK_WIDGET (alsa_conf), TRUE);
+
+        gtk_action_set_sensitive (GTK_ACTION (volumeToggle), TRUE);
+    } else if (SHOW_ALSA_CONF && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (pulse))) {
+        dbus_set_audio_manager (PULSEAUDIO);
+        DEBUG (" remove alsa conf panel");
+        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);
+            eel_gconf_set_integer (SHOW_VOLUME_CONTROLS, FALSE);
+            gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (volumeToggle), FALSE);
+        }
+
+        gtk_action_set_sensitive (GTK_ACTION (volumeToggle), FALSE);
+    } else {
+        DEBUG ("alsa conf panel...nothing");
+    }
 
+}
 
-GtkWidget* codecs_box (account_t **a)
+void
+active_noise_suppress (void)
 {
-	GtkWidget *ret;
-	GtkWidget *scrolledWindow;
-	GtkWidget *buttonBox;
 
-	GtkListStore *codecStore;
-	GtkCellRenderer *renderer;
-	GtkTreeSelection *treeSelection;
-	GtkTreeViewColumn *treeViewColumn;
+    gchar *state;
+    gchar *newstate;
 
-	ret = gtk_hbox_new(FALSE, 10);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+    DEBUG ("Audio: Active noise suppression clicked");
+    state = dbus_get_noise_suppress_state();
 
-	scrolledWindow = gtk_scrolled_window_new(NULL, NULL);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledWindow), GTK_SHADOW_IN);
-
-	gtk_box_pack_start(GTK_BOX(ret), scrolledWindow, TRUE, TRUE, 0);
-	codecStore = gtk_list_store_new(CODEC_COLUMN_COUNT,
-			G_TYPE_BOOLEAN,		// Active
-			G_TYPE_STRING,		// Name
-			G_TYPE_STRING,		// Frequency
-			G_TYPE_STRING,		// Bit rate
-			G_TYPE_STRING		// Bandwith
-			);
-
-	// Create codec tree view with list store
-	codecTreeView = gtk_tree_view_new_with_model(GTK_TREE_MODEL(codecStore));
-
-	// Get tree selection manager
-	treeSelection = gtk_tree_view_get_selection(GTK_TREE_VIEW(codecTreeView));
-	g_signal_connect(G_OBJECT(treeSelection), "changed",
-			G_CALLBACK (select_codec),
-			codecStore);
-
-	// Active column
-	renderer = gtk_cell_renderer_toggle_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_CODEC_ACTIVE, NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
-
-	// Toggle codec active property on clicked
-	g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK (codec_active_toggled), (gpointer) *a);
-
-	// Name column
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_CODEC_NAME, NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
-
-	// Bit rate column
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Frequency"), renderer, "text", COLUMN_CODEC_FREQUENCY, NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
-
-	// Bandwith column
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Bitrate"), renderer, "text", COLUMN_CODEC_BITRATE, NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
-
-	// Frequency column
-	renderer = gtk_cell_renderer_text_new();
-	treeViewColumn = gtk_tree_view_column_new_with_attributes(_("Bandwidth"), renderer, "text", COLUMN_CODEC_BANDWIDTH, NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(codecTreeView), treeViewColumn);
-
-	g_object_unref(G_OBJECT(codecStore));
-	gtk_container_add(GTK_CONTAINER(scrolledWindow), codecTreeView);
-
-	// Create button box
-	buttonBox = gtk_vbox_new(FALSE, 0);
-	gtk_container_set_border_width(GTK_CONTAINER(buttonBox), 10);
-	gtk_box_pack_start(GTK_BOX(ret), buttonBox, FALSE, FALSE, 0);
-
-	codecMoveUpButton = gtk_button_new_from_stock(GTK_STOCK_GO_UP);
-	gtk_widget_set_sensitive(GTK_WIDGET(codecMoveUpButton), FALSE);
-	gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveUpButton, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(codecMoveUpButton), "clicked", G_CALLBACK(codec_move_up), *a);
-
-	codecMoveDownButton = gtk_button_new_from_stock(GTK_STOCK_GO_DOWN);
-	gtk_widget_set_sensitive(GTK_WIDGET(codecMoveDownButton), FALSE);
-	gtk_box_pack_start(GTK_BOX(buttonBox), codecMoveDownButton, FALSE, FALSE, 0);
-	g_signal_connect(G_OBJECT(codecMoveDownButton), "clicked", G_CALLBACK(codec_move_down), *a);
-
-	preferences_dialog_fill_codec_list (a);
+    DEBUG ("Audio: Get noise suppression cancel state %s", state);
 
-	return ret;
-}
+    if (strcmp (state, "enabled") == 0)
+        newstate = "disabled";
+    else
+        newstate = "enabled";
 
-	void
-select_audio_manager( void )
-{
+    dbus_set_noise_suppress_state (newstate);
 
-	DEBUG("audio manager selected\n");
-
-	if( !SHOW_ALSA_CONF && !gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ) )
-	{
-		dbus_set_audio_manager( ALSA );
-		DEBUG(" display alsa conf panel");
-		alsabox = alsa_box();
-		gtk_container_add( GTK_CONTAINER(alsa_conf ) , alsabox);
-		gtk_widget_show( alsa_conf );
-		gtk_widget_set_sensitive(GTK_WIDGET(alsa_conf), TRUE);
-
-		gtk_action_set_sensitive (GTK_ACTION (volumeToggle), TRUE);
-	}
-	else if( SHOW_ALSA_CONF && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(pulse) ))
-	{
-		dbus_set_audio_manager( PULSEAUDIO );
-		DEBUG(" remove alsa conf panel");
-		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);
-			dbus_set_volume_controls (FALSE);
-			gtk_toggle_action_set_active ( GTK_TOGGLE_ACTION (volumeToggle), FALSE);
-		}
-		gtk_action_set_sensitive (GTK_ACTION (volumeToggle), FALSE);
-	} else {
-		DEBUG("alsa conf panel...nothing");
-	}
 
 }
 
 GtkWidget* alsa_box()
 {
-	GtkWidget *ret;
-	GtkWidget *table;
-	GtkWidget *item;
-	GtkCellRenderer *renderer;
-
-	ret = gtk_hbox_new(FALSE, 10);
-	gtk_widget_show( ret );
-
-	table = gtk_table_new(4, 3, FALSE);
-	gtk_table_set_col_spacing(GTK_TABLE(table), 0, 40);
-	gtk_box_pack_start( GTK_BOX(ret) , table , TRUE , TRUE , 1);
-	gtk_widget_show(table);
-
-	DEBUG("plugin");
-	item = gtk_label_new(_("ALSA plugin"));
-	gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
-	gtk_table_attach(GTK_TABLE(table), item, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-	gtk_widget_show( item );
-	// Set choices of audio managers
-	pluginlist = gtk_list_store_new(1, G_TYPE_STRING);
-	preferences_dialog_fill_output_audio_plugin_list();
-	plugin = gtk_combo_box_new_with_model(GTK_TREE_MODEL(pluginlist));
-	select_active_output_audio_plugin();
-	gtk_label_set_mnemonic_widget(GTK_LABEL(item), plugin);
-	g_signal_connect(G_OBJECT(plugin), "changed", G_CALLBACK(select_output_audio_plugin), plugin);
-
-	// Set rendering
-	renderer = gtk_cell_renderer_text_new();
-	gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(plugin), renderer, TRUE);
-	gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(plugin), renderer, "text", 0, NULL);
-	gtk_table_attach(GTK_TABLE(table), plugin, 2, 3, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-	gtk_widget_show(plugin);
-
-	// Device : Output device
-	// Create title label
-	DEBUG("output");
-	item = gtk_label_new(_("Output"));
-	gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
-	gtk_table_attach(GTK_TABLE(table), item, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-	gtk_widget_show(item);
-	// 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(item), output);
-	g_signal_connect(G_OBJECT(output), "changed", G_CALLBACK(select_audio_output_device), output);
-
-	// Set rendering
-	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, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-	gtk_widget_show(output);
-
-	// Device : Input device
-	// Create title label
-	DEBUG("input");
-	item = gtk_label_new(_("Input"));
-	gtk_misc_set_alignment(GTK_MISC(item), 0, 0.5);
-	gtk_table_attach(GTK_TABLE(table), item, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-	gtk_widget_show(item);
-
-	// Set choices of output 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(item), 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, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
-	gtk_widget_show(input);
-
-	gtk_widget_show_all(ret);
-
-	DEBUG("done");
-	return ret;
-}
-
-GtkWidget* noise_box()
-{
-	GtkWidget *ret;
-	GtkWidget *enableVoiceActivity;
-	GtkWidget *enableNoiseReduction;
-
-	// check button to enable ringtones
-	ret = gtk_hbox_new( TRUE , 1);
-
-	enableVoiceActivity = gtk_check_button_new_with_mnemonic( _("_Voice Activity Detection"));
-	//TODO Use the value from D-BUS
-	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableVoiceActivity), FALSE );
-	gtk_box_pack_start( GTK_BOX(ret) , enableVoiceActivity , TRUE , TRUE , 1);
-	//TODO Enable it
-	//gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE);
-	//TODO Add a callback function
-	//g_signal_connect(G_OBJECT( enableNoiseReduction) , "clicked" , NULL , NULL);
-
-
-	enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction (Narrow-Band Companding)"));
-	//TODO Use the value from D-BUS
-	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableNoiseReduction), FALSE );
-	gtk_box_pack_start( GTK_BOX(ret) , enableNoiseReduction , TRUE , TRUE , 1);
-	//TODO Enable it
-	// gtk_widget_set_sensitive(GTK_WIDGET(noise_conf), FALSE);
-	//TODO Add a callback function
-	//g_signal_connect(G_OBJECT( enableNoiseReduction) , "clicked" , NULL , NULL);
-
-	return ret;
+    GtkWidget *ret;
+    GtkWidget *table;
+    GtkWidget *item;
+    GtkCellRenderer *renderer;
+
+    ret = gtk_hbox_new (FALSE, 10);
+    gtk_widget_show (ret);
+
+    table = gtk_table_new (5, 3, FALSE);
+    gtk_table_set_col_spacing (GTK_TABLE (table), 0, 40);
+    gtk_box_pack_start (GTK_BOX (ret) , table , TRUE , TRUE , 1);
+    gtk_widget_show (table);
+
+    DEBUG ("Audio: Configuration plugin");
+    item = gtk_label_new (_ ("ALSA plugin"));
+    gtk_misc_set_alignment (GTK_MISC (item), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), item, 1, 2, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (item);
+    // Set choices of audio managers
+    pluginlist = gtk_list_store_new (1, G_TYPE_STRING);
+    preferences_dialog_fill_audio_plugin_list();
+    plugin = gtk_combo_box_new_with_model (GTK_TREE_MODEL (pluginlist));
+    select_active_output_audio_plugin();
+    gtk_label_set_mnemonic_widget (GTK_LABEL (item), plugin);
+    g_signal_connect (G_OBJECT (plugin), "changed", G_CALLBACK (select_output_audio_plugin), plugin);
+
+    // Set rendering
+    renderer = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (plugin), renderer, TRUE);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (plugin), renderer, "text", 0, NULL);
+    gtk_table_attach (GTK_TABLE (table), plugin, 2, 3, 1, 2, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (plugin);
+
+    // Device : Output device
+    // Create title label
+    DEBUG ("Audio: Configuration output");
+    item = gtk_label_new (_ ("Output"));
+    gtk_misc_set_alignment (GTK_MISC (item), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), item, 1, 2, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (item);
+    // 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 (item), output);
+    g_signal_connect (G_OBJECT (output), "changed", G_CALLBACK (select_audio_output_device), output);
+
+    // Set rendering
+    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, 2, 3, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (output);
+
+    // Device : Input device
+    // Create title label
+    DEBUG ("Audio: Configuration input");
+    item = gtk_label_new (_ ("Input"));
+    gtk_misc_set_alignment (GTK_MISC (item), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), item, 1, 2, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (item);
+
+    // Set choices of output 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 (item), input);
+    g_signal_connect (G_OBJECT (input), "changed", G_CALLBACK (select_audio_input_device), input);
+
+    DEBUG ("Audio: Configuration rintgtone");
+    item = gtk_label_new (_ ("Ringtone"));
+    gtk_misc_set_alignment (GTK_MISC (item), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), item, 1, 2, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (item);
+    // 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 (item), 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, 4, 5, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (ringtone);
+
+
+    // 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, 3, 4, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
+    gtk_widget_show (input);
+
+    gtk_widget_show_all (ret);
+
+    DEBUG ("done");
+    return ret;
 }
 
-static void record_path_changed( GtkFileChooser *chooser , GtkLabel *label UNUSED)
+static void record_path_changed (GtkFileChooser *chooser , GtkLabel *label UNUSED)
 {
-	DEBUG("record_path_changed");
+    DEBUG ("record_path_changed");
 
-	gchar* path;
-	path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( chooser ));
-	DEBUG("path2 %s", path);
-	dbus_set_record_path( path );
+    gchar* path;
+    path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
+    DEBUG ("path2 %s", path);
+    dbus_set_record_path (path);
 }
 
 GtkWidget* create_audio_configuration()
 {
-	// Main widget
-	GtkWidget *ret;
-	// Sub boxes
-	GtkWidget *box;
-	GtkWidget *frame;
-
-	ret = gtk_vbox_new(FALSE, 10);
-	gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-
-	GtkWidget *alsa;
-	GtkWidget *table;
-
-	gnome_main_section_new_with_table (_("Sound Manager"), &frame, &table, 1, 2);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-	int audio_manager = dbus_get_audio_manager();
-	gboolean pulse_audio = FALSE;
-	if (audio_manager == PULSEAUDIO) {
-		pulse_audio = TRUE;
-	}
-
-	pulse = gtk_radio_button_new_with_mnemonic( NULL , _("_Pulseaudio"));
-	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);
-
-	alsa = gtk_radio_button_new_with_mnemonic_from_widget(GTK_RADIO_BUTTON(pulse),  _("_ALSA"));
-	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 the ALSA configuration
-	gnome_main_section_new (_("ALSA settings"), &alsa_conf);
-	gtk_box_pack_start(GTK_BOX(ret), alsa_conf, FALSE, FALSE, 0);
-	gtk_widget_show( alsa_conf );
-	if( SHOW_ALSA_CONF )
-	{
-		// Box for the ALSA configuration
-		printf("ALSA Created \n");
-		alsabox = alsa_box();
-		gtk_container_add( GTK_CONTAINER(alsa_conf) , alsabox );
-		gtk_widget_hide( alsa_conf );
-	}
-
-	// Recorded file saving path
-	GtkWidget *label;
-	GtkWidget *folderChooser;
-	gchar *dftPath;
-
-	/* Get the path where to save audio files */
-	dftPath = dbus_get_record_path ();
-	DEBUG("load recording path %s\n", dftPath);
-
-	gnome_main_section_new_with_table (_("Recordings"), &frame, &table, 1, 2);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-	// label
-	label = gtk_label_new(_("Destination folder"));
-	gtk_table_attach( GTK_TABLE(table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-	// folder chooser button
-	folderChooser = gtk_file_chooser_button_new(_("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-	gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER( folderChooser), dftPath);
-	g_signal_connect( G_OBJECT( folderChooser ) , "selection_changed" , G_CALLBACK( record_path_changed ) , NULL );
-	gtk_table_attach(GTK_TABLE(table), folderChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-	// Box for the ringtones
-	gnome_main_section_new_with_table (_("Ringtones"), &frame, &table, 1, 2);
-	gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); 
-
-	GtkWidget *enableTone;
-	GtkWidget *fileChooser;
-
-	enableTone = gtk_check_button_new_with_mnemonic( _("_Enable ringtones"));
-	gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(enableTone), dbus_is_ringtone_enabled() );
-	g_signal_connect(G_OBJECT( enableTone) , "clicked" , G_CALLBACK( ringtone_enabled ) , NULL);
-	gtk_table_attach ( GTK_TABLE( table ), enableTone, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	// file chooser button
-	fileChooser = gtk_file_chooser_button_new(_("Choose a ringtone"), GTK_FILE_CHOOSER_ACTION_OPEN);
-	gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER( fileChooser) , g_get_home_dir());
-	gtk_file_chooser_set_filename(GTK_FILE_CHOOSER( fileChooser) , get_ringtone_choice());
-	g_signal_connect( G_OBJECT( fileChooser ) , "selection_changed" , G_CALLBACK( ringtone_changed ) , NULL );
-
-	GtkFileFilter *filter = gtk_file_filter_new();
-	gtk_file_filter_set_name( filter , _("Audio Files") );
-	gtk_file_filter_add_pattern(filter , "*.wav" );
-	gtk_file_filter_add_pattern(filter , "*.ul" );
-	gtk_file_filter_add_pattern(filter , "*.au" );
-	gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( fileChooser ) , filter);
-	gtk_table_attach ( GTK_TABLE( table ), fileChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-	gtk_widget_show_all(ret);
-
-	if(!pulse_audio) {
-		gtk_widget_show(alsa_conf);
-	}
-	else{
-		gtk_widget_hide(alsa_conf);
-	}
-
-	return ret;
+    // Main widget
+    GtkWidget *ret;
+    // Sub boxes
+    GtkWidget *frame;
+    GtkWidget *enableNoiseReduction;
+    gboolean noisesuppressActive;
+    gchar *state;
+
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
+
+    GtkWidget *alsa;
+    GtkWidget *table;
+
+    gnome_main_section_new_with_table (_ ("Sound Manager"), &frame, &table, 1, 2);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    int audio_manager = dbus_get_audio_manager();
+    gboolean pulse_audio = FALSE;
+
+    if (audio_manager == PULSEAUDIO) {
+        pulse_audio = TRUE;
+    }
+
+    pulse = gtk_radio_button_new_with_mnemonic (NULL , _ ("_Pulseaudio"));
+    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);
+
+    alsa = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (pulse),  _ ("_ALSA"));
+    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 the ALSA configuration
+    gnome_main_section_new (_ ("ALSA settings"), &alsa_conf);
+    gtk_box_pack_start (GTK_BOX (ret), alsa_conf, FALSE, FALSE, 0);
+    gtk_widget_show (alsa_conf);
+
+    if (SHOW_ALSA_CONF) {
+        // Box for the ALSA configuration
+        alsabox = alsa_box();
+        gtk_container_add (GTK_CONTAINER (alsa_conf) , alsabox);
+        gtk_widget_hide (alsa_conf);
+    }
+
+    // Recorded file saving path
+    GtkWidget *label;
+    GtkWidget *folderChooser;
+    gchar *dftPath;
+
+    /* Get the path where to save audio files */
+    dftPath = dbus_get_record_path ();
+    DEBUG ("load recording path %s\n", dftPath);
+
+    gnome_main_section_new_with_table (_ ("Recordings"), &frame, &table, 1, 2);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    // label
+    label = gtk_label_new (_ ("Destination folder"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    // folder chooser button
+    folderChooser = gtk_file_chooser_button_new (_ ("Select a folder"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
+    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (folderChooser), dftPath);
+    g_signal_connect (G_OBJECT (folderChooser) , "selection_changed" , G_CALLBACK (record_path_changed) , NULL);
+    gtk_table_attach (GTK_TABLE (table), folderChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+
+    // Box for the voice enhancement configuration
+    gnome_main_section_new_with_table (_ ("Voice enhancement settings"), &frame, &table, 2, 1);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    enableNoiseReduction = gtk_check_button_new_with_mnemonic (_ ("_Noise Reduction"));
+    state = dbus_get_noise_suppress_state();
+    noisesuppressActive = FALSE;
+
+    if (strcmp (state, "enabled") == 0)
+        noisesuppressActive = TRUE;
+    else
+        noisesuppressActive = FALSE;
+
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enableNoiseReduction), noisesuppressActive);
+    g_signal_connect (G_OBJECT (enableNoiseReduction), "clicked", active_noise_suppress, NULL);
+    gtk_table_attach (GTK_TABLE (table), enableNoiseReduction, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    gtk_widget_show_all (ret);
+
+    if (!pulse_audio) {
+        gtk_widget_show (alsa_conf);
+    } else {
+        gtk_widget_hide (alsa_conf);
+    }
+
+    return ret;
 }
 /*
 GtkWidget* create_codecs_configuration (account_t **a) {
diff --git a/sflphone-client-gnome/src/config/audioconf.h b/sflphone-client-gnome/src/config/audioconf.h
index b195b947d8ce1d0b6ff6f35ca0cb077469f56ce4..70fadb3dc3c06c1fc7af069d8e4e52bec6595b33 100644
--- a/sflphone-client-gnome/src/config/audioconf.h
+++ b/sflphone-client-gnome/src/config/audioconf.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -42,6 +42,6 @@ GtkWidget* pulse_box();
 GtkWidget* codecs_box();
 GtkWidget* ringtone_box();
 
-gboolean get_api( );
+gboolean get_api();
 
 #endif // __AUDIO_CONF_H
diff --git a/sflphone-client-gnome/src/config/hooks-config.c b/sflphone-client-gnome/src/config/hooks-config.c
index 7331cc88fc94e634f1097c7585ff12e71d66ee8c..df257d6eaa561cf777cadb03a55ada635b0ad325 100644
--- a/sflphone-client-gnome/src/config/hooks-config.c
+++ b/sflphone-client-gnome/src/config/hooks-config.c
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -34,14 +34,15 @@ URLHook_Config *_urlhook_config;
 
 GtkWidget *field, *command, *prefix;
 
-void hooks_load_parameters (URLHook_Config** settings){
+void hooks_load_parameters (URLHook_Config** settings)
+{
 
     GHashTable *_params = NULL;
     URLHook_Config *_settings;
 
     // Allocate a struct
     _settings = g_new0 (URLHook_Config, 1);
-    
+
     // Fetch the settings from D-Bus
     _params = (GHashTable*) dbus_get_hook_settings ();
 
@@ -52,38 +53,38 @@ void hooks_load_parameters (URLHook_Config** settings){
         _settings->iax2_enabled = "0";
         _settings->phone_number_enabled = "0";
         _settings->phone_number_prefix = "";
+    } else {
+        _settings->sip_field = (gchar*) (g_hash_table_lookup (_params, URLHOOK_SIP_FIELD));
+        _settings->command = (gchar*) (g_hash_table_lookup (_params, URLHOOK_COMMAND));
+        _settings->sip_enabled = (gchar*) (g_hash_table_lookup (_params, URLHOOK_SIP_ENABLED));
+        _settings->iax2_enabled = (gchar*) (g_hash_table_lookup (_params, URLHOOK_IAX2_ENABLED));
+        _settings->phone_number_enabled = (gchar*) (g_hash_table_lookup (_params, PHONE_NUMBER_HOOK_ENABLED));
+        _settings->phone_number_prefix = (gchar*) (g_hash_table_lookup (_params, PHONE_NUMBER_HOOK_ADD_PREFIX));
     }
-    else {
-        _settings->sip_field =  (gchar*)(g_hash_table_lookup (_params, URLHOOK_SIP_FIELD));
-        _settings->command =  (gchar*)(g_hash_table_lookup (_params, URLHOOK_COMMAND));
-        _settings->sip_enabled =  (gchar*)(g_hash_table_lookup (_params, URLHOOK_SIP_ENABLED));
-        _settings->iax2_enabled =  (gchar*)(g_hash_table_lookup (_params, URLHOOK_IAX2_ENABLED));
-        _settings->phone_number_enabled =  (gchar*)(g_hash_table_lookup (_params, PHONE_NUMBER_HOOK_ENABLED ));
-        _settings->phone_number_prefix =  (gchar*)(g_hash_table_lookup (_params, PHONE_NUMBER_HOOK_ADD_PREFIX ));
-    }
- 
+
     *settings = _settings;
 }
 
 
-void hooks_save_parameters (void){
+void hooks_save_parameters (void)
+{
 
     GHashTable *params = NULL;
-    
+
     params = g_hash_table_new (NULL, g_str_equal);
-    g_hash_table_replace (params, (gpointer)URLHOOK_SIP_FIELD, 
-                                g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(field))));
-    g_hash_table_replace (params, (gpointer)URLHOOK_COMMAND, 
-                                g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(command))));
-    g_hash_table_replace (params, (gpointer)URLHOOK_SIP_ENABLED, 
-                                (gpointer)g_strdup(_urlhook_config->sip_enabled));
-    g_hash_table_replace (params, (gpointer)URLHOOK_IAX2_ENABLED, 
-                                (gpointer)g_strdup(_urlhook_config->iax2_enabled));
-    g_hash_table_replace (params, (gpointer)PHONE_NUMBER_HOOK_ENABLED, 
-                                (gpointer)g_strdup(_urlhook_config->phone_number_enabled));
-    g_hash_table_replace (params, (gpointer)PHONE_NUMBER_HOOK_ADD_PREFIX, 
-                                g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(prefix)))); 
-    
+    g_hash_table_replace (params, (gpointer) URLHOOK_SIP_FIELD,
+                          g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (field))));
+    g_hash_table_replace (params, (gpointer) URLHOOK_COMMAND,
+                          g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (command))));
+    g_hash_table_replace (params, (gpointer) URLHOOK_SIP_ENABLED,
+                          (gpointer) g_strdup (_urlhook_config->sip_enabled));
+    g_hash_table_replace (params, (gpointer) URLHOOK_IAX2_ENABLED,
+                          (gpointer) g_strdup (_urlhook_config->iax2_enabled));
+    g_hash_table_replace (params, (gpointer) PHONE_NUMBER_HOOK_ENABLED,
+                          (gpointer) g_strdup (_urlhook_config->phone_number_enabled));
+    g_hash_table_replace (params, (gpointer) PHONE_NUMBER_HOOK_ADD_PREFIX,
+                          g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (prefix))));
+
     dbus_set_hook_settings (params);
 
     // Decrement the reference count
@@ -91,104 +92,111 @@ void hooks_save_parameters (void){
 
 }
 
-static void sip_enabled_cb (GtkWidget *widget) {
+static void sip_enabled_cb (GtkWidget *widget)
+{
 
     guint check;
 
-    check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+    check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
     if (check)
         _urlhook_config->sip_enabled="1";
     else
         _urlhook_config->sip_enabled="0";
 }
 
-static void iax2_enabled_cb (GtkWidget *widget) {
+static void iax2_enabled_cb (GtkWidget *widget)
+{
 
     guint check;
 
-    check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
+    check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
     if (check)
         _urlhook_config->iax2_enabled="1";
     else
         _urlhook_config->iax2_enabled="0";
 }
 
-static void phone_number_enabled_cb (GtkWidget *widget) {
+static void phone_number_enabled_cb (GtkWidget *widget)
+{
 
     guint check;
 
-    check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
-    if (check){
+    check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+    if (check) {
         _urlhook_config->phone_number_enabled="1";
-        gtk_widget_set_sensitive (GTK_WIDGET (prefix), TRUE);  
-    }else{
+        gtk_widget_set_sensitive (GTK_WIDGET (prefix), TRUE);
+    } else {
         _urlhook_config->phone_number_enabled="0";
-        gtk_widget_set_sensitive (GTK_WIDGET (prefix), FALSE);  
+        gtk_widget_set_sensitive (GTK_WIDGET (prefix), FALSE);
     }
 }
 
 
-GtkWidget* create_hooks_settings (){
+GtkWidget* create_hooks_settings ()
+{
 
     GtkWidget *ret, *frame, *table, *label, *widg;
 
     // Load the user value
     hooks_load_parameters (&_urlhook_config);
 
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
 
-    gnome_main_section_new_with_table (_("URL Argument"), &frame, &table, 5, 2);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
+    gnome_main_section_new_with_table (_ ("URL Argument"), &frame, &table, 5, 2);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
     gtk_widget_show (frame);
 
 
-    label = gtk_label_new(_("Custom commands on incoming calls with URL"));
-    gtk_table_attach ( GTK_TABLE( table ), label, 0, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new (_ ("Custom commands on incoming calls with URL"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 2, 0, 1, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    label = gtk_label_new (_ ("%s will be replaced with the passed URL."));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 2, 1, 2, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-    label = gtk_label_new(_("%s will be replaced with the passed URL."));
-    gtk_table_attach ( GTK_TABLE( table ), label, 0, 2, 1, 2, GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    widg = gtk_check_button_new_with_mnemonic (_ ("Trigger on specific _SIP header"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widg), (g_strcasecmp (_urlhook_config->sip_enabled, "1") ==0) ?TRUE:FALSE);
+    g_signal_connect (G_OBJECT (widg) , "clicked" , G_CALLBACK (sip_enabled_cb), NULL);
+    gtk_table_attach (GTK_TABLE (table), widg, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-    widg = gtk_check_button_new_with_mnemonic( _("Trigger on specific _SIP header"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->sip_enabled, "1")==0)?TRUE:FALSE);
-    g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (sip_enabled_cb), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), widg, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
- 
     field = gtk_entry_new ();
-    gtk_entry_set_text(GTK_ENTRY(field), _urlhook_config->sip_field);
-    gtk_table_attach ( GTK_TABLE( table ), field, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_entry_set_text (GTK_ENTRY (field), _urlhook_config->sip_field);
+    gtk_table_attach (GTK_TABLE (table), field, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-    widg = gtk_check_button_new_with_mnemonic( _("Trigger on _IAX2 URL"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->iax2_enabled, "1")==0)?TRUE:FALSE); 
-    g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (iax2_enabled_cb), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), widg, 0, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    widg = gtk_check_button_new_with_mnemonic (_ ("Trigger on _IAX2 URL"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widg), (g_strcasecmp (_urlhook_config->iax2_enabled, "1") ==0) ?TRUE:FALSE);
+    g_signal_connect (G_OBJECT (widg) , "clicked" , G_CALLBACK (iax2_enabled_cb), NULL);
+    gtk_table_attach (GTK_TABLE (table), widg, 0, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
-    label = gtk_label_new_with_mnemonic (_("Command to _run"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0.05, 0.5);
-    gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new_with_mnemonic (_ ("Command to _run"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0.05, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     command = gtk_entry_new ();
     gtk_label_set_mnemonic_widget (GTK_LABEL (label), command);
-    gtk_entry_set_text(GTK_ENTRY(command), _urlhook_config->command);
-    gtk_table_attach ( GTK_TABLE( table ), command, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
+    gtk_entry_set_text (GTK_ENTRY (command), _urlhook_config->command);
+    gtk_table_attach (GTK_TABLE (table), command, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
 
 
 
-    gnome_main_section_new_with_table (_("Phone number rewriting"), &frame, &table, 4, 2);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
+    gnome_main_section_new_with_table (_ ("Phone number rewriting"), &frame, &table, 4, 2);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
     gtk_widget_show (frame);
 
-    widg = gtk_check_button_new_with_mnemonic( _("_Prefix dialed numbers with"));
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->phone_number_enabled, "1")==0)?TRUE:FALSE);
-    g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (phone_number_enabled_cb), NULL);
-    gtk_table_attach ( GTK_TABLE( table ), widg, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
- 
+    widg = gtk_check_button_new_with_mnemonic (_ ("_Prefix dialed numbers with"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widg), (g_strcasecmp (_urlhook_config->phone_number_enabled, "1") ==0) ?TRUE:FALSE);
+    g_signal_connect (G_OBJECT (widg) , "clicked" , G_CALLBACK (phone_number_enabled_cb), NULL);
+    gtk_table_attach (GTK_TABLE (table), widg, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
     prefix = gtk_entry_new ();
     gtk_label_set_mnemonic_widget (GTK_LABEL (label), prefix);
-    gtk_entry_set_text(GTK_ENTRY(prefix), _urlhook_config->phone_number_prefix);
-    gtk_widget_set_sensitive (GTK_WIDGET (prefix), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widg)));
-    gtk_table_attach ( GTK_TABLE( table ), prefix, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
+    gtk_entry_set_text (GTK_ENTRY (prefix), _urlhook_config->phone_number_prefix);
+    gtk_widget_set_sensitive (GTK_WIDGET (prefix), gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widg)));
+    gtk_table_attach (GTK_TABLE (table), prefix, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 10);
 
-    gtk_widget_show_all(ret);
+    gtk_widget_show_all (ret);
 
     return ret;
 }
diff --git a/sflphone-client-gnome/src/config/hooks-config.h b/sflphone-client-gnome/src/config/hooks-config.h
index 5fcd951b21c4105b25842955b2b1cfd75e73a40a..f1b575517ae1206156ed3967a00f46fc9809f0bd 100644
--- a/sflphone-client-gnome/src/config/hooks-config.h
+++ b/sflphone-client-gnome/src/config/hooks-config.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -55,8 +55,8 @@ typedef struct _URLHook_Config {
     gchar *sip_field;
     gchar *command;
     gchar *phone_number_enabled;
-    gchar *phone_number_prefix; 
-}URLHook_Config;
+    gchar *phone_number_prefix;
+} URLHook_Config;
 
 /**
  * Save the parameters through D-BUS
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c
index 01be2abd630bcbc1aaac1139cb545c601e2cffea..75bab7c8b91cccc9bad1ac524086c982ccf592f0 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.c
+++ b/sflphone-client-gnome/src/config/preferencesdialog.c
@@ -32,22 +32,18 @@
  */
 
 #include <gtk/gtk.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <eel-gconf-extensions.h>
 
-#include <accountlist.h>
 #include <accountconfigdialog.h>
-#include <actions.h>
-#include <config.h>
-#include <dbus/dbus.h>
-#include <mainwindow.h>
-#include <audioconf.h>
 #include <addressbook-config.h>
 #include <shortcuts-config.h>
+#include <audioconf.h>
 #include <hooks-config.h>
-#include <utils.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
+#include <audioconf.h>
+#include <uimanager.h>
 
 /**
  * Local variables
@@ -56,87 +52,112 @@ gboolean accDialogOpen = FALSE;
 gboolean dialogOpen = FALSE;
 gboolean ringtoneEnabled = TRUE;
 
-GtkWidget * localPortSpinBox;
-GtkWidget * localAddressCombo;
-
-GtkWidget * history_value;
 
 GtkWidget * status;
+GtkWidget * history_value;
 
-GtkWidget *showstatusicon;
 GtkWidget *starthidden;
 GtkWidget *popupwindow;
 GtkWidget *neverpopupwindow;
 
+GtkWidget *treeView;
+GtkWidget *iconview;
+GtkCellRenderer *renderer;
+GtkTreeViewColumn *column;
+GtkTreeSelection *selection;
+GtkWidget * notebook;
+
+
+enum {
+    PIXBUF_COL,
+    TEXT_COL,
+    PAGE_NUMBER
+};
+
+typedef struct {
+    gchar* icon_descr;
+    gchar* icon_name;
+    gint page_number;
+} browser_t;
+
+// history preference parameters
 static int history_limit;
 static gboolean history_enabled = TRUE;
 
-static void
-set_md5_hash_cb (GtkWidget *widget UNUSED, gpointer data UNUSED)
-{
-
-  gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget));
-  dbus_set_md5_credential_hashing (enabled);
-}
+// instant messaging preference parameters
+static gboolean instant_messaging_enabled = TRUE;
 
 static void
 start_hidden (void)
 {
-  dbus_start_hidden ();
+    gboolean currentstate = eel_gconf_get_integer (START_HIDDEN);
+    eel_gconf_set_integer (START_HIDDEN, !currentstate);
 }
 
 static void
-set_popup_mode (GtkWidget *widget, gpointer *userdata)
+set_popup_mode (GtkWidget *widget, gpointer *userdata UNUSED)
 {
-  if (dbus_popup_mode () || gtk_toggle_button_get_active (
-      GTK_TOGGLE_BUTTON (widget)))
-    dbus_switch_popup_mode ();
+    gboolean currentstate = eel_gconf_get_integer (POPUP_ON_CALL);
+
+    if (currentstate || gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) {
+        eel_gconf_set_integer (POPUP_ON_CALL, !currentstate);
+    }
 }
 
 void
 set_notif_level ()
 {
-  dbus_set_notify ();
+    gboolean current_state = eel_gconf_get_integer (NOTIFY_ALL);
+    eel_gconf_set_integer (NOTIFY_ALL, !current_state);
 }
 
 static void
-history_limit_cb (GtkSpinButton *button, void *ptr)
+history_limit_cb (GtkSpinButton *button UNUSED, void *ptr)
 {
-  history_limit = gtk_spin_button_get_value_as_int ((GtkSpinButton *) (ptr));
+    history_limit = gtk_spin_button_get_value_as_int ( (GtkSpinButton *) (ptr));
 }
 
 static void
 history_enabled_cb (GtkWidget *widget)
 {
-  history_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
-  gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled);
+    history_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+    gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled);
 
-  // Toggle it through D-Bus
-  dbus_set_history_enabled ();
+    // Toggle it through D-Bus
+    eel_gconf_set_integer (HISTORY_ENABLED, !eel_gconf_get_integer (HISTORY_ENABLED));
+}
+
+static void
+instant_messaging_enabled_cb (GtkWidget *widget)
+{
+    instant_messaging_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+    eel_gconf_set_integer (INSTANT_MESSAGING_ENABLED, !eel_gconf_get_integer (INSTANT_MESSAGING_ENABLED));
 }
 
 void
 clean_history (void)
 {
-  calllist_clean_history ();
+    calllist_clean_history ();
 }
 
-void showstatusicon_cb (GtkWidget *widget, gpointer data) {
+void showstatusicon_cb (GtkWidget *widget, gpointer data UNUSED)
+{
 
-  gboolean currentstatus = FALSE;
+    gboolean currentstatus = FALSE;
 
-  // data contains the previous value of dbus_is_status_icon_enabled () - ie before the click.
-  currentstatus = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+    // data contains the previous value of dbus_is_status_icon_enabled () - ie before the click.
+    currentstatus = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
 
-  // Update the widget states
-  gtk_widget_set_sensitive (GTK_WIDGET (popupwindow), currentstatus);
-  gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow), currentstatus);
-  gtk_widget_set_sensitive (GTK_WIDGET (starthidden), currentstatus);
+    // Update the widget states
+    gtk_widget_set_sensitive (GTK_WIDGET (popupwindow), currentstatus);
+    gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow), currentstatus);
+    gtk_widget_set_sensitive (GTK_WIDGET (starthidden), currentstatus);
 
-  currentstatus ?       show_status_icon () : hide_status_icon ();
+    currentstatus ?       show_status_icon () : hide_status_icon ();
 
-  // Update through D-Bus
-  dbus_enable_status_icon (currentstatus ? "true" : "false");
+    // Update through D-Bus
+    eel_gconf_set_integer (SHOW_STATUSICON, currentstatus);
 }
 
 
@@ -144,197 +165,312 @@ GtkWidget*
 create_general_settings ()
 {
 
-  GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table;
-  gboolean statusicon = FALSE;
-
-  // Load history configuration
-  history_load_configuration ();
-
-  // Main widget
-  ret = gtk_vbox_new (FALSE, 10);
-  gtk_container_set_border_width (GTK_CONTAINER(ret), 10);
-
-  // Notifications Frame
-  gnome_main_section_new_with_table (_("Desktop Notifications"), &frame,
-      &table, 2, 1);
-  gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-  // Notification All
-  notifAll = gtk_check_button_new_with_mnemonic (_("_Enable notifications"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), dbus_get_notify ());
-  g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL );
-  gtk_table_attach (GTK_TABLE(table), notifAll, 0, 1, 0, 1, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  // System Tray option frame
-  gnome_main_section_new_with_table (_("System Tray Icon"), &frame, &table, 4,
-      1);
-  gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-  if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0)
-      statusicon = TRUE;
-  else
-    statusicon = FALSE;
-
-  showstatusicon = gtk_check_button_new_with_mnemonic (
-      _("Show SFLphone in the system tray"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(showstatusicon), statusicon);
-  g_signal_connect (G_OBJECT (showstatusicon) , "clicked" , G_CALLBACK (showstatusicon_cb), NULL);
-  gtk_table_attach (GTK_TABLE (table), showstatusicon, 0, 1, 0, 1, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  popupwindow = gtk_radio_button_new_with_mnemonic (NULL,
-      _("_Popup main window on incoming call"));
-  g_signal_connect(G_OBJECT (popupwindow), "toggled", G_CALLBACK (set_popup_mode), NULL);
-  gtk_table_attach (GTK_TABLE(table), popupwindow, 0, 1, 1, 2, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  neverpopupwindow = gtk_radio_button_new_with_mnemonic_from_widget (
-      GTK_RADIO_BUTTON (popupwindow), _("Ne_ver popup main window"));
-  gtk_table_attach (GTK_TABLE(table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  // Toggle according to the user configuration
-  dbus_popup_mode () ? gtk_toggle_button_set_active (
-      GTK_TOGGLE_BUTTON (popupwindow), TRUE) : gtk_toggle_button_set_active (
-      GTK_TOGGLE_BUTTON (neverpopupwindow), TRUE);
-
-  starthidden = gtk_check_button_new_with_mnemonic (
-      _("Hide SFLphone window on _startup"));
-
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(starthidden),
-      dbus_is_start_hidden ());
-  g_signal_connect(G_OBJECT (starthidden) , "clicked" , G_CALLBACK( start_hidden ) , NULL);
-  gtk_table_attach (GTK_TABLE(table), starthidden, 0, 1, 3, 4, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  // Update the widget states
-  gtk_widget_set_sensitive (GTK_WIDGET (popupwindow),statusicon);
-  gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow),statusicon);
-  gtk_widget_set_sensitive (GTK_WIDGET (starthidden),statusicon);
-
-  // HISTORY CONFIGURATION
-  gnome_main_section_new_with_table (_("Calls History"), &frame, &table, 3, 1);
-  gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0);
-
-  checkBoxWidget = gtk_check_button_new_with_mnemonic (
-      _("_Keep my history for at least"));
-  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget),
-      history_enabled);
-  g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (history_enabled_cb) , NULL);
-  gtk_table_attach (GTK_TABLE(table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  history_value = gtk_spin_button_new_with_range (1, 99, 1);
-  gtk_spin_button_set_value (GTK_SPIN_BUTTON(history_value), history_limit);
-  g_signal_connect( G_OBJECT (history_value) , "value-changed" , G_CALLBACK (history_limit_cb) , history_value);
-  gtk_widget_set_sensitive (GTK_WIDGET (history_value),
-      gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkBoxWidget)));
-  gtk_table_attach (GTK_TABLE(table), history_value, 1, 2, 0, 1, GTK_EXPAND
-      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
-
-  label = gtk_label_new (_("days"));
-  gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL,
-      GTK_EXPAND | GTK_FILL, 0, 5);
-
-  gtk_widget_show_all (ret);
-
-  return ret;
+    GtkWidget *ret, *notifAll, *frame, *checkBoxWidget, *label, *table, *showstatusicon;
+    gboolean statusicon;
+
+    // Load history configuration
+    history_load_configuration ();
+
+    // Load instant messaging configuration
+    instant_messaging_load_configuration();
+
+    // Main widget
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
+
+    // Notifications Frame
+    gnome_main_section_new_with_table (_ ("Desktop Notifications"), &frame,
+                                       &table, 2, 1);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    // Notification All
+    notifAll = gtk_check_button_new_with_mnemonic (_ ("_Enable notifications"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (notifAll), eel_gconf_get_integer (NOTIFY_ALL));
+    g_signal_connect (G_OBJECT (notifAll) , "clicked" , G_CALLBACK (set_notif_level) , NULL);
+    gtk_table_attach (GTK_TABLE (table), notifAll, 0, 1, 0, 1, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    // System Tray option frame
+    gnome_main_section_new_with_table (_ ("System Tray Icon"), &frame, &table, 4,
+                                       1);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    // Whether or not displaying an icon in the system tray
+    statusicon = eel_gconf_get_integer (SHOW_STATUSICON);
+
+    showstatusicon = gtk_check_button_new_with_mnemonic (
+                         _ ("Show SFLphone in the system tray"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (showstatusicon), statusicon);
+    g_signal_connect (G_OBJECT (showstatusicon) , "clicked" , G_CALLBACK (showstatusicon_cb), NULL);
+    gtk_table_attach (GTK_TABLE (table), showstatusicon, 0, 1, 0, 1, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    popupwindow = gtk_radio_button_new_with_mnemonic (NULL,
+                  _ ("_Popup main window on incoming call"));
+    g_signal_connect (G_OBJECT (popupwindow), "toggled", G_CALLBACK (set_popup_mode), NULL);
+    gtk_table_attach (GTK_TABLE (table), popupwindow, 0, 1, 1, 2, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    neverpopupwindow = gtk_radio_button_new_with_mnemonic_from_widget (
+                           GTK_RADIO_BUTTON (popupwindow), _ ("Ne_ver popup main window"));
+    gtk_table_attach (GTK_TABLE (table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    // Toggle according to the user configuration
+    eel_gconf_get_integer (POPUP_ON_CALL) ? gtk_toggle_button_set_active (
+        GTK_TOGGLE_BUTTON (popupwindow),
+        TRUE) :
+    gtk_toggle_button_set_active (
+        GTK_TOGGLE_BUTTON (neverpopupwindow),
+        TRUE);
+
+    starthidden = gtk_check_button_new_with_mnemonic (
+                      _ ("Hide SFLphone window on _startup"));
+
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (starthidden),
+                                  eel_gconf_get_integer (START_HIDDEN));
+    g_signal_connect (G_OBJECT (starthidden) , "clicked" , G_CALLBACK (start_hidden) , NULL);
+    gtk_table_attach (GTK_TABLE (table), starthidden, 0, 1, 3, 4, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    // Update the widget states
+    gtk_widget_set_sensitive (GTK_WIDGET (popupwindow),statusicon);
+    gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow),statusicon);
+    gtk_widget_set_sensitive (GTK_WIDGET (starthidden),statusicon);
+
+    // HISTORY CONFIGURATION
+    gnome_main_section_new_with_table (_ ("Calls History"), &frame, &table, 3, 1);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    checkBoxWidget = gtk_check_button_new_with_mnemonic (
+                         _ ("_Keep my history for at least"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget),
+                                  history_enabled);
+    g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (history_enabled_cb) , NULL);
+    gtk_table_attach (GTK_TABLE (table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    history_value = gtk_spin_button_new_with_range (1, 99, 1);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (history_value), history_limit);
+    g_signal_connect (G_OBJECT (history_value) , "value-changed" , G_CALLBACK (history_limit_cb) , history_value);
+    gtk_widget_set_sensitive (GTK_WIDGET (history_value),
+                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkBoxWidget)));
+    gtk_table_attach (GTK_TABLE (table), history_value, 1, 2, 0, 1, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    label = gtk_label_new (_ ("days"));
+    gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL,
+                      GTK_EXPAND | GTK_FILL, 0, 5);
+
+    // INSTANT MESSAGING CONFIGURATION
+    gnome_main_section_new_with_table (_ ("Instant Messaging"), &frame, &table, 1, 1);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    checkBoxWidget = gtk_check_button_new_with_mnemonic (
+                         _ ("Enable instant messaging"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget),
+                                  instant_messaging_enabled);
+    g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (instant_messaging_enabled_cb) , NULL);
+    gtk_table_attach (GTK_TABLE (table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND
+                      | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5);
+
+    gtk_widget_show_all (ret);
+
+    return ret;
 }
 
 void
 save_configuration_parameters (void)
 {
 
-  // Address book config
-  addressbook_config_save_parameters ();
-  hooks_save_parameters ();
+    // Address book config
+    addressbook_config_save_parameters ();
+    hooks_save_parameters ();
 
-  // History config
-  dbus_set_history_limit (history_limit);
+    // History config
+    dbus_set_history_limit (history_limit);
 
-  // Direct IP calls config
-  // dbus_set_ip2ip_details (directIpCallsProperties);
+    // Direct IP calls config
+    // dbus_set_ip2ip_details (directIpCallsProperties);
 }
 
 void
 history_load_configuration ()
 {
-  history_limit = dbus_get_history_limit ();
-  history_enabled = TRUE;
-  if (g_strcasecmp (dbus_get_history_enabled (), "false") == 0)
-    history_enabled = FALSE;
+    history_limit = dbus_get_history_limit ();
+    history_enabled = eel_gconf_get_integer (HISTORY_ENABLED);
+
 }
 
+void
+instant_messaging_load_configuration ()
+{
+    instant_messaging_enabled = eel_gconf_get_integer (INSTANT_MESSAGING_ENABLED);
+
+}
+
+
+void
+selection_changed_cb (GtkIconView *view, gpointer user_data UNUSED)
+{
+
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+    GList *list;
+    gint page;
+
+    model = gtk_icon_view_get_model (view);
+    list = gtk_icon_view_get_selected_items (view);
+
+    if (list == NULL)
+        return;
+
+    if (g_list_length (list) > 1)
+        return;
+
+    gtk_tree_model_get_iter (model, &iter, list->data);
+    gtk_tree_model_get (model, &iter, PAGE_NUMBER, &page, -1);
+
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page);
+    g_list_foreach (list, (GFunc) gtk_tree_path_free, NULL);
+    g_list_free (list);
+}
+
+
+
 /**
  * Show configuration window with tabs
  */
 void
 show_preferences_dialog ()
 {
-  GtkDialog * dialog;
-  GtkWidget * notebook;
-  GtkWidget * tab;
-  guint result;
-
-  dialogOpen = TRUE;
-
-  dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Preferences"),
-          GTK_WINDOW(get_main_window()),
-          GTK_DIALOG_DESTROY_WITH_PARENT,
-          GTK_STOCK_CLOSE,
-          GTK_RESPONSE_ACCEPT,
-          NULL));
-
-  // Set window properties
-  gtk_dialog_set_has_separator (dialog, FALSE);
-  gtk_window_set_default_size (GTK_WINDOW(dialog), 600, 400);
-  gtk_container_set_border_width (GTK_CONTAINER(dialog), 0);
-
-  // Create tabs container
-  notebook = gtk_notebook_new ();
-  gtk_box_pack_start (GTK_BOX (dialog->vbox), notebook, TRUE, TRUE, 0);
-  gtk_container_set_border_width (GTK_CONTAINER(notebook), 10);
-  gtk_widget_show (notebook);
-
-  // General settings tab
-  tab = create_general_settings ();
-  gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new (
-      _("General")));
-  gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab);
-
-  // Audio tab
-  tab = create_audio_configuration ();
-  gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new (
-      _("Audio")));
-  gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab);
-
-  // Addressbook tab
-  tab = create_addressbook_settings ();
-  gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new (
-      _("Address Book")));
-  gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab);
-
-  // Hooks tab
-  tab = create_hooks_settings ();
-  gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new (
-      _("Hooks")));
-  gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab);
-
-  // Shortcuts tab
-  tab = create_shortcuts_settings();
-  gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Shortcuts")));
-  gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab);
-
-  gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0);
-
-  result = gtk_dialog_run (dialog);
-
-  save_configuration_parameters ();
-  update_actions ();
-
-  dialogOpen = FALSE;
-
-  gtk_widget_destroy (GTK_WIDGET(dialog));
+    GtkDialog * dialog;
+    GtkWidget * hbox;
+    GtkWidget * tab;
+    guint result;
+
+    dialogOpen = TRUE;
+
+    dialog = GTK_DIALOG (gtk_dialog_new_with_buttons (_ ("Preferences"),
+                         GTK_WINDOW (get_main_window()),
+                         GTK_DIALOG_DESTROY_WITH_PARENT,
+                         GTK_STOCK_CLOSE,
+                         GTK_RESPONSE_ACCEPT,
+                         NULL));
+
+    // Set window properties
+    gtk_dialog_set_has_separator (dialog, FALSE);
+    gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 400);
+    gtk_container_set_border_width (GTK_CONTAINER (dialog), 0);
+
+    hbox = gtk_hbox_new (FALSE, 10);
+
+    // Create tree view
+    iconview = gtk_icon_view_new_with_model (createModel ());
+    g_object_set (iconview,
+                  "selection-mode", GTK_SELECTION_BROWSE,
+                  "text-column", TEXT_COL,
+                  "pixbuf-column", PIXBUF_COL,
+                  "columns", 1,
+                  "margin", 10,
+                  NULL);
+    // Connect the callback when clicking on an item
+    g_signal_connect (G_OBJECT (iconview), "selection-changed", G_CALLBACK (selection_changed_cb), NULL);
+    gtk_box_pack_start (GTK_BOX (hbox), iconview, TRUE, TRUE, 0);
+
+    // Create tabs container
+    notebook = gtk_notebook_new ();
+    gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
+    gtk_box_pack_end (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (dialog->vbox), hbox, TRUE, TRUE, 0);
+    gtk_widget_show_all (dialog->vbox);
+    gtk_container_set_border_width (GTK_CONTAINER (notebook), 10);
+    gtk_widget_show (notebook);
+
+    // General settings tab
+    tab = create_general_settings ();
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
+                                  _ ("General")));
+    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
+
+    // Audio tab
+    tab = create_audio_configuration ();
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
+                                  _ ("Audio")));
+    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
+
+    // Addressbook tab
+    tab = create_addressbook_settings ();
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
+                                  _ ("Address Book")));
+    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
+
+    // Hooks tab
+    tab = create_hooks_settings ();
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (
+                                  _ ("Hooks")));
+    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
+
+    // Shortcuts tab
+    tab = create_shortcuts_settings();
+    gtk_notebook_append_page (GTK_NOTEBOOK (notebook), tab, gtk_label_new (_ ("Shortcuts")));
+    gtk_notebook_page_num (GTK_NOTEBOOK (notebook), tab);
+
+    // By default, general settings
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0);
+    // Highlight the corresponding icon
+    gtk_icon_view_select_path (GTK_ICON_VIEW (iconview), gtk_tree_path_new_first ());
+
+    result = gtk_dialog_run (dialog);
+
+    save_configuration_parameters ();
+    update_actions ();
+
+    dialogOpen = FALSE;
+
+    gtk_widget_destroy (GTK_WIDGET (dialog));
 }
 
+
+GtkTreeModel* createModel()
+{
+
+    browser_t browser_entries[5] = {
+        {_ ("General"), "preferences-system", 0},
+        {_ ("Audio"), "multimedia-volume-control", 1},
+        {_ ("Address Book"), "address-book-new", 2},
+        {_ ("Hooks"), "gnome-globe", 3},
+        {_ ("Shortcuts"), "preferences-desktop-keyboard", 4}
+    };
+
+    GdkPixbuf *pixbuf;
+    GtkTreeIter iter;
+    GtkListStore *store;
+    GError *error = NULL;
+    gint i;
+
+    store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
+    GtkIconTheme* theme = gtk_icon_theme_get_default();
+
+    for (i = 0; i < 5; i++) {
+
+        gtk_list_store_append (store, &iter);
+
+        pixbuf = gtk_icon_theme_load_icon (theme, browser_entries[i].icon_name, 48, 0, &error);
+
+        gtk_list_store_set (store, &iter,
+                            PIXBUF_COL, pixbuf,
+                            TEXT_COL, browser_entries[i].icon_descr,
+                            PAGE_NUMBER, browser_entries[i].page_number,
+                            -1);
+
+        if (pixbuf != NULL) {
+            gdk_pixbuf_unref (pixbuf);
+        } else {
+            DEBUG ("Couldn't load icon: %s", error->message);
+            g_error_free (error);
+        }
+    }
+
+    return GTK_TREE_MODEL (store);
+}
diff --git a/sflphone-client-gnome/src/config/preferencesdialog.h b/sflphone-client-gnome/src/config/preferencesdialog.h
index e14a240111419084212a5e59f9bcde86b944adb8..c681e58be3d1fe056f1efcd969f6d6a72f075441 100644
--- a/sflphone-client-gnome/src/config/preferencesdialog.h
+++ b/sflphone-client-gnome/src/config/preferencesdialog.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -85,7 +85,7 @@ void select_active_output_audio_plugin();
  * because the default plugin always use default audio device
  * @param plugin The description of the selected plugin
  */
-void update_combo_box( gchar* plugin );
+void update_combo_box (gchar* plugin);
 
 /**
  * Build the widget to display codec list
@@ -97,7 +97,7 @@ GtkWidget * create_codec_table();
  * Create the main account window in a new window
  * @return GtkWidget* The widget created
  */
-GtkWidget * create_accounts_tab(GtkDialog * dialog);
+GtkWidget * create_accounts_tab (GtkDialog * dialog);
 
 /**
  * Create the audio configuration tab and add it to the main configuration window
@@ -121,4 +121,8 @@ void save_configuration_parameters (void);
 
 void history_load_configuration (void);
 
-#endif 
+void instant_messaging_load_configuration (void);
+
+GtkTreeModel* createModel();
+
+#endif
diff --git a/sflphone-client-gnome/src/config/shortcuts-config.c b/sflphone-client-gnome/src/config/shortcuts-config.c
index 64bdfd0d434fe677c195bab07d7f1dffaf51cdf4..d57844f731af0a83ac4f32537a3b55ed120da449 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.c
+++ b/sflphone-client-gnome/src/config/shortcuts-config.c
@@ -33,47 +33,60 @@
 
 #include <gdk/gdkx.h>
 
-GtkWidget*
-create_shortcuts_settings()
+static void
+accel_cleared (GtkCellRendererAccel *renderer UNUSED, gchar *path,
+               GtkTreeView *treeview)
 {
-  GtkWidget *vbox, *result_frame, *window, *treeview, *scrolled_window, *label;
+    DEBUG ("Accel cleared");
 
-  GtkTreeIter iter;
-  guint i = 0;
+    GtkTreeModel *model;
+    GtkTreeIter iter;
 
-  vbox = gtk_vbox_new(FALSE, 10);
-  gtk_container_set_border_width(GTK_CONTAINER(vbox), 10);
+    // Update treeview
+    model = gtk_tree_view_get_model (treeview);
 
-  gnome_main_section_new(_("General"), &result_frame);
+    if (gtk_tree_model_get_iter_from_string (model, &iter, path))
+        gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
 
-  label = gtk_label_new(_("Be careful: these shortcuts might override system-wide shortcuts."));
+    // Update GDK bindings
+    shortcuts_update_bindings (atoi (path), 0, 0);
+}
 
-  treeview = gtk_tree_view_new();
-  setup_tree_view(treeview);
+static void
+accel_edited (GtkCellRendererAccel *renderer UNUSED, gchar *path, guint accel_key,
+              GdkModifierType mask, guint hardware_keycode UNUSED, GtkTreeView *treeview)
+{
+    DEBUG ("Accel edited");
 
-  GtkListStore *store = gtk_list_store_new(COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_UINT);
+    GtkTreeModel *model;
+    GtkTreeIter iter;
 
-  Accelerator* list = shortcuts_get_list();
+    Accelerator* list = shortcuts_get_list ();
+    model = gtk_tree_view_get_model (treeview);
+    guint code = XKeysymToKeycode (GDK_DISPLAY(), accel_key);
 
-  while (list[i].action != NULL)
-    {
-      gtk_list_store_append(store, &iter);
-      gtk_list_store_set(store, &iter, ACTION, _(list[i].action), MASK,
-          (gint) list[i].mask, VALUE, XKeycodeToKeysym(GDK_DISPLAY(),
-              list[i].value, 0), -1);
-      i++;
-    }
+    // Disable existing binding if key already used
+    int i = 0;
+    gtk_tree_model_get_iter_first (model, &iter);
 
-  gtk_tree_view_set_model(GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
-  g_object_unref(store);
+    while (list[i].action != NULL) {
+        if (list[i].key == code && list[i].mask == mask) {
+            gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0,
+                                -1);
+            WARN ("This key was already affected");
+        }
 
-  gtk_container_add(GTK_CONTAINER (result_frame), treeview);
-  gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-  gtk_box_pack_start(GTK_BOX(vbox), result_frame, FALSE, FALSE, 0);
+        gtk_tree_model_iter_next (model, &iter);
+        i++;
+    }
 
-  gtk_widget_show_all(vbox);
+    // Update treeview
+    if (gtk_tree_model_get_iter_from_string (model, &iter, path))
+        gtk_list_store_set (GTK_LIST_STORE (model), &iter, MASK, (gint) mask,
+                            VALUE, accel_key, -1);
 
-  return vbox;
+    // Update GDK bindings
+    shortcuts_update_bindings (atoi (path), code, mask);
 }
 
 /*
@@ -81,76 +94,67 @@ create_shortcuts_settings()
  * second is a keyboard accelerator.
  */
 static void
-setup_tree_view(GtkWidget *treeview)
+setup_tree_view (GtkWidget *treeview)
 {
-  GtkCellRenderer *renderer;
-  GtkTreeViewColumn *column;
-
-  renderer = gtk_cell_renderer_text_new();
-  column = gtk_tree_view_column_new_with_attributes("Action", renderer, "text",
-      ACTION, NULL);
-  gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
-
-  renderer = gtk_cell_renderer_accel_new();
-  g_object_set(renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
-      "editable", TRUE, NULL);
-  column = gtk_tree_view_column_new_with_attributes("Shortcut", renderer,
-      "accel-mods", MASK, "accel-key", VALUE, NULL);
-
-  gtk_tree_view_append_column(GTK_TREE_VIEW (treeview), column);
-  g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
-  g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
+    GtkCellRenderer *renderer;
+    GtkTreeViewColumn *column;
+
+    renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes ("Action", renderer,
+             "text", ACTION, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+
+    renderer = gtk_cell_renderer_accel_new ();
+    g_object_set (renderer, "accel-mode", GTK_CELL_RENDERER_ACCEL_MODE_GTK,
+                  "editable", TRUE, NULL);
+    column = gtk_tree_view_column_new_with_attributes ("Shortcut", renderer,
+             "accel-mods", MASK, "accel-key", VALUE, NULL);
+
+    gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
+    g_signal_connect (G_OBJECT (renderer), "accel_edited", G_CALLBACK (accel_edited), (gpointer) treeview);
+    g_signal_connect (G_OBJECT (renderer), "accel_cleared", G_CALLBACK (accel_cleared), (gpointer) treeview);
 }
 
-static void
-accel_edited(GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
-    GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview)
+GtkWidget*
+create_shortcuts_settings ()
 {
-  DEBUG("Accel edited");
-
-  GtkTreeModel *model;
-  GtkTreeIter iter;
-
-  Accelerator* list = shortcuts_get_list();
-  model = gtk_tree_view_get_model(treeview);
-  gint code = XKeysymToKeycode(GDK_DISPLAY(), accel_key);
-
-  // Disable existing binding if key already used
-  int i = 0;
-  gtk_tree_model_get_iter_first(model, &iter);
-  while (list[i].action != NULL)
-      {
-          if(list[i].value == code)
-            {
-              gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
-              WARN("This key was already affected");
-            }
-          gtk_tree_model_iter_next(model, &iter);
-          i++;
-      }
-
-  // Update treeview
-  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
-    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, (gint) mask, VALUE,
-        accel_key, -1);
-
-  // Update GDK bindings
-  shortcuts_update_bindings(atoi(path), code);
-}
+    GtkWidget *vbox, *result_frame, *treeview, *label;
 
-static void
-accel_cleared(GtkCellRendererAccel *renderer, gchar *path, GtkTreeView *treeview)
-{
-  DEBUG("Accel cleared");
+    GtkTreeIter iter;
+    guint i = 0;
+
+    vbox = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
+
+    gnome_main_section_new (_ ("General"), &result_frame);
+
+    label = gtk_label_new (
+                _ ("Be careful: these shortcuts might override system-wide shortcuts."));
+    treeview = gtk_tree_view_new ();
+    setup_tree_view (treeview);
+
+    GtkListStore *store = gtk_list_store_new (COLUMNS, G_TYPE_STRING, G_TYPE_INT,
+                          G_TYPE_UINT);
 
-  GtkTreeModel *model;
-  GtkTreeIter iter;
+    Accelerator* list = shortcuts_get_list ();
 
-  // Update treeview
-  model = gtk_tree_view_get_model(treeview);
-  if (gtk_tree_model_get_iter_from_string(model, &iter, path))
-    gtk_list_store_set(GTK_LIST_STORE (model), &iter, MASK, 0, VALUE, 0, -1);
+    while (list[i].action != NULL) {
+        gtk_list_store_append (store, &iter);
+        gtk_list_store_set (store, &iter, ACTION, _ (list[i].action), MASK,
+                            (gint) list[i].mask, VALUE, XKeycodeToKeysym (GDK_DISPLAY(),
+                                    list[i].key, 0), -1);
+        i++;
+    }
+
+    gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
+    g_object_unref (store);
+
+    gtk_container_add (GTK_CONTAINER (result_frame), treeview);
+    gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), result_frame, FALSE, FALSE, 0);
 
-  // Update GDK bindings
-  shortcuts_update_bindings(atoi(path), 0);
+    gtk_widget_show_all (vbox);
+
+    return vbox;
 }
+
diff --git a/sflphone-client-gnome/src/config/shortcuts-config.h b/sflphone-client-gnome/src/config/shortcuts-config.h
index 02682ab0a1631384205a7ae4939c4ae25fa48610..969ef27980bbb4d13c8f1882cf1cda54c92ee309 100644
--- a/sflphone-client-gnome/src/config/shortcuts-config.h
+++ b/sflphone-client-gnome/src/config/shortcuts-config.h
@@ -39,25 +39,13 @@
 
 G_BEGIN_DECLS
 
-enum
-{
-  ACTION = 0, MASK, VALUE, COLUMNS
+enum {
+    ACTION = 0, MASK, VALUE, COLUMNS
 };
 
 GtkWidget*
 create_shortcuts_settings ();
 
-static void
-setup_tree_view (GtkWidget *treeview);
-
-static void
-accel_edited (GtkCellRendererAccel *renderer, gchar *path, guint accel_key,
-    GdkModifierType mask, guint hardware_keycode, GtkTreeView *treeview);
-
-static void
-accel_cleared (GtkCellRendererAccel *renderer, gchar *path,
-    GtkTreeView *treeview);
-
 G_END_DECLS
 
 #endif // _SHORTCUTS_CONFIG
diff --git a/sflphone-client-gnome/src/config/tlsadvanceddialog.c b/sflphone-client-gnome/src/config/tlsadvanceddialog.c
index 4050d0338f8ba1b2714ba083b29681444689afaf..05596dc27339ee75463516a5e8c71a38bb0fefc2 100644
--- a/sflphone-client-gnome/src/config/tlsadvanceddialog.c
+++ b/sflphone-client-gnome/src/config/tlsadvanceddialog.c
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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.
@@ -41,328 +41,326 @@
 #include <libsexy/sexy-icon-entry.h>
 #endif
 
-void show_advanced_tls_options(GHashTable * properties)
+void show_advanced_tls_options (GHashTable * properties)
 {
     GtkDialog * tlsDialog;
     GtkWidget * ret;
-            
-    tlsDialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Advanced options for TLS"),
-                GTK_WINDOW(get_main_window()),
-                GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-                GTK_STOCK_CANCEL,
-                GTK_RESPONSE_CANCEL,
-                GTK_STOCK_SAVE,
-                GTK_RESPONSE_ACCEPT,
-                NULL));
-
-    gtk_window_set_policy( GTK_WINDOW(tlsDialog), FALSE, FALSE, FALSE );
-    gtk_dialog_set_has_separator(tlsDialog, TRUE);
-    gtk_container_set_border_width (GTK_CONTAINER(tlsDialog), 0);
-
-    ret = gtk_vbox_new(FALSE, 10);
-    gtk_container_set_border_width(GTK_CONTAINER(ret), 10);
-    gtk_box_pack_start(GTK_BOX(tlsDialog->vbox), ret, FALSE, FALSE, 0);  
-            
-    GtkWidget *frame, *table;     
-    gnome_main_section_new_with_table (_("TLS transport"), &frame, &table, 3, 13);
-    gtk_container_set_border_width(GTK_CONTAINER (table), 10);
-    gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
-        
-    gchar * description = g_markup_printf_escaped(_("TLS transport can be used along with UDP for those calls that would\n"\
-                                                    "require secure sip transactions (aka SIPS). You can configure a different\n"\
-                                                    "TLS transport for each account. However, each of them will run on a dedicated\n"\
-                                                    "port, different one from each other\n"));
-    GtkWidget * label;                                         
-    label = gtk_label_new(NULL);
-    gtk_widget_set_size_request(label, 600, 70); 
-    gtk_label_set_line_wrap (GTK_LABEL(label), TRUE);
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_label_set_markup(GTK_LABEL(label), description);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-            
-    gchar * account_id;
-    gchar * tls_listener_port;
-    gchar * tls_ca_list_file;
-    gchar * tls_certificate_file;
-    gchar * tls_private_key_file;
-    gchar * tls_password;    
-    gchar * tls_method;
-    gchar * tls_ciphers;
-    gchar * tls_server_name;
-    gchar * verify_server; 
-    gchar * verify_client;     
-    gchar * require_client_certificate;    	    
-    gchar * negotiation_timeout_sec;
-    gchar * negotiation_timeout_msec;	  
+
+    tlsDialog = GTK_DIALOG (gtk_dialog_new_with_buttons (_ ("Advanced options for TLS"),
+                            GTK_WINDOW (get_main_window()),
+                            GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                            GTK_STOCK_CANCEL,
+                            GTK_RESPONSE_CANCEL,
+                            GTK_STOCK_SAVE,
+                            GTK_RESPONSE_ACCEPT,
+                            NULL));
+
+    gtk_window_set_policy (GTK_WINDOW (tlsDialog), FALSE, FALSE, FALSE);
+    gtk_dialog_set_has_separator (tlsDialog, TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (tlsDialog), 0);
+
+    ret = gtk_vbox_new (FALSE, 10);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 10);
+    gtk_box_pack_start (GTK_BOX (tlsDialog->vbox), ret, FALSE, FALSE, 0);
+
+    GtkWidget *frame, *table;
+    gnome_main_section_new_with_table (_ ("TLS transport"), &frame, &table, 3, 13);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 10);
+    gtk_box_pack_start (GTK_BOX (ret), frame, FALSE, FALSE, 0);
+
+    gchar * description = g_markup_printf_escaped (_ ("TLS transport can be used along with UDP for those calls that would\n"\
+                          "require secure sip transactions (aka SIPS). You can configure a different\n"\
+                          "TLS transport for each account. However, each of them will run on a dedicated\n"\
+                          "port, different one from each other\n"));
+    GtkWidget * label;
+    label = gtk_label_new (NULL);
+    gtk_widget_set_size_request (label, 600, 70);
+    gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_label_set_markup (GTK_LABEL (label), description);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    gchar * account_id = NULL;
+    gchar * tls_listener_port = NULL;
+    gchar * tls_ca_list_file = NULL;
+    gchar * tls_certificate_file = NULL;
+    gchar * tls_private_key_file = NULL;
+    gchar * tls_password = NULL;
+    gchar * tls_method = NULL;
+    gchar * tls_ciphers = NULL;
+    gchar * tls_server_name = NULL;
+    gchar * verify_server = NULL;
+    gchar * verify_client = NULL;
+    gchar * require_client_certificate = NULL;
+    gchar * negotiation_timeout_sec = NULL;
+    gchar * negotiation_timeout_msec = NULL;
 
     if (properties != NULL) {
 
-        account_id = g_hash_table_lookup(properties, ACCOUNT_ID);
-        tls_listener_port = g_hash_table_lookup(properties, TLS_LISTENER_PORT);
-        tls_ca_list_file = g_hash_table_lookup(properties, TLS_CA_LIST_FILE);
-	tls_certificate_file = g_hash_table_lookup(properties, TLS_CERTIFICATE_FILE);
-	tls_private_key_file = g_hash_table_lookup(properties, TLS_PRIVATE_KEY_FILE);
-	tls_password = g_hash_table_lookup(properties, TLS_PASSWORD);	    
-	tls_method = g_hash_table_lookup(properties, TLS_METHOD);
-	tls_ciphers = g_hash_table_lookup(properties, TLS_CIPHERS);	  
-	tls_server_name = g_hash_table_lookup(properties, TLS_SERVER_NAME);	  	    
-	verify_server = g_hash_table_lookup(properties, TLS_VERIFY_SERVER);	    	    
-	verify_client = g_hash_table_lookup(properties, TLS_VERIFY_CLIENT);	 	      
-	require_client_certificate = g_hash_table_lookup(properties, TLS_REQUIRE_CLIENT_CERTIFICATE);	    	    
-	negotiation_timeout_sec = g_hash_table_lookup(properties, TLS_NEGOTIATION_TIMEOUT_SEC);
-	negotiation_timeout_msec = g_hash_table_lookup(properties, TLS_NEGOTIATION_TIMEOUT_MSEC);   
+        account_id = g_hash_table_lookup (properties, ACCOUNT_ID);
+        tls_listener_port = g_hash_table_lookup (properties, TLS_LISTENER_PORT);
+        tls_ca_list_file = g_hash_table_lookup (properties, TLS_CA_LIST_FILE);
+        tls_certificate_file = g_hash_table_lookup (properties, TLS_CERTIFICATE_FILE);
+        tls_private_key_file = g_hash_table_lookup (properties, TLS_PRIVATE_KEY_FILE);
+        tls_password = g_hash_table_lookup (properties, TLS_PASSWORD);
+        tls_method = g_hash_table_lookup (properties, TLS_METHOD);
+        tls_ciphers = g_hash_table_lookup (properties, TLS_CIPHERS);
+        tls_server_name = g_hash_table_lookup (properties, TLS_SERVER_NAME);
+        verify_server = g_hash_table_lookup (properties, TLS_VERIFY_SERVER);
+        verify_client = g_hash_table_lookup (properties, TLS_VERIFY_CLIENT);
+        require_client_certificate = g_hash_table_lookup (properties, TLS_REQUIRE_CLIENT_CERTIFICATE);
+        negotiation_timeout_sec = g_hash_table_lookup (properties, TLS_NEGOTIATION_TIMEOUT_SEC);
+        negotiation_timeout_msec = g_hash_table_lookup (properties, TLS_NEGOTIATION_TIMEOUT_MSEC);
 
     }
 
-    
-    label = gtk_label_new(_("Global TLS listener (all accounts)"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    GtkWidget * tlsListenerPort;    
-    GtkWidget * hbox = gtk_hbox_new(FALSE, 10);
-    gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    tlsListenerPort = gtk_spin_button_new_with_range(0, 65535, 1);
-    gtk_label_set_mnemonic_widget(GTK_LABEL (label), tlsListenerPort);
-    gtk_spin_button_set_value(GTK_SPIN_BUTTON(tlsListenerPort), g_ascii_strtod(tls_listener_port, NULL));
-    gtk_box_pack_start_defaults(GTK_BOX(hbox), tlsListenerPort);
-
-    if(g_strcmp0(account_id, IP2IP_PROFILE) != 0) {
-      gtk_widget_set_sensitive(tlsListenerPort, FALSE);    
+
+    label = gtk_label_new (_ ("Global TLS listener (all accounts)"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    GtkWidget * tlsListenerPort;
+    GtkWidget * hbox = gtk_hbox_new (FALSE, 10);
+    gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    tlsListenerPort = gtk_spin_button_new_with_range (0, 65535, 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), tlsListenerPort);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (tlsListenerPort), g_ascii_strtod (tls_listener_port, NULL));
+    gtk_box_pack_start_defaults (GTK_BOX (hbox), tlsListenerPort);
+
+    if (g_strcmp0 (account_id, IP2IP_PROFILE) != 0) {
+        gtk_widget_set_sensitive (tlsListenerPort, FALSE);
     }
-       
-    label = gtk_label_new( _("Certificate of Authority list"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    label = gtk_label_new (_ ("Certificate of Authority list"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     GtkWidget * caListFileChooser;
-    caListFileChooser = gtk_file_chooser_button_new(_("Choose a CA list file (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
-    gtk_table_attach (GTK_TABLE(table), caListFileChooser, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    caListFileChooser = gtk_file_chooser_button_new (_ ("Choose a CA list file (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
+    gtk_table_attach (GTK_TABLE (table), caListFileChooser, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
 
     if (tls_ca_list_file == NULL) {
-        gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
+        gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (caListFileChooser));
 
-    } 
-    else {
-        if(g_strcmp0(tls_ca_list_file, "") == 0) {
+    } else {
+        if (g_strcmp0 (tls_ca_list_file, "") == 0) {
 
-	    gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
-	}
-	else{
+            gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (caListFileChooser));
+        } else {
 
-	    GFile * file = g_file_new_for_path(tls_ca_list_file);
-	    gtk_file_chooser_set_file (GTK_FILE_CHOOSER(caListFileChooser), file, NULL);
-	    g_object_unref(file);
-	}
+            GFile * file = g_file_new_for_path (tls_ca_list_file);
+            gtk_file_chooser_set_file (GTK_FILE_CHOOSER (caListFileChooser), file, NULL);
+            g_object_unref (file);
+        }
     }
 
-    label = gtk_label_new( _("Public endpoint certificate file"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    label = gtk_label_new (_ ("Public endpoint certificate file"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     GtkWidget * certificateFileChooser;
-    certificateFileChooser = gtk_file_chooser_button_new(_("Choose a public endpoint certificate (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
-    gtk_table_attach (GTK_TABLE(table), certificateFileChooser, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    certificateFileChooser = gtk_file_chooser_button_new (_ ("Choose a public endpoint certificate (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
+    gtk_table_attach (GTK_TABLE (table), certificateFileChooser, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     if (tls_certificate_file == NULL) {
         // gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(caListFileChooser), g_get_home_dir());
-	gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
+        gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (caListFileChooser));
     } else {
-	if(g_strcmp0(tls_certificate_file, "") == 0){
+        if (g_strcmp0 (tls_certificate_file, "") == 0) {
 
-	    gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(certificateFileChooser));
-	}
-	else {
+            gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (certificateFileChooser));
+        } else {
 
-	    GFile * file = g_file_new_for_path(tls_certificate_file);
-	    gtk_file_chooser_set_file (GTK_FILE_CHOOSER(certificateFileChooser), file, NULL);
-	    g_object_unref(file);
-	}
+            GFile * file = g_file_new_for_path (tls_certificate_file);
+            gtk_file_chooser_set_file (GTK_FILE_CHOOSER (certificateFileChooser), file, NULL);
+            g_object_unref (file);
+        }
     }
-         
-    label = gtk_label_new(("Private key file"));
- 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    label = gtk_label_new ( ("Private key file"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
     GtkWidget * privateKeyFileChooser;
-    privateKeyFileChooser = gtk_file_chooser_button_new(_("Choose a private key file (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
-    gtk_table_attach (GTK_TABLE(table), privateKeyFileChooser, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    privateKeyFileChooser = gtk_file_chooser_button_new (_ ("Choose a private key file (optional)"), GTK_FILE_CHOOSER_ACTION_OPEN);
+    gtk_table_attach (GTK_TABLE (table), privateKeyFileChooser, 1, 2, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     if (tls_private_key_file == NULL) {
-	gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(caListFileChooser));
+        gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (caListFileChooser));
     } else {
 
-	if(g_strcmp0(tls_private_key_file, "") == 0) {
+        if (g_strcmp0 (tls_private_key_file, "") == 0) {
 
-	    gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(privateKeyFileChooser));
-	}
-	else {
+            gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (privateKeyFileChooser));
+        } else {
 
-	    GFile * file = g_file_new_for_path(tls_private_key_file);
-	    gtk_file_chooser_set_file (GTK_FILE_CHOOSER(privateKeyFileChooser), file, NULL);
-	    g_object_unref(file);
+            GFile * file = g_file_new_for_path (tls_private_key_file);
+            gtk_file_chooser_set_file (GTK_FILE_CHOOSER (privateKeyFileChooser), file, NULL);
+            g_object_unref (file);
 
-	}
+        }
 
     }
-  
- 	label = gtk_label_new_with_mnemonic (_("Password for the private key"));
- 	gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);  
- 	GtkWidget * privateKeyPasswordEntry;
+
+    label = gtk_label_new_with_mnemonic (_ ("Password for the private key"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    GtkWidget * privateKeyPasswordEntry;
 #if GTK_CHECK_VERSION(2,16,0)
-	privateKeyPasswordEntry = gtk_entry_new();
-	gtk_entry_set_icon_from_stock (GTK_ENTRY (privateKeyPasswordEntry), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
+    privateKeyPasswordEntry = gtk_entry_new();
+    gtk_entry_set_icon_from_stock (GTK_ENTRY (privateKeyPasswordEntry), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_AUTHENTICATION);
 #else
-	privateKeyPasswordEntry = sexy_icon_entry_new();
-	GtkWidget * image = gtk_image_new_from_stock(GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR );
-	sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(privateKeyPasswordEntry), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
+    privateKeyPasswordEntry = sexy_icon_entry_new();
+    GtkWidget * image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (privateKeyPasswordEntry), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
 #endif
-	gtk_entry_set_visibility(GTK_ENTRY(privateKeyPasswordEntry), FALSE);
-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), privateKeyPasswordEntry);
-	gtk_entry_set_text(GTK_ENTRY(privateKeyPasswordEntry), tls_password);
-	gtk_table_attach (GTK_TABLE(table), privateKeyPasswordEntry, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);  
-   
-    /* TLS protocol methods */    
-    GtkListStore * tlsProtocolMethodListStore; 
+    gtk_entry_set_visibility (GTK_ENTRY (privateKeyPasswordEntry), FALSE);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), privateKeyPasswordEntry);
+    gtk_entry_set_text (GTK_ENTRY (privateKeyPasswordEntry), tls_password);
+    gtk_table_attach (GTK_TABLE (table), privateKeyPasswordEntry, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    /* TLS protocol methods */
+    GtkListStore * tlsProtocolMethodListStore;
     GtkTreeIter iter;
     GtkWidget * tlsProtocolMethodCombo;
-    
-    tlsProtocolMethodListStore =  gtk_list_store_new( 1, G_TYPE_STRING );
-	label = gtk_label_new_with_mnemonic (_("TLS protocol method"));
-	gtk_table_attach (GTK_TABLE(table), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	gtk_misc_set_alignment(GTK_MISC (label), 0, 0.5);
-			
-	gchar** supported_tls_method = NULL;
+
+    tlsProtocolMethodListStore =  gtk_list_store_new (1, G_TYPE_STRING);
+    label = gtk_label_new_with_mnemonic (_ ("TLS protocol method"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+
+    gchar** supported_tls_method = NULL;
     supported_tls_method = dbus_get_supported_tls_method();
     GtkTreeIter supported_tls_method_iter = iter;
+
     if (supported_tls_method != NULL) {
         char **supported_tls_method_ptr;
+
         for (supported_tls_method_ptr = supported_tls_method; *supported_tls_method_ptr; supported_tls_method_ptr++) {
-            DEBUG("Supported Method %s", *supported_tls_method_ptr);
-            gtk_list_store_append(tlsProtocolMethodListStore, &iter );
-            gtk_list_store_set(tlsProtocolMethodListStore, &iter, 0, *supported_tls_method_ptr, -1 );
-            
-            if (g_strcmp0(*supported_tls_method_ptr, tls_method) == 0) {
-                DEBUG("Setting active element in TLS protocol combo box");
+            DEBUG ("Supported Method %s", *supported_tls_method_ptr);
+            gtk_list_store_append (tlsProtocolMethodListStore, &iter);
+            gtk_list_store_set (tlsProtocolMethodListStore, &iter, 0, *supported_tls_method_ptr, -1);
+
+            if (g_strcmp0 (*supported_tls_method_ptr, tls_method) == 0) {
+                DEBUG ("Setting active element in TLS protocol combo box");
                 supported_tls_method_iter = iter;
             }
         }
     }
-    
-    tlsProtocolMethodCombo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(tlsProtocolMethodListStore));
-    gtk_label_set_mnemonic_widget(GTK_LABEL(label), tlsProtocolMethodCombo);
-    gtk_table_attach(GTK_TABLE(table), tlsProtocolMethodCombo, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    g_object_unref(G_OBJECT(tlsProtocolMethodListStore));	
-    
+
+    tlsProtocolMethodCombo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (tlsProtocolMethodListStore));
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), tlsProtocolMethodCombo);
+    gtk_table_attach (GTK_TABLE (table), tlsProtocolMethodCombo, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    g_object_unref (G_OBJECT (tlsProtocolMethodListStore));
+
     GtkCellRenderer *tlsProtocolMethodCellRenderer;
     tlsProtocolMethodCellRenderer = gtk_cell_renderer_text_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(tlsProtocolMethodCombo), tlsProtocolMethodCellRenderer, TRUE);
-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(tlsProtocolMethodCombo), tlsProtocolMethodCellRenderer, "text", 0, NULL);
-    gtk_combo_box_set_active_iter(GTK_COMBO_BOX(tlsProtocolMethodCombo), &supported_tls_method_iter);
-	
+    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (tlsProtocolMethodCombo), tlsProtocolMethodCellRenderer, TRUE);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (tlsProtocolMethodCombo), tlsProtocolMethodCellRenderer, "text", 0, NULL);
+    gtk_combo_box_set_active_iter (GTK_COMBO_BOX (tlsProtocolMethodCombo), &supported_tls_method_iter);
+
     /* Cipher list */
     GtkWidget * cipherListEntry;
-    label = gtk_label_new_with_mnemonic (_("TLS cipher list"));
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    label = gtk_label_new_with_mnemonic (_ ("TLS cipher list"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
     cipherListEntry = gtk_entry_new();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(label), cipherListEntry);
-    gtk_entry_set_text(GTK_ENTRY(cipherListEntry), tls_ciphers);
-    gtk_table_attach (GTK_TABLE(table), cipherListEntry, 1, 2, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-	
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), cipherListEntry);
+    gtk_entry_set_text (GTK_ENTRY (cipherListEntry), tls_ciphers);
+    gtk_table_attach (GTK_TABLE (table), cipherListEntry, 1, 2, 8, 9, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
     GtkWidget * serverNameInstance;
-    label = gtk_label_new_with_mnemonic (_("Server name instance for outgoing TLS connection"));
-    gtk_table_attach (GTK_TABLE(table), label, 0, 1, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+    label = gtk_label_new_with_mnemonic (_ ("Server name instance for outgoing TLS connection"));
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
     serverNameInstance = gtk_entry_new();
-    gtk_label_set_mnemonic_widget(GTK_LABEL(label), serverNameInstance);
-    gtk_entry_set_text(GTK_ENTRY(serverNameInstance), tls_server_name);
-    gtk_table_attach (GTK_TABLE(table), serverNameInstance, 1, 2, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-
-    label = gtk_label_new(_("Negotiation timeout (sec:msec)"));
-    gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
-    gtk_table_attach(GTK_TABLE(table), label, 0, 1, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    GtkWidget * tlsTimeOutSec; 
-    hbox = gtk_hbox_new(FALSE, 10);
-    gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    tlsTimeOutSec = gtk_spin_button_new_with_range(0, pow(2,sizeof(long)), 1);
-    gtk_label_set_mnemonic_widget(GTK_LABEL (label), tlsTimeOutSec);
-    gtk_spin_button_set_value(GTK_SPIN_BUTTON(tlsTimeOutSec), g_ascii_strtod(negotiation_timeout_sec, NULL));
-    gtk_box_pack_start_defaults(GTK_BOX(hbox), tlsTimeOutSec);   
-    GtkWidget * tlsTimeOutMSec;    
-    tlsTimeOutMSec = gtk_spin_button_new_with_range(0, pow(2,sizeof(long)), 1);
-    gtk_label_set_mnemonic_widget(GTK_LABEL (label), tlsTimeOutMSec);
-    gtk_spin_button_set_value(GTK_SPIN_BUTTON(tlsTimeOutMSec), g_ascii_strtod(negotiation_timeout_msec, NULL));
-    gtk_box_pack_start_defaults(GTK_BOX(hbox), tlsTimeOutMSec);   
-    
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), serverNameInstance);
+    gtk_entry_set_text (GTK_ENTRY (serverNameInstance), tls_server_name);
+    gtk_table_attach (GTK_TABLE (table), serverNameInstance, 1, 2, 9, 10, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    label = gtk_label_new (_ ("Negotiation timeout (sec:msec)"));
+    gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+    gtk_table_attach (GTK_TABLE (table), label, 0, 1, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    GtkWidget * tlsTimeOutSec;
+    hbox = gtk_hbox_new (FALSE, 10);
+    gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 10, 11, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    tlsTimeOutSec = gtk_spin_button_new_with_range (0, pow (2,sizeof (long)), 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), tlsTimeOutSec);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (tlsTimeOutSec), g_ascii_strtod (negotiation_timeout_sec, NULL));
+    gtk_box_pack_start_defaults (GTK_BOX (hbox), tlsTimeOutSec);
+    GtkWidget * tlsTimeOutMSec;
+    tlsTimeOutMSec = gtk_spin_button_new_with_range (0, pow (2,sizeof (long)), 1);
+    gtk_label_set_mnemonic_widget (GTK_LABEL (label), tlsTimeOutMSec);
+    gtk_spin_button_set_value (GTK_SPIN_BUTTON (tlsTimeOutMSec), g_ascii_strtod (negotiation_timeout_msec, NULL));
+    gtk_box_pack_start_defaults (GTK_BOX (hbox), tlsTimeOutMSec);
+
     GtkWidget * verifyCertificateServer;
-    verifyCertificateServer = gtk_check_button_new_with_mnemonic(_("Verify incoming certificates, as a server"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(verifyCertificateServer),
-				 g_strcasecmp(verify_server,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach (GTK_TABLE(table), verifyCertificateServer, 0, 1, 11, 12, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    verifyCertificateServer = gtk_check_button_new_with_mnemonic (_ ("Verify incoming certificates, as a server"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (verifyCertificateServer),
+                                  g_strcasecmp (verify_server,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (table), verifyCertificateServer, 0, 1, 11, 12, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     GtkWidget * verifyCertificateClient;
-    verifyCertificateClient = gtk_check_button_new_with_mnemonic(_("Verify certificates from answer, as a client"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(verifyCertificateClient),
-				 g_strcasecmp(verify_client,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach (GTK_TABLE(table), verifyCertificateClient, 0, 1, 12, 13, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    verifyCertificateClient = gtk_check_button_new_with_mnemonic (_ ("Verify certificates from answer, as a client"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (verifyCertificateClient),
+                                  g_strcasecmp (verify_client,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (table), verifyCertificateClient, 0, 1, 12, 13, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
 
     GtkWidget * requireCertificate;
-    requireCertificate = gtk_check_button_new_with_mnemonic(_("Require certificate for incoming tls connections"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(requireCertificate),
-				 g_strcasecmp(require_client_certificate,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach (GTK_TABLE(table), requireCertificate, 0, 1, 13, 14, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-    gtk_widget_show_all(ret);
-          
-    if(gtk_dialog_run(GTK_DIALOG(tlsDialog)) == GTK_RESPONSE_ACCEPT) {
-				
-        g_hash_table_replace(properties,
-			     g_strdup(TLS_LISTENER_PORT),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsListenerPort))));		
-        g_hash_table_replace(properties,
-			     g_strdup(TLS_CA_LIST_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(caListFileChooser))));
-       
-        g_hash_table_replace(properties,
-			     g_strdup(TLS_CERTIFICATE_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(certificateFileChooser))));
-	
-        g_hash_table_replace(properties,
-			     g_strdup(TLS_PRIVATE_KEY_FILE), g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(privateKeyFileChooser))));
-				
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_PASSWORD),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(privateKeyPasswordEntry))));  				
-												
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_METHOD),
-			     g_strdup((gchar *)gtk_combo_box_get_active_text(GTK_COMBO_BOX(tlsProtocolMethodCombo))));
-				
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_CIPHERS),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(cipherListEntry))));  
-				
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_SERVER_NAME),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(serverNameInstance))));					  				   
-
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_VERIFY_SERVER),
-			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(verifyCertificateServer)) ? "true": "false"));
-
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_VERIFY_CLIENT),
-			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(verifyCertificateClient)) ? "true": "false"));	
-				
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_REQUIRE_CLIENT_CERTIFICATE),
-			     g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(requireCertificate)) ? "true": "false"));	
-				
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_NEGOTIATION_TIMEOUT_SEC),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsTimeOutSec))));		
-
-	g_hash_table_replace(properties,
-			     g_strdup(TLS_NEGOTIATION_TIMEOUT_MSEC),
-			     g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(tlsTimeOutMSec))));																				
-    }    
-    
-    gtk_widget_destroy (GTK_WIDGET(tlsDialog));
+    requireCertificate = gtk_check_button_new_with_mnemonic (_ ("Require certificate for incoming tls connections"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (requireCertificate),
+                                  g_strcasecmp (require_client_certificate,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (table), requireCertificate, 0, 1, 13, 14, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    gtk_widget_show_all (ret);
+
+    if (gtk_dialog_run (GTK_DIALOG (tlsDialog)) == GTK_RESPONSE_ACCEPT) {
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_LISTENER_PORT),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (tlsListenerPort))));
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_CA_LIST_FILE), g_strdup (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (caListFileChooser))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_CERTIFICATE_FILE), g_strdup (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (certificateFileChooser))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_PRIVATE_KEY_FILE), g_strdup (gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (privateKeyFileChooser))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_PASSWORD),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (privateKeyPasswordEntry))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_METHOD),
+                              g_strdup ( (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (tlsProtocolMethodCombo))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_CIPHERS),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (cipherListEntry))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_SERVER_NAME),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (serverNameInstance))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_VERIFY_SERVER),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (verifyCertificateServer)) ? "true": "false"));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_VERIFY_CLIENT),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (verifyCertificateClient)) ? "true": "false"));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_REQUIRE_CLIENT_CERTIFICATE),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (requireCertificate)) ? "true": "false"));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_NEGOTIATION_TIMEOUT_SEC),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (tlsTimeOutSec))));
+
+        g_hash_table_replace (properties,
+                              g_strdup (TLS_NEGOTIATION_TIMEOUT_MSEC),
+                              g_strdup ( (gchar *) gtk_entry_get_text (GTK_ENTRY (tlsTimeOutMSec))));
+    }
+
+    gtk_widget_destroy (GTK_WIDGET (tlsDialog));
 }
diff --git a/sflphone-client-gnome/src/config/tlsadvanceddialog.h b/sflphone-client-gnome/src/config/tlsadvanceddialog.h
index 4c7ed3a37f04144264d4410b3d54c33d3209ca8b..d60fdf8e9a1c2f96339547e937699c9364c00fd8 100644
--- a/sflphone-client-gnome/src/config/tlsadvanceddialog.h
+++ b/sflphone-client-gnome/src/config/tlsadvanceddialog.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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.
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __SFL_TLS_ADVANCED_DIALOG__
 #define __SFL_TLS_ADVANCED_DIALOG__
 /** @file tlsadvanceddialog.h
@@ -37,10 +37,10 @@
 #include <glib.h>
 #include <mainwindow.h>
 
-/** 
+/**
  * Display the advanced options window for zrtp
- */  
+ */
 
-void show_advanced_tls_options(GHashTable * properties);
+void show_advanced_tls_options (GHashTable * properties);
 
-#endif 
+#endif
diff --git a/sflphone-client-gnome/src/config/utils.c b/sflphone-client-gnome/src/config/utils.c
index 7049d796069507e169258f9e792f4c02ed8cb18a..66de3b7168f5f262678c6cc6420a1da6de16fc8e 100644
--- a/sflphone-client-gnome/src/config/utils.c
+++ b/sflphone-client-gnome/src/config/utils.c
@@ -29,10 +29,11 @@
  */
 
 #include "utils.h"
+#include <sflphone_const.h>
 
 void gnome_main_section_new_with_table (gchar *title, GtkWidget **frame, GtkWidget **table, gint nb_col, gint nb_row)
 {
-  GtkWidget *_frame, *_table, *label, *align;
+    GtkWidget *_frame, *_table, *label, *align;
     PangoAttrList *attrs = NULL;
     PangoAttribute *attr = NULL;
 
@@ -44,28 +45,28 @@ void gnome_main_section_new_with_table (gchar *title, GtkWidget **frame, GtkWidg
 
     _frame = gtk_frame_new (title);
     gtk_frame_set_shadow_type (GTK_FRAME (_frame), GTK_SHADOW_NONE);
-    gtk_container_set_border_width(GTK_CONTAINER(_frame), 2);
-    
+    gtk_container_set_border_width (GTK_CONTAINER (_frame), 2);
+
     label = gtk_frame_get_label_widget (GTK_FRAME (_frame));
     gtk_label_set_attributes (GTK_LABEL (label), attrs);
     pango_attr_list_unref (attrs);
 
-    align = gtk_alignment_new( 0.08, 0.2, 0.1, 0.1 ); 
-    gtk_container_add( GTK_CONTAINER(_frame), align );
+    align = gtk_alignment_new (0.08, 0.2, 0.1, 0.1);
+    gtk_container_add (GTK_CONTAINER (_frame), align);
+
+    _table = gtk_table_new (nb_col, nb_row, FALSE);
+    gtk_table_set_row_spacings (GTK_TABLE (_table), 2);
+    gtk_table_set_col_spacings (GTK_TABLE (_table), 2);
+    gtk_widget_show (_table);
+    gtk_container_add (GTK_CONTAINER (align), _table);
 
-    _table = gtk_table_new(nb_col, nb_row, FALSE);
-    gtk_table_set_row_spacings( GTK_TABLE(_table), 2);
-    gtk_table_set_col_spacings( GTK_TABLE(_table), 2);
-    gtk_widget_show(_table);
-    gtk_container_add( GTK_CONTAINER(align), _table );
-    
     *table = _table;
     *frame = _frame;
 }
 
-void gnome_main_section_new_with_vbox (gchar *title, GtkWidget **frame, GtkWidget **vbox, gint nb_row)
+void gnome_main_section_new_with_vbox (gchar *title, GtkWidget **frame, GtkWidget **vbox, gint nb_row UNUSED)
 {
-  GtkWidget *_frame, *_vbox, *label, *align;
+    GtkWidget *_frame, *_vbox, *label, *align;
     PangoAttrList *attrs = NULL;
     PangoAttribute *attr = NULL;
 
@@ -77,19 +78,19 @@ void gnome_main_section_new_with_vbox (gchar *title, GtkWidget **frame, GtkWidge
 
     _frame = gtk_frame_new (title);
     gtk_frame_set_shadow_type (GTK_FRAME (_frame), GTK_SHADOW_NONE);
-    gtk_container_set_border_width(GTK_CONTAINER(_frame), 2);
-    
+    gtk_container_set_border_width (GTK_CONTAINER (_frame), 2);
+
     label = gtk_frame_get_label_widget (GTK_FRAME (_frame));
     gtk_label_set_attributes (GTK_LABEL (label), attrs);
     pango_attr_list_unref (attrs);
 
-    align = gtk_alignment_new( 0.08, 0.2, 0.1, 0.1 ); 
-    gtk_container_add( GTK_CONTAINER(_frame), align );
-    
-    _vbox = gtk_vbox_new(FALSE, 10);
-    gtk_widget_show(_vbox);
-    gtk_container_add( GTK_CONTAINER(align), _vbox);
-    
+    align = gtk_alignment_new (0.08, 0.2, 0.1, 0.1);
+    gtk_container_add (GTK_CONTAINER (_frame), align);
+
+    _vbox = gtk_vbox_new (FALSE, 10);
+    gtk_widget_show (_vbox);
+    gtk_container_add (GTK_CONTAINER (align), _vbox);
+
     *vbox = _vbox;
     *frame = _frame;
 }
@@ -99,7 +100,7 @@ void gnome_main_section_new (gchar *title, GtkWidget **frame)
     GtkWidget *_frame, *label;
     PangoAttrList *attrs = NULL;
     PangoAttribute *attr = NULL;
- 
+
     attrs = pango_attr_list_new ();
     attr = pango_attr_weight_new (PANGO_WEIGHT_BOLD);
     attr->start_index = 0;
@@ -108,8 +109,8 @@ void gnome_main_section_new (gchar *title, GtkWidget **frame)
 
     _frame = gtk_frame_new (title);
     gtk_frame_set_shadow_type (GTK_FRAME (_frame), GTK_SHADOW_NONE);
-    gtk_container_set_border_width(GTK_CONTAINER(_frame), 2);
-     
+    gtk_container_set_border_width (GTK_CONTAINER (_frame), 2);
+
     label = gtk_frame_get_label_widget (GTK_FRAME (_frame));
     gtk_label_set_attributes (GTK_LABEL (label), attrs);
     pango_attr_list_unref (attrs);
diff --git a/sflphone-client-gnome/src/config/zrtpadvanceddialog.c b/sflphone-client-gnome/src/config/zrtpadvanceddialog.c
index 469cf52a3c4230eef362788eab10485e329c3355..8d6594798f39d80a2fd7958bc345dda82ec0321e 100644
--- a/sflphone-client-gnome/src/config/zrtpadvanceddialog.c
+++ b/sflphone-client-gnome/src/config/zrtpadvanceddialog.c
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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.
@@ -34,152 +34,152 @@
 
 #include <gtk/gtk.h>
 
-void show_advanced_zrtp_options(GHashTable * properties)
+void show_advanced_zrtp_options (GHashTable * properties)
 {
     GtkDialog * securityDialog;
 
-    GtkWidget * zrtpFrame;
     GtkWidget * tableZrtp;
     GtkWidget * enableHelloHash;
     GtkWidget * enableSASConfirm;
     GtkWidget * enableZrtpNotSuppOther;
     GtkWidget * displaySasOnce;
-    
+
     gchar * curSasConfirm = "true";
     gchar * curHelloEnabled = "true";
     gchar * curZrtpNotSuppOther = "true";
     gchar * curDisplaySasOnce = "false";
-    
-    if(properties != NULL) {
-        curHelloEnabled = g_hash_table_lookup(properties, ACCOUNT_ZRTP_HELLO_HASH);
-        curSasConfirm = g_hash_table_lookup(properties, ACCOUNT_ZRTP_DISPLAY_SAS);
-        curZrtpNotSuppOther = g_hash_table_lookup(properties, ACCOUNT_ZRTP_NOT_SUPP_WARNING);
-        curDisplaySasOnce = g_hash_table_lookup(properties, ACCOUNT_DISPLAY_SAS_ONCE); 
+
+    if (properties != NULL) {
+        curHelloEnabled = g_hash_table_lookup (properties, ACCOUNT_ZRTP_HELLO_HASH);
+        curSasConfirm = g_hash_table_lookup (properties, ACCOUNT_ZRTP_DISPLAY_SAS);
+        curZrtpNotSuppOther = g_hash_table_lookup (properties, ACCOUNT_ZRTP_NOT_SUPP_WARNING);
+        curDisplaySasOnce = g_hash_table_lookup (properties, ACCOUNT_DISPLAY_SAS_ONCE);
+    }
+
+    securityDialog = GTK_DIALOG	(gtk_dialog_new_with_buttons (_ ("ZRTP Options"),
+                                 GTK_WINDOW (get_main_window()),
+                                 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                 GTK_STOCK_CANCEL,
+                                 GTK_RESPONSE_CANCEL,
+                                 GTK_STOCK_SAVE,
+                                 GTK_RESPONSE_ACCEPT,
+                                 NULL)
+                                );
+    gtk_window_set_policy (GTK_WINDOW (securityDialog), FALSE, FALSE, FALSE);
+    gtk_dialog_set_has_separator (securityDialog, TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (securityDialog), 0);
+
+
+    tableZrtp = gtk_table_new (4, 2  , FALSE/* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (tableZrtp), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (tableZrtp), 10);
+    gtk_box_pack_start (GTK_BOX (securityDialog->vbox), tableZrtp, FALSE, FALSE, 0);
+    gtk_widget_show (tableZrtp);
+
+    enableHelloHash = gtk_check_button_new_with_mnemonic (_ ("Send Hello Hash in S_DP"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enableHelloHash),
+                                  g_strcasecmp (curHelloEnabled,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (tableZrtp), enableHelloHash, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (enableHelloHash) , TRUE);
+
+    enableSASConfirm = gtk_check_button_new_with_mnemonic (_ ("Ask User to Confirm SAS"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enableSASConfirm),
+                                  g_strcasecmp (curSasConfirm,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (tableZrtp), enableSASConfirm, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (enableSASConfirm) , TRUE);
+
+    enableZrtpNotSuppOther = gtk_check_button_new_with_mnemonic (_ ("_Warn if ZRTP not supported"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enableZrtpNotSuppOther),
+                                  g_strcasecmp (curZrtpNotSuppOther,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (tableZrtp), enableZrtpNotSuppOther, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (enableZrtpNotSuppOther) , TRUE);
+
+    displaySasOnce = gtk_check_button_new_with_mnemonic (_ ("Display SAS once for hold events"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (displaySasOnce),
+                                  g_strcasecmp (curDisplaySasOnce,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (tableZrtp), displaySasOnce, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (displaySasOnce) , TRUE);
+
+    gtk_widget_show_all (tableZrtp);
+
+    gtk_container_set_border_width (GTK_CONTAINER (tableZrtp), 10);
+
+    if (gtk_dialog_run (GTK_DIALOG (securityDialog)) == GTK_RESPONSE_ACCEPT) {
+        g_hash_table_replace (properties,
+                              g_strdup (ACCOUNT_ZRTP_DISPLAY_SAS),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (enableSASConfirm)) ? "true": "false"));
+
+        g_hash_table_replace (properties,
+                              g_strdup (ACCOUNT_DISPLAY_SAS_ONCE),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (displaySasOnce)) ? "true": "false"));
+
+        g_hash_table_replace (properties,
+                              g_strdup (ACCOUNT_ZRTP_HELLO_HASH),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (enableHelloHash)) ? "true": "false"));
+
+        g_hash_table_replace (properties,
+                              g_strdup (ACCOUNT_ZRTP_NOT_SUPP_WARNING),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (enableZrtpNotSuppOther)) ? "true": "false"));
     }
-    
-    securityDialog = GTK_DIALOG	(gtk_dialog_new_with_buttons (	_("ZRTP Options"),
-			    GTK_WINDOW (get_main_window()),
-																GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
-																GTK_STOCK_CANCEL,
-																GTK_RESPONSE_CANCEL,
-																GTK_STOCK_SAVE,
-																GTK_RESPONSE_ACCEPT,
-																NULL)
-								);
-    gtk_window_set_policy( GTK_WINDOW(securityDialog), FALSE, FALSE, FALSE );
-    gtk_dialog_set_has_separator(securityDialog, TRUE);
-    gtk_container_set_border_width (GTK_CONTAINER(securityDialog), 0);
-
-    
-    tableZrtp = gtk_table_new (4, 2  , FALSE/* homogeneous */);  
-    gtk_table_set_row_spacings( GTK_TABLE(tableZrtp), 10);
-    gtk_table_set_col_spacings( GTK_TABLE(tableZrtp), 10); 
-    gtk_box_pack_start(GTK_BOX(securityDialog->vbox), tableZrtp, FALSE, FALSE, 0);  
-    gtk_widget_show(tableZrtp);
-    
-    enableHelloHash = gtk_check_button_new_with_mnemonic(_("Send Hello Hash in S_DP"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableHelloHash),
-            g_strcasecmp(curHelloEnabled,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach ( GTK_TABLE(tableZrtp), enableHelloHash, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive( GTK_WIDGET( enableHelloHash ) , TRUE );
-        
-    enableSASConfirm = gtk_check_button_new_with_mnemonic(_("Ask User to Confirm SAS"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableSASConfirm),
-            g_strcasecmp(curSasConfirm,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach ( GTK_TABLE(tableZrtp), enableSASConfirm, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive( GTK_WIDGET( enableSASConfirm ) , TRUE ); 
-  
-    enableZrtpNotSuppOther = gtk_check_button_new_with_mnemonic(_("_Warn if ZRTP not supported"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableZrtpNotSuppOther),
-            g_strcasecmp(curZrtpNotSuppOther,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach ( GTK_TABLE(tableZrtp), enableZrtpNotSuppOther, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive( GTK_WIDGET( enableZrtpNotSuppOther ) , TRUE );
-  
-    displaySasOnce = gtk_check_button_new_with_mnemonic(_("Display SAS once for hold events"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(displaySasOnce),
-            g_strcasecmp(curDisplaySasOnce,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach ( GTK_TABLE(tableZrtp), displaySasOnce, 0, 1, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive( GTK_WIDGET( displaySasOnce ) , TRUE );
-    
-    gtk_widget_show_all(tableZrtp);
-
-    gtk_container_set_border_width (GTK_CONTAINER(tableZrtp), 10);
-        
-    if(gtk_dialog_run(GTK_DIALOG(securityDialog)) == GTK_RESPONSE_ACCEPT) {        
-        g_hash_table_replace(properties,
-                g_strdup(ACCOUNT_ZRTP_DISPLAY_SAS),
-                g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(enableSASConfirm)) ? "true": "false"));   
-                
-         g_hash_table_replace(properties,
-                g_strdup(ACCOUNT_DISPLAY_SAS_ONCE),
-                g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(displaySasOnce)) ? "true": "false")); 
-                
-        g_hash_table_replace(properties,
-                g_strdup(ACCOUNT_ZRTP_HELLO_HASH),
-                g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(enableHelloHash)) ? "true": "false"));
-                
-        g_hash_table_replace(properties,
-                g_strdup(ACCOUNT_ZRTP_NOT_SUPP_WARNING),
-                g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(enableZrtpNotSuppOther)) ? "true": "false"));                
-    }    
-    
-    gtk_widget_destroy (GTK_WIDGET(securityDialog));
+
+    gtk_widget_destroy (GTK_WIDGET (securityDialog));
 }
 
 
-void show_advanced_sdes_options(GHashTable * properties) {
+void show_advanced_sdes_options (GHashTable * properties)
+{
 
     GtkDialog * securityDialog;
 
     GtkWidget * sdesTable;
     GtkWidget * enableRtpFallback;
     gchar * rtpFallback = "false";
-    
-    if(properties != NULL) {
-        rtpFallback = g_hash_table_lookup(properties, ACCOUNT_SRTP_RTP_FALLBACK);
+
+    if (properties != NULL) {
+        rtpFallback = g_hash_table_lookup (properties, ACCOUNT_SRTP_RTP_FALLBACK);
     }
 
-    securityDialog = GTK_DIALOG	(gtk_dialog_new_with_buttons (	_("SDES Options"),
+    securityDialog = GTK_DIALOG	(gtk_dialog_new_with_buttons (_ ("SDES Options"),
+
+                                 GTK_WINDOW (get_main_window()),
+                                 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
 
-			       	GTK_WINDOW (get_main_window()),							
-				GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+                                 GTK_STOCK_CANCEL,
 
-				GTK_STOCK_CANCEL,
+                                 GTK_RESPONSE_CANCEL,
 
-			        GTK_RESPONSE_CANCEL,
+                                 GTK_STOCK_SAVE,
 
-				GTK_STOCK_SAVE,
+                                 GTK_RESPONSE_ACCEPT,
 
-				GTK_RESPONSE_ACCEPT,	       
-				
-				NULL));
+                                 NULL));
 
-    gtk_window_set_policy( GTK_WINDOW(securityDialog), FALSE, FALSE, FALSE );
-    gtk_dialog_set_has_separator(securityDialog, TRUE);
-    gtk_container_set_border_width (GTK_CONTAINER(securityDialog), 0);
+    gtk_window_set_policy (GTK_WINDOW (securityDialog), FALSE, FALSE, FALSE);
+    gtk_dialog_set_has_separator (securityDialog, TRUE);
+    gtk_container_set_border_width (GTK_CONTAINER (securityDialog), 0);
 
-    sdesTable = gtk_table_new (1, 2  , FALSE/* homogeneous */);  
-    gtk_table_set_row_spacings( GTK_TABLE(sdesTable), 10);
-    gtk_table_set_col_spacings( GTK_TABLE(sdesTable), 10); 
-    gtk_box_pack_start(GTK_BOX(securityDialog->vbox), sdesTable, FALSE, FALSE, 0);  
-    gtk_widget_show(sdesTable);
+    sdesTable = gtk_table_new (1, 2  , FALSE/* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (sdesTable), 10);
+    gtk_table_set_col_spacings (GTK_TABLE (sdesTable), 10);
+    gtk_box_pack_start (GTK_BOX (securityDialog->vbox), sdesTable, FALSE, FALSE, 0);
+    gtk_widget_show (sdesTable);
 
-    enableRtpFallback = gtk_check_button_new_with_mnemonic(_("Fallback on RTP on SDES failure"));
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableRtpFallback),
-				 g_strcasecmp(rtpFallback,"true") == 0 ? TRUE: FALSE);
-    gtk_table_attach ( GTK_TABLE(sdesTable), enableRtpFallback, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-    gtk_widget_set_sensitive( GTK_WIDGET( enableRtpFallback ) , TRUE );
+    enableRtpFallback = gtk_check_button_new_with_mnemonic (_ ("Fallback on RTP on SDES failure"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enableRtpFallback),
+                                  g_strcasecmp (rtpFallback,"true") == 0 ? TRUE: FALSE);
+    gtk_table_attach (GTK_TABLE (sdesTable), enableRtpFallback, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+    gtk_widget_set_sensitive (GTK_WIDGET (enableRtpFallback) , TRUE);
 
 
-    gtk_widget_show_all(sdesTable);
+    gtk_widget_show_all (sdesTable);
+
+    gtk_container_set_border_width (GTK_CONTAINER (sdesTable), 10);
+
+    if (gtk_dialog_run (GTK_DIALOG (securityDialog)) == GTK_RESPONSE_ACCEPT) {
+        g_hash_table_replace (properties,
+                              g_strdup (ACCOUNT_SRTP_RTP_FALLBACK),
+                              g_strdup (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (enableRtpFallback)) ? "true": "false"));
+    }
 
-    gtk_container_set_border_width (GTK_CONTAINER(sdesTable), 10);
-        
-    if(gtk_dialog_run(GTK_DIALOG(securityDialog)) == GTK_RESPONSE_ACCEPT) {        
-        g_hash_table_replace(properties,
-                g_strdup(ACCOUNT_SRTP_RTP_FALLBACK),
-	        g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(enableRtpFallback)) ? "true": "false"));                
-    }    
-    
-    gtk_widget_destroy (GTK_WIDGET(securityDialog));
+    gtk_widget_destroy (GTK_WIDGET (securityDialog));
 }
diff --git a/sflphone-client-gnome/src/config/zrtpadvanceddialog.h b/sflphone-client-gnome/src/config/zrtpadvanceddialog.h
index c561d6a1f15f8e10167149ae91aa39e3f07e4678..fc6f4ec839887c5b6c9b19b2f2b26a4473482328 100644
--- a/sflphone-client-gnome/src/config/zrtpadvanceddialog.h
+++ b/sflphone-client-gnome/src/config/zrtpadvanceddialog.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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.
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __SFL_ZRTP_ADVANCED_DIALOG__
 #define __SFL_ZRTP_ADVANCED_DIALOG__
 /** @file zrtpadvanceddialog.h
@@ -36,12 +36,12 @@
 
 #include <glib.h>
 #include <mainwindow.h>
-/** 
+/**
  * Display the advanced options window for zrtp
- */  
+ */
 
-void show_advanced_zrtp_options(GHashTable * properties);
+void show_advanced_zrtp_options (GHashTable * properties);
 
-void show_advanced_sdes_options(GHashTable * properties);
+void show_advanced_sdes_options (GHashTable * properties);
 
-#endif 
+#endif
diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c
index 9c7e8d38b449dcc762d00d66dc0d4d320e7b4d65..a6d6a1fe8b4f42e82783e400b425d76cb3361b68 100644
--- a/sflphone-client-gnome/src/contacts/addressbook.c
+++ b/sflphone-client-gnome/src/contacts/addressbook.c
@@ -34,30 +34,28 @@
 #include <addressbook-config.h>
 
 static void
-handler_async_search(GList *, gpointer);
+handler_async_search (GList *, gpointer);
 
 /**
  * Perform a search on address book
  */
 void
-addressbook_search(GtkEntry* entry)
+addressbook_search (GtkEntry* entry)
 {
 
-    const gchar* query = gtk_entry_get_text(GTK_ENTRY (entry));
-    if (strlen(query) >= 3) {
+    const gchar* query = gtk_entry_get_text (GTK_ENTRY (entry));
+    DEBUG ("Addressbook: Search %s", query);
 
-        AddressBook_Config *addressbook_config;
-	
-	// Activate waiting layer
-	activateWaitingLayer();
 
-	// Load the address book parameters
-	addressbook_config_load_parameters(&addressbook_config);
-      
-	// Start the asynchronous search as soon as we have an entry */
-	search_async(gtk_entry_get_text(GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, addressbook_config);
+    AddressBook_Config *addressbook_config;
+
+    activateWaitingLayer();
+
+    addressbook_config_load_parameters (&addressbook_config);
+
+
+    search_async_by_contacts (gtk_entry_get_text (GTK_ENTRY (entry)), addressbook_config->max_results, &handler_async_search, addressbook_config);
 
-    }
 }
 
 /**
@@ -66,12 +64,12 @@ addressbook_search(GtkEntry* entry)
 gboolean
 addressbook_is_enabled()
 {
-  AddressBook_Config *addressbook_config;
-  
-  // Load the address book parameters
-  addressbook_config_load_parameters(&addressbook_config);
+    AddressBook_Config *addressbook_config;
 
-  return (guint)addressbook_config->enable;
+    // Load the address book parameters
+    addressbook_config_load_parameters (&addressbook_config);
+
+    return (guint) addressbook_config->enable;
 }
 
 /**
@@ -80,7 +78,7 @@ addressbook_is_enabled()
 gboolean
 addressbook_is_ready()
 {
-  return books_ready();
+    return books_ready();
 }
 
 /**
@@ -89,42 +87,42 @@ addressbook_is_ready()
 gboolean
 addressbook_is_active()
 {
-  return books_active();
+    return books_active();
 }
 
 /**
- * Asynchronous open callback.
- * Used to handle activation of books.
+ * Get active addressbook from config.
  */
 static void
 addressbook_config_books()
 {
 
-  gchar **config_book_uid;
-  book_data_t *book_data;
-  gchar **list;
+    gchar **config_book_uid;
+    book_data_t *book_data;
+    gchar **list;
+
+    // Retrieve list of books
+    list = (gchar **) dbus_get_addressbook_list();
 
-  // Retrieve list of books
-  list = (gchar **) dbus_get_addressbook_list();
+    if (list) {
 
-  if (list) {
+        for (config_book_uid = list; *config_book_uid; config_book_uid++) {
 
-      for (config_book_uid = list; *config_book_uid; config_book_uid++) {
+            // Get corresponding book data
+            book_data = books_get_book_data_by_uid (*config_book_uid);
 
-          // Get corresponding book data
-          book_data = books_get_book_data_by_uid(*config_book_uid);
+            // If book_data exists
+            if (!book_data)
+                ERROR ("Addressbook: Error: Could not open book");
 
-          // If book_data exists
-          if (book_data != NULL) {
+            book_data->active = TRUE;
+        }
 
-              book_data->active = TRUE;
-	  }
-      }
-      g_strfreev(list);
-  }
+        g_strfreev (list);
+    }
 
-  // Update buttons
-  update_actions ();
+    // Update buttons
+    // update_actions ();
 }
 
 /**
@@ -133,8 +131,12 @@ addressbook_config_books()
 GSList *
 addressbook_get_books_data()
 {
-  addressbook_config_books();
-  return books_data;
+    DEBUG ("Addressboook: Get books data");
+
+    fill_books_data();
+    addressbook_config_books();
+
+    return books_data;
 }
 
 /**
@@ -144,66 +146,80 @@ addressbook_get_books_data()
 void
 addressbook_init()
 {
-  // Call books initialization
-  init(&addressbook_config_books);
+    DEBUG ("Addressbook: Initialize addressbook");
+
+    fill_books_data();
+    addressbook_config_books();
+
+    // Call books initialization
+    init ();
 }
 
 /**
  * Callback called after all book have been processed
  */
 static void
-handler_async_search(GList *hits, gpointer user_data)
+handler_async_search (GList *hits, gpointer user_data)
 {
 
-  GList *i;
-  GdkPixbuf *photo = NULL;
-  AddressBook_Config *addressbook_config;
-  callable_obj_t *j;
+    GList *i;
+    GdkPixbuf *photo = NULL;
+    AddressBook_Config *addressbook_config;
+    callable_obj_t *j;
+
+    DEBUG ("Addressbook: callback async search");
 
-  // freeing calls
-  while ((j = (callable_obj_t *) g_queue_pop_tail(contacts->callQueue)) != NULL)
-    {
-      free_callable_obj_t(j);
+    // freeing calls
+    while ( (j = (callable_obj_t *) g_queue_pop_tail (contacts->callQueue)) != NULL) {
+        free_callable_obj_t (j);
     }
 
-  // Retrieve the address book parameters
-  addressbook_config = (AddressBook_Config*) user_data;
-
-  // reset previous results
-  calltree_reset(contacts);
-  calllist_reset(contacts);
-
-  for (i = hits; i != NULL; i = i->next)
-    {
-      Hit *entry;
-      entry = i->data;
-      if (entry)
-        {
-          // Get the photo
-          if (addressbook_display(addressbook_config,
-              ADDRESSBOOK_DISPLAY_CONTACT_PHOTO))
-            photo = entry->photo;
-          // Create entry for business phone information
-          if (addressbook_display(addressbook_config,
-              ADDRESSBOOK_DISPLAY_PHONE_BUSINESS))
-            calllist_add_contact(entry->name, entry->phone_business,
-                CONTACT_PHONE_BUSINESS, photo);
-          // Create entry for home phone information
-          if (addressbook_display(addressbook_config,
-              ADDRESSBOOK_DISPLAY_PHONE_HOME))
-            calllist_add_contact(entry->name, entry->phone_home,
-                CONTACT_PHONE_HOME, photo);
-          // Create entry for mobile phone information
-          if (addressbook_display(addressbook_config,
-              ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
-            calllist_add_contact(entry->name, entry->phone_mobile,
-                CONTACT_PHONE_MOBILE, photo);
+    // Retrieve the address book parameters
+    addressbook_config = (AddressBook_Config*) user_data;
+
+    // reset previous results
+    calltree_reset (contacts);
+    calllist_reset (contacts);
+
+    for (i = hits; i != NULL; i = i->next) {
+
+        Hit *entry;
+        entry = i->data;
+
+        if (entry) {
+            // Get the photo
+            if (addressbook_display (addressbook_config,
+                                     ADDRESSBOOK_DISPLAY_CONTACT_PHOTO))
+                photo = entry->photo;
+
+            // Create entry for business phone information
+            if (addressbook_display (addressbook_config,
+                                     ADDRESSBOOK_DISPLAY_PHONE_BUSINESS))
+                calllist_add_contact (entry->name, entry->phone_business,
+                                      CONTACT_PHONE_BUSINESS, photo);
+
+            // Create entry for home phone information
+            if (addressbook_display (addressbook_config,
+                                     ADDRESSBOOK_DISPLAY_PHONE_HOME))
+                calllist_add_contact (entry->name, entry->phone_home,
+                                      CONTACT_PHONE_HOME, photo);
+
+            // Create entry for mobile phone information
+            if (addressbook_display (addressbook_config,
+                                     ADDRESSBOOK_DISPLAY_PHONE_MOBILE))
+                calllist_add_contact (entry->name, entry->phone_mobile,
+                                      CONTACT_PHONE_MOBILE, photo);
         }
-      free_hit(entry);
+
+        free_hit (entry);
     }
-  g_list_free(hits);
 
-  // Deactivate waiting image
-  deactivateWaitingLayer();
+    g_list_free (hits);
+
+    // Deactivate waiting image
+    deactivateWaitingLayer();
+
+
+    gtk_widget_grab_focus (GTK_WIDGET (contacts->view));
 }
 
diff --git a/sflphone-client-gnome/src/contacts/addressbook.h b/sflphone-client-gnome/src/contacts/addressbook.h
index f87f9dba19ec292e18783d5abf57650e4bf12aa3..cc2760f035e558b431c234dacb434cfcfc8936ed 100644
--- a/sflphone-client-gnome/src/contacts/addressbook.h
+++ b/sflphone-client-gnome/src/contacts/addressbook.h
@@ -63,7 +63,7 @@ addressbook_is_active();
  * Perform a search in addressbook
  */
 void
-addressbook_search(GtkEntry*);
+addressbook_search (GtkEntry*);
 
 /**
  * Initialize addressbook
diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.c b/sflphone-client-gnome/src/contacts/addressbook/eds.c
index 236235313ffeedc298d07a695b3e71f11f25f4e1..b53b694a76b1a15f6c5071d2605d3f40a1a3cf8d 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/eds.c
+++ b/sflphone-client-gnome/src/contacts/addressbook/eds.c
@@ -1,6 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Julien Bonjean <julien.bonjean@savoirfairelinux.com>
+ *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
  *
  *  File originally copied from evolution module of deskbar-applet 2.24.1
  *   Authors :
@@ -40,28 +41,19 @@
 #include <string.h>
 #include <pango/pango.h>
 #include "eds.h"
+#include <addressbook-config.h>
 
 /**
  * Structure used to store search callback and data
  */
-typedef struct _Search_Handler_And_Data
-{
-  int search_id;
-  SearchAsyncHandler handler;
-  gpointer user_data;
-  GList *hits;
-  int max_results_remaining;
-  int book_views_remaining;
+typedef struct _Search_Handler_And_Data {
+    SearchAsyncHandler search_handler;
+    gpointer user_data;
+    GList *hits;
+    int max_results_remaining;
+    EBookQuery *equery;
 } Search_Handler_And_Data;
 
-/**
- * Structure used to store open callback and data
- */
-typedef struct _Open_Handler_And_Data
-{
-  OpenAsyncHandler handler;
-} Open_Handler_And_Data;
-
 /**
  * Size of image that will be displayed in contact list
  */
@@ -73,24 +65,25 @@ static int pixbuf_size = 32;
 int remaining_books_to_open;
 
 /**
- * Fields on which search will be performed
+ * Current selected addressbook's uri and uid, initialized with default
  */
-static EContactField search_fields[] =
-  { E_CONTACT_FULL_NAME, E_CONTACT_PHONE_BUSINESS, E_CONTACT_NICKNAME, 0 };
+static gchar *current_uri = NULL;
+static gchar *current_uid = NULL;
+static gchar *current_name = "Default";
 
-static int n_search_fields = G_N_ELEMENTS (search_fields) - 1;
+static EBookQueryTest current_test = E_BOOK_QUERY_BEGINS_WITH;
 
 /**
  * Freeing a hit instance
  */
 void
-free_hit(Hit *h)
+free_hit (Hit *h)
 {
-  g_free(h->name);
-  g_free(h->phone_business);
-  g_free(h->phone_home);
-  g_free(h->phone_mobile);
-  g_free(h);
+    g_free (h->name);
+    g_free (h->phone_business);
+    g_free (h->phone_home);
+    g_free (h->phone_mobile);
+    g_free (h);
 }
 
 /**
@@ -99,7 +92,7 @@ free_hit(Hit *h)
 gboolean
 books_ready()
 {
-  return (g_slist_length(books_data) > 0);
+    return (g_slist_length (books_data) > 0);
 }
 
 /**
@@ -108,478 +101,584 @@ books_ready()
 gboolean
 books_active()
 {
-  GSList *book_list_iterator;
-  book_data_t *book_data;
-
-  // Iterate throw the list
-  for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
-      = book_list_iterator->next)
-    {
-      book_data = (book_data_t *) book_list_iterator->data;
-      if (book_data->active)
-        return TRUE;
+    GSList *book_list_iterator;
+    book_data_t *book_data;
+
+    // Iterate throw the list
+    for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
+            = book_list_iterator->next) {
+        book_data = (book_data_t *) book_list_iterator->data;
+
+        if (book_data->active)
+            return TRUE;
     }
 
-  // If no result
-  return FALSE;
+    // If no result
+    return FALSE;
 }
 /**
  * Get a specific book data by UID
  */
 book_data_t *
-books_get_book_data_by_uid(gchar *uid)
+books_get_book_data_by_uid (gchar *uid)
 {
-  GSList *book_list_iterator;
-  book_data_t *book_data;
-
-  // Iterate throw the list
-  for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
-      = book_list_iterator->next)
-    {
-      book_data = (book_data_t *) book_list_iterator->data;
-      if (strcmp(book_data->uid, uid) == 0)
-        return book_data;
-    }
+    GSList *book_list_iterator;
+    book_data_t *book_data;
 
-  // If no result
-  return NULL;
-}
+    DEBUG ("Addressbook: Get book data by uid: %s", uid);
 
-/**
- * Split a string of tokens separated by whitespace into an array of tokens.
- */
-static GArray *
-split_query_string(const gchar *str)
-{
-  GArray *parts = g_array_sized_new(FALSE, FALSE, sizeof (char *), 2);
-  PangoLogAttr *attrs;
-  guint str_len = strlen (str), word_start = 0, i;
-
-  attrs = g_new0 (PangoLogAttr, str_len + 1);
-  /* TODO: do we need to specify a particular language or is NULL ok? */
-  pango_get_log_attrs (str, -1, -1, NULL, attrs, str_len + 1);
-
-  for (i = 0; i < str_len + 1; i++)
-    {
-      char *start_word, *end_word, *word;
-      if (attrs[i].is_word_end)
-        {
-          start_word = g_utf8_offset_to_pointer (str, word_start);
-          end_word = g_utf8_offset_to_pointer (str, i);
-          word = g_strndup (start_word, end_word - start_word);
-          g_array_append_val (parts, word);
-        }
-      if (attrs[i].is_word_start)
-        {
-          word_start = i;
+    // Iterate throw the list
+    for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
+            = book_list_iterator->next) {
+        book_data = (book_data_t *) book_list_iterator->data;
+
+        if (strcmp (book_data->uid, uid) == 0) {
+            DEBUG ("Addressbook: Book %s found", uid);
+            return book_data;
         }
     }
-  g_free (attrs);
-  return parts;
+
+    DEBUG ("Addressbook: Could not found Book %s", uid);
+    // If no result
+    return NULL;
 }
 
-  /**
-   * Create a query which looks for the specified string in a contact's full name, email addresses and
-   * nick name.
-   */
+
+/**
+ * Create a query which looks for the specified string in a contact's full name, email addresses and
+ * nick name.
+ */
 static EBookQuery*
-create_query(const char* s)
+create_query (const char* s, EBookQueryTest test, AddressBook_Config *conf)
 {
-  EBookQuery *query;
-  GArray *parts = split_query_string(s);
-  EBookQuery ***field_queries;
-  EBookQuery **q;
-  EBookQuery **phone;
-  guint j;
-  int i;
-
-  q = g_new0 (EBookQuery *, n_search_fields);
-  field_queries = g_new0 (EBookQuery **, n_search_fields);
-
-  for (i = 0; i < n_search_fields; i++)
-    {
-      field_queries[i] = g_new0 (EBookQuery *, parts->len);
-      for (j = 0; j < parts->len; j++)
-        {
-          field_queries[i][j] = e_book_query_field_test(search_fields[i],
-              E_BOOK_QUERY_CONTAINS, g_array_index (parts, gchar *, j));
-        }
-      q[i] = e_book_query_and(parts->len, field_queries[i], TRUE);
-    }
-  g_array_free(parts, TRUE);
 
-  phone = g_new0 (EBookQuery *, 3);
-  phone[0] = e_book_query_field_exists(E_CONTACT_PHONE_BUSINESS);
-  phone[1] = e_book_query_field_exists(E_CONTACT_PHONE_HOME);
-  phone[2] = e_book_query_field_exists(E_CONTACT_PHONE_MOBILE);
+    EBookQuery *equery;
+    EBookQuery *queries[4];
 
-  query = e_book_query_andv(e_book_query_or(n_search_fields, q, FALSE),
-      e_book_query_or(3, phone, FALSE), NULL);
+    // Create the query
+    int cpt = 0;
 
-  for (i = 0; i < n_search_fields; i++)
-    {
-      g_free(field_queries[i]);
-    }
-  g_free(field_queries);
-  g_free(q);
-  g_free(phone);
+    // We could also use E_BOOK_QUERY_IS or E_BOOK_QUERY_BEGINS_WITH instead of E_BOOK_QUERY_CONTAINS
+    queries[cpt++] = e_book_query_field_test (E_CONTACT_FULL_NAME, test, s);
+
+    if (conf->search_phone_home)
+        queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_HOME, test, s);
+
+    if (conf->search_phone_business)
+        queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_BUSINESS, test, s);
+
+    if (conf->search_phone_mobile)
+        queries[cpt++] = e_book_query_field_test (E_CONTACT_PHONE_MOBILE, test, s);
+
+    equery = e_book_query_or (cpt, queries, TRUE);
 
-  return query;
+    return equery;
 }
 
 /**
  * Retrieve the contact's picture
  */
 static GdkPixbuf*
-pixbuf_from_contact(EContact *contact)
+pixbuf_from_contact (EContact *contact)
 {
 
-  GdkPixbuf *pixbuf = NULL;
-  EContactPhoto *photo = e_contact_get(contact, E_CONTACT_PHOTO);
-  if (photo)
-    {
-      GdkPixbufLoader *loader;
+    GdkPixbuf *pixbuf = NULL;
+    EContactPhoto *photo = e_contact_get (contact, E_CONTACT_PHOTO);
 
-      loader = gdk_pixbuf_loader_new();
+    if (photo) {
+        GdkPixbufLoader *loader;
 
-      if (photo->type == E_CONTACT_PHOTO_TYPE_INLINED)
-        {
-          if (gdk_pixbuf_loader_write(loader,
-              (guchar *) photo->data.inlined.data, photo->data.inlined.length,
-              NULL))
-            pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
+        loader = gdk_pixbuf_loader_new();
+
+        if (photo->type == E_CONTACT_PHOTO_TYPE_INLINED) {
+            if (gdk_pixbuf_loader_write (loader,
+                                         (guchar *) photo->data.inlined.data, photo->data.inlined.length,
+                                         NULL))
+                pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
         }
 
-      // If pixbuf has been found, check size and resize if needed
-      if (pixbuf)
-        {
-          GdkPixbuf *tmp;
-          gint width = gdk_pixbuf_get_width(pixbuf);
-          gint height = gdk_pixbuf_get_height(pixbuf);
-          double scale = 1.0;
-
-          if (height > width)
-            {
-              scale = pixbuf_size / (double) height;
-            }
-          else
-            {
-              scale = pixbuf_size / (double) width;
+        // If pixbuf has been found, check size and resize if needed
+        if (pixbuf) {
+            GdkPixbuf *tmp;
+            gint width = gdk_pixbuf_get_width (pixbuf);
+            gint height = gdk_pixbuf_get_height (pixbuf);
+            double scale = 1.0;
+
+            if (height > width) {
+                scale = pixbuf_size / (double) height;
+            } else {
+                scale = pixbuf_size / (double) width;
             }
 
-          if (scale < 1.0)
-            {
-              tmp = gdk_pixbuf_scale_simple(pixbuf, width * scale, height
-                  * scale, GDK_INTERP_BILINEAR);
-              g_object_unref(pixbuf);
-              pixbuf = tmp;
+            if (scale < 1.0) {
+                tmp = gdk_pixbuf_scale_simple (pixbuf, width * scale, height
+                                               * scale, GDK_INTERP_BILINEAR);
+                g_object_unref (pixbuf);
+                pixbuf = tmp;
             }
         }
-      e_contact_photo_free(photo);
+
+        e_contact_photo_free (photo);
     }
-  return pixbuf;
+
+    return pixbuf;
 }
 
 /**
- * Callback for asynchronous open of books
+ * Final callback after all books have been processed.
  */
 static void
-eds_async_open_callback(EBook *book, EBookStatus status, gpointer closure)
+view_finish_callback (EBookView *book_view, Search_Handler_And_Data *had)
 {
-    Open_Handler_And_Data *had = (Open_Handler_And_Data *) closure;
+    SearchAsyncHandler had_handler = had->search_handler;
+    GList *had_hits = had->hits;
+    gpointer had_user_data = had->user_data;
 
-    remaining_books_to_open--;
+    g_free (had);
 
-    DEBUG("eds_async_open_callback remaining book to open: %i", remaining_books_to_open);
+    DEBUG ("Addressbook: View finish");
 
-    if (status == E_BOOK_ERROR_OK) {
+    if (book_view != NULL)
+        g_object_unref (book_view);
 
-        book_data_t *book_data = g_new(book_data_t, 1);
-	book_data->active = FALSE;
-	book_data->name = g_strdup(e_source_peek_name(e_book_get_source(book)));
-	book_data->uid = g_strdup(e_source_peek_uid(e_book_get_source(book)));
-	book_data->ebook = book;
-	books_data = g_slist_prepend(books_data, book_data);
-	had->handler();
-    }
-    else {
-
-        WARN("Got error %d when opening book", status);
-    }
+    // Call display callback
+    had_handler (had_hits, had_user_data);
 }
 
+
 /**
- * Initialize address book
+ * Callback called after a contact have been found in EDS by search_async_by_contacts.
  */
-void
-init(OpenAsyncHandler callback)
+static void
+eds_query_result_cb (EBook *book, EBookStatus status, GList *contacts, gpointer user_data)
 {
-  GSList *list, *l;
-  ESourceList *source_list = NULL;
-  remaining_books_to_open = 0;
-  books_data = NULL;
-
-  source_list = e_source_list_new_for_gconf_default("/apps/evolution/addressbook/sources");
-  
-  if (source_list == NULL)
-    {
-      DEBUG("Error could not initialize source list for addressbook");
-      return;
+
+    DEBUG ("Addressbook: Search Result callback called");
+
+    if (status != E_BOOK_ERROR_OK)
+        ERROR ("Addressbook: Error: Status not OK on search callback");
+
+    Search_Handler_And_Data *had = (Search_Handler_And_Data *) user_data;
+
+    if (!contacts) {
+        DEBUG ("Addressbook: No contact found");
+        had->search_handler (NULL, user_data);
+        return;
     }
 
-  list = e_source_list_peek_groups(source_list);
-
-  Open_Handler_And_Data *had = g_new (Open_Handler_And_Data, 1);
-  had->handler = callback;
-
-  for (l = list; l != NULL; l = l->next)
-    {
-
-      ESourceGroup *group = l->data;
-      GSList *sources = NULL, *m;
-      sources = e_source_group_peek_sources(group);
-      for (m = sources; m != NULL; m = m->next)
-        {
-          ESource *source = m->data;
-          EBook *book = e_book_new(source, NULL);
-          if (book != NULL)
-            {
-              // Keep count of remaining books to open
-
-	      DEBUG("init addressbook %i", remaining_books_to_open);
-              remaining_books_to_open++;
-	      
-              // Asynchronous open
-              e_book_async_open(book, FALSE, eds_async_open_callback, had);
+    GList *l = NULL;
+
+    if (status == E_BOOK_ERROR_OK) {
+
+        gchar *number;
+
+        // make sure we have a new list of hits
+        had->hits = NULL;
+
+        l = contacts;
+
+        while (l) {
+
+            Hit *hit = g_new (Hit, 1);
+
+            if (hit) {
+
+                // Get the photo contact
+                hit->photo = pixbuf_from_contact (E_CONTACT (l->data));
+
+                // Get business phone information
+                fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_BUSINESS, &number);
+                hit->phone_business = g_strdup (number);
+
+                // Get home phone information
+                fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_HOME, &number);
+                hit->phone_home = g_strdup (number);
+
+                // Get mobile phone information
+                fetch_information_from_contact (E_CONTACT (l->data), E_CONTACT_PHONE_MOBILE, &number);
+                hit->phone_mobile = g_strdup (number);
+
+                hit->name = g_strdup ( (char *) e_contact_get_const (E_CONTACT (l->data), E_CONTACT_NAME_OR_ORG));
+
+                if (!hit->name)
+                    hit->name = "";
+
+                /*
+                        DEBUG ("Addressbook: Contact Found");
+                        DEBUG ("Addressbook:     Full Name %s", hit->name);
+                        DEBUG ("Addressbook:     Phone Home %s", hit->phone_home);
+                        DEBUG ("Addressbook:     Phone Business %s", hit->phone_business);
+                        DEBUG ("Addressbook:     Phone Mobile %s", hit->phone_mobile);
+                */
+
+                if (hit)
+                    had->hits = g_list_append (had->hits, hit);
+
+
+                // DEBUG ("Addressbook: max_result_remaining %d", had->max_results_remaining);
+                had->max_results_remaining--;
+
+                if (had->max_results_remaining <= 0)
+                    break;
             }
+
+            l = g_list_next (l);
+
         }
+
+        view_finish_callback (NULL, had);
     }
-  current_search_id = 0;
 
-  g_object_unref(source_list);
+    g_object_unref (book);
+
 }
 
+
+
 /**
- * Final callback after all books have been processed.
+ * Callback for asynchronous open of books
  */
 static void
-view_finish(EBookView *book_view, Search_Handler_And_Data *had)
+eds_async_open_callback (EBook *book, EBookStatus status, gpointer closure)
 {
-  GList *i;
-  SearchAsyncHandler had_handler = had->handler;
-  GList *had_hits = had->hits;
-  gpointer had_user_data = had->user_data;
-  int search_id = had->search_id;
-  g_free(had);
-
-  if (book_view != NULL)
-    g_object_unref(book_view);
-
-  if (search_id == current_search_id)
-    {
-      // Reinitialize search id to prevent overflow
-      if (current_search_id > 5000)
-        current_search_id = 0;
-
-      // Call display callback
-      had_handler(had_hits, had_user_data);
-    }
-  else
-    {
-      // Some hits could have been processed but will not be used
-      for (i = had_hits; i != NULL; i = i->next)
-        {
-          Hit *entry;
-          entry = i->data;
-          free_hit(entry);
+    DEBUG ("Addressbook: Open book callback");
+
+    Search_Handler_And_Data *had = (Search_Handler_And_Data *) closure;
+
+    if (status == E_BOOK_ERROR_OK) {
+
+        if (!e_book_is_opened (book)) {
+            // We must open the addressbook
+            e_book_open (book, FALSE, NULL);
         }
-      g_list_free(had_hits);
+
+        if (e_book_async_get_contacts (book, had->equery, eds_query_result_cb, had))
+            ERROR ("Addressbook: Error: While querying addressbook");
+
+    } else {
+        WARN ("Addressbook: Got error when opening book");
+        gchar *state_string = NULL;
+
+        switch (status) {
+            case E_BOOK_ERROR_INVALID_ARG :
+                state_string = g_strdup ("E_BOOK_ERROR_INVALID_ARG");
+                break;
+            case E_BOOK_ERROR_BUSY :
+                state_string = g_strdup ("E_BOOK_ERROR_BUSY");
+                break;
+            case E_BOOK_ERROR_REPOSITORY_OFFLINE :
+                state_string = g_strdup ("E_BOOK_ERROR_REPOSITORY_OFFLINE");
+                break;
+            case E_BOOK_ERROR_NO_SUCH_BOOK :
+                state_string = g_strdup ("E_BOOK_ERROR_NO_SUCH_BOOK");
+                break;
+            case E_BOOK_ERROR_NO_SELF_CONTACT :
+                state_string = g_strdup ("E_BOOK_ERROR_NO_SELF_CONTACT");
+                break;
+            case E_BOOK_ERROR_SOURCE_NOT_LOADED:
+                state_string = g_strdup ("E_BOOK_ERROR_SOURCE_NOT_LOADED");
+                break;
+            case E_BOOK_ERROR_SOURCE_ALREADY_LOADED :
+                state_string = g_strdup ("E_BOOK_ERROR_SOURCE_ALREADY_LOADED");
+                break;
+            case E_BOOK_ERROR_PERMISSION_DENIED :
+                state_string = g_strdup ("E_BOOK_ERROR_PERMISSION_DENIED");
+                break;
+            case E_BOOK_ERROR_CONTACT_NOT_FOUND :
+                state_string = g_strdup ("E_BOOK_ERROR_CONTACT_NOT_FOUND");
+                break;
+            case E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS :
+                state_string = g_strdup ("E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS");
+                break;
+            case E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED :
+                state_string = g_strdup ("E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED");
+                break;
+            case E_BOOK_ERROR_CANCELLED :
+                state_string = g_strdup ("E_BOOK_ERROR_CANCELLED");
+                break;
+            case E_BOOK_ERROR_COULD_NOT_CANCEL :
+                state_string = g_strdup ("E_BOOK_ERROR_COULD_NOT_CANCEL");
+                break;
+            case E_BOOK_ERROR_AUTHENTICATION_FAILED :
+                state_string = g_strdup ("E_BOOK_ERROR_AUTHENTICATION_FAILED");
+                break;
+            case E_BOOK_ERROR_AUTHENTICATION_REQUIRED :
+                state_string = g_strdup ("E_BOOK_ERROR_AUTHENTICATION_REQUIRED");
+                break;
+            case E_BOOK_ERROR_TLS_NOT_AVAILABLE :
+                state_string = g_strdup ("E_BOOK_ERROR_TLS_NOT_AVAILABLE");
+                break;
+            case E_BOOK_ERROR_CORBA_EXCEPTION :
+                state_string = g_strdup ("E_BOOK_ERROR_CORBA_EXCEPTION");
+                break;
+            case E_BOOK_ERROR_NO_SUCH_SOURCE :
+                state_string = g_strdup ("E_BOOK_ERROR_NO_SUCH_SOURCE");
+                break;
+            case E_BOOK_ERROR_OFFLINE_UNAVAILABLE :
+                state_string = g_strdup ("E_BOOK_ERROR_OFFLINE_UNAVAILABLE");
+                break;
+            case E_BOOK_ERROR_OTHER_ERROR :
+                state_string = g_strdup ("E_BOOK_ERROR_OTHER_ERROR");
+                break;
+            case E_BOOK_ERROR_INVALID_SERVER_VERSION :
+                state_string = g_strdup ("E_BOOK_ERROR_INVALID_SERVER_VERSION");
+                break;
+            default:
+                break;
+
+        }
+
+        ERROR ("%s", state_string);
+
+        g_free (state_string);
     }
+
 }
 
 /**
- * Callback called after each ebook search completed.
- * Used to store book search results.
+ * Initialize address book
  */
-static void
-view_contacts_added_cb(EBookView *book_view, GList *contacts,
-    gpointer user_data)
+void
+init ()
 {
-  GdkPixbuf *photo;
+    GError *err = NULL;
+    gchar *absuri, *reluri;
+
+    EBook *default_addressbook = e_book_new_default_addressbook (&err);
 
-  Search_Handler_And_Data *had = (Search_Handler_And_Data *) user_data;
+    if (err)
+        ERROR ("Addressbook: Error: Could not create new book from source: %s", err->message);
 
-  // If it's not the last search launched, stop it
-  if (had->search_id != current_search_id)
-    {
-      e_book_view_stop(book_view);
-      return;
+    ESource *default_source = e_book_get_source (default_addressbook);
+
+    // DEBUG ("Addressbook: Default source relative uri %s", e_source_peek_relative_uri (default_source));
+    // DEBUG ("Addressbook: Default source absolute uri %s", e_source_peek_absolute_uri (default_source));
+
+    if (current_uri) {
+        g_free (current_uri);
+        current_uri = NULL;
     }
 
-  // If we reached max results
-  if (had->max_results_remaining <= 0)
-    {
-      e_book_view_stop(book_view);
-      had->book_views_remaining--;
-
-      // All books have been computed
-      if (had->book_views_remaining == 0)
-        {
-          view_finish(book_view, had);
-          return;
-        }
+    if (current_uid) {
+        g_free (current_uid);
+        current_uid = NULL;
     }
 
-  // For each contact
-  for (; contacts != NULL; contacts = g_list_next (contacts))
-    {
-      EContact *contact;
-      Hit *hit;
-      gchar *number;
-
-      contact = E_CONTACT (contacts->data);
-      hit = g_new (Hit, 1);
-
-      // Get the photo contact
-      photo = pixbuf_from_contact(contact);
-      hit->photo = photo;
-
-      // Get business phone information
-      fetch_information_from_contact(contact, E_CONTACT_PHONE_BUSINESS, &number);
-      hit->phone_business = g_strdup(number);
-
-      // Get home phone information
-      fetch_information_from_contact(contact, E_CONTACT_PHONE_HOME, &number);
-      hit->phone_home = g_strdup(number);
-
-      // Get mobile phone information
-      fetch_information_from_contact(contact, E_CONTACT_PHONE_MOBILE, &number);
-      hit->phone_mobile = g_strdup(number);
-
-      hit->name = g_strdup((char*) e_contact_get_const(contact,
-          E_CONTACT_NAME_OR_ORG));
-      if (!hit->name)
-        hit->name = "";
-
-      // Append list of contacts
-      had->hits = g_list_append(had->hits, hit);
-      had->max_results_remaining--;
-
-      // If we reached max results
-      if (had->max_results_remaining <= 0)
-        {
-          e_book_view_stop(book_view);
-          had->book_views_remaining--;
-          if (had->book_views_remaining == 0)
-            {
-              view_finish(book_view, had);
-            }
-          break;
-        }
+    if (strcmp (current_name, "Default") != 0) {
+        g_free (current_name);
+        current_name = NULL;
     }
-}
 
-/**
- * Callback called after each ebook search completed.
- * Used to call final callback when all books have been read.
- */
-static void
-view_completed_cb(EBookView *book_view, EBookViewStatus status UNUSED,
-gpointer user_data)
-{
-  Search_Handler_And_Data *had = (Search_Handler_And_Data *) user_data;
-  had->book_views_remaining--;
-
-  // All books have been prcessed
-  if (had->book_views_remaining == 0)
-    {
-      // Call finish function
-      view_finish(book_view, had);
+    // TODO: This should work but return a NULL pointer ...
+    // if (! (group = e_source_peek_group (default_source)));
+
+    // ERROR ("Addressbook: Error: No group found for default addressbook");
+
+    absuri = g_strdup (e_source_peek_absolute_uri (default_source));
+    // absuri = g_strdup (e_source_group_peek_base_uri (group));
+    reluri = g_strdup (e_source_peek_relative_uri (default_source));
+
+    if (!absuri) {
+        absuri = g_malloc (1);
+        *absuri = 0;
+    }
+
+    if (!reluri) {
+        reluri = g_malloc (1);
+        *reluri = 0;
     }
+
+    // Do not overwrite current_name for default
+    // current_name = g_strdup (e_source_peek_name (default_source));
+
+    current_uid = g_strdup (e_source_peek_uid (default_source));
+
+    if (strcmp (absuri+strlen (absuri)-1, "/") == 0)
+        current_uri = g_strjoin ("", absuri, reluri, NULL);
+    else
+        current_uri = g_strjoin ("/", absuri, reluri, NULL);
+
+    g_free (absuri);
+    g_free (reluri);
 }
 
+
 /**
- * Perform an asynchronous search
+ * Fill book data
  */
 void
-search_async(const char *query, int max_results, SearchAsyncHandler handler,
-    gpointer user_data)
+fill_books_data ()
 {
-  // Increment search id
-  current_search_id++;
+    GSList *list, *l;
+    ESourceList *source_list = NULL;
+    remaining_books_to_open = 0;
+    books_data = NULL;
 
-  // If query is null
-  if (strlen(query) < 1 || g_slist_length(books_data) == 0)
-    {
-      // If data displayed (from previous search), directly call callback
-      handler(NULL, user_data);
+    source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources");
 
-      return;
+    if (source_list == NULL) {
+        DEBUG ("Addressbook: Error could not initialize source list for addressbook");
+        return;
     }
 
-  GSList *iter;
-  EBookQuery* book_query = create_query(query);
-  Search_Handler_And_Data *had = g_new (Search_Handler_And_Data, 1);
-  int search_count = 0;
-
-  // Initialize search data
-  had->search_id = current_search_id;
-  had->handler = handler;
-  had->user_data = user_data;
-  had->hits = NULL;
-  had->max_results_remaining = max_results;
-  had->book_views_remaining = 0;
-
-  // Iterate throw books data
-  for (iter = books_data; iter != NULL; iter = iter->next)
-    {
-      book_data_t *book_data = (book_data_t *) iter->data;
-
-      // If book is active
-      if (book_data->active)
-        {
-          EBookView *book_view = NULL;
-          e_book_get_book_view(book_data->ebook, book_query, NULL, max_results,
-              &book_view, NULL);
-
-          // If book view exists
-          if (book_view != NULL)
-            {
-              // Perform search
-              had->book_views_remaining++;
-              g_signal_connect (book_view, "contacts_added", (GCallback) view_contacts_added_cb, had);
-              g_signal_connect (book_view, "sequence_complete", (GCallback) view_completed_cb, had);
-              e_book_view_start(book_view);
-              search_count++;
-            }
+    list = e_source_list_peek_groups (source_list);
+
+    if (!list) {
+        DEBUG ("Addressbook: Address Book source groups are missing! Check your GConf setup.");
+        return;
+    }
+
+
+    for (l = list; l != NULL; l = l->next) {
+
+        ESourceGroup *group = l->data;
+        GSList *sources = NULL, *m;
+        gchar *absuri;
+
+        absuri = g_strdup (e_source_group_peek_base_uri (group));
+
+        sources = e_source_group_peek_sources (group);
+
+        for (m = sources; m != NULL; m = m->next) {
+
+            ESource *source = m->data;
+
+            book_data_t *book_data = g_new (book_data_t, 1);
+            book_data->active = FALSE;
+            book_data->name = g_strdup (e_source_peek_name (source));
+            book_data->uid = g_strdup (e_source_peek_uid (source));
+
+            const gchar *property_name = "default";
+            const gchar *prop = e_source_get_property (source, property_name);
+
+            if (prop)
+                if (strcmp (prop, "true") == 0)
+                    book_data->isdefault = TRUE;
+                else
+                    book_data->isdefault = FALSE;
+            else
+                book_data->isdefault = FALSE;
+
+            if (strcmp (absuri+strlen (absuri)-1, "/") == 0)
+                book_data->uri = g_strjoin ("", absuri, e_source_peek_relative_uri (source), NULL);
+            else
+                book_data->uri = g_strjoin ("/", absuri, e_source_peek_relative_uri (source), NULL);
+
+            books_data = g_slist_prepend (books_data, book_data);
+
         }
+
+        g_free (absuri);
     }
 
-  e_book_query_unref(book_query);
+    g_object_unref (source_list);
+}
+
+void
+search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler handler, gpointer user_data)
+{
+    GError *err = NULL;
+    EBook *book;
+
+    DEBUG ("Addressbook: New search by contacts: %s, max_results %d", query, max_results);
 
-  // If no search has been executed (no book selected)
-  if (search_count == 0)
-    {
-      // Call last callback anyway
-      view_finish(NULL, had);
+    if (strlen (query) < 1) {
+        DEBUG ("Addressbook: Query is empty");
+        handler (NULL, user_data);
+        return;
     }
+
+    Search_Handler_And_Data *had = g_new (Search_Handler_And_Data, 1);
+
+    // initialize search data
+    had->search_handler = handler;
+    had->user_data = user_data;
+    had->hits = NULL;
+    had->max_results_remaining = max_results;
+    had->equery = create_query (query, current_test, (AddressBook_Config *) (user_data));
+
+    if (!current_uri)
+        ERROR ("Addressbook: Error: Current addressbook uri not specified uri");
+
+
+    DEBUG ("Addressbook: Opening addressbook: %s", current_uri);
+    DEBUG ("Addressbook: Opening addressbook: %s", current_name);
+
+    // TODO: This hack is necessary as we cannot access group's base_uri of the default book
+    // see init()
+
+    if (strcmp (current_name, "Default") == 0)
+        book = e_book_new_default_addressbook (&err);
+    else
+        book = e_book_new_from_uri (current_uri, &err);
+
+    if (err)
+        ERROR ("Addressbook: Error: Could not open new book: %s", err->message);
+
+    if (book) {
+        DEBUG ("Addressbook: Created empty book successfully");
+
+        // Asynchronous open
+        e_book_async_open (book, TRUE, eds_async_open_callback, had);
+    } else
+        ERROR ("Addressbook: Error: No book available");
+
+
 }
 
 /**
  * Fetch information for a specific contact
  */
 void
-fetch_information_from_contact(EContact *contact, EContactField field,
-    gchar **info)
+fetch_information_from_contact (EContact *contact, EContactField field, gchar **info)
+{
+    gchar *to_fetch;
+
+    to_fetch = g_strdup ( (char*) e_contact_get_const (contact, field));
+
+    if (!to_fetch) {
+        to_fetch = g_strdup (EMPTY_ENTRY);
+    }
+
+    *info = g_strdup (to_fetch);
+}
+
+void
+set_current_addressbook (const gchar *name)
 {
-  gchar *to_fetch;
 
-  to_fetch = g_strdup((char*) e_contact_get_const(contact, field));
-  if (!to_fetch)
-    {
-      to_fetch = g_strdup(EMPTY_ENTRY);
+    GSList *book_list_iterator;
+    book_data_t *book_data;
+
+    // Iterate throw the list
+    for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
+            = book_list_iterator->next) {
+        book_data = (book_data_t *) book_list_iterator->data;
+
+        if (strcmp (book_data->name, name) == 0) {
+            current_uri = book_data->uri;
+            current_uid = book_data->uid;
+            current_name = book_data->name;
+        }
     }
+}
+
+
+const gchar *
+get_current_addressbook (void)
+{
+    return current_name;
+}
 
-  *info = g_strdup(to_fetch);
+
+void
+set_current_addressbook_test (EBookQueryTest test)
+{
+    current_test = test;
 }
 
+EBookQueryTest
+get_current_addressbook_test (void)
+{
+    return current_test;
+}
diff --git a/sflphone-client-gnome/src/contacts/addressbook/eds.h b/sflphone-client-gnome/src/contacts/addressbook/eds.h
index 7ff8cbd025f27b28d19951a7b5f2411fcaf511cd..51b8421c9b25080cdaa7d47671f2af865259bcbd 100644
--- a/sflphone-client-gnome/src/contacts/addressbook/eds.h
+++ b/sflphone-client-gnome/src/contacts/addressbook/eds.h
@@ -43,6 +43,7 @@
 #include <libebook/e-book.h>
 #include <sflphone_const.h>
 
+
 #define EMPTY_ENTRY     "empty"
 
 G_BEGIN_DECLS
@@ -56,24 +57,23 @@ int current_search_id;
 /**
  * Represent a contact entry
  */
-typedef struct _Hit
-{
-  gchar *name;
-  GdkPixbuf *photo;
-  gchar *phone_business;
-  gchar *phone_home;
-  gchar *phone_mobile;
+typedef struct _Hit {
+    gchar *name;
+    GdkPixbuf *photo;
+    gchar *phone_business;
+    gchar *phone_home;
+    gchar *phone_mobile;
 } Hit;
 
 /**
  * Book structure for "outside world"
  */
-typedef struct
-{
-  gchar *uid;
-  gchar *name;
-  gboolean active;
-  EBook *ebook;
+typedef struct {
+    gchar *uid;
+    gchar *uri;
+    gchar *name;
+    gboolean active;
+    gboolean isdefault;
 } book_data_t;
 
 GSList *books_data;
@@ -82,46 +82,51 @@ GSList *books_data;
  * Free a contact entry
  */
 void
-free_hit(Hit *h);
+free_hit (Hit *h);
 
 /**
  * Template callback function for the asynchronous search
  */
 typedef void
-(* SearchAsyncHandler)(GList *hits, gpointer user_data);
+(* SearchAsyncHandler) (GList *hits, gpointer user_data);
 
 /**
  * Template callback function for the asynchronous open
  */
 typedef void
-(* OpenAsyncHandler)();
+(* OpenAsyncHandler) ();
 
 /**
  * Initialize the address book.
  * Connection to evolution data server
  */
 void
-init(OpenAsyncHandler);
+init ();
+
+/**
+ * Fill list of addressbooks
+ */
+void
+fill_books_data (void);
 
 /**
- * Asynchronous search function
+ * Asynchronous query to EDS using get contact method.
  */
 void
-search_async(const char *query, int max_results, SearchAsyncHandler handler,
-    gpointer user_data);
+search_async_by_contacts (const char *query, int max_results, SearchAsyncHandler handler, gpointer user_data);
 
 /**
  * Retrieve the specified information from the contact
  */
 void
-fetch_information_from_contact(EContact *contact, EContactField field,
-    gchar **info);
+fetch_information_from_contact (EContact *contact, EContactField field,
+                                gchar **info);
 
 GSList*
-get_books(void);
+get_books (void);
 
 book_data_t *
-books_get_book_data_by_uid(gchar *uid);
+books_get_book_data_by_uid (gchar *uid);
 
 /**
  * Public way to know if we can perform a search
@@ -141,6 +146,25 @@ books_active();
 GSList *
 addressbook_get_books_data();
 
+/**
+ * Set the current address book
+ */
+void
+set_current_addressbook (const gchar *name);
+
+/**
+ * Return current addressbook name
+ */
+const gchar *
+get_current_addressbook (void);
+
+void
+set_current_addressbook_test (EBookQueryTest test);
+
+EBookQueryTest
+get_current_addressbook_test (void);
+
+
 G_END_DECLS
 
 #endif /* __EDS_H__ */
diff --git a/sflphone-client-gnome/src/contacts/calllist.c b/sflphone-client-gnome/src/contacts/calllist.c
index c5566261be350aa45e96e6d2e2eab331874e8ab1..5211a6cd4c6a78e92848dd3967be03e50c0cbcd5 100644
--- a/sflphone-client-gnome/src/contacts/calllist.c
+++ b/sflphone-client-gnome/src/contacts/calllist.c
@@ -31,68 +31,69 @@
 #include <calllist.h>
 #include <calltree.h>
 #include <contacts/searchbar.h>
+#include <eel-gconf-extensions.h>
 
 // TODO : sflphoneGTK : try to do this more generic
-void calllist_add_contact (gchar *contact_name, gchar *contact_phone, contact_type_t type, GdkPixbuf *photo){
+void calllist_add_contact (gchar *contact_name, gchar *contact_phone, contact_type_t type, GdkPixbuf *photo)
+{
 
     callable_obj_t *new_call;
     GdkPixbuf *pixbuf;
 
     /* Check if the information is valid */
-    if (g_strcasecmp (contact_phone, EMPTY_ENTRY) != 0){
+    if (g_strcasecmp (contact_phone, EMPTY_ENTRY) != 0) {
         create_new_call (CONTACT, CALL_STATE_DIALING, "", "", contact_name, contact_phone, &new_call);
 
         // Attach a pixbuf to a contact
         if (photo) {
-            attach_thumbnail (new_call, gdk_pixbuf_copy(photo));
-        }
-        else {
+            attach_thumbnail (new_call, gdk_pixbuf_copy (photo));
+        } else {
             switch (type) {
                 case CONTACT_PHONE_BUSINESS:
-                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/users.svg", NULL);
+                    pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/users.svg", NULL);
                     break;
                 case CONTACT_PHONE_HOME:
-                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/home.svg", NULL);
+                    pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/home.svg", NULL);
                     break;
                 case CONTACT_PHONE_MOBILE:
-                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/phone.svg", NULL);
+                    pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/phone.svg", NULL);
                     break;
                 default:
-                    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/contact_default.svg", NULL);
+                    pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/contact_default.svg", NULL);
                     break;
             }
+
             attach_thumbnail (new_call, pixbuf);
         }
 
         calllist_add (contacts, new_call);
-        calltree_add_call(contacts, new_call, NULL);
+        calltree_add_call (contacts, new_call, NULL);
     }
 }
 
 void
 calllist_init (calltab_t* tab)
 {
-  tab->callQueue = g_queue_new ();
-  tab->selectedCall = NULL;
+    tab->callQueue = g_queue_new ();
+    tab->selectedCall = NULL;
 }
 
 void
 calllist_clean (calltab_t* tab)
 {
-  g_queue_free (tab->callQueue);
+    g_queue_free (tab->callQueue);
 }
 
 void
 calllist_reset (calltab_t* tab)
 {
-  g_queue_free (tab->callQueue);
-  tab->callQueue = g_queue_new();
+    g_queue_free (tab->callQueue);
+    tab->callQueue = g_queue_new();
 }
 
 void calllist_add_history_entry (callable_obj_t *obj)
 {
-    if ( g_strcasecmp (dbus_get_history_enabled (), "true") == 0)
-    {
+    if (eel_gconf_get_integer (HISTORY_ENABLED)) {
         g_queue_push_tail (history->callQueue, (gpointer *) obj);
         calltree_add_call (history, obj, NULL);
     }
@@ -101,89 +102,84 @@ void calllist_add_history_entry (callable_obj_t *obj)
 void
 calllist_add (calltab_t* tab, callable_obj_t * c)
 {
-    if( tab == history )
-    {
+    if (tab == history) {
         calllist_add_history_entry (c);
-    }
-    else
+    } else
         g_queue_push_tail (tab->callQueue, (gpointer *) c);
 }
 
 // TODO : sflphoneGTK : try to do this more generic
 void
-calllist_clean_history( void )
+calllist_clean_history (void)
 {
-  unsigned int i;
-  guint size = calllist_get_size( history );
-  DEBUG("history list size = %i", calllist_get_size( history ));
-  for( i = 0 ; i < size ; i++ )
-  {
-    DEBUG("Delete calls");
-    callable_obj_t* c = calllist_get_nth( history , i );
-    // Delete the call from the call tree
-    DEBUG("Delete calls");
-    calltree_remove_call(history, c, NULL);
-  }
-  calllist_reset( history );
+    unsigned int i;
+    guint size = calllist_get_size (history);
+    DEBUG ("CallList: history list size = %i", calllist_get_size (history));
+
+    for (i = 0 ; i < size ; i++) {
+        DEBUG ("CallList: Delete calls");
+        callable_obj_t* c = calllist_get_nth (history , i);
+        // Delete the call from the call tree
+        DEBUG ("CallList: Delete calls");
+        calltree_remove_call (history, c, NULL);
+    }
+
+    calllist_reset (history);
 }
 
 // TODO : sflphoneGTK : try to do this more generic
 void
-calllist_remove_from_history( callable_obj_t* c )
+calllist_remove_from_history (callable_obj_t* c)
 {
-  calllist_remove( history, c->_callID );
-  calltree_remove_call(history, c, NULL);
-  DEBUG("Size of history = %i" , calllist_get_size( history ));
+    calllist_remove (history, c->_callID);
+    calltree_remove_call (history, c, NULL);
+    DEBUG ("CallList: Size of history = %i" , calllist_get_size (history));
 }
 
 void
 calllist_remove (calltab_t* tab, const gchar * callID)
 {
-  callable_obj_t * c = calllist_get(tab, callID);
-  if (c)
-  {
-    g_queue_remove(tab->callQueue, c);
-  }
+    callable_obj_t * c = calllist_get (tab, callID);
+
+    if (c) {
+        g_queue_remove (tab->callQueue, c);
+    }
 }
 
 
 callable_obj_t *
-calllist_get_by_state (calltab_t* tab, call_state_t state )
+calllist_get_by_state (calltab_t* tab, call_state_t state)
 {
-  GList * c = g_queue_find_custom (tab->callQueue, &state, get_state_callstruct);
-  if (c)
-  {
-    return (callable_obj_t *)c->data;
-  }
-  else
-  {
-    return NULL;
-  }
+    GList * c = g_queue_find_custom (tab->callQueue, &state, get_state_callstruct);
+
+    if (c) {
+        return (callable_obj_t *) c->data;
+    } else {
+        return NULL;
+    }
 
 }
 
 guint
 calllist_get_size (calltab_t* tab)
 {
-  return g_queue_get_length (tab->callQueue);
+    return g_queue_get_length (tab->callQueue);
 }
 
 callable_obj_t *
-calllist_get_nth (calltab_t* tab, guint n )
+calllist_get_nth (calltab_t* tab, guint n)
 {
-  return g_queue_peek_nth (tab->callQueue, n);
+    return g_queue_peek_nth (tab->callQueue, n);
 }
 
 callable_obj_t *
-calllist_get (calltab_t* tab, const gchar * callID )
+calllist_get (calltab_t* tab, const gchar * callID)
 {
-  GList * c = g_queue_find_custom (tab->callQueue, callID, is_callID_callstruct);
-  if (c)
-  {
-    return (callable_obj_t *)c->data;
-  }
-  else
-  {
-    return NULL;
-  }
+    GList * c = g_queue_find_custom (tab->callQueue, callID, is_callID_callstruct);
+
+    if (c) {
+        return (callable_obj_t *) c->data;
+    } else {
+        return NULL;
+    }
 }
diff --git a/sflphone-client-gnome/src/contacts/calllist.h b/sflphone-client-gnome/src/contacts/calllist.h
index db3cee03dcb4df6adc6685db1a8ffe234532530d..7b6704600fb3cb0c6a4aa498d1b437d90351533c 100644
--- a/sflphone-client-gnome/src/contacts/calllist.h
+++ b/sflphone-client-gnome/src/contacts/calllist.h
@@ -40,17 +40,17 @@
   */
 
 typedef struct {
-	GtkTreeStore* store;
-	GtkWidget* view;
-	GtkWidget* tree;
-        GtkWidget* searchbar;
-
-        // Calllist vars
-	GQueue* callQueue;
-        gint selectedType;
-	callable_obj_t* selectedCall;
-        conference_obj_t* selectedConf;
-        gchar *_name;
+    GtkTreeStore* store;
+    GtkWidget* view;
+    GtkWidget* tree;
+    GtkWidget* searchbar;
+
+    // Calllist vars
+    GQueue* callQueue;
+    gint selectedType;
+    callable_obj_t* selectedCall;
+    conference_obj_t* selectedConf;
+    gchar *_name;
 } calltab_t;
 
 void
@@ -64,7 +64,7 @@ calllist_init (calltab_t* tab);
 
 /** This function empty and free the call list. */
 void
-calllist_clean(calltab_t* tab);
+calllist_clean (calltab_t* tab);
 
 /** This function empty, free the call list and allocate a new one. */
 void
@@ -72,11 +72,11 @@ calllist_reset (calltab_t* tab);
 
 /** Get the maximun number of calls in the history calltab */
 gdouble
-call_history_get_max_calls( void );
+call_history_get_max_calls (void);
 
 /** Set the maximun number of calls in the history calltab */
 void
-call_history_set_max_calls( const gdouble number );
+call_history_set_max_calls (const gdouble number);
 
 /** This function append a call to list.
   * @param c The call you want to add
@@ -106,13 +106,13 @@ calllist_get_size (calltab_t* tab);
   * @param n The position of the call you want
   * @return A call or NULL */
 callable_obj_t *
-calllist_get_nth (calltab_t* tab, guint n );
+calllist_get_nth (calltab_t* tab, guint n);
 
 /** Return the call corresponding to the callID
   * @param n The callID of the call you want
   * @return A call or NULL */
 callable_obj_t *
-calllist_get (calltab_t* tab, const gchar * callID );
+calllist_get (calltab_t* tab, const gchar * callID);
 
 /**
  * Clean the history. Delete all calls
@@ -125,7 +125,7 @@ calllist_clean_history();
  * @param c The call to remove
  */
 void
-calllist_remove_from_history( callable_obj_t* c);
+calllist_remove_from_history (callable_obj_t* c);
 
 /**
  * Initialize a non-empty call list
diff --git a/sflphone-client-gnome/src/contacts/calltab.c b/sflphone-client-gnome/src/contacts/calltab.c
index ac194bf8287fe4a233e827aae2d2c9acfc22afa8..fab48e76318b7810a5969b7edaeb47382af70125 100644
--- a/sflphone-client-gnome/src/contacts/calltab.c
+++ b/sflphone-client-gnome/src/contacts/calltab.c
@@ -36,28 +36,28 @@
 
 calltab_t* calltab_init (gboolean searchbar_type, gchar *name)
 {
-	calltab_t* ret;
+    calltab_t* ret;
 
-	ret = malloc(sizeof(calltab_t));
+    ret = malloc (sizeof (calltab_t));
 
-	ret->store = NULL;
-	ret->view = NULL;
-	ret->tree = NULL;
-        ret->searchbar = NULL;
-	ret->callQueue = NULL;
-	ret->selectedCall = NULL;
-	ret->selectedConf = NULL;
-        ret->_name = g_strdup (name);
+    ret->store = NULL;
+    ret->view = NULL;
+    ret->tree = NULL;
+    ret->searchbar = NULL;
+    ret->callQueue = NULL;
+    ret->selectedCall = NULL;
+    ret->selectedConf = NULL;
+    ret->_name = g_strdup (name);
 
-	calltree_create (ret, searchbar_type);
-	calllist_init(ret);
+    calltree_create (ret, searchbar_type);
+    calllist_init (ret);
 
 
-	return ret;
+    return ret;
 }
 
 void
-calltab_select_call (calltab_t* tab, callable_obj_t * c )
+calltab_select_call (calltab_t* tab, callable_obj_t * c)
 {
     tab->selectedType = A_CALL;
     tab->selectedCall = c;
@@ -66,7 +66,7 @@ calltab_select_call (calltab_t* tab, callable_obj_t * c )
 
 
 void
-calltab_select_conf (conference_obj_t * c )
+calltab_select_conf (conference_obj_t * c)
 {
     current_calls->selectedType = A_CONFERENCE;
     current_calls->selectedConf = c;
@@ -74,7 +74,7 @@ calltab_select_conf (conference_obj_t * c )
 }
 
 gint
-calltab_get_selected_type(calltab_t* tab)
+calltab_get_selected_type (calltab_t* tab)
 {
     return tab->selectedType;
 }
@@ -82,7 +82,7 @@ calltab_get_selected_type(calltab_t* tab)
 callable_obj_t *
 calltab_get_selected_call (calltab_t* tab)
 {
-  return tab->selectedCall;
+    return tab->selectedCall;
 }
 
 conference_obj_t*
diff --git a/sflphone-client-gnome/src/contacts/calltab.h b/sflphone-client-gnome/src/contacts/calltab.h
index db14867ac51839ec0c3eb85c2bea116576fe69d5..1d748620ba3f3e9e1dd908e0ae03b16332f78ec8 100644
--- a/sflphone-client-gnome/src/contacts/calltab.h
+++ b/sflphone-client-gnome/src/contacts/calltab.h
@@ -54,7 +54,7 @@ void
 calltab_select_conf (conference_obj_t *);
 
 gint
-calltab_get_selected_type(calltab_t* tab);
+calltab_get_selected_type (calltab_t* tab);
 
 /** Return the selected call.
   * @return The number of the caller */
diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c
index dde1cae4c5e7345cf3c63ea8fadc546b0bc83c9b..fc56c02f7fbd6ccd4a9474880a896b89310d833c 100644
--- a/sflphone-client-gnome/src/contacts/calltree.c
+++ b/sflphone-client-gnome/src/contacts/calltree.c
@@ -33,10 +33,14 @@
 #include <calltree.h>
 #include <stdlib.h>
 #include <glib/gprintf.h>
+#include <eel-gconf-extensions.h>
 #include <calllist.h>
 #include <conferencelist.h>
 #include <mainwindow.h>
 #include <history.h>
+#include "uimanager.h"
+#include "actions.h"
+#include "../imwindow.h"
 
 GtkWidget *sw;
 GtkCellRenderer *rend;
@@ -62,41 +66,40 @@ conference_obj_t *dragged_conf;
 conference_obj_t *selected_conf;
 
 
-static void drag_begin_cb(GtkWidget *widget, GdkDragContext *dc, gpointer data);
-static void drag_end_cb(GtkWidget * mblist, GdkDragContext * context, gpointer data);
-void drag_data_received_cb(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, gpointer data);
+static void drag_begin_cb (GtkWidget *widget, GdkDragContext *dc, gpointer data);
+static void drag_end_cb (GtkWidget * mblist, GdkDragContext * context, gpointer data);
+void drag_data_received_cb (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, gpointer data);
 
 
 enum {
-	COLUMN_ACCOUNT_STATE = 0,
-	COLUMN_ACCOUNT_DESC,
-	COLUMN_ACCOUNT_SECURITY,
-	COLUMN_ACCOUNT_PTR,
+    COLUMN_ACCOUNT_STATE = 0,
+    COLUMN_ACCOUNT_DESC,
+    COLUMN_ACCOUNT_SECURITY,
+    COLUMN_ACCOUNT_PTR,
 };
 
-
 /**
  * Show popup menu
  */
-	static gboolean
+static gboolean
 popup_menu (GtkWidget *widget,
-		gpointer   user_data UNUSED)
+            gpointer   user_data UNUSED)
 {
-	show_popup_menu(widget, NULL);
-	return TRUE;
+    show_popup_menu (widget, NULL);
+    return TRUE;
 }
 
 /* Call back when the user click on a call in the list */
-	static void
-call_selected_cb(GtkTreeSelection *sel, void* data UNUSED )
+static void
+call_selected_cb (GtkTreeSelection *sel, void* data UNUSED)
 {
 
-    DEBUG("CallTree: Selection callback");
+    DEBUG ("CallTree: Selection callback");
 
     GtkTreeIter iter;
     GValue val;
-    GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
-    
+    GtkTreeModel *model = (GtkTreeModel*) active_calltree->store;
+
     GtkTreePath* path;
     gchar* string_path;
 
@@ -106,163 +109,172 @@ call_selected_cb(GtkTreeSelection *sel, void* data UNUSED )
     }
 
     // store info for dragndrop
-    path = gtk_tree_model_get_path(model, &iter);
-    string_path = gtk_tree_path_to_string(path);
-    selected_path_depth = gtk_tree_path_get_depth(path);
+    path = gtk_tree_model_get_path (model, &iter);
+    string_path = gtk_tree_path_to_string (path);
+    selected_path_depth = gtk_tree_path_get_depth (path);
 
-    if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(model), &iter)) {
+    if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (model), &iter)) {
 
-        DEBUG("CallTree: Selected a conference");
-	selected_type = A_CONFERENCE;
+        DEBUG ("CallTree: Selected a conference");
+        selected_type = A_CONFERENCE;
 
-	val.g_type = 0;
-	gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
+        val.g_type = 0;
+        gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
 
-	calltab_select_conf((conference_obj_t*) g_value_get_pointer(&val));
+        calltab_select_conf ( (conference_obj_t*) g_value_get_pointer (&val));
 
-	selected_conf = (conference_obj_t*)g_value_get_pointer(&val);
+        selected_conf = (conference_obj_t*) g_value_get_pointer (&val);
 
-	if(selected_conf) {
+        if (selected_conf) {
 
-	    selected_call_id = selected_conf->_confID;
-	    selected_path = string_path;
-	    selected_call = NULL;
+            selected_call_id = selected_conf->_confID;
+            selected_path = string_path;
+            selected_call = NULL;
 
-	}
+            if (selected_conf->_im_widget) {
+                // show the coresponding widget
+                im_window_show_tab (selected_conf->_im_widget);
+            }
+        }
 
-	DEBUG("CallTree: selected_path %s, selected_call_id %s, selected_path_depth %d", 
-	                          selected_path, selected_call_id, selected_path_depth);
+        DEBUG ("CallTree: selected_path %s, selected_call_id %s, selected_path_depth %d",
+               selected_path, selected_call_id, selected_path_depth);
 
-    }
-    else {
-      
-        DEBUG("CallTree: Selected a call");
-	selected_type = A_CALL;
-
-	val.g_type = 0;
-	gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
-	
-	calltab_select_call(active_calltree, (callable_obj_t*) g_value_get_pointer(&val));
-	
-	selected_call = (callable_obj_t*)g_value_get_pointer(&val);
-
-	if(selected_call) {
-
-	    selected_call_id = selected_call->_callID;
-	    selected_path = string_path;
-	    selected_conf = NULL;
-	}
-
-	DEBUG("CallTree: selected_path %s, selected_call_id %s, selected_path_depth %d", 
-	                            selected_path, selected_call_id, selected_path_depth);
+    } else {
+
+        DEBUG ("CallTree: Selected a call");
+        selected_type = A_CALL;
+
+        val.g_type = 0;
+        gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
+
+        calltab_select_call (active_calltree, (callable_obj_t*) g_value_get_pointer (&val));
+
+        selected_call = (callable_obj_t*) g_value_get_pointer (&val);
+
+        if (selected_call) {
+
+            selected_call_id = selected_call->_callID;
+            selected_path = string_path;
+            selected_conf = NULL;
+
+            if (selected_call->_im_widget) {
+                // show the coresponding widget
+                im_window_show_tab (selected_call->_im_widget);
+            }
+        }
+
+        DEBUG ("CallTree: selected_path %s, selected_call_id %s, selected_path_depth %d",
+               selected_path, selected_call_id, selected_path_depth);
     }
 
-    g_value_unset(&val);
+    g_value_unset (&val);
     update_actions();
 }
 
 /* A row is activated when it is double clicked */
-	void 
-row_activated(GtkTreeView       *tree_view UNUSED,
-		GtkTreePath       *path UNUSED,
-		GtkTreeViewColumn *column UNUSED,
-		void * data UNUSED) {
+void
+row_activated (GtkTreeView       *tree_view UNUSED,
+               GtkTreePath       *path UNUSED,
+               GtkTreeViewColumn *column UNUSED,
+               void * data UNUSED)
+{
     callable_obj_t* selectedCall = NULL;
     callable_obj_t* new_call;
     conference_obj_t* selectedConf = NULL;
     gchar *account_id;
-	
-    DEBUG("CallTree: Double click action");
-    
-    if(calltab_get_selected_type(active_calltree) == A_CALL) {
-      
-	selectedCall = calltab_get_selected_call(active_calltree);
-
-	if (selectedCall) {
-	    DEBUG("CallTree: Selected a call");
-	    
-	    // Get the right event from the right calltree
-	    if( active_calltree == current_calls ) {
-
-	      DEBUG("CallTree: Active tree is current calls");
-	      
-	      switch(selectedCall->_state) {
-	      case CALL_STATE_INCOMING:
-		  dbus_accept(selectedCall);
-		  stop_notification();
-		  break;
-	      case CALL_STATE_HOLD:
-		  dbus_unhold(selectedCall);
-		  break;
-	      case CALL_STATE_RINGING:
-	      case CALL_STATE_CURRENT:
-	      case CALL_STATE_BUSY:
-	      case CALL_STATE_FAILURE:
-		  break;
-	      case CALL_STATE_DIALING:
-		  sflphone_place_call (selectedCall);
-		  break;
-	      default:
-		  WARN("Row activated - Should not happen!");
-		  break;
-	      }
-	    }
-		
-	    // If history or contact: double click action places a new call
-	    else {
-
-	        DEBUG("CallTree: Active tree is history or contact");
-
-		account_id = g_strdup (selectedCall->_accountID);
-		      
-		// Create a new call
-		create_new_call (CALL, CALL_STATE_DIALING, "", account_id, selectedCall->_peer_name, selectedCall->_peer_number, &new_call);
-
-		calllist_add(current_calls, new_call);
-		calltree_add_call(current_calls, new_call, NULL);
-		sflphone_place_call(new_call);
-		calltree_display(current_calls);
-	    }
-	}
-    }
-    else if(calltab_get_selected_type(current_calls) == A_CONFERENCE) {
-
-        DEBUG("CallTree: Selected a conference");
-	    
-	if( active_calltree == current_calls ) {
-
-	    selectedConf = calltab_get_selected_conf(current_calls);
-
-	    if(selectedConf) {
-
-	        switch(selectedConf->_state) {
-		case CONFERENCE_STATE_ACTIVE_ATACHED:
-		    // sflphone_add_main_participant(selectedConf);
-		    break;
-		case CONFERENCE_STATE_ACTIVE_DETACHED:
-		    sflphone_add_main_participant(selectedConf);
-		    break;
-		case CONFERENCE_STATE_HOLD:
-		    sflphone_conference_off_hold(selectedConf);
-		    break;
-		}
-	    }
-	}
+
+    DEBUG ("CallTree: Double click action");
+
+    if (calltab_get_selected_type (active_calltree) == A_CALL) {
+
+        selectedCall = calltab_get_selected_call (active_calltree);
+
+        if (selectedCall) {
+            DEBUG ("CallTree: Selected a call");
+
+            // Get the right event from the right calltree
+            if (active_calltree == current_calls) {
+
+                DEBUG ("CallTree: Active tree is current calls");
+
+                switch (selectedCall->_state) {
+                    case CALL_STATE_INCOMING:
+                        dbus_accept (selectedCall);
+                        stop_notification();
+                        break;
+                    case CALL_STATE_HOLD:
+                        dbus_unhold (selectedCall);
+                        break;
+                    case CALL_STATE_RINGING:
+                    case CALL_STATE_CURRENT:
+                    case CALL_STATE_BUSY:
+                    case CALL_STATE_FAILURE:
+                        break;
+                    case CALL_STATE_DIALING:
+                        sflphone_place_call (selectedCall);
+                        break;
+                    default:
+                        WARN ("Row activated - Should not happen!");
+                        break;
+                }
+            }
+
+            // If history or contact: double click action places a new call
+            else {
+
+                DEBUG ("CallTree: Active tree is history or contact");
+
+                account_id = g_strdup (selectedCall->_accountID);
+
+                // Create a new call
+                create_new_call (CALL, CALL_STATE_DIALING, "", account_id, selectedCall->_peer_name, selectedCall->_peer_number, &new_call);
+
+                calllist_add (current_calls, new_call);
+                calltree_add_call (current_calls, new_call, NULL);
+                sflphone_place_call (new_call);
+                calltree_display (current_calls);
+            }
+        }
+    } else if (calltab_get_selected_type (current_calls) == A_CONFERENCE) {
+
+        DEBUG ("CallTree: Selected a conference");
+
+        if (active_calltree == current_calls) {
+
+            selectedConf = calltab_get_selected_conf (current_calls);
+
+            if (selectedConf) {
+
+                switch (selectedConf->_state) {
+                    case CONFERENCE_STATE_ACTIVE_DETACHED:
+                        sflphone_add_main_participant (selectedConf);
+                        break;
+                    case CONFERENCE_STATE_HOLD:
+                        sflphone_conference_off_hold (selectedConf);
+                        break;
+                    case CONFERENCE_STATE_ACTIVE_ATACHED:
+                    case CONFERENCE_STATE_RECORD:
+                    default:
+                        break;
+                }
+            }
+        }
     }
 }
 
 
 /* Catch cursor-activated signal. That is, when the entry is single clicked */
-	void  
-row_single_click(GtkTreeView *tree_view UNUSED, void * data UNUSED)
+void
+row_single_click (GtkTreeView *tree_view UNUSED, void * data UNUSED)
 {
     callable_obj_t * selectedCall = NULL;
     account_t * account_details = NULL;
     gchar * displaySasOnce="";
 
-    DEBUG("CallTree: Single click action");
+    DEBUG ("CallTree: Single click action");
 
-    selectedCall = calltab_get_selected_call( active_calltree );
+    selectedCall = calltab_get_selected_call (active_calltree);
 
     /*
     if(!selected_call) {
@@ -272,227 +284,225 @@ row_single_click(GtkTreeView *tree_view UNUSED, void * data UNUSED)
 
     if (selectedCall) {
 
-        account_details = account_list_get_by_id(selectedCall->_accountID);
-	DEBUG("AccountID %s", selectedCall->_accountID);
-
-	if(account_details != NULL) {
-	    displaySasOnce = g_hash_table_lookup(account_details->properties, ACCOUNT_DISPLAY_SAS_ONCE);
-	    DEBUG("Display SAS once %s", displaySasOnce);
-	}
-	else {
-	    GHashTable * properties = NULL;
-	    sflphone_get_ip2ip_properties (&properties);
-	    if(properties != NULL)
-	      { displaySasOnce = g_hash_table_lookup(properties, ACCOUNT_DISPLAY_SAS_ONCE); DEBUG("IP2IP displaysasonce %s", displaySasOnce); }
-	}
-
-	/*  Make sure that we are not in the history tab since 
-	 *  nothing is defined for it yet 
-	 */
-	if( active_calltree == current_calls ) {
-
-	    // sflphone_selected_call_codec(selectedCall);
-
-	    // DEBUG("single click action: %s", dbus_get_current_codec_name(selectedCall));
-	    // sflphone_display_selected_codec(dbus_get_current_codec_name(selectedCall));
-
-	  switch(selectedCall->_srtp_state) {
-
-	  case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
-	      selectedCall->_srtp_state = SRTP_STATE_ZRTP_SAS_CONFIRMED;
-	      if(g_strcasecmp(displaySasOnce,"true") == 0) {
-		  selectedCall->_zrtp_confirmed = TRUE;
-	      }
-	      dbus_confirm_sas(selectedCall);
-	      calltree_update_call(current_calls, selectedCall, NULL);
-	      break;
-	  case SRTP_STATE_ZRTP_SAS_CONFIRMED:
-	      selectedCall->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
-	      dbus_reset_sas(selectedCall);
-	      calltree_update_call(current_calls, selectedCall, NULL);
-	      break;
-	  default:
-	      DEBUG("Single click but no action");
-	      break;
-	  }
-	}
+        account_details = account_list_get_by_id (selectedCall->_accountID);
+        DEBUG ("AccountID %s", selectedCall->_accountID);
+
+        if (account_details != NULL) {
+            displaySasOnce = g_hash_table_lookup (account_details->properties, ACCOUNT_DISPLAY_SAS_ONCE);
+            DEBUG ("Display SAS once %s", displaySasOnce);
+        } else {
+            GHashTable * properties = NULL;
+            sflphone_get_ip2ip_properties (&properties);
+
+            if (properties != NULL) {
+                displaySasOnce = g_hash_table_lookup (properties, ACCOUNT_DISPLAY_SAS_ONCE);
+                DEBUG ("IP2IP displaysasonce %s", displaySasOnce);
+            }
+        }
+
+        /*  Make sure that we are not in the history tab since
+         *  nothing is defined for it yet
+         */
+        if (active_calltree == current_calls) {
+
+            // sflphone_selected_call_codec(selectedCall);
+
+            // DEBUG("single click action: %s", dbus_get_current_codec_name(selectedCall));
+            // sflphone_display_selected_codec(dbus_get_current_codec_name(selectedCall));
+
+            switch (selectedCall->_srtp_state) {
+
+                case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
+                    selectedCall->_srtp_state = SRTP_STATE_ZRTP_SAS_CONFIRMED;
+
+                    if (g_strcasecmp (displaySasOnce,"true") == 0) {
+                        selectedCall->_zrtp_confirmed = TRUE;
+                    }
+
+                    dbus_confirm_sas (selectedCall);
+                    calltree_update_call (current_calls, selectedCall, NULL);
+                    break;
+                case SRTP_STATE_ZRTP_SAS_CONFIRMED:
+                    selectedCall->_srtp_state = SRTP_STATE_ZRTP_SAS_UNCONFIRMED;
+                    dbus_reset_sas (selectedCall);
+                    calltree_update_call (current_calls, selectedCall, NULL);
+                    break;
+                default:
+                    DEBUG ("Single click but no action");
+                    break;
+            }
+        }
     }
 }
 
-	static gboolean
-button_pressed(GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUSED)
+static gboolean
+button_pressed (GtkWidget* widget, GdkEventButton *event, gpointer user_data UNUSED)
 {
-    if (event->button == 3 && event->type == GDK_BUTTON_PRESS){
-        if( active_calltree == current_calls ) {
-	    show_popup_menu(widget,  event);
-	    return TRUE;
-	}
-	else if (active_calltree == history) {
-	    show_popup_menu_history (widget,  event);
-	    return TRUE;
-	}
-	else {
-	    show_popup_menu_contacts (widget, event);
-	    return TRUE;
-	}
+    if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
+        if (active_calltree == current_calls) {
+            show_popup_menu (widget,  event);
+            return TRUE;
+        } else if (active_calltree == history) {
+            show_popup_menu_history (widget,  event);
+            return TRUE;
+        } else {
+            show_popup_menu_contacts (widget, event);
+            return TRUE;
+        }
     }
+
     return FALSE;
 }
 
 
-gchar* 
-calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gchar *audio_codec, gchar** display_info)
+void calltree_display_call_info (callable_obj_t * c, CallDisplayType display_type, gchar *audio_codec, gchar** display_info)
 {
 
-    gchar * description;
+    gchar * description = NULL;
     gchar * tmp_info;
 
     gchar * peer_number = c->_peer_number;
     gchar * hostname = NULL;
-    gchar * display_number = "";  
+    gchar * display_number = "";
 
-    DEBUG("CallTree: Display call info");
+    DEBUG ("CallTree: Display call info");
 
     // If call is outgoing, keep the hostname, strip it elsewhere
-    if(c->_type == CALL && c->_history_state == OUTGOING) {
+    if (c->_type == CALL && c->_history_state == OUTGOING) {
 
-        display_number = peer_number; 
-    }
-    else {
+        display_number = peer_number;
+    } else {
 
         // Get the hostname for this call (NULL if not existent)
-        hostname = g_strrstr(peer_number, "@");
-
-	// Test if we are dialing a new number
-	if(g_strcmp0("", c->_peer_number) != 0) {
-
-	    // Strip the hostname if existent
-	    if(hostname) {
-	        display_number = g_strndup(peer_number, hostname - peer_number);
-	    }
-	    else {
-	        display_number = peer_number;
-	    }
-	}
-	else {
-
-	    display_number = peer_number;
-	}
+        hostname = g_strrstr (peer_number, "@");
+
+        // Test if we are dialing a new number
+        if (g_strcmp0 ("", c->_peer_number) != 0) {
+
+            // Strip the hostname if existent
+            if (hostname) {
+                display_number = g_strndup (peer_number, hostname - peer_number);
+            } else {
+                display_number = peer_number;
+            }
+        } else {
+
+            display_number = peer_number;
+        }
     }
+
     // Different display depending on type
-    switch(display_type) {
-
-    case DISPLAY_TYPE_CALL:
-
-        DEBUG("CallTree: Display a normal call");
-        if(c->_state_code == 0) {
-
-	    if(g_strcmp0("", c->_peer_name) == 0) {
-	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>",
-						      display_number, c->_peer_name);
-	    }
-	    else {
-	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>",
-						      c->_peer_name, display_number);
-	    }
-
-	}
-	else {
-	    if(g_strcmp0("", c->_peer_name) == 0) {
-	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>",
-						      display_number, c->_peer_name,
-						      c->_state_code_description, c->_state_code);
-	    }
-	    else {
-	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>%s (%d)</i>",
-						      c->_peer_name, display_number,
-						      c->_state_code_description, c->_state_code);
-	    }
-	}
-	break;
-
-
-    case DISPLAY_TYPE_CALL_TRANSFER: 
-
-        DEBUG("CallTree: Display a call transfer")
-
-        if(g_strcmp0("",c->_peer_name) == 0){
-	    description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>Transfert to:%s</i> ",
-						  display_number, c->_peer_name, c->_trsft_to);
-	}
-	else {
-	    description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>Transfert to:%s</i> ",
-						  c->_peer_name, display_number, c->_trsft_to);
-	}	
-	break;
-
-
-    case DISPLAY_TYPE_STATE_CODE : 
-
-        DEBUG("CallTree: Display a state code");
-
-        if(g_strcmp0("",c->_peer_name) == 0){
-
-	    if (c->_state_code) {
-
-	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>  <i>%s</i>",
-						      display_number, c->_peer_name,
-						      c->_state_code_description, c->_state_code,
-						      audio_codec);
-	    } else {
-	        description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>%s</i>",
-						      display_number, c->_peer_name, audio_codec);
-	    }
-	}
-	else {
-	    if (c->_state_code) {
-	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>%s (%d)</i>  <i>%s</i>",
-						      c->_peer_name, display_number, 
-						      c->_state_code_description, c->_state_code,
-						      audio_codec);
-	    } else {
-	        description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>%s</i>",
-						      c->_peer_name, display_number, audio_codec);
-	    }
-	}
-	break;
-
-    case DISPLAY_TYPE_SAS:
-
-        DEBUG("CallTree: Display a call with sas");
-
-        if(g_strcmp0("", c->_peer_name) == 0){
-	    description = g_markup_printf_escaped("<b>%s</b><i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ",
-						  display_number, c->_peer_name, c->_sas);
-	}
-	else {
-	  description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ",
-						c->_peer_name, display_number, c->_sas);
-	}
-	break;
-
-    case DISPLAY_TYPE_HISTORY :
-
-        DEBUG("CallTree: Display history entry");
-
-        if(g_strcmp0("", c->_peer_name) == 0) {
-	    description = g_markup_printf_escaped("<b>%s</b><i>%s</i>",
-						  display_number, c->_peer_name);
-	}
-	else {
-	  description = g_markup_printf_escaped("<b>%s</b>   <i>%s</i>",
-						c->_peer_name, display_number);
-	}
-	break;
-
-    default : 
-        DEBUG("CallTree: Not an allowable type of display");
-	break;
+    switch (display_type) {
+
+        case DISPLAY_TYPE_CALL:
+
+            DEBUG ("CallTree: Display a normal call");
+
+            if (c->_state_code == 0) {
+
+                if (g_strcmp0 ("", c->_peer_name) == 0) {
+                    description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>",
+                                                           display_number, c->_peer_name);
+                } else {
+                    description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>",
+                                                           c->_peer_name, display_number);
+                }
+
+            } else {
+                if (g_strcmp0 ("", c->_peer_name) == 0) {
+                    description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>",
+                                                           display_number, c->_peer_name,
+                                                           c->_state_code_description, c->_state_code);
+                } else {
+                    description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>\n<i>%s (%d)</i>",
+                                                           c->_peer_name, display_number,
+                                                           c->_state_code_description, c->_state_code);
+                }
+            }
+
+            break;
+
+
+        case DISPLAY_TYPE_CALL_TRANSFER:
+
+            DEBUG ("CallTree: Display a call transfer");
+
+            if (g_strcmp0 ("",c->_peer_name) == 0) {
+                description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>\n<i>Transfert to:%s</i> ",
+                                                       display_number, c->_peer_name, c->_trsft_to);
+            } else {
+                description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>\n<i>Transfert to:%s</i> ",
+                                                       c->_peer_name, display_number, c->_trsft_to);
+            }
+
+            break;
+
+
+        case DISPLAY_TYPE_STATE_CODE :
+
+            DEBUG ("CallTree: Display a state code");
+
+            if (g_strcmp0 ("",c->_peer_name) == 0) {
+
+                if (c->_state_code) {
+
+                    description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>\n<i>%s (%d)</i>  <i>%s</i>",
+                                                           display_number, c->_peer_name,
+                                                           c->_state_code_description, c->_state_code,
+                                                           audio_codec);
+                } else {
+                    description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>\n<i>%s</i>",
+                                                           display_number, c->_peer_name, audio_codec);
+                }
+            } else {
+                if (c->_state_code) {
+                    description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>\n<i>%s (%d)</i>  <i>%s</i>",
+                                                           c->_peer_name, display_number,
+                                                           c->_state_code_description, c->_state_code,
+                                                           audio_codec);
+                } else {
+                    description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>\n<i>%s</i>",
+                                                           c->_peer_name, display_number, audio_codec);
+                }
+            }
+
+            break;
+
+        case DISPLAY_TYPE_SAS:
+
+            DEBUG ("CallTree: Display a call with sas");
+
+            if (g_strcmp0 ("", c->_peer_name) == 0) {
+                description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ",
+                                                       display_number, c->_peer_name, c->_sas);
+            } else {
+                description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>\n<i>Confirm SAS <b>%s</b> ?</i> ",
+                                                       c->_peer_name, display_number, c->_sas);
+            }
+
+            break;
+
+        case DISPLAY_TYPE_HISTORY :
+
+            DEBUG ("CallTree: Display history entry");
+
+            if (g_strcmp0 ("", c->_peer_name) == 0) {
+                description = g_markup_printf_escaped ("<b>%s</b><i>%s</i>",
+                                                       display_number, c->_peer_name);
+            } else {
+                description = g_markup_printf_escaped ("<b>%s</b>   <i>%s</i>",
+                                                       c->_peer_name, display_number);
+            }
+
+            break;
+
+        default :
+            DEBUG ("CallTree: Not an allowable type of display");
+            break;
 
     }
 
-    // return description;
-    tmp_info = g_strdup(description);
+    tmp_info = g_strdup (description);
     *display_info = tmp_info;
 }
 
@@ -501,191 +511,188 @@ calltree_display_call_info(callable_obj_t * c, CallDisplayType display_type, gch
 /**
  * Reset call tree
  */
-	void
+void
 calltree_reset (calltab_t* tab)
 {
-	gtk_tree_store_clear (tab->store);
+    gtk_tree_store_clear (tab->store);
 }
 
 void
-focus_on_calltree_out(){
-	//DEBUG("set_focus_on_calltree_out");
-	// gtk_widget_grab_focus(GTK_WIDGET(sw));
-	focus_is_on_calltree = FALSE;
+focus_on_calltree_out()
+{
+    focus_is_on_calltree = FALSE;
 }
 
 void
-focus_on_calltree_in(){
-	//DEBUG("set_focus_on_calltree_in");
-	// gtk_widget_grab_focus(GTK_WIDGET(sw));
-	focus_is_on_calltree = TRUE;
+focus_on_calltree_in()
+{
+    focus_is_on_calltree = TRUE;
 }
 
-	void
+void
 calltree_create (calltab_t* tab, gboolean searchbar_type)
 {
 
-	tab->tree = gtk_vbox_new(FALSE, 10);
+    tab->tree = gtk_vbox_new (FALSE, 10);
 
-	// Fix bug #708 (resize)
-	gtk_widget_set_size_request(tab->tree,100,80);
+    // Fix bug #708 (resize)
+    gtk_widget_set_size_request (tab->tree,100,80);
 
-	gtk_container_set_border_width (GTK_CONTAINER (tab->tree), 0);
+    gtk_container_set_border_width (GTK_CONTAINER (tab->tree), 0);
 
-	sw = gtk_scrolled_window_new( NULL, NULL);
-	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
+    sw = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+    gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN);
 
 
-	tab->store = gtk_tree_store_new (4,
-			GDK_TYPE_PIXBUF,// Icon
-			G_TYPE_STRING,  // Description
-			GDK_TYPE_PIXBUF, // Security Icon
-			G_TYPE_POINTER  // Pointer to the Object
-			);
+    tab->store = gtk_tree_store_new (4,
+                                     GDK_TYPE_PIXBUF,// Icon
+                                     G_TYPE_STRING,  // Description
+                                     GDK_TYPE_PIXBUF, // Security Icon
+                                     G_TYPE_POINTER  // Pointer to the Object
+                                    );
 
-	tab->view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(tab->store));
-	gtk_tree_view_set_enable_search( GTK_TREE_VIEW(tab->view), FALSE);
-	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tab->view), FALSE);
-	g_signal_connect (G_OBJECT (tab->view), "row-activated",
-			G_CALLBACK (row_activated),
-			NULL);
+    tab->view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (tab->store));
+    gtk_tree_view_set_enable_search (GTK_TREE_VIEW (tab->view), FALSE);
+    gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tab->view), FALSE);
+    g_signal_connect (G_OBJECT (tab->view), "row-activated",
+                      G_CALLBACK (row_activated),
+                      NULL);
 
-	GTK_WIDGET_SET_FLAGS (GTK_WIDGET(sw),GTK_CAN_FOCUS);
-	gtk_widget_grab_focus (GTK_WIDGET(sw));
+    GTK_WIDGET_SET_FLAGS (GTK_WIDGET (sw),GTK_CAN_FOCUS);
+    gtk_widget_grab_focus (GTK_WIDGET (sw));
 
-	g_signal_connect (G_OBJECT (tab->view), "cursor-changed",
-			G_CALLBACK (row_single_click),
-			NULL);
+    g_signal_connect (G_OBJECT (tab->view), "cursor-changed",
+                      G_CALLBACK (row_single_click),
+                      NULL);
 
-	// Connect the popup menu
-	g_signal_connect (G_OBJECT (tab->view), "popup-menu",
-			G_CALLBACK (popup_menu),
-			NULL);
-	g_signal_connect (G_OBJECT (tab->view), "button-press-event",
-			G_CALLBACK (button_pressed),
-			NULL);
+    // Connect the popup menu
+    g_signal_connect (G_OBJECT (tab->view), "popup-menu",
+                      G_CALLBACK (popup_menu),
+                      NULL);
+    g_signal_connect (G_OBJECT (tab->view), "button-press-event",
+                      G_CALLBACK (button_pressed),
+                      NULL);
 
-	// g_signal_connect (G_OBJECT (sw), "key-release-event",
-	//                   G_CALLBACK (on_key_released), NULL);
+    g_signal_connect_after (G_OBJECT (tab->view), "focus-in-event",
+                            G_CALLBACK (focus_on_calltree_in), NULL);
+    g_signal_connect_after (G_OBJECT (tab->view), "focus-out-event",
+                            G_CALLBACK (focus_on_calltree_out), NULL);
 
-	g_signal_connect_after (G_OBJECT (tab->view), "focus-in-event",
-			G_CALLBACK (focus_on_calltree_in), NULL);
-	g_signal_connect_after (G_OBJECT (tab->view), "focus-out-event",
-			G_CALLBACK (focus_on_calltree_out), NULL);
 
+    if (tab != history && tab!=contacts) {
 
-	if(tab != history && tab!=contacts) {
+        DEBUG ("SET TREE VIEW REORDABLE");
+        // Make calltree reordable for drag n drop
+        gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tab->view), TRUE);
 
-		DEBUG("SET TREE VIEW REORDABLE");
-		// Make calltree reordable for drag n drop
-		gtk_tree_view_set_reorderable(GTK_TREE_VIEW(tab->view), TRUE); 
+        // source widget drag n drop signals
+        g_signal_connect (G_OBJECT (tab->view), "drag_begin", G_CALLBACK (drag_begin_cb), NULL);
+        g_signal_connect (G_OBJECT (tab->view), "drag_end", G_CALLBACK (drag_end_cb), NULL);
 
-		// source widget drag n drop signals
-		g_signal_connect (G_OBJECT (tab->view), "drag_begin", G_CALLBACK (drag_begin_cb), NULL);
-		g_signal_connect (G_OBJECT (tab->view), "drag_end", G_CALLBACK (drag_end_cb), NULL);
+        // destination widget drag n drop signals
+        g_signal_connect (G_OBJECT (tab->view), "drag_data_received", G_CALLBACK (drag_data_received_cb), NULL);
 
-		// destination widget drag n drop signals
-		g_signal_connect (G_OBJECT (tab->view), "drag_data_received", G_CALLBACK (drag_data_received_cb), NULL);
+    }
 
-	}
 
+    gtk_widget_grab_focus (GTK_WIDGET (tab->view));
+
+    rend = gtk_cell_renderer_pixbuf_new();
+    col = gtk_tree_view_column_new_with_attributes ("Icon",
+            rend,
+            "pixbuf", 0,
+            NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (tab->view), col);
+
+    rend = gtk_cell_renderer_text_new();
+    col = gtk_tree_view_column_new_with_attributes ("Description",
+            rend,
+            "markup", COLUMN_ACCOUNT_DESC,
+            NULL);
+    g_object_set (rend, "wrap-mode", (PangoWrapMode) PANGO_WRAP_WORD_CHAR, NULL);
+    g_object_set (rend, "wrap-width", (gint) CALLTREE_TEXT_WIDTH, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (tab->view), col);
+
+    /* Security icon */
+    rend = gtk_cell_renderer_pixbuf_new();
+    col = gtk_tree_view_column_new_with_attributes ("Icon",
+            rend,
+            "pixbuf", COLUMN_ACCOUNT_SECURITY,
+            NULL);
+    g_object_set (rend, "xalign", (gfloat) 1.0, NULL);
+    g_object_set (rend, "yalign", (gfloat) 0.0, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (tab->view), col);
+
+
+    g_object_unref (G_OBJECT (tab->store));
+    gtk_container_add (GTK_CONTAINER (sw), tab->view);
+
+    sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tab->view));
+    g_signal_connect (G_OBJECT (sel), "changed",
+                      G_CALLBACK (call_selected_cb),
+                      NULL);
+
+    gtk_box_pack_start (GTK_BOX (tab->tree), sw, TRUE, TRUE, 0);
+
+    // search bar if tab is either "history" or "addressbook"
+    if (searchbar_type) {
+        calltab_create_searchbar (tab);
+        gtk_box_pack_start (GTK_BOX (tab->tree), tab->searchbar, FALSE, TRUE, 0);
+    }
+
+    gtk_widget_show (tab->tree);
+}
 
-	gtk_widget_grab_focus(GTK_WIDGET(tab->view));
 
-	rend = gtk_cell_renderer_pixbuf_new();
-	col = gtk_tree_view_column_new_with_attributes ("Icon",
-			rend,
-			"pixbuf", 0,
-			NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(tab->view), col);
+void
+calltree_remove_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
+{
+
+    GtkTreeIter iter;
+    GValue val;
+    callable_obj_t * iterCall;
+    GtkTreeStore* store = tab->store;
 
-	rend = gtk_cell_renderer_text_new();
-	col = gtk_tree_view_column_new_with_attributes ("Description",
-			rend,
-			"markup", COLUMN_ACCOUNT_DESC,
-			NULL);
-	g_object_set(rend, "wrap-mode", (PangoWrapMode) PANGO_WRAP_WORD_CHAR, NULL);
-	g_object_set(rend, "wrap-width", (gint) CALLTREE_TEXT_WIDTH, NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(tab->view), col);
+    if (!c)
+        ERROR ("CallTree: Error: Not a valid call");
 
-	/* Security icon */
-	rend = gtk_cell_renderer_pixbuf_new();
-	col = gtk_tree_view_column_new_with_attributes ("Icon",
-			rend,
-			"pixbuf", COLUMN_ACCOUNT_SECURITY,
-			NULL);
-	g_object_set(rend, "xalign", (gfloat) 1.0, NULL);
-	g_object_set(rend, "yalign", (gfloat) 0.0, NULL);
-	gtk_tree_view_append_column (GTK_TREE_VIEW(tab->view), col);
+    DEBUG ("CallTree: Remove call %s", c->_callID);
 
+    int nbChild = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), parent);
+    int i;
 
-	g_object_unref(G_OBJECT(tab->store));
-	gtk_container_add(GTK_CONTAINER(sw), tab->view);
+    for (i = 0; i < nbChild; i++) {
+        if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, parent, i)) {
+            if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (store), &iter)) {
+                calltree_remove_call (tab, c, &iter);
+            }
 
-	sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (tab->view));
-	g_signal_connect (G_OBJECT (sel), "changed",
-			G_CALLBACK (call_selected_cb),
-			NULL);
+            val.g_type = 0;
+            gtk_tree_model_get_value (GTK_TREE_MODEL (store), &iter, COLUMN_ACCOUNT_PTR, &val);
 
-	gtk_box_pack_start(GTK_BOX(tab->tree), sw, TRUE, TRUE, 0);
+            iterCall = (callable_obj_t*) g_value_get_pointer (&val);
+            g_value_unset (&val);
 
-	// search bar if tab is either "history" or "addressbook"
-	if(searchbar_type){
-		calltab_create_searchbar (tab);
-		gtk_box_pack_start(GTK_BOX(tab->tree), tab->searchbar, FALSE, TRUE, 0);
-	}
+            if (iterCall == c) {
+                gtk_tree_store_remove (store, &iter);
+            }
+        }
+    }
 
-	gtk_widget_show(tab->tree);
-}
+    callable_obj_t * selectedCall = calltab_get_selected_call (tab);
 
+    if (selectedCall == c)
+        calltab_select_call (tab, NULL);
 
-	void
-calltree_remove_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
-{
+    update_actions();
+
+    calltree_update_clock();
 
-	GtkTreeIter iter;
-	GValue val;
-	callable_obj_t * iterCall;
-	GtkTreeStore* store = tab->store;
-
-	if(!c)
-	  ERROR("CallTree: Error: Not a valid call");
-
-	DEBUG("CallTree: Remove call %s", c->_callID);
-
-	int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent);
-	int i;
-	for( i = 0; i < nbChild; i++)
-	{
-		if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i))
-		{
-			if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter))
-			{
-				calltree_remove_call (tab, c, &iter);
-			}
-
-			val.g_type = 0;
-			gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val);
-
-			iterCall = (callable_obj_t*) g_value_get_pointer(&val);
-			g_value_unset(&val);
-
-			if(iterCall == c)
-			{
-				gtk_tree_store_remove(store, &iter);
-			}
-		}
-	}
-	callable_obj_t * selectedCall = calltab_get_selected_call(tab);
-	if(selectedCall == c)
-		calltab_select_call(tab, NULL);
-	update_actions();
-
-	DEBUG("Calltre remove call ended");
+    DEBUG ("Calltre remove call ended");
 }
 
-	void
+void
 calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 {
     GdkPixbuf *pixbuf=NULL;
@@ -697,169 +704,180 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 
     gchar* srtp_enabled = "";
     gboolean display_sas = TRUE;
-    gboolean sdes_success = TRUE;
     account_t* account_details=NULL;
     gchar *audio_codec = "";
 
-    int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent);
+    int nbChild = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), parent);
     int i;
 
-    if(c != NULL) {
-        account_details = account_list_get_by_id(c->_accountID);
-	if(account_details != NULL) {
-	    srtp_enabled = g_hash_table_lookup(account_details->properties, ACCOUNT_SRTP_ENABLED);
-	    if(g_strcasecmp(g_hash_table_lookup(account_details->properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) 
-	      { display_sas = FALSE; }
-	} else {
-	    GHashTable * properties = NULL;
-	    sflphone_get_ip2ip_properties (&properties);
-	    if(properties != NULL) {
-	        srtp_enabled = g_hash_table_lookup(properties, ACCOUNT_SRTP_ENABLED);
-	        if(g_strcasecmp(g_hash_table_lookup(properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) 
-		  { display_sas = FALSE; }
-	    }
-	}
-    } 
-
-    for( i = 0; i < nbChild; i++) {
-
-        if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) {
-
-	    if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) {
-	      calltree_update_call (tab, c, &iter);
-	    }
-
-	    val.g_type = 0;
-	    gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, COLUMN_ACCOUNT_PTR, &val);
-
-	
-	    iterCall = (callable_obj_t*) g_value_get_pointer(&val);
-	    g_value_unset(&val);
-	
-	    if(iterCall != c) {
-	        continue;
-	    }
-
-	    /* Update text */
-	    gchar * description;
-	    gchar * date="";
-	    gchar * duration="";
-	    audio_codec = call_get_audio_codec (c);
-	
-	    if(c->_state == CALL_STATE_TRANSFERT) {
-
-	        calltree_display_call_info(c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description);
-			    
-	    }
-	    else {
-
-	        if((c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_ZRTP_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) {
-		    calltree_display_call_info(c, DISPLAY_TYPE_SAS, NULL, &description);
-		} else {
-		    calltree_display_call_info(c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description);		    
-		}
-	    }
-
-	    /* Update icons */
-	    if( tab == current_calls ) {
-	        DEBUG("Receiving in state %d", c->_state);
-		switch(c->_state) {
-		case CALL_STATE_HOLD:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL);
-		    break;
-		case CALL_STATE_INCOMING:
-		case CALL_STATE_RINGING:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
-		    break;
-		case CALL_STATE_CURRENT:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL);
-		    break;
-		case CALL_STATE_DIALING:
-      	            pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL);
-		    break;
-		case CALL_STATE_FAILURE:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL);
-		    break;
-		case CALL_STATE_BUSY:
-	            pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL);
-		    break;
-		case CALL_STATE_TRANSFERT:
-	            pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL);
-		    break;
-		case CALL_STATE_RECORD:
-	            pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/icon_rec.svg", NULL);
-		    break;
-		default:
-		    WARN("Update calltree - Should not happen!");
-		}        
-
-		switch(c->_srtp_state) {
-		case SRTP_STATE_SDES_SUCCESS:
-		    DEBUG("SDES negotiation succes");
-		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL); 
-		    break;
-		case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
-	            DEBUG("Secure is ON");
-		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_unconfirmed.svg", NULL);
-		    if(c->_sas != NULL) { DEBUG("SAS is ready with value %s", c->_sas); }
-		    break;
-		case SRTP_STATE_ZRTP_SAS_CONFIRMED:
-		    DEBUG("SAS is confirmed");
-		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL);   
-		    break;
-		case SRTP_STATE_ZRTP_SAS_SIGNED:   
-		    DEBUG("Secure is ON with SAS signed and verified");
-		    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_certified.svg", NULL);
-		    break;
-		case SRTP_STATE_UNLOCKED:  
-		    DEBUG("Secure is off calltree %d", c->_state);
-		    if(g_strcasecmp(srtp_enabled,"true") == 0) {
-		        pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL); 
-		    }
-		    break;
-		default:
-		    WARN("Update calltree srtp state #%d- Should not happen!", c->_srtp_state); 
-		    if(g_strcasecmp(srtp_enabled,"true") == 0) {
-		        pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL);    
-		    }
-
-		}
-	
-	    }
-	    else if(tab == history) {
-	        switch(c->_history_state) {
-		case INCOMING:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/incoming.svg", NULL);
-		    break;
-		case OUTGOING:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/outgoing.svg", NULL);
-		    break;
-		case MISSED:
-		    pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/missed.svg", NULL);
-		    break;
-		default:
-		    WARN("History - Should not happen!");
-		}
-
-		calltree_display_call_info(c, DISPLAY_TYPE_HISTORY, NULL, &description);
-
-		date = get_formatted_start_timestamp (c);
-		duration = get_call_duration (c);
-		duration = g_strconcat( date , duration , NULL);
-		description = g_strconcat( description , duration, NULL);
-	    }
-
-	    gtk_tree_store_set(store, &iter,
-			   0, pixbuf, // Icon
-			   1, description, // Description
-			   2, pixbuf_security,
-			   3, c,
-			   -1);
-
-	    if (pixbuf != NULL)
-	        g_object_unref(G_OBJECT(pixbuf));
-	}
-      
+    if (c != NULL) {
+        account_details = account_list_get_by_id (c->_accountID);
+
+        if (account_details != NULL) {
+            srtp_enabled = g_hash_table_lookup (account_details->properties, ACCOUNT_SRTP_ENABLED);
+
+            if (g_strcasecmp (g_hash_table_lookup (account_details->properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) {
+                display_sas = FALSE;
+            }
+        } else {
+            GHashTable * properties = NULL;
+            sflphone_get_ip2ip_properties (&properties);
+
+            if (properties != NULL) {
+                srtp_enabled = g_hash_table_lookup (properties, ACCOUNT_SRTP_ENABLED);
+
+                if (g_strcasecmp (g_hash_table_lookup (properties, ACCOUNT_ZRTP_DISPLAY_SAS),"false") == 0) {
+                    display_sas = FALSE;
+                }
+            }
+        }
+    }
+
+    for (i = 0; i < nbChild; i++) {
+
+        if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter, parent, i)) {
+
+            if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (store), &iter)) {
+                calltree_update_call (tab, c, &iter);
+            }
+
+            val.g_type = 0;
+            gtk_tree_model_get_value (GTK_TREE_MODEL (store), &iter, COLUMN_ACCOUNT_PTR, &val);
+
+
+            iterCall = (callable_obj_t*) g_value_get_pointer (&val);
+            g_value_unset (&val);
+
+            if (iterCall != c) {
+                continue;
+            }
+
+            /* Update text */
+            gchar * description;
+            gchar * date="";
+            gchar * duration="";
+            audio_codec = call_get_audio_codec (c);
+
+            if (c->_state == CALL_STATE_TRANSFERT) {
+
+                calltree_display_call_info (c, DISPLAY_TYPE_CALL_TRANSFER, NULL, &description);
+
+            } else {
+
+                if ( (c->_sas != NULL) && (display_sas == TRUE) && (c->_srtp_state == SRTP_STATE_ZRTP_SAS_UNCONFIRMED) && (c->_zrtp_confirmed == FALSE)) {
+                    calltree_display_call_info (c, DISPLAY_TYPE_SAS, NULL, &description);
+                } else {
+                    calltree_display_call_info (c, DISPLAY_TYPE_STATE_CODE, audio_codec, &description);
+                }
+            }
+
+            /* Update icons */
+            if (tab == current_calls) {
+                DEBUG ("Receiving in state %d", c->_state);
+
+                switch (c->_state) {
+                    case CALL_STATE_HOLD:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/hold.svg", NULL);
+                        break;
+                    case CALL_STATE_INCOMING:
+                    case CALL_STATE_RINGING:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/ring.svg", NULL);
+                        break;
+                    case CALL_STATE_CURRENT:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/current.svg", NULL);
+                        break;
+                    case CALL_STATE_DIALING:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/dial.svg", NULL);
+                        break;
+                    case CALL_STATE_FAILURE:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/fail.svg", NULL);
+                        break;
+                    case CALL_STATE_BUSY:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/busy.svg", NULL);
+                        break;
+                    case CALL_STATE_TRANSFERT:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/transfert.svg", NULL);
+                        break;
+                    case CALL_STATE_RECORD:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/icon_rec.svg", NULL);
+                        break;
+                    default:
+                        WARN ("Update calltree - Should not happen!");
+                }
+
+                switch (c->_srtp_state) {
+                    case SRTP_STATE_SDES_SUCCESS:
+                        DEBUG ("SDES negotiation succes");
+                        pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_confirmed.svg", NULL);
+                        break;
+                    case SRTP_STATE_ZRTP_SAS_UNCONFIRMED:
+                        DEBUG ("Secure is ON");
+                        pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_unconfirmed.svg", NULL);
+
+                        if (c->_sas != NULL) {
+                            DEBUG ("SAS is ready with value %s", c->_sas);
+                        }
+
+                        break;
+                    case SRTP_STATE_ZRTP_SAS_CONFIRMED:
+                        DEBUG ("SAS is confirmed");
+                        pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_confirmed.svg", NULL);
+                        break;
+                    case SRTP_STATE_ZRTP_SAS_SIGNED:
+                        DEBUG ("Secure is ON with SAS signed and verified");
+                        pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_certified.svg", NULL);
+                        break;
+                    case SRTP_STATE_UNLOCKED:
+                        DEBUG ("Secure is off calltree %d", c->_state);
+
+                        if (g_strcasecmp (srtp_enabled,"true") == 0) {
+                            pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_off.svg", NULL);
+                        }
+
+                        break;
+                    default:
+                        WARN ("Update calltree srtp state #%d- Should not happen!", c->_srtp_state);
+
+                        if (g_strcasecmp (srtp_enabled,"true") == 0) {
+                            pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_off.svg", NULL);
+                        }
+
+                }
+
+            } else if (tab == history) {
+                switch (c->_history_state) {
+                    case INCOMING:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/incoming.svg", NULL);
+                        break;
+                    case OUTGOING:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/outgoing.svg", NULL);
+                        break;
+                    case MISSED:
+                        pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/missed.svg", NULL);
+                        break;
+                    default:
+                        WARN ("History - Should not happen!");
+                }
+
+                calltree_display_call_info (c, DISPLAY_TYPE_HISTORY, NULL, &description);
+
+                date = get_formatted_start_timestamp (c);
+                duration = get_call_duration (c);
+                duration = g_strconcat (date , duration , NULL);
+                description = g_strconcat (description , duration, NULL);
+            }
+
+            gtk_tree_store_set (store, &iter,
+                                0, pixbuf, // Icon
+                                1, description, // Description
+                                2, pixbuf_security,
+                                3, c,
+                                -1);
+
+            if (pixbuf != NULL)
+                g_object_unref (G_OBJECT (pixbuf));
+        }
+
     }
 
     update_actions();
@@ -869,191 +887,184 @@ calltree_update_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 void calltree_add_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent)
 {
 
-        DEBUG("CallTree: Add call to calltree id: %s, peer name: %s", c->_callID, c->_peer_name);
-
-	if (tab == history)
-	{
-		calltree_add_history_entry (c);
-		return;
-	}
-
-	account_t* account_details=NULL;
-
-	GdkPixbuf *pixbuf=NULL;
-	GdkPixbuf *pixbuf_security=NULL;
-	GtkTreeIter iter;
-	gchar* key_exchange="";
-	gchar* srtp_enabled="";
-
-	// New call in the list
-	gchar * description;
-	gchar * date="";
-	gchar *duration="";
-
-	calltree_display_call_info(c, DISPLAY_TYPE_CALL, NULL, &description);
-
-	gtk_tree_store_prepend (tab->store, &iter, parent);
-
-	if(c != NULL) {
-		account_details = account_list_get_by_id(c->_callID);
-		if(account_details != NULL) {
-			srtp_enabled = g_hash_table_lookup(account_details->properties, ACCOUNT_SRTP_ENABLED);
-			key_exchange = g_hash_table_lookup(account_details->properties, ACCOUNT_KEY_EXCHANGE);
-		}
-	} 
-
-	DEBUG("Added call key exchange is %s", key_exchange)
-
-	if( tab == current_calls )
-	{
-		switch(c->_state)
-		{
-			case CALL_STATE_INCOMING:
-				pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
-				break;
-			case CALL_STATE_DIALING:
-				pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL);
-				break;
-			case CALL_STATE_RINGING:
-				pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
-				break;
-			case CALL_STATE_CURRENT:
-				// If the call has been initiated by a another client and, when we start, it is already current
-				pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL);
-				break;
-			case CALL_STATE_HOLD:
-				// If the call has been initiated by a another client and, when we start, it is already current
-				pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL);
-				break;
-			case CALL_STATE_FAILURE:
-				// If the call has been initiated by a another client and, when we start, it is already current
-				pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL);
-				break;
-			default:
-				WARN("Update calltree add - Should not happen!");
-		}
-
-		if(g_strcasecmp(srtp_enabled,"true") == 0) {
-			pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/secure_off.svg", NULL);
-		}
-	}
-
-	else if (tab == contacts) {
-		pixbuf = c->_contact_thumbnail;
-		description = g_strconcat( description , NULL);
-	}
-
-	else {
-		WARN ("This widget doesn't exist - This is a bug in the application.");
-	}
-
-
-	//Resize it
-	if(pixbuf)
-	{
-		if(gdk_pixbuf_get_width(pixbuf) > 32 || gdk_pixbuf_get_height(pixbuf) > 32)
-		{
-			pixbuf =  gdk_pixbuf_scale_simple(pixbuf, 32, 32, GDK_INTERP_BILINEAR);
-		}
-	}
-
-	if(pixbuf_security)
-	{
-		if(gdk_pixbuf_get_width(pixbuf_security) > 32 || gdk_pixbuf_get_height(pixbuf_security) > 32)
-		{
-			pixbuf_security =  gdk_pixbuf_scale_simple(pixbuf_security, 32, 32, GDK_INTERP_BILINEAR);
-		}
-	}
-
-	gtk_tree_store_set(tab->store, &iter,
-			0, pixbuf, // Icon
-			1, description, // Description
-			2, pixbuf_security, // Informs user about the state of security
-			3, c,      // Pointer
-			-1);
-
-	if (pixbuf != NULL)
-	{ g_object_unref(G_OBJECT(pixbuf)); }
-	if (pixbuf_security != NULL)
-	{ g_object_unref(G_OBJECT(pixbuf)); }
-
-	gtk_tree_view_set_model (GTK_TREE_VIEW(history->view), GTK_TREE_MODEL(history->store));
-
-	gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(tab->view)), &iter);
-
-	history_reinit(history);
+    DEBUG ("CallTree: Add call to calltree id: %s, peer name: %s", c->_callID, c->_peer_name);
+
+    if (tab == history) {
+        calltree_add_history_entry (c);
+        return;
+    }
+
+    account_t* account_details=NULL;
+
+    GdkPixbuf *pixbuf=NULL;
+    GdkPixbuf *pixbuf_security=NULL;
+    GtkTreeIter iter;
+    gchar* key_exchange="";
+    gchar* srtp_enabled="";
+
+    // New call in the list
+    gchar * description;
+
+    calltree_display_call_info (c, DISPLAY_TYPE_CALL, NULL, &description);
+
+    gtk_tree_store_prepend (tab->store, &iter, parent);
+
+    if (c != NULL) {
+        account_details = account_list_get_by_id (c->_callID);
+
+        if (account_details != NULL) {
+            srtp_enabled = g_hash_table_lookup (account_details->properties, ACCOUNT_SRTP_ENABLED);
+            key_exchange = g_hash_table_lookup (account_details->properties, ACCOUNT_KEY_EXCHANGE);
+        }
+    }
+
+    DEBUG ("Added call key exchange is %s", key_exchange);
+
+    if (tab == current_calls) {
+        switch (c->_state) {
+            case CALL_STATE_INCOMING:
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/ring.svg", NULL);
+                break;
+            case CALL_STATE_DIALING:
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/dial.svg", NULL);
+                break;
+            case CALL_STATE_RINGING:
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/ring.svg", NULL);
+                break;
+            case CALL_STATE_CURRENT:
+                // If the call has been initiated by a another client and, when we start, it is already current
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/current.svg", NULL);
+                break;
+            case CALL_STATE_HOLD:
+                // If the call has been initiated by a another client and, when we start, it is already current
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/hold.svg", NULL);
+                break;
+            case CALL_STATE_FAILURE:
+                // If the call has been initiated by a another client and, when we start, it is already current
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/fail.svg", NULL);
+                break;
+            default:
+                WARN ("Update calltree add - Should not happen!");
+        }
+
+        if (g_strcasecmp (srtp_enabled,"true") == 0) {
+            pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/secure_off.svg", NULL);
+        }
+    }
+
+    else if (tab == contacts) {
+        pixbuf = c->_contact_thumbnail;
+        description = g_strconcat (description , NULL);
+    }
+
+    else {
+        WARN ("This widget doesn't exist - This is a bug in the application.");
+    }
+
+
+    //Resize it
+    if (pixbuf) {
+        if (gdk_pixbuf_get_width (pixbuf) > 32 || gdk_pixbuf_get_height (pixbuf) > 32) {
+            pixbuf =  gdk_pixbuf_scale_simple (pixbuf, 32, 32, GDK_INTERP_BILINEAR);
+        }
+    }
+
+    if (pixbuf_security) {
+        if (gdk_pixbuf_get_width (pixbuf_security) > 32 || gdk_pixbuf_get_height (pixbuf_security) > 32) {
+            pixbuf_security =  gdk_pixbuf_scale_simple (pixbuf_security, 32, 32, GDK_INTERP_BILINEAR);
+        }
+    }
+
+    gtk_tree_store_set (tab->store, &iter,
+                        0, pixbuf, // Icon
+                        1, description, // Description
+                        2, pixbuf_security, // Informs user about the state of security
+                        3, c,      // Pointer
+                        -1);
+
+    if (pixbuf != NULL) {
+        g_object_unref (G_OBJECT (pixbuf));
+    }
+
+    if (pixbuf_security != NULL) {
+        g_object_unref (G_OBJECT (pixbuf));
+    }
+
+    gtk_tree_view_set_model (GTK_TREE_VIEW (history->view), GTK_TREE_MODEL (history->store));
+
+    gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (tab->view)), &iter);
+
+    history_reinit (history);
 }
 
 void calltree_add_history_entry (callable_obj_t * c)
 {
 
-	DEBUG("calltree_add_history_entry %s", c->_callID);
-
-	if ( g_strcasecmp (dbus_get_history_enabled (), "false") == 0)
-		return;
-
-	GdkPixbuf *pixbuf=NULL;
-	GdkPixbuf *pixbuf_security=NULL;
-	GtkTreeIter iter;
-
-	// New call in the list
-	gchar * description, *date="", *duration="";
-
-	calltree_display_call_info(c, DISPLAY_TYPE_HISTORY, NULL, &description);
-
-	gtk_tree_store_prepend (history->store, &iter, NULL);
-
-	switch(c->_history_state)
-	{
-		case INCOMING:
-			pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/incoming.svg", NULL);
-			break;
-		case OUTGOING:
-			pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/outgoing.svg", NULL);
-			break;
-		case MISSED:
-			pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/missed.svg", NULL);
-			break;
-		default:
-			WARN("History - Should not happen!");
-	}
-
-	date = get_formatted_start_timestamp (c);
-	duration = get_call_duration (c);
-	duration = g_strconcat( date , duration , NULL);
-	description = g_strconcat( description , duration, NULL);
-
-	//Resize it
-	if(pixbuf)
-	{
-		if(gdk_pixbuf_get_width(pixbuf) > 32 || gdk_pixbuf_get_height(pixbuf) > 32)
-		{
-			pixbuf =  gdk_pixbuf_scale_simple(pixbuf, 32, 32, GDK_INTERP_BILINEAR);
-		}
-	}
-
-	if(pixbuf_security != NULL)
-	{
-		if(gdk_pixbuf_get_width(pixbuf_security) > 32 || gdk_pixbuf_get_height(pixbuf_security) > 32)
-		{
-			pixbuf_security =  gdk_pixbuf_scale_simple(pixbuf_security, 32, 32, GDK_INTERP_BILINEAR);
-		}
-	}
-	gtk_tree_store_set(history->store, &iter,
-			0, pixbuf, // Icon
-			1, description, // Description
-			2, pixbuf_security, // Icon
-			3, c,      // Pointer
-			-1);
-
-	if (pixbuf != NULL)
-		g_object_unref(G_OBJECT(pixbuf));
-	if (pixbuf_security != NULL)
-	{ g_object_unref(G_OBJECT(pixbuf_security)); }
-
-	gtk_tree_view_set_model (GTK_TREE_VIEW(history->view), GTK_TREE_MODEL(history->store));
-
-	history_reinit(history);
+    DEBUG ("calltree_add_history_entry %s", c->_callID);
+
+    if (!eel_gconf_get_integer (HISTORY_ENABLED))
+        return;
+
+    GdkPixbuf *pixbuf=NULL;
+    GdkPixbuf *pixbuf_security=NULL;
+    GtkTreeIter iter;
+
+    // New call in the list
+    gchar * description, *date="", *duration="";
+
+    calltree_display_call_info (c, DISPLAY_TYPE_HISTORY, NULL, &description);
+
+    gtk_tree_store_prepend (history->store, &iter, NULL);
+
+    switch (c->_history_state) {
+        case INCOMING:
+            pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/incoming.svg", NULL);
+            break;
+        case OUTGOING:
+            pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/outgoing.svg", NULL);
+            break;
+        case MISSED:
+            pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/missed.svg", NULL);
+            break;
+        default:
+            WARN ("History - Should not happen!");
+    }
+
+    date = get_formatted_start_timestamp (c);
+    duration = get_call_duration (c);
+    duration = g_strconcat (date , duration , NULL);
+    description = g_strconcat (description , duration, NULL);
+
+    //Resize it
+    if (pixbuf) {
+        if (gdk_pixbuf_get_width (pixbuf) > 32 || gdk_pixbuf_get_height (pixbuf) > 32) {
+            pixbuf =  gdk_pixbuf_scale_simple (pixbuf, 32, 32, GDK_INTERP_BILINEAR);
+        }
+    }
+
+    if (pixbuf_security != NULL) {
+        if (gdk_pixbuf_get_width (pixbuf_security) > 32 || gdk_pixbuf_get_height (pixbuf_security) > 32) {
+            pixbuf_security =  gdk_pixbuf_scale_simple (pixbuf_security, 32, 32, GDK_INTERP_BILINEAR);
+        }
+    }
+
+    gtk_tree_store_set (history->store, &iter,
+                        0, pixbuf, // Icon
+                        1, description, // Description
+                        2, pixbuf_security, // Icon
+                        3, c,      // Pointer
+                        -1);
+
+    if (pixbuf != NULL)
+        g_object_unref (G_OBJECT (pixbuf));
+
+    if (pixbuf_security != NULL) {
+        g_object_unref (G_OBJECT (pixbuf_security));
+    }
+
+    gtk_tree_view_set_model (GTK_TREE_VIEW (history->view), GTK_TREE_MODEL (history->store));
+
+    history_reinit (history);
 }
 
 
@@ -1064,7 +1075,7 @@ void calltree_add_conference (calltab_t* tab, conference_obj_t* conf)
     GdkPixbuf *pixbuf_security=NULL;
     GtkTreeIter iter;
     GtkTreePath *path;
-    GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
+    GtkTreeModel *model = (GtkTreeModel*) active_calltree->store;
 
     // gchar** participant = dbus_get_participant_list(conf->_confID);
     // gchar** pl;
@@ -1077,211 +1088,205 @@ void calltree_add_conference (calltab_t* tab, conference_obj_t* conf)
     gchar* srtp_enabled="";
 
     // New call in the list
-    
+
     gchar * description;
 
 
-    if(!conf) {
-      ERROR("Calltree: Error: Conference is null!!");
-      return;
+    if (!conf) {
+        ERROR ("Calltree: Error: Conference is null!!");
+        return;
     }
 
-    DEBUG("Calltree: Add conference %s", conf->_confID);
+    DEBUG ("Calltree: Add conference %s", conf->_confID);
 
     // description = g_markup_printf_escaped("<b>%s</b>", conf->_confID);
-    description = g_markup_printf_escaped("<b>%s</b>", "");
+    description = g_markup_printf_escaped ("<b>%s</b>", "");
 
     gtk_tree_store_append (tab->store, &iter, NULL);
 
-    if( tab == current_calls )
-    {	
-
-        switch(conf->_state)
-	{
-	    case CONFERENCE_STATE_ACTIVE_ATACHED:
-	    {
-			
-	        pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/usersActive.svg", NULL);
-		break;
-	    }
-	    case CONFERENCE_STATE_ACTIVE_DETACHED:
-	    case CONFERENCE_STATE_HOLD:
-	    {
-			
-			
-	        pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/users.svg", NULL);
-		break;
-	    }
-	    default:
-	        WARN("Update conference add - Should not happen!");
-	}
-    }
-    else
-    {
-	DEBUG("Error Conference State NULL for conferece %s!!!!!", conf->_confID);
+    if (tab == current_calls) {
+
+        switch (conf->_state) {
+            case CONFERENCE_STATE_ACTIVE_ATACHED: {
+
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/usersActive.svg", NULL);
+                break;
+            }
+            case CONFERENCE_STATE_ACTIVE_DETACHED:
+            case CONFERENCE_STATE_HOLD: {
+
+
+                pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/users.svg", NULL);
+                break;
+            }
+            default:
+                WARN ("Update conference add - Should not happen!");
+        }
+    } else {
+        DEBUG ("Error Conference State NULL for conferece %s!!!!!", conf->_confID);
     }
 
 
     //Resize it
-    if(pixbuf) {
-	if(gdk_pixbuf_get_width(pixbuf) > 32 || gdk_pixbuf_get_height(pixbuf) > 32) {
-	    pixbuf =  gdk_pixbuf_scale_simple(pixbuf, 32, 32, GDK_INTERP_BILINEAR);
-	}
-    }
-    else {
-        DEBUG("Error no pixbuff for conference from %s", ICONS_DIR);
+    if (pixbuf) {
+        if (gdk_pixbuf_get_width (pixbuf) > 32 || gdk_pixbuf_get_height (pixbuf) > 32) {
+            pixbuf =  gdk_pixbuf_scale_simple (pixbuf, 32, 32, GDK_INTERP_BILINEAR);
+        }
+    } else {
+        DEBUG ("Error no pixbuff for conference from %s", ICONS_DIR);
     }
-    
+
     // Used to determine if at least one participant use a security feature
-    // If true (at least on call use a security feature) we need to display security icons 
+    // If true (at least on call use a security feature) we need to display security icons
     conf->_conf_srtp_enabled = FALSE;
-    
+
     // Used to determine if the conference is secured
     // Every participant to a conference must be secured, the conference is not secured elsewhere
     conf->_conference_secured = TRUE;
 
-    DEBUG("Calltree: Determine if conference is secured");
-    
+    DEBUG ("Calltree: Determine if conference is secured");
+
     // participant = conf->participant;
     // participant = dbus_get_participant_list(conf->_confID);
     conference_participant = conf->participant_list;
-    if(conference_participant) {
-
-        DEBUG("Calltree: Determine if at least one participant uses SRTP");
-	
-	// participant = conf->participant;
-	// participant = dbus_get_participant_list(conf->_confID);
-	// for (pl = participant; *pl; pl++)
-	while(conference_participant) {
-	    
-	    // call_id = (gchar*)(*pl);
-	    call_id = (gchar*)(conference_participant->data);
-	    call = calllist_get (tab, call_id);
-	    
-	    if(call != NULL) {
-	      
-	      account_details = account_list_get_by_id(call->_callID);
-	      if(account_details != NULL) {
-		srtp_enabled = g_hash_table_lookup(account_details->properties, ACCOUNT_SRTP_ENABLED);
-	      }
-	      
-	      if(g_strcasecmp(srtp_enabled,"true") == 0) {
-		DEBUG("Calltree: SRTP enabled for participant %s", call_id);
-		conf->_conf_srtp_enabled = TRUE;
-		break;
-	      } 
-	      else {
-		DEBUG("Calltree: SRTP is not enabled for participant %s", call_id);
-	      }
-	      
-	    }
-	    
-	    conference_participant = conference_next_participant(conference_participant);
-	    
-	  }
-
-	DEBUG("Calltree: Determine if all conference participant are secured");
-	
-	if(conf->_conf_srtp_enabled) {
-	    // participant = conf->participant;
-	    conference_participant = conf->participant_list;
-	    // for (pl = participant; *pl; pl++)
-	    while(conference_participant) {	    
-		// call_id = (gchar*)(*pl);
-		call_id = (gchar*)(conference_participant->data);
-		call = calllist_get (tab, call_id);
-		
-		if(call != NULL) {
-		  
-		  if(call->_srtp_state == 0) {
-		      DEBUG("Calltree: Participant %s is not secured", call_id);
-							conf->_conference_secured = FALSE;
-							break;
-		  }
-		  else {
-		      DEBUG("Calltree: Participant %s is secured", call_id);
-		  }
-		}
-		conference_participant = conference_next_participant(conference_participant);
-	    }
-	}
+
+    if (conference_participant) {
+
+        DEBUG ("Calltree: Determine if at least one participant uses SRTP");
+
+        // participant = conf->participant;
+        // participant = dbus_get_participant_list(conf->_confID);
+        // for (pl = participant; *pl; pl++)
+        while (conference_participant) {
+
+            // call_id = (gchar*)(*pl);
+            call_id = (gchar*) (conference_participant->data);
+            call = calllist_get (tab, call_id);
+
+            if (call != NULL) {
+
+                account_details = account_list_get_by_id (call->_callID);
+
+                if (account_details != NULL) {
+                    srtp_enabled = g_hash_table_lookup (account_details->properties, ACCOUNT_SRTP_ENABLED);
+                }
+
+                if (g_strcasecmp (srtp_enabled,"true") == 0) {
+                    DEBUG ("Calltree: SRTP enabled for participant %s", call_id);
+                    conf->_conf_srtp_enabled = TRUE;
+                    break;
+                } else {
+                    DEBUG ("Calltree: SRTP is not enabled for participant %s", call_id);
+                }
+
+            }
+
+            conference_participant = conference_next_participant (conference_participant);
+
+        }
+
+        DEBUG ("Calltree: Determine if all conference participant are secured");
+
+        if (conf->_conf_srtp_enabled) {
+            // participant = conf->participant;
+            conference_participant = conf->participant_list;
+
+            // for (pl = participant; *pl; pl++)
+            while (conference_participant) {
+                // call_id = (gchar*)(*pl);
+                call_id = (gchar*) (conference_participant->data);
+                call = calllist_get (tab, call_id);
+
+                if (call != NULL) {
+
+                    if (call->_srtp_state == 0) {
+                        DEBUG ("Calltree: Participant %s is not secured", call_id);
+                        conf->_conference_secured = FALSE;
+                        break;
+                    } else {
+                        DEBUG ("Calltree: Participant %s is secured", call_id);
+                    }
+                }
+
+                conference_participant = conference_next_participant (conference_participant);
+            }
+        }
     }
 
-    if(conf->_conf_srtp_enabled) {
-	if(conf->_conference_secured) {
-	    DEBUG("Calltree: Conference is secured");
-	    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_confirmed.svg", NULL);
-	}
-	else {
-	    DEBUG("Calltree: Conference is not secured");
-	    pixbuf_security = gdk_pixbuf_new_from_file(ICONS_DIR "/lock_off.svg", NULL);
-	}
+    if (conf->_conf_srtp_enabled) {
+        if (conf->_conference_secured) {
+            DEBUG ("Calltree: Conference is secured");
+            pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_confirmed.svg", NULL);
+        } else {
+            DEBUG ("Calltree: Conference is not secured");
+            pixbuf_security = gdk_pixbuf_new_from_file (ICONS_DIR "/lock_off.svg", NULL);
+        }
     }
-    
-    DEBUG("Calltree: Add conference to tree store");
-    
-    gtk_tree_store_set(tab->store, &iter,
-		       0, pixbuf, // Icon
-		       1, description, // Description
-		       2, pixbuf_security,
-		       3, conf, // Pointer
-		       -1);
+
+    DEBUG ("Calltree: Add conference to tree store");
+
+    gtk_tree_store_set (tab->store, &iter,
+                        0, pixbuf, // Icon
+                        1, description, // Description
+                        2, pixbuf_security,
+                        3, conf, // Pointer
+                        -1);
 
     if (pixbuf != NULL)
-      g_object_unref(G_OBJECT(pixbuf));
-    
+        g_object_unref (G_OBJECT (pixbuf));
+
     // participant = conf->participant;
     // participant = dbus_get_participant_list(conf->_confID);
     conference_participant = conf->participant_list;
-    if(conference_participant) {
-
-        DEBUG("Calltre: Adding conference participant");
-	// for (pl = participant; *pl; pl++)
-	while(conference_participant) {
-	    
-	    DEBUG("OK");
-	    call_id = (gchar*)(conference_participant->data);
-	    call = calllist_get (tab, call_id);
-	    // create_new_call_from_details (conf_id, conference_details, &c);
-	    
-	    calltree_remove_call(tab, call, NULL);
-	    calltree_add_call (tab, call, &iter);
-	    
-	    conference_participant = conference_next_participant(conference_participant);
-	}
+
+    if (conference_participant) {
+
+        DEBUG ("Calltre: Adding conference participant");
+
+        // for (pl = participant; *pl; pl++)
+        while (conference_participant) {
+
+            DEBUG ("OK");
+            call_id = (gchar*) (conference_participant->data);
+            call = calllist_get (tab, call_id);
+            // create_new_call_from_details (conf_id, conference_details, &c);
+
+            calltree_remove_call (tab, call, NULL);
+            calltree_add_call (tab, call, &iter);
+
+            conference_participant = conference_next_participant (conference_participant);
+        }
     }
+
     /*
-    else 
-	  {
-	    WARN ("Conferences cannot be added in this widget - This is a bug in the application.");    
-	  }
+    else
+      {
+        WARN ("Conferences cannot be added in this widget - This is a bug in the application.");
+      }
     */
 
-    gtk_tree_view_set_model(GTK_TREE_VIEW(tab->view), GTK_TREE_MODEL(tab->store));
+    gtk_tree_view_set_model (GTK_TREE_VIEW (tab->view), GTK_TREE_MODEL (tab->store));
 
-    path = gtk_tree_model_get_path(model, &iter);
+    path = gtk_tree_model_get_path (model, &iter);
 
-    gtk_tree_view_expand_row(GTK_TREE_VIEW(tab->view), path, FALSE);
+    gtk_tree_view_expand_row (GTK_TREE_VIEW (tab->view), path, FALSE);
 
     update_actions();
 
 }
 
 
-void calltree_update_conference (calltab_t* tab, const gchar* confID)
+void calltree_update_conference (calltab_t* tab UNUSED, const gchar* confID UNUSED)
 {
-
-	DEBUG("calltree_update_conference");
-
-
+    DEBUG ("calltree_update_conference");
 }
 
 
 void calltree_remove_conference (calltab_t* tab, const conference_obj_t* conf, GtkTreeIter *parent)
 {
 
-    DEBUG("calltree_remove_conference %s\n", conf->_confID);
-    
+    DEBUG ("calltree_remove_conference %s\n", conf->_confID);
+
     GtkTreeIter iter_parent;
     GtkTreeIter iter_child;
     GValue confval;
@@ -1290,50 +1295,53 @@ void calltree_remove_conference (calltab_t* tab, const conference_obj_t* conf, G
     callable_obj_t * call;
     GtkTreeStore* store = tab->store;
 
-    int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent);
+    int nbChild = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), parent);
 
     int nbParticipant;
 
     int i, j;
-    for( i = 0; i < nbChild; i++) {
 
-        if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_parent, parent, i)) {
+    for (i = 0; i < nbChild; i++) {
+
+        if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_parent, parent, i)) {
+
+            if (gtk_tree_model_iter_has_child (GTK_TREE_MODEL (store), &iter_parent)) {
 
-	    if (gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter_parent)) {
+                calltree_remove_conference (tab, conf, &iter_parent);
 
-	        calltree_remove_conference (tab, conf, &iter_parent);
+                confval.g_type = 0;
+                gtk_tree_model_get_value (GTK_TREE_MODEL (store), &iter_parent, COLUMN_ACCOUNT_PTR, &confval);
 
-		confval.g_type = 0;
-		gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter_parent, COLUMN_ACCOUNT_PTR, &confval);
+                tempconf = (conference_obj_t*) g_value_get_pointer (&confval);
+                g_value_unset (&confval);
 
-		tempconf = (conference_obj_t*) g_value_get_pointer(&confval);
-		g_value_unset(&confval);
+                if (tempconf == conf) {
 
-		if(tempconf == conf) {
-		    
-		    nbParticipant = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), &iter_parent);
-		    DEBUG("nbParticipant: %i", nbParticipant);
-		    for( j = 0; j < nbParticipant; j++) {
-		        call = NULL;
-			if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_child, &iter_parent, j)){
+                    nbParticipant = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), &iter_parent);
+                    DEBUG ("nbParticipant: %i", nbParticipant);
 
-			    callval.g_type = 0;
-			    gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter_child, COLUMN_ACCOUNT_PTR, &callval);
+                    for (j = 0; j < nbParticipant; j++) {
+                        call = NULL;
 
-			    call = (callable_obj_t*)g_value_get_pointer(&callval);
-			    g_value_unset(&callval);
-			    
-			    if(call) {
-			        calltree_add_call (tab, call, NULL);
-			    }
-			}
-			
-		    }
+                        if (gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (store), &iter_child, &iter_parent, j)) {
 
-		    gtk_tree_store_remove(store, &iter_parent);
-		}
-	    }
-	}
+                            callval.g_type = 0;
+                            gtk_tree_model_get_value (GTK_TREE_MODEL (store), &iter_child, COLUMN_ACCOUNT_PTR, &callval);
+
+                            call = (callable_obj_t*) g_value_get_pointer (&callval);
+                            g_value_unset (&callval);
+
+                            if (call) {
+                                calltree_add_call (tab, call, NULL);
+                            }
+                        }
+
+                    }
+
+                    gtk_tree_store_remove (store, &iter_parent);
+                }
+            }
+        }
     }
 
     // callable_obj_t * selectedCall = calltab_get_selected_call(tab);
@@ -1341,13 +1349,14 @@ void calltree_remove_conference (calltab_t* tab, const conference_obj_t* conf, G
     // calltab_select_call(tab, NULL);
 
     update_actions();
-	
+
 }
 
 
-void calltree_display (calltab_t *tab) {
+void calltree_display (calltab_t *tab)
+{
+
 
-  
     GtkTreeSelection *sel;
 
     /* If we already are displaying the specified calltree */
@@ -1360,12 +1369,13 @@ void calltree_display (calltab_t *tab) {
         DEBUG ("display main tab");
 
 
-	if (active_calltree==contacts) {
-	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
-	} else {
-	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
-	}
-	// gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)currentCallsButton, TRUE);
+        if (active_calltree==contacts) {
+            gtk_toggle_tool_button_set_active ( (GtkToggleToolButton*) contactButton, FALSE);
+        } else {
+            gtk_toggle_tool_button_set_active ( (GtkToggleToolButton*) historyButton, FALSE);
+        }
+
+        // gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)currentCallsButton, TRUE);
 
     }
 
@@ -1374,417 +1384,428 @@ void calltree_display (calltab_t *tab) {
 
         DEBUG ("display history tab");
 
-	if (active_calltree==contacts) {
-	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, FALSE);
-	}
+        if (active_calltree==contacts) {
+            gtk_toggle_tool_button_set_active ( (GtkToggleToolButton*) contactButton, FALSE);
+        }
 
-	gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, TRUE);
+        gtk_toggle_tool_button_set_active ( (GtkToggleToolButton*) historyButton, TRUE);
     }
 
     else if (tab==contacts) {
 
         DEBUG ("display contact tab");
 
-	if (active_calltree==history) {
-	    gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)historyButton, FALSE);
-	}
+        if (active_calltree==history) {
+            gtk_toggle_tool_button_set_active ( (GtkToggleToolButton*) historyButton, FALSE);
+        }
 
-	gtk_toggle_tool_button_set_active ((GtkToggleToolButton*)contactButton, TRUE);
+        gtk_toggle_tool_button_set_active ( (GtkToggleToolButton*) contactButton, TRUE);
     }
 
     else
         ERROR ("calltree.c line %d . This is probably a bug in the application", __LINE__);
-    
+
 
     gtk_widget_hide (active_calltree->tree);
     active_calltree = tab;
     gtk_widget_show (active_calltree->tree);
-    
+
     sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (active_calltree->view));
-    DEBUG("Emit signal changed from calltree_display");
-    g_signal_emit_by_name(sel, "changed");
+    DEBUG ("Emit signal changed from calltree_display");
+    g_signal_emit_by_name (sel, "changed");
     update_actions();
 }
 
 
+void calltree_update_clock()
+{
 
+    callable_obj_t *c = calltab_get_selected_call (current_calls);
 
-static void drag_begin_cb(GtkWidget *widget, GdkDragContext *dc, gpointer data)
-{
+    // if(!selected_call) {
+    if (!c) {
+        statusbar_update_clock ("");
+        return;
+    }
+
+    // if(!(selected_call->_timestr)) {
+    if (! (c->_timestr)) {
+        statusbar_update_clock ("");
+        return;
+    }
+
+    if ( (c->_state != CALL_STATE_INVALID) &&
+            (c->_state != CALL_STATE_INCOMING) &&
+            (c->_state != CALL_STATE_RINGING) &&
+            (c->_state != CALL_STATE_DIALING) &&
+            (c->_state != CALL_STATE_FAILURE) &&
+            (c->_state != CALL_STATE_BUSY)) {
+
+        // TODO this make the whole thing crash...
+        statusbar_update_clock (c->_timestr);
+    } else {
+        statusbar_update_clock ("");
+    }
+}
 
-    GtkTargetList* target_list;
 
+static void drag_begin_cb (GtkWidget *widget UNUSED, GdkDragContext *dc UNUSED, gpointer data UNUSED)
+{
 }
 
-static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer data)
+static void drag_end_cb (GtkWidget * widget UNUSED, GdkDragContext * context UNUSED, gpointer data UNUSED)
 {
-    DEBUG("CallTree: Drag end callback");
-    DEBUG("CallTree: selected_path %s, selected_call_id %s, selected_path_depth %d", 
-	                             selected_path, selected_call_id, selected_path_depth);
-    DEBUG("CallTree: dragged path %s, dragged_call_id %s, dragged_path_depth %d", 
-                                     dragged_path, dragged_call_id, dragged_path_depth);
-
-    GtkTreeModel *model = (GtkTreeModel*)current_calls->store;
-    GtkTreePath *path = gtk_tree_path_new_from_string(dragged_path);
-    GtkTreePath *dpath = gtk_tree_path_new_from_string(dragged_path);
-    GtkTreePath *spath = gtk_tree_path_new_from_string(selected_path);
-    
+    DEBUG ("CallTree: Drag end callback");
+    DEBUG ("CallTree: selected_path %s, selected_call_id %s, selected_path_depth %d",
+           selected_path, selected_call_id, selected_path_depth);
+    DEBUG ("CallTree: dragged path %s, dragged_call_id %s, dragged_path_depth %d",
+           dragged_path, dragged_call_id, dragged_path_depth);
+
+    GtkTreeModel *model = (GtkTreeModel*) current_calls->store;
+    GtkTreePath *path = gtk_tree_path_new_from_string (dragged_path);
+    GtkTreePath *dpath = gtk_tree_path_new_from_string (dragged_path);
+    GtkTreePath *spath = gtk_tree_path_new_from_string (selected_path);
+
     GtkTreeIter iter;
-    GtkTreeIter iter_parent;
-    GtkTreeIter iter_children;
     GtkTreeIter parent_conference; // conference for which this call is attached
 
     GValue val;
-    
-    callable_obj_t* call;
+
     conference_obj_t* conf;
 
 
     // Make sure drag n drop does not imply a dialing call for either selected and dragged call
-    if(selected_call && (selected_type == A_CALL)) {
-
-      DEBUG("CallTree: Selected a call");
-      if(selected_call->_state == CALL_STATE_DIALING || 
-	 selected_call->_state == CALL_STATE_INVALID ||
-	 selected_call->_state == CALL_STATE_FAILURE ||
-	 selected_call->_state == CALL_STATE_BUSY ||
-	 selected_call->_state == CALL_STATE_TRANSFERT) {
- 
-          DEBUG("CallTree: Selected an invalid call");
-
-	  calltree_remove_call(current_calls, selected_call, NULL);
-	  calltree_add_call(current_calls, selected_call, NULL);
-
-	  dragged_call = NULL; 
-	  return;
-      }
-    
-
-      if(dragged_call && (dragged_type == A_CALL)) {
-
-	DEBUG("CallTree: Dragged on a call");
-	if(dragged_call->_state == CALL_STATE_DIALING || 
-	   dragged_call->_state == CALL_STATE_INVALID ||
-	   dragged_call->_state == CALL_STATE_FAILURE ||
-	   dragged_call->_state == CALL_STATE_BUSY ||
-	   dragged_call->_state == CALL_STATE_TRANSFERT) {
- 
-	    DEBUG("CallTree: Dragged on an invalid call");
-
-	    calltree_remove_call(current_calls, selected_call, NULL);
-	  
-	    if(selected_call->_confID) {
-
-	        gtk_tree_path_up(spath);
-		gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, spath);
-		
-		calltree_add_call(current_calls, selected_call, &parent_conference);
-	    }
-	    else {
-
-	        calltree_add_call(current_calls, selected_call, NULL);
-	    }
-
-	    dragged_call = NULL; 
-	    return;
-	}
-      }
+    if (selected_call && (selected_type == A_CALL)) {
+
+        DEBUG ("CallTree: Selected a call");
+
+        if (selected_call->_state == CALL_STATE_DIALING ||
+                selected_call->_state == CALL_STATE_INVALID ||
+                selected_call->_state == CALL_STATE_FAILURE ||
+                selected_call->_state == CALL_STATE_BUSY ||
+                selected_call->_state == CALL_STATE_TRANSFERT) {
+
+            DEBUG ("CallTree: Selected an invalid call");
+
+            calltree_remove_call (current_calls, selected_call, NULL);
+            calltree_add_call (current_calls, selected_call, NULL);
+
+            dragged_call = NULL;
+            return;
+        }
+
+
+        if (dragged_call && (dragged_type == A_CALL)) {
+
+            DEBUG ("CallTree: Dragged on a call");
+
+            if (dragged_call->_state == CALL_STATE_DIALING ||
+                    dragged_call->_state == CALL_STATE_INVALID ||
+                    dragged_call->_state == CALL_STATE_FAILURE ||
+                    dragged_call->_state == CALL_STATE_BUSY ||
+                    dragged_call->_state == CALL_STATE_TRANSFERT) {
+
+                DEBUG ("CallTree: Dragged on an invalid call");
+
+                calltree_remove_call (current_calls, selected_call, NULL);
+
+                if (selected_call->_confID) {
+
+                    gtk_tree_path_up (spath);
+                    gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &parent_conference, spath);
+
+                    calltree_add_call (current_calls, selected_call, &parent_conference);
+                } else {
+
+                    calltree_add_call (current_calls, selected_call, NULL);
+                }
+
+                dragged_call = NULL;
+                return;
+            }
+        }
 
     }
 
 
     // Make sure a conference is only dragged on another conference
-    if(selected_conf && (selected_type == A_CONFERENCE)) {
+    if (selected_conf && (selected_type == A_CONFERENCE)) {
 
-        DEBUG("CallTree: Selected a conference");
+        DEBUG ("CallTree: Selected a conference");
 
-	if(!dragged_conf && (dragged_type == A_CALL)) {
+        if (!dragged_conf && (dragged_type == A_CALL)) {
 
-	    DEBUG("CallTree: Dragged on a call");
+            DEBUG ("CallTree: Dragged on a call");
 
-	    conf = selected_conf;
+            conf = selected_conf;
 
-	    calltree_remove_conference(current_calls, conf, NULL);
-	    calltree_add_conference(current_calls, conf);
+            calltree_remove_conference (current_calls, conf, NULL);
+            calltree_add_conference (current_calls, conf);
 
-	    dragged_call = NULL;
-	    return; 
-	}
+            dragged_call = NULL;
+            return;
+        }
     }
 
 
-    if(selected_path_depth == 1) {
+    if (selected_path_depth == 1) {
 
-        if(dragged_path_depth == 1) {
+        if (dragged_path_depth == 1) {
 
-	  if (selected_type == A_CALL && dragged_type == A_CALL) {
+            if (selected_type == A_CALL && dragged_type == A_CALL) {
 
-	    if(gtk_tree_path_compare (dpath, spath) == 0) {
-	        // draged a call on itself
-	    }
-	    else {
-	      // dragged a single call on a single call
-	      if(selected_call != NULL && dragged_call != NULL)
-		sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
-	    }
-	  }
-	  else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
+                if (gtk_tree_path_compare (dpath, spath) == 0) {
+                    // draged a call on itself
+                } else {
+                    // dragged a single call on a single call
+                    if (selected_call != NULL && dragged_call != NULL)
+                        sflphone_join_participant (selected_call->_callID, dragged_call->_callID);
+                }
+            } else if (selected_type == A_CALL && dragged_type == A_CONFERENCE) {
 
-	      // dragged a single call on a conference
-	      if(!selected_call) {
-	          DEBUG("Error: call dragged on a conference is null");
-		  return;
-	      }
+                // dragged a single call on a conference
+                if (!selected_call) {
+                    DEBUG ("Error: call dragged on a conference is null");
+                    return;
+                }
 
-	      selected_call->_confID = g_strdup(dragged_call_id);
-	      sflphone_add_participant(selected_call_id, dragged_call_id);
-	  }
-	  else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
+                selected_call->_confID = g_strdup (dragged_call_id);
+                sflphone_add_participant (selected_call_id, dragged_call_id);
+            } else if (selected_type == A_CONFERENCE && dragged_type == A_CALL) {
 
-	      // dragged a conference on a single call
-	      conf = selected_conf;
-			        
-	      calltree_remove_conference(current_calls, conf, NULL);
-	      calltree_add_conference(current_calls, conf);
+                // dragged a conference on a single call
+                conf = selected_conf;
 
+                calltree_remove_conference (current_calls, conf, NULL);
+                calltree_add_conference (current_calls, conf);
 
-	  }
-	  else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE){
 
-	      // dragged a conference on a conference
-	      if(gtk_tree_path_compare (dpath, spath) == 0) {
+            } else if (selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE) {
 
-		  if(!current_calls) {
-		      DEBUG("Error while joining the same conference\n");
-		      return;
-		  }
+                // dragged a conference on a conference
+                if (gtk_tree_path_compare (dpath, spath) == 0) {
 
-		  DEBUG("Joined the same conference!\n");
-		  gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE);
-	      }
-	      else {
+                    if (!current_calls) {
+                        DEBUG ("Error while joining the same conference\n");
+                        return;
+                    }
 
-		  if(!selected_conf) {
-		      DEBUG("Error: selected conference is null while joining 2 conference");
-		  }
+                    DEBUG ("Joined the same conference!\n");
+                    gtk_tree_view_expand_row (GTK_TREE_VIEW (current_calls->view), path, FALSE);
+                } else {
 
-		  if(!dragged_conf) {
-		      DEBUG("Error: dragged conference is null while joining 2 conference");
-		  }
+                    if (!selected_conf) {
+                        DEBUG ("Error: selected conference is null while joining 2 conference");
+                    }
 
-		  DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path);
-		  sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID);
-	      }
-	  }
+                    if (!dragged_conf) {
+                        DEBUG ("Error: dragged conference is null while joining 2 conference");
+                    }
 
-	  // TODO: dragged a single call on a NULL element (should do nothing)
-	  // TODO: dragged a conference on a NULL element (should do nothing)
+                    DEBUG ("Joined two conference %s, %s!\n", dragged_path, selected_path);
+                    sflphone_join_conference (selected_conf->_confID, dragged_conf->_confID);
+                }
+            }
 
-	}
-	else {
- 
-	    // dragged_path_depth == 2
-	  if (selected_type == A_CALL && dragged_type == A_CALL) {
+            // TODO: dragged a single call on a NULL element (should do nothing)
+            // TODO: dragged a conference on a NULL element (should do nothing)
 
-	      // TODO: dragged a call on a conference call
-	      calltree_remove_call(current_calls, selected_call, NULL);
-	      calltree_add_call(current_calls, selected_call, NULL);
-	  }
+        } else {
 
-	  else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
+            // dragged_path_depth == 2
+            if (selected_type == A_CALL && dragged_type == A_CALL) {
 
-	      // TODO: dragged a conference on a conference call
-	      calltree_remove_conference(current_calls, selected_conf, NULL);
-	      calltree_add_conference(current_calls, selected_conf);
-	  }
+                // TODO: dragged a call on a conference call
+                calltree_remove_call (current_calls, selected_call, NULL);
+                calltree_add_call (current_calls, selected_call, NULL);
+            }
 
-	  // TODO: dragged a single call on a NULL element 
-	  // TODO: dragged a conference on a NULL element
-	}
-    }
-    else {
+            else if (selected_type == A_CONFERENCE && dragged_type == A_CALL) {
+
+                // TODO: dragged a conference on a conference call
+                calltree_remove_conference (current_calls, selected_conf, NULL);
+                calltree_add_conference (current_calls, selected_conf);
+            }
+
+            // TODO: dragged a single call on a NULL element
+            // TODO: dragged a conference on a NULL element
+        }
+    } else {
 
         // selected_path_depth == 2
-      
-        if(dragged_path_depth == 1) {
-
-	    if(selected_type == A_CALL && dragged_type == A_CALL) {
-
-	      // dragged a conference call on a call
-	      sflphone_detach_participant(selected_call_id);
-		    
-	      if(selected_call != NULL && dragged_call != NULL)
-		  sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
-
-	    }
-	    else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
-
-	        // dragged a conference call on a conference
-	        sflphone_detach_participant(selected_call_id);
-	      
-		if(selected_call != NULL && dragged_conf != NULL) {
-
-		    DEBUG("Adding a participant, since dragged call on a conference");
-
-		    sflphone_add_participant(selected_call_id, dragged_call_id);
-		}
-	    }
-	    else {
-
-	        // dragged a conference call on a NULL element
-	        sflphone_detach_participant(selected_call_id);
-	    }
-		
-	}
-	else {
-
-	    // dragged_path_depth == 2
-	    // dragged a conference call on another conference call (same conference)
-	    // TODO: dragged a conference call on another conference call (different conference)
-	      
-	    gtk_tree_path_up(path);
-
-	    gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &parent_conference, path);
-
-	    gtk_tree_path_up(dpath);
-	    gtk_tree_path_up(spath);
-		
-	    if(gtk_tree_path_compare (dpath, spath) == 0) {
-
-	        DEBUG("Dragged a call in the same conference");
-		calltree_remove_call (current_calls, selected_call, NULL);
-		calltree_add_call (current_calls, selected_call, &parent_conference);
-	    }
-	    else {
-
-
-	        DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath));
-
-		conf = NULL;
-		
-		val.g_type = 0;
-		if(gtk_tree_model_get_iter (model, &iter, dpath)) {
-		  
-		    DEBUG("we got an iter!");
-		    gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
-		  
-		    conf = (conference_obj_t*)g_value_get_pointer(&val);
-		}
-		g_value_unset(&val);
-
-		sflphone_detach_participant(selected_call_id);
-
-		if(conf) {
-
-		    DEBUG("we got a conf!");
-		    sflphone_add_participant(selected_call_id, conf->_confID);
-		}
-		else {
-
-		    DEBUG("didn't find a conf!");
-		}
-	    }
-
-	    // TODO: dragged a conference call on another conference call (different conference)
-	    // TODO: dragged a conference call on a NULL element (same conference)
-	    // TODO: dragged a conference call on a NULL element (different conference)
-	}
-	
-    }	
+
+        if (dragged_path_depth == 1) {
+
+            if (selected_type == A_CALL && dragged_type == A_CALL) {
+
+                // dragged a conference call on a call
+                sflphone_detach_participant (selected_call_id);
+
+                if (selected_call != NULL && dragged_call != NULL)
+                    sflphone_join_participant (selected_call->_callID, dragged_call->_callID);
+
+            } else if (selected_type == A_CALL && dragged_type == A_CONFERENCE) {
+
+                // dragged a conference call on a conference
+                sflphone_detach_participant (selected_call_id);
+
+                if (selected_call != NULL && dragged_conf != NULL) {
+
+                    DEBUG ("Adding a participant, since dragged call on a conference");
+
+                    sflphone_add_participant (selected_call_id, dragged_call_id);
+                }
+            } else {
+
+                // dragged a conference call on a NULL element
+                sflphone_detach_participant (selected_call_id);
+            }
+
+        } else {
+
+            // dragged_path_depth == 2
+            // dragged a conference call on another conference call (same conference)
+            // TODO: dragged a conference call on another conference call (different conference)
+
+            gtk_tree_path_up (path);
+
+            gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &parent_conference, path);
+
+            gtk_tree_path_up (dpath);
+            gtk_tree_path_up (spath);
+
+            if (gtk_tree_path_compare (dpath, spath) == 0) {
+
+                DEBUG ("Dragged a call in the same conference");
+                calltree_remove_call (current_calls, selected_call, NULL);
+                calltree_add_call (current_calls, selected_call, &parent_conference);
+            } else {
+
+
+                DEBUG ("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string (dpath), gtk_tree_path_to_string (spath));
+
+                conf = NULL;
+
+                val.g_type = 0;
+
+                if (gtk_tree_model_get_iter (model, &iter, dpath)) {
+
+                    DEBUG ("we got an iter!");
+                    gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
+
+                    conf = (conference_obj_t*) g_value_get_pointer (&val);
+                }
+
+                g_value_unset (&val);
+
+                sflphone_detach_participant (selected_call_id);
+
+                if (conf) {
+
+                    DEBUG ("we got a conf!");
+                    sflphone_add_participant (selected_call_id, conf->_confID);
+                } else {
+
+                    DEBUG ("didn't find a conf!");
+                }
+            }
+
+            // TODO: dragged a conference call on another conference call (different conference)
+            // TODO: dragged a conference call on a NULL element (same conference)
+            // TODO: dragged a conference call on a NULL element (different conference)
+        }
+
+    }
 
 }
 
 
-void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint t, gpointer data)
+void drag_data_received_cb (GtkWidget *widget, GdkDragContext *context UNUSED, gint x UNUSED, gint y UNUSED, GtkSelectionData *selection_data UNUSED, guint info UNUSED, guint t UNUSED, gpointer data UNUSED)
 {
-
-    // DEBUG("drag_data_received_cb\n");
-    GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
+    GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
     GtkTreePath *drop_path;
     GtkTreeViewDropPosition position;
     GValue val;
 
-    GtkTreeModel *model = (GtkTreeModel*)active_calltree->store;
-    GtkTreeModel* tree_model = gtk_tree_view_get_model(tree_view);
+    GtkTreeModel* tree_model = gtk_tree_view_get_model (tree_view);
 
     GtkTreeIter iter;
-    gchar value;
-
 
     val.g_type = 0;
-    gtk_tree_view_get_drag_dest_row(tree_view, &drop_path, &position);
-
-    if(drop_path) {
-
-        gtk_tree_model_get_iter(tree_model, &iter, drop_path);
-	gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val);
-
-	    
-	if(gtk_tree_model_iter_has_child(tree_model, &iter)) {
-
-	    DEBUG("CallTree: Dragging on a conference");
-	    dragged_type = A_CONFERENCE;
-	    dragged_call = NULL;
-	}
-	else {
-
-	    DEBUG("CallTree: Dragging on a call");
-	    dragged_type = A_CALL;
-	    dragged_conf = NULL;
-	}
-
-	switch (position)  {
-
-	case GTK_TREE_VIEW_DROP_AFTER:
-	    DEBUG("CallTree: GTK_TREE_VIEW_DROP_AFTER");
-	    dragged_path = gtk_tree_path_to_string(drop_path);
-	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-	    dragged_call_id = "NULL";
-	    dragged_call = NULL;
-	    dragged_conf = NULL;
-	    break;
-
-	case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
-	    DEBUG("CallTree: GTK_TREE_VIEW_DROP_INTO_OR_AFTER");
-	    dragged_path = gtk_tree_path_to_string(drop_path);
-	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-	    if (dragged_type == A_CALL) {
-	      
-	        dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
-		dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
-	    }
-	    else {
-
-	        dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
-		dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
-	    }
-	    break;
-
-	case GTK_TREE_VIEW_DROP_BEFORE:
-	    DEBUG("CallTree: GTK_TREE_VIEW_DROP_BEFORE");
-	    dragged_path = gtk_tree_path_to_string(drop_path);
-	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-	    dragged_call_id = "NULL";
-	    dragged_call = NULL;
-	    dragged_conf = NULL;
-	    break;
-
-	case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
-	    DEBUG("CallTree: GTK_TREE_VIEW_DROP_INTO_OR_BEFORE");
-	    dragged_path = gtk_tree_path_to_string(drop_path);
-	    dragged_path_depth = gtk_tree_path_get_depth(drop_path);
-	    if (dragged_type == A_CALL) {
-	        dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
-		dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
-	    }
-	    else {
-	      dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
-	      dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
-	    }
-	    break;
-	    
-	default:
-	  return;
-	}
+    gtk_tree_view_get_drag_dest_row (tree_view, &drop_path, &position);
+
+    if (drop_path) {
+
+        gtk_tree_model_get_iter (tree_model, &iter, drop_path);
+        gtk_tree_model_get_value (tree_model, &iter, COLUMN_ACCOUNT_PTR, &val);
+
+
+        if (gtk_tree_model_iter_has_child (tree_model, &iter)) {
+
+            DEBUG ("CallTree: Dragging on a conference");
+            dragged_type = A_CONFERENCE;
+            dragged_call = NULL;
+        } else {
+
+            DEBUG ("CallTree: Dragging on a call");
+            dragged_type = A_CALL;
+            dragged_conf = NULL;
+        }
+
+        switch (position)  {
+
+            case GTK_TREE_VIEW_DROP_AFTER:
+                DEBUG ("CallTree: GTK_TREE_VIEW_DROP_AFTER");
+                dragged_path = gtk_tree_path_to_string (drop_path);
+                dragged_path_depth = gtk_tree_path_get_depth (drop_path);
+                dragged_call_id = "NULL";
+                dragged_call = NULL;
+                dragged_conf = NULL;
+                break;
+
+            case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
+                DEBUG ("CallTree: GTK_TREE_VIEW_DROP_INTO_OR_AFTER");
+                dragged_path = gtk_tree_path_to_string (drop_path);
+                dragged_path_depth = gtk_tree_path_get_depth (drop_path);
+
+                if (dragged_type == A_CALL) {
+
+                    dragged_call_id = ( (callable_obj_t*) g_value_get_pointer (&val))->_callID;
+                    dragged_call = (callable_obj_t*) g_value_get_pointer (&val);
+                } else {
+
+                    dragged_call_id = ( (conference_obj_t*) g_value_get_pointer (&val))->_confID;
+                    dragged_conf = (conference_obj_t*) g_value_get_pointer (&val);
+                }
+
+                break;
+
+            case GTK_TREE_VIEW_DROP_BEFORE:
+                DEBUG ("CallTree: GTK_TREE_VIEW_DROP_BEFORE");
+                dragged_path = gtk_tree_path_to_string (drop_path);
+                dragged_path_depth = gtk_tree_path_get_depth (drop_path);
+                dragged_call_id = "NULL";
+                dragged_call = NULL;
+                dragged_conf = NULL;
+                break;
+
+            case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
+                DEBUG ("CallTree: GTK_TREE_VIEW_DROP_INTO_OR_BEFORE");
+                dragged_path = gtk_tree_path_to_string (drop_path);
+                dragged_path_depth = gtk_tree_path_get_depth (drop_path);
+
+                if (dragged_type == A_CALL) {
+                    dragged_call_id = ( (callable_obj_t*) g_value_get_pointer (&val))->_callID;
+                    dragged_call = (callable_obj_t*) g_value_get_pointer (&val);
+                } else {
+                    dragged_call_id = ( (conference_obj_t*) g_value_get_pointer (&val))->_confID;
+                    dragged_conf = (conference_obj_t*) g_value_get_pointer (&val);
+                }
+
+                break;
+
+            default:
+                return;
+        }
     }
 }
diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h
index c383caa9ed9ee6ee6abaaf305584fdc8c2a060b7..04f50cf46c494de2bfd727ed955f9514ce1b9b09 100644
--- a/sflphone-client-gnome/src/contacts/calltree.h
+++ b/sflphone-client-gnome/src/contacts/calltree.h
@@ -67,7 +67,7 @@ typedef enum {
  * @return GtkWidget* A new widget
  */
 void
-calltree_create(calltab_t* tab, gboolean searchbar_type);
+calltree_create (calltab_t* tab, gboolean searchbar_type);
 
 /**
  * Add a call in the calltree
@@ -90,7 +90,7 @@ calltree_update_call (calltab_t* ct, callable_obj_t * c, GtkTreeIter *parent);
 void
 calltree_remove_call (calltab_t* ct, callable_obj_t * c, GtkTreeIter *parent);
 
-void 
+void
 calltree_add_history_entry (callable_obj_t * c);
 
 void
@@ -109,6 +109,12 @@ void
 calltree_display (calltab_t *tab);
 
 void
-row_activated(GtkTreeView *, GtkTreePath *, GtkTreeViewColumn *, void *);
+row_activated (GtkTreeView *, GtkTreePath *, GtkTreeViewColumn *, void *);
+
+/**
+ * Update elapced time based on selected calltree's call
+ */
+void
+calltree_update_clock();
 
 #endif
diff --git a/sflphone-client-gnome/src/contacts/conferencelist.c b/sflphone-client-gnome/src/contacts/conferencelist.c
index 42216fdcd0c6427457b1b34f7d22df3603829702..155b82d240820d8c261a6de7482858b59a2d1e38 100644
--- a/sflphone-client-gnome/src/contacts/conferencelist.c
+++ b/sflphone-client-gnome/src/contacts/conferencelist.c
@@ -31,13 +31,13 @@
 #include <conferencelist.h>
 
 
-gchar* 
+gchar*
 generate_conf_id (void)
 {
     gchar *conf_id;
 
-    conf_id = g_new0(gchar, 30);
-    g_sprintf(conf_id, "%d", rand());
+    conf_id = g_new0 (gchar, 30);
+    g_sprintf (conf_id, "%d", rand());
     return conf_id;
 }
 
@@ -65,12 +65,12 @@ conferencelist_reset()
 
 
 void
-conferencelist_add(const conference_obj_t* conf)
+conferencelist_add (const conference_obj_t* conf)
 {
-    gchar* c = (gchar*)conferencelist_get(conf->_confID);
-    if(!c)
-    {
-        g_queue_push_tail (conferenceQueue, (gpointer)conf);
+    gchar* c = (gchar*) conferencelist_get (conf->_confID);
+
+    if (!c) {
+        g_queue_push_tail (conferenceQueue, (gpointer) conf);
     }
 }
 
@@ -78,40 +78,36 @@ conferencelist_add(const conference_obj_t* conf)
 void
 conferencelist_remove (const gchar* conf)
 {
-    gchar* c = (gchar*)conferencelist_get(conf);
-    if (c)
-    {
-        g_queue_remove(conferenceQueue, c);
+    gchar* c = (gchar*) conferencelist_get (conf);
+
+    if (c) {
+        g_queue_remove (conferenceQueue, c);
     }
 }
 
-conference_obj_t* 
+conference_obj_t*
 conferencelist_get (const gchar* conf_id)
 {
 
-    GList* c = g_queue_find_custom(conferenceQueue, conf_id, is_confID_confstruct);
-    if (c)
-    {
-	return (conference_obj_t*)c->data;
-    }
-    else
-    {
-	return NULL;
+    GList* c = g_queue_find_custom (conferenceQueue, conf_id, is_confID_confstruct);
+
+    if (c) {
+        return (conference_obj_t*) c->data;
+    } else {
+        return NULL;
     }
 }
 
 
-conference_obj_t* 
-conferencelist_get_nth ( guint n )
+conference_obj_t*
+conferencelist_get_nth (guint n)
 {
-    GList* c = g_queue_peek_nth(conferenceQueue, n);
-    if (c)
-    {
-	return (conference_obj_t*)c->data;
-    }
-    else
-    {
-	return NULL;
+    GList* c = g_queue_peek_nth (conferenceQueue, n);
+
+    if (c) {
+        return (conference_obj_t*) c->data;
+    } else {
+        return NULL;
     }
 }
 
diff --git a/sflphone-client-gnome/src/contacts/conferencelist.h b/sflphone-client-gnome/src/contacts/conferencelist.h
index 2652b892b7aba376bd1692224a8eafa3741f0bdc..afde7f2e0878d86035305ba27c19ec0580000fbf 100644
--- a/sflphone-client-gnome/src/contacts/conferencelist.h
+++ b/sflphone-client-gnome/src/contacts/conferencelist.h
@@ -74,7 +74,7 @@ conferencelist_get_size ();
   * @param n The position of the call you want
   * @return A call or NULL */
 conference_obj_t*
-conferencelist_get_nth (guint n );
+conferencelist_get_nth (guint n);
 
 /** Return the call corresponding to the callID
   * @param n The callID of the call you want
diff --git a/sflphone-client-gnome/src/contacts/history.c b/sflphone-client-gnome/src/contacts/history.c
index f354e73ceef65f5946a4b8386f4f68373d41c907..9853b5b2bb76ac857327652bafc7420234e3c1b5 100644
--- a/sflphone-client-gnome/src/contacts/history.c
+++ b/sflphone-client-gnome/src/contacts/history.c
@@ -39,9 +39,9 @@ GtkWidget * history_searchbar_widget;
 static GtkTreeModel* history_create_filter (GtkTreeModel*);
 static gboolean history_is_visible (GtkTreeModel*, GtkTreeIter*, gpointer);
 
-void history_search (SearchType search_type)
+void history_search (SearchType search_type UNUSED)
 {
-    if(history_filter != NULL) {
+    if (history_filter != NULL) {
         gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (history_filter));
     }
 }
@@ -64,58 +64,57 @@ void history_set_searchbar_widget (GtkWidget *searchbar)
     history_searchbar_widget = searchbar;
 }
 
-static GtkTreeModel* history_create_filter (GtkTreeModel* child) 
+static GtkTreeModel* history_create_filter (GtkTreeModel* child)
 {
     GtkTreeModel* ret;
 
-    DEBUG("Create Filter");
+    DEBUG ("Create Filter");
     ret = gtk_tree_model_filter_new (child, NULL);
     gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (ret), history_is_visible, NULL, NULL);
     return GTK_TREE_MODEL (ret);
 }
 
-static gboolean history_is_visible (GtkTreeModel* model, GtkTreeIter* iter, gpointer data UNUSED) 
+static gboolean history_is_visible (GtkTreeModel* model, GtkTreeIter* iter, gpointer data UNUSED)
 {
     GValue val, obj;
 
     callable_obj_t *history_entry = NULL;
     gchar* text = NULL;
 
-    gchar* search = (gchar*)gtk_entry_get_text(GTK_ENTRY(history_searchbar_widget));
+    gchar* search = (gchar*) gtk_entry_get_text (GTK_ENTRY (history_searchbar_widget));
+
+    memset (&val, 0, sizeof (val));
+    memset (&obj, 0, sizeof (obj));
 
-    memset (&val, 0, sizeof(val));
-    memset (&obj, 0, sizeof(obj));
-    
     // Fetch the call description
-    gtk_tree_model_get_value (GTK_TREE_MODEL(model), iter, 1, &val);
-    if(G_VALUE_HOLDS_STRING(&val)){
-        text = (gchar *)g_value_get_string(&val);
+    gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 1, &val);
+
+    if (G_VALUE_HOLDS_STRING (&val)) {
+        text = (gchar *) g_value_get_string (&val);
     }
-    
+
     // Fetch the call type
-    gtk_tree_model_get_value (GTK_TREE_MODEL(model), iter, 3, &obj);
-    if (G_VALUE_HOLDS_POINTER (&obj)){
+    gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 3, &obj);
+
+    if (G_VALUE_HOLDS_POINTER (&obj)) {
         history_entry = (gpointer) g_value_get_pointer (&obj);
     }
 
-    if(text != NULL)
-    {
-        if (history_entry)
-        {
+    if (text != NULL) {
+        if (history_entry) {
             // Filter according to the type of call
             // MISSED, INCOMING, OUTGOING, ALL
-            if ((int)get_current_history_search_type () == SEARCH_ALL)
-                return g_regex_match_simple(search, text, G_REGEX_CASELESS, 0);
-            else
-            {
+            if ( (int) get_current_history_search_type () == SEARCH_ALL)
+                return g_regex_match_simple (search, text, G_REGEX_CASELESS, 0);
+            else {
                 // We need a match on the history_state_t and the current search type
-                return (history_entry->_history_state + 1) == (int)get_current_history_search_type () &&  
-                    g_regex_match_simple(search, text, G_REGEX_CASELESS, 0);
+                return (history_entry->_history_state + 1) == (guint) get_current_history_search_type () &&
+                       g_regex_match_simple (search, text, G_REGEX_CASELESS, 0);
             }
         }
     }
 
-    // Clean up 
+    // Clean up
     g_value_unset (&val);
     g_value_unset (&obj);
 
diff --git a/sflphone-client-gnome/src/contacts/history.h b/sflphone-client-gnome/src/contacts/history.h
index f91393ccb1316d1da74bb171b7e8d7c2d5595ee8..a02e4857832d7f8c345beb7f7d4cba8d63bd0262 100644
--- a/sflphone-client-gnome/src/contacts/history.h
+++ b/sflphone-client-gnome/src/contacts/history.h
@@ -63,6 +63,6 @@ void history_reinit (calltab_t* history);
  * Set history search bar widget (needed for is_visible)
  */
 void
-history_set_searchbar_widget(GtkWidget *);
+history_set_searchbar_widget (GtkWidget *);
 
 #endif
diff --git a/sflphone-client-gnome/src/contacts/searchbar.c b/sflphone-client-gnome/src/contacts/searchbar.c
index 09e2da62e4f79badf94d55b9010b7aeed909b3cf..5363ad496ec9cd7f84fce42e296949fee0dfbd55 100644
--- a/sflphone-client-gnome/src/contacts/searchbar.c
+++ b/sflphone-client-gnome/src/contacts/searchbar.c
@@ -33,8 +33,15 @@
 
 #include <searchbar.h>
 #include <calltree.h>
+#include <contacts/addressbook/eds.h>
 
 GtkWidget * searchbox;
+GtkWidget * addressbookentry;
+
+GtkWidget * cbox;
+GtkListStore * liststore = NULL;
+
+gint cboxSignalId;
 
 static GtkWidget *menu = NULL;
 
@@ -45,79 +52,174 @@ GdkPixbuf *incoming_pixbuf = NULL;
 GdkPixbuf *outgoing_pixbuf = NULL;
 GdkPixbuf *missed_pixbuf = NULL;
 
-void searchbar_entry_changed (GtkEntry* entry, gchar* arg1 UNUSED, gpointer data UNUSED)
+
+
+void searchbar_addressbook_activated (GtkEntry *entry, gchar *arg1 UNUSED, gpointer data UNUSED)
 {
-    DEBUG("searchbar_entry_changed");
+    DEBUG ("Searchbar: Entry activated");
+
+    addressbook_search (entry);
+}
+
+void searchbar_entry_changed (GtkEntry* entry UNUSED, gchar* arg1 UNUSED, gpointer data UNUSED)
+{
+    DEBUG ("Searchbar: Entry changed");
 
     if (active_calltree == contacts) {
-        addressbook_search (entry);
-    }
-    else if (active_calltree == history) {
+        // Search made only when text entry is activated
+        // addressbook_search (entry);
+    } else if (active_calltree == history) {
         history_search (HistorySearchType);
     }
 }
 
-#if GTK_CHECK_VERSION(2,16,0)
+static void cbox_changed_cb (GtkWidget *widget, gpointer user_data UNUSED)
+{
+    gchar *name;
+
+    name = gtk_combo_box_get_active_text (GTK_COMBO_BOX (widget));
+
+    set_current_addressbook (name);
+
+    addressbook_search (GTK_ENTRY (addressbookentry));
+}
+
+void update_searchbar_addressbook_list()
+{
+    gint count;
+    GtkTreeIter iter, activeIter;
+    gchar *activeText;
+    GSList *book_list_iterator;
+    book_data_t *book_data;
+    GSList *books_data = addressbook_get_books_data();
+
+    // we must disconnect signal from teh cbox while updating its content
+    gtk_signal_disconnect (cbox, cboxSignalId);
+
+    // store the current active text
+    activeText = g_strdup (gtk_combo_box_get_active_text (GTK_COMBO_BOX (cbox)));
+
+    gtk_list_store_clear (liststore);
+
+    // Populate menu
+    count = 0;
+    gboolean activeIsSet = FALSE;
+
+    for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
+            = book_list_iterator->next) {
+        book_data = (book_data_t *) book_list_iterator->data;
+
+        if (book_data && book_data->active && activeText) {
+
+            gtk_list_store_append (liststore, &iter);
+            gtk_list_store_set (liststore, &iter, 0, book_data->name, -1);
+
+            if (strcmp (book_data->name, activeText) == 0) {
+                activeIter = iter;
+                activeIsSet = TRUE;
+            }
+
+            count++;
+        }
+    }
+
+    if (activeIsSet)
+        gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbox), &activeIter);
+    else
+        gtk_combo_box_set_active (GTK_COMBO_BOX (cbox), 0);
+
+    g_free (activeText);
+    cboxSignalId = gtk_signal_connect (GTK_OBJECT (cbox), "changed", G_CALLBACK (cbox_changed_cb), NULL);
+}
+
+
+static void select_search_type (GtkWidget *item, GtkEntry  *entry UNUSED)
+{
+    DEBUG ("Searchbar: %s", gtk_menu_item_get_label (GTK_MENU_ITEM (item)));
+
+
+
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_PRIMARY,
+                                     gtk_menu_item_get_label (GTK_MENU_ITEM (item)));
+
+
+    if (strcmp ("Search is", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0)
+        set_current_addressbook_test (E_BOOK_QUERY_IS);
+    else if (strcmp ("Search begins with", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0)
+        set_current_addressbook_test (E_BOOK_QUERY_BEGINS_WITH);
+    else if (strcmp ("Search contains", gtk_menu_item_get_label (GTK_MENU_ITEM (item))) == 0)
+        set_current_addressbook_test (E_BOOK_QUERY_CONTAINS);
 
-static void search_all (GtkWidget *item, GtkEntry  *entry)
+    addressbook_search (GTK_ENTRY (addressbookentry));
+
+
+}
+
+static void search_all (GtkWidget *item UNUSED, GtkEntry  *entry)
 {
     HistorySearchType = SEARCH_ALL;
 
     gtk_entry_set_icon_from_stock (entry, GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND);
     gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY,
-            g_markup_printf_escaped("%s\n%s", 
-                  _("Search all"),
-                  _("Click here to change the search type")));
+                                     g_markup_printf_escaped ("%s\n%s",
+                                                              _ ("Search all"),
+                                                              _ ("Click here to change the search type")));
 
     history_search (HistorySearchType);
-} 
+}
 
-static void search_by_missed (GtkWidget *item, GtkEntry  *entry)
+static void search_by_missed (GtkWidget *item UNUSED, GtkEntry  *entry)
 {
     HistorySearchType = SEARCH_MISSED;
 
     gtk_entry_set_icon_from_pixbuf (entry, GTK_ENTRY_ICON_PRIMARY, missed_pixbuf);
     gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY,
-            g_markup_printf_escaped("%s\n%s", 
-                  _("Search by missed call"),
-                  _("Click here to change the search type")));
+                                     g_markup_printf_escaped ("%s\n%s",
+                                                              _ ("Search by missed call"),
+                                                              _ ("Click here to change the search type")));
     history_search (HistorySearchType);
-} 
+}
 
-static void search_by_incoming (GtkWidget *item, GtkEntry *entry)
+static void search_by_incoming (GtkWidget *item UNUSED, GtkEntry *entry)
 {
     HistorySearchType = SEARCH_INCOMING;
 
     gtk_entry_set_icon_from_pixbuf (entry, GTK_ENTRY_ICON_PRIMARY, incoming_pixbuf);
     gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY,
-            g_markup_printf_escaped("%s\n%s", 
-                  _("Search by incoming call"),
-                  _("Click here to change the search type")));
+                                     g_markup_printf_escaped ("%s\n%s",
+                                                              _ ("Search by incoming call"),
+                                                              _ ("Click here to change the search type")));
     history_search (HistorySearchType);
-} 
+}
 
-static void search_by_outgoing (GtkWidget *item, GtkEntry  *entry)
+static void search_by_outgoing (GtkWidget *item UNUSED, GtkEntry  *entry)
 {
     HistorySearchType = SEARCH_OUTGOING;
 
     gtk_entry_set_icon_from_pixbuf (entry, GTK_ENTRY_ICON_PRIMARY, outgoing_pixbuf);
     gtk_entry_set_icon_tooltip_text (entry, GTK_ENTRY_ICON_PRIMARY,
-            g_markup_printf_escaped("%s\n%s", 
-                  _("Search by outgoing call"),
-                  _("Click here to change the search type")));
+                                     g_markup_printf_escaped ("%s\n%s",
+                                                              _ ("Search by outgoing call"),
+                                                              _ ("Click here to change the search type")));
     history_search (HistorySearchType);
-} 
+}
 
-static void icon_press_cb (GtkEntry *entry, gint position, GdkEventButton *event, gpointer data)
+static void icon_press_cb (GtkEntry *entry, gint position, GdkEventButton *event, gpointer data UNUSED)
 {
+    DEBUG ("Searchbar: Icon pressed");
+
     if (position == GTK_ENTRY_ICON_PRIMARY && active_calltree == history)
-        gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 
-                event->button, event->time);
-    else 
+        gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
+                        event->button, event->time);
+    else if (position == GTK_ENTRY_ICON_PRIMARY && active_calltree == contacts) {
+        GtkWidget *addrbook_menu = addressbook_menu_new();
+        gtk_menu_popup (GTK_MENU (addrbook_menu), NULL, NULL, NULL, NULL,
+                        event->button, event->time);
+    } else
         gtk_entry_set_text (entry, "");
 }
 
-static void text_changed_cb (GtkEntry *entry, GParamSpec *pspec)
+static void text_changed_cb (GtkEntry *entry, GParamSpec *pspec UNUSED)
 {
     gboolean has_text;
 
@@ -125,33 +227,58 @@ static void text_changed_cb (GtkEntry *entry, GParamSpec *pspec)
     gtk_entry_set_icon_sensitive (entry, GTK_ENTRY_ICON_SECONDARY, has_text);
 }
 
-#endif
+
+
+GtkWidget *addressbook_menu_new (void)
+{
+
+    GtkWidget *menu, *item;
+
+    // Create the menu
+    menu = gtk_menu_new ();
+    gtk_menu_attach_to_widget (GTK_MENU (menu), contacts->searchbar, NULL);
+
+    // Populate menu
+    item = gtk_menu_item_new_with_label ("Search is");
+    g_signal_connect (item, "activate", G_CALLBACK (select_search_type), searchbox);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+    item = gtk_menu_item_new_with_label ("Search begins with");
+    g_signal_connect (item, "activate", G_CALLBACK (select_search_type), searchbox);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+    item = gtk_menu_item_new_with_label ("Search contains");
+    g_signal_connect (item, "activate", G_CALLBACK (select_search_type), searchbox);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+
+    gtk_widget_show_all (menu);
+
+    return menu;
+}
 
 void
-focus_on_searchbar_out(){
-    DEBUG("set_focus_on_searchbar_out");
+focus_on_searchbar_out()
+{
+    DEBUG ("set_focus_on_searchbar_out");
     // gtk_widget_grab_focus(GTK_WIDGET(sw));
     focus_is_on_searchbar = FALSE;
 }
 
 void
-focus_on_searchbar_in(){
-    DEBUG("set_focus_on_searchbar_in");
+focus_on_searchbar_in()
+{
+    DEBUG ("set_focus_on_searchbar_in");
     // gtk_widget_grab_focus(GTK_WIDGET(sw));
     focus_is_on_searchbar = TRUE;
 }
 
-void searchbar_init(calltab_t *tab)
+void searchbar_init (calltab_t *tab)
 {
-    if (g_strcasecmp (tab->_name, CONTACTS) == 0) 
-    {
+    if (g_strcasecmp (tab->_name, CONTACTS) == 0) {
         addressbook_init();
-    }
-    else if (g_strcasecmp (tab->_name, HISTORY) == 0) 
-    {
+    } else if (g_strcasecmp (tab->_name, HISTORY) == 0) {
         history_init();
-    }
-    else
+    } else
         ERROR ("searchbar.c - searchbar_init should not happen within this widget\n");
 }
 
@@ -160,7 +287,7 @@ GtkWidget* history_searchbar_new (void)
 
     GtkWidget *ret, *item, *image;
 
-    ret = gtk_hbox_new(FALSE, 0);
+    ret = gtk_hbox_new (FALSE, 0);
 
 #if GTK_CHECK_VERSION(2,16,0)
 
@@ -213,79 +340,145 @@ GtkWidget* history_searchbar_new (void)
 
 #else
     searchbox = sexy_icon_entry_new();
-    image = gtk_image_new_from_stock( GTK_STOCK_FIND , GTK_ICON_SIZE_SMALL_TOOLBAR);
-    sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(searchbox), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
-    sexy_icon_entry_add_clear_button( SEXY_ICON_ENTRY(searchbox) );
+    image = gtk_image_new_from_stock (GTK_STOCK_FIND , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (searchbox), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
+    sexy_icon_entry_add_clear_button (SEXY_ICON_ENTRY (searchbox));
 #endif
 
-    g_signal_connect_after(GTK_ENTRY(searchbox), "changed", G_CALLBACK(searchbar_entry_changed), NULL);
+    g_signal_connect_after (GTK_ENTRY (searchbox), "changed", G_CALLBACK (searchbar_entry_changed), NULL);
     g_signal_connect_after (G_OBJECT (searchbox), "focus-in-event",
-            G_CALLBACK (focus_on_searchbar_in), NULL);
+                            G_CALLBACK (focus_on_searchbar_in), NULL);
     g_signal_connect_after (G_OBJECT (searchbox), "focus-out-event",
-            G_CALLBACK (focus_on_searchbar_out), NULL);
+                            G_CALLBACK (focus_on_searchbar_out), NULL);
 
-    gtk_box_pack_start(GTK_BOX(ret), searchbox, TRUE, TRUE, 0);
-    history_set_searchbar_widget(searchbox);
+    gtk_box_pack_start (GTK_BOX (ret), searchbox, TRUE, TRUE, 0);
+    history_set_searchbar_widget (searchbox);
 
     return ret;
 }
 
-GtkWidget* contacts_searchbar_new () {
+GtkWidget* contacts_searchbar_new ()
+{
 
     GtkWidget *ret;
+    GtkWidget *align;
+    int count, cbox_height, cbox_width;
+    GtkTreeIter iter, activeIter;
+    GtkCellRenderer *cell;
+
+    ret = gtk_hbox_new (FALSE, 0);
+
+    liststore = gtk_list_store_new (1,G_TYPE_STRING);
+
+    // Create combo box to select current addressbook
+
+    GSList *book_list_iterator;
+    book_data_t *book_data;
+    GSList *books_data = addressbook_get_books_data();
+
+    // Populate menu
+    count = 0;
+    gboolean activeIsSet = FALSE;
+
+    for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator
+            = book_list_iterator->next) {
+        book_data = (book_data_t *) book_list_iterator->data;
 
-    ret = gtk_hbox_new(FALSE, 0);
+        if (book_data->active) {
+
+            gtk_list_store_append (liststore, &iter);
+            gtk_list_store_set (liststore, &iter, 0, book_data->name, -1);
+
+            if (book_data->isdefault) {
+                activeIter = iter;
+                activeIsSet = TRUE;
+            }
+
+            count++;
+        }
+    }
+
+    cbox = gtk_combo_box_new_with_model ( (GtkTreeModel *) liststore);
+
+    if (activeIsSet)
+        gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbox), &activeIter);
+    else
+        gtk_combo_box_set_active (GTK_COMBO_BOX (cbox), 0);
+
+    align = gtk_alignment_new (0.0, 0.0, 1.0, 1.0);
+    gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 2, 6, 6);
+    gtk_container_add (GTK_CONTAINER (align), cbox);
+
+    gtk_widget_get_size_request (GTK_WIDGET (cbox), &cbox_width, &cbox_height);
+    gtk_widget_set_size_request (GTK_WIDGET (cbox), cbox_width, 26);
+
+    cboxSignalId = gtk_signal_connect (GTK_OBJECT (cbox), "changed", G_CALLBACK (cbox_changed_cb), NULL);
+
+    cell = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbox), cell, TRUE);
+    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbox), cell, "text", 0, NULL);
 
 #if GTK_CHECK_VERSION(2,16,0)
 
-    GdkPixbuf *pixbuf; 
+    // GdkPixbuf *pixbuf;
 
-    searchbox = gtk_entry_new();
-    gtk_entry_set_icon_from_stock (GTK_ENTRY (searchbox), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
-    pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/stock_person.svg", NULL);
-    gtk_entry_set_icon_from_pixbuf (GTK_ENTRY (searchbox), GTK_ENTRY_ICON_PRIMARY, pixbuf);
-    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (searchbox), GTK_ENTRY_ICON_PRIMARY,
-            "Search contacts\n"
-            "GNOME evolution backend");
+    gchar *tooltip_text = g_strdup ("Search is");
+
+    addressbookentry = gtk_entry_new();
+    gtk_entry_set_icon_from_stock (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
+    // pixbuf = gdk_pixbuf_new_from_file (ICONS_DIR "/stock_person.svg", NULL);
+    gtk_entry_set_icon_from_stock (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND);
+    gtk_entry_set_icon_tooltip_text (GTK_ENTRY (addressbookentry), GTK_ENTRY_ICON_PRIMARY,
+                                     tooltip_text);
 
 
     // Set the clean insensitive
-    text_changed_cb (GTK_ENTRY (searchbox), NULL);
+    text_changed_cb (GTK_ENTRY (addressbookentry), NULL);
 
-    g_signal_connect (searchbox, "notify::text", G_CALLBACK (text_changed_cb), NULL);
-    g_signal_connect (searchbox, "icon-press", G_CALLBACK (icon_press_cb), NULL);
+    g_signal_connect (addressbookentry, "notify::text", G_CALLBACK (text_changed_cb), NULL);
+    g_signal_connect (addressbookentry, "icon-press", G_CALLBACK (icon_press_cb), NULL);
 
 #else
 
     GtkWidget *image;
 
-    searchbox = sexy_icon_entry_new();
-    image = gtk_image_new_from_stock( GTK_STOCK_FIND , GTK_ICON_SIZE_SMALL_TOOLBAR);
-    sexy_icon_entry_set_icon( SEXY_ICON_ENTRY(searchbox), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE(image) );
-    sexy_icon_entry_add_clear_button( SEXY_ICON_ENTRY(searchbox) );
+    addressbookentry = sexy_icon_entry_new();
+    image = gtk_image_new_from_stock (GTK_STOCK_FIND , GTK_ICON_SIZE_SMALL_TOOLBAR);
+    sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (addressbookentry), SEXY_ICON_ENTRY_PRIMARY , GTK_IMAGE (image));
+    sexy_icon_entry_add_clear_button (SEXY_ICON_ENTRY (addressbookentry));
 #endif
 
-    g_signal_connect_after(GTK_ENTRY(searchbox), "changed", G_CALLBACK(searchbar_entry_changed), NULL);
+    gtk_entry_set_activates_default (GTK_ENTRY (addressbookentry), TRUE);
+    g_signal_connect_after (GTK_ENTRY (addressbookentry), "activate", G_CALLBACK (searchbar_addressbook_activated), NULL);
 
-    g_signal_connect_after (G_OBJECT (searchbox), "focus-in-event",
-            G_CALLBACK (focus_on_searchbar_in), NULL);
-    g_signal_connect_after (G_OBJECT (searchbox), "focus-out-event",
-            G_CALLBACK (focus_on_searchbar_out), NULL);
+    g_signal_connect_after (GTK_ENTRY (addressbookentry), "changed", G_CALLBACK (searchbar_entry_changed), NULL);
 
-    gtk_box_pack_start(GTK_BOX(ret), searchbox, TRUE, TRUE, 0);
+    g_signal_connect_after (G_OBJECT (addressbookentry), "focus-in-event",
+                            G_CALLBACK (focus_on_searchbar_in), NULL);
+    g_signal_connect_after (G_OBJECT (addressbookentry), "focus-out-event",
+                            G_CALLBACK (focus_on_searchbar_out), NULL);
+
+
+    gtk_box_pack_start (GTK_BOX (ret), align, TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (ret), addressbookentry, TRUE, TRUE, 0);
+
+    g_free (tooltip_text);
 
     return ret;
 }
 
-void activateWaitingLayer() {
-    gtk_widget_show(waitingLayer);
+void activateWaitingLayer()
+{
+    gtk_widget_show (waitingLayer);
 }
 
-void deactivateWaitingLayer() {
-    gtk_widget_hide(waitingLayer);
+void deactivateWaitingLayer()
+{
+    gtk_widget_hide (waitingLayer);
 }
 
 SearchType get_current_history_search_type (void)
 {
     return HistorySearchType;
 }
+
diff --git a/sflphone-client-gnome/src/contacts/searchbar.h b/sflphone-client-gnome/src/contacts/searchbar.h
index f1464cd554a2d1385fa5bcfafab0d3faf1d5cfd9..91f32d0f78df364481d5292a96c24af347cf1d48 100644
--- a/sflphone-client-gnome/src/contacts/searchbar.h
+++ b/sflphone-client-gnome/src/contacts/searchbar.h
@@ -69,7 +69,7 @@ SearchType get_current_history_search_type (void);
 /**
  * Initialize a specific search bar
  */
-void searchbar_init(calltab_t *);
+void searchbar_init (calltab_t *);
 
 /**
  * Activate a waiting layer during search
@@ -81,4 +81,11 @@ void activateWaitingLayer();
  */
 void deactivateWaitingLayer();
 
+/**
+ * Reload combo box to update list of active addressbook
+ */
+void update_searchbar_addressbook_list (void);
+
+GtkWidget *addressbook_menu_new (void);
+
 #endif
diff --git a/sflphone-client-gnome/src/dbus/callmanager-introspec.xml b/sflphone-client-gnome/src/dbus/callmanager-introspec.xml
index 534bde252d506dcda4b622b0667c7b86005d8510..b925e31017b2ccd885e31fc3aed94bdedf1bc869 100644
--- a/sflphone-client-gnome/src/dbus/callmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/callmanager-introspec.xml
@@ -4,148 +4,149 @@
 	<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 related actions.</p>
+			<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>
+			  <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>
+			  <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>
+			  <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>
+			  <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>
+			  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>
+			  <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>
+			  <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.
+			  Refuse an incoming call.
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The callID.
-				</tp:docstring>
+			  <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.
+			  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>
+			  <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".
+			  Hangup a call in state "CURRENT" or "HOLD".
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The callID.
-				</tp:docstring>
+			  <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.
+			  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>
+			  <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.
+			  Place a call on hold.
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The callID.
-				</tp:docstring>
+			  <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.
+			  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>
+			  <tp:docstring>
+			    The callID.
+			  </tp:docstring>
 			</arg>
 		</method>
 
 		<method name="transfert" tp:name-for-bindings="transfert">
 			<tp:docstring>
-				Transfer a call to given phone number.
+			  Transfer a call to given phone number.
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The callID.
-				</tp:docstring>
+			  <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>
+			  <tp:docstring>
+			    The phone number to transfer the call to.
+			  </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.
+			  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>
+			  <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..
+			  Start audio stream and play tone..
 			</tp:docstring>
 			<arg type="i" name="start" direction="in"/>
 			<arg type="i" name="type" direction="in"/>
@@ -153,43 +154,43 @@
 
 		<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>
+			  <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>
+			  <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>
+			  <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>
+			  <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>
+			  <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>
+			  <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> 
+			  <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"/>
@@ -198,43 +199,43 @@
 		<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> 
+			  <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>
+			  <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>
+			  <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>
+			  <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>
+			  <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.
+			  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>
+			  <tp:docstring>
+			    The call ID
+			  </tp:docstring>
 			</arg>
 		</method>
 
@@ -250,118 +251,136 @@
 		<method name="getConferenceDetails" tp:name-for-bindings="getConferenceDetails">
 			<tp:added version="0.9.7"/>
 			<tp:docstring>
-				Returns a hashtable containing conference details.
+			  Returns a hashtable containing conference details.
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The call ID
-				</tp:docstring>
+			  <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.
-				</tp:docstring>
+			  <tp:docstring>
+			    A map containing the ID of the conferences
+			    and their states:
+			    <ul>
+			      <li>ACTIVE_ATACHED</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.
+			  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>
+			  <tp:docstring>
+			    The list of conferences.
+			  </tp:docstring>
 			</arg>
 		</method>
 
 		<method name="setRecording" tp:name-for-bindings="setRecording">
 			<tp:docstring>
-				Start recording a call.
+			  Start recording a call.
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The ID of the call to record.
-				</tp:docstring>
+			  <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.
+			  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>
+			  <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>
+			  <tp:docstring>
+			    Returns true is the call is being recorded. False otherwise.
+			  </tp:docstring>
 			</arg>
 		</method>
 
 		<method name="getCallDetails" tp:name-for-bindings="getCallDetails">
 			<tp:docstring>
-				Get all the details about a specific call.
+			  Get all the details about a specific call.
 			</tp:docstring>
 			<arg type="s" name="callID" direction="in">
-				<tp:docstring>
-					The call ID.
-				</tp:docstring>
+			  <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>
+			  <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> 
+			  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>
+			  <tp:docstring>
+			    A list of call IDs.
+			  </tp:docstring>
 			</arg>
 		</method>
 
 		<method name="getCurrentCallID" tp:name-for-bindings="getCurrentCallID">
 			<tp:docstring>
-				Get the CURRENT call ID.
+			  Unused
 			</tp:docstring>
-			@param[out] output callID
 			<arg type="s" name="callID" direction="out">
-				<tp:docstring>
-					The current call ID.	
-				</tp:docstring>
+			  <tp:docstring>	
+			  </tp:docstring>
 			</arg>
 		</method>
 
 		<method name="getCurrentCodecName" tp:name-for-bindings="getCurrentCodecName">
 			<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="currentSelectedCodec" tp:name-for-bindings="currentSelectedCodec">
 			<tp:docstring>
+			  Unused
 			</tp:docstring>
 			<arg type="s" name="callID" />
 			<arg type="s" name="codecName"/>
@@ -369,228 +388,262 @@
 
 		<signal name="incomingCall" tp:name-for-bindings="incomingCall">
 			<tp:docstring>
-				<p>Notify an incoming call.</p>
-				<p>The callID generated by the daemon and must be stored by the clients in order to address other action for
-					this call.</p>
-				<tp:rationale>The client must subscribe to this signal to handle incoming calls.</tp:rationale>
+			  <p>Notify an incoming call.</p>
+			  <p>The callID generated by the daemon and must be stored by the clients in order to address other action for
+			    this call.</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>
+			  <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>
+			  <tp:docstring>
+			    A new call ID.
+			  </tp:docstring>
 			</arg>
 			<arg type="s" name="from">
-				<tp:docstring>
-					The caller phone number.
-				</tp:docstring>
+			  <tp:docstring>
+			    The caller phone number.
+			  </tp:docstring>
 			</arg>
 		</signal>
 
 		<signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
 			<tp:docstring>
-				Unused
+				Notify clients that a new text message has been received. 
 			</tp:docstring>
-			<arg type="s" name="accountID" />
+			<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>
+			  <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>
+			  <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>
+			  <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
+			  Notify of a change in the conferences state
 			</tp:docstring>
 			<arg type="s" name="confID">
-				<tp:docstring>
-					The conference ID.
-				</tp:docstring>
+			  <tp:docstring>
+			    The conference ID.
+			  </tp:docstring>
 			</arg>
 			<arg type="s" name="state">
-				<tp:docstring>
-					The acceptable states are: 
-					<ul>
-						<li>ACTIVE_ATTACHED</li>
-						<li>ACTIVE_DETACHED</li>
-						<li>HOLD</li>
-					</ul>
-				</tp:docstring>
+			  <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.
+			  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>
+			  <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>
+			  <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.
+			  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>
+			  <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.
+			  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>
+			  <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.
+			  Hold on every calls participating to this conference.
 			</tp:docstring>
 			<arg type="s" name="confID" direction="in">
-				<tp:docstring>
-					The conference ID.
-				</tp:docstring>
+			  <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.
+			  Hold off every calls participating to this conference.
 			</tp:docstring>
 			<arg type="s" name="confID" direction="in">
-				<tp:docstring>
-					The conference ID.
-				</tp:docstring>
+			  <tp:docstring>
+			    The conference ID.
+			  </tp:docstring>
 			</arg>
 		</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"  />
-			<arg type="i" name="code"  />            
+			  <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>The state of an account has changed.</p>
-				<p>The clients have to subscribe to this signal to use accounts.</p>
+				<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>
+			  <tp:docstring>
+			    The account ID
+			  </tp:docstring>
 			</arg>
 			<arg type="s" name="state">
-				<tp:docstring>
-					The new registration state
-				</tp:docstring>
+			  <tp:docstring>
+			    Description string
+			  </tp:docstring>
 			</arg>
 			<arg type="i" name="code">            
-				<tp:docstring>
-					The SIP or IAX2 code
-				</tp:docstring>
+			  <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.
+			  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>
+			  <tp:docstring>
+			    The account ID.
+			  </tp:docstring>
 			</arg>
 			<arg type="i" name="count">
-				<tp:docstring>
-					The number of waiting messages.
-				</tp:docstring>
+			  <tp:docstring>
+			    The number of waiting messages.
+			  </tp:docstring>
 			</arg>
 		</signal>
 
 		<signal name="volumeChanged" tp:name-for-bindings="volumeChanged">
-			<tp:docstring>
-				Notify the clients of a volume level change.
+		        <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>
+			  <tp:docstring>
+			    The device: mic or speaker	
+			  </tp:docstring>
 			</arg>
 			<arg type="d" name="value">
-				<tp:docstring>
-					The new volume value	
-				</tp:docstring>
+			  <tp:docstring>
+			    The new volume value	
+			  </tp:docstring>
 			</arg>
 		</signal>
 
 		<signal name="transferSucceded" tp:name-for-bindings="transferSucceded">
 			<tp:docstring>
-				The transfer has been successfully processed.
+			  <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>
-				The transfer operation has failed.
+			  <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>
@@ -598,6 +651,9 @@
 		<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>
diff --git a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
old mode 100644
new mode 100755
index 8d8dcf9468526693cbaa6b74e668247fb0485919..f051f3b44bfb685a4408e18bf578024f49831f75
--- a/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-client-gnome/src/dbus/configurationmanager-introspec.xml
@@ -101,19 +101,6 @@
 			</arg>
 		</method>
 
-		<method name="setNumberOfCredential" tp:name-for-bindings="setNumberOfCredential">
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-			<arg type="i" name="number" direction="in">
-				<tp:docstring>
-				</tp:docstring>
-			</arg>
-		</method>
-
 		<method name="deleteAllCredential" tp:name-for-bindings="deleteAllCredential">
 			<tp:docstring>
 			</tp:docstring>
@@ -331,6 +318,7 @@
 	   <method name="isRingtoneEnabled" tp:name-for-bindings="isRingtoneEnabled">
 		   <tp:docstring>
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in" />
 		   <arg type="i" name="bool" direction="out">
 			   <tp:docstring>
 			   </tp:docstring>
@@ -340,11 +328,13 @@
 	   <method name="ringtoneEnabled" tp:name-for-bindings="ringtoneEnabled">
 		   <tp:docstring>
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in"/>
 	   </method>
 
 	   <method name="getRingtoneChoice" tp:name-for-bindings="getRingtoneChoice">
 		   <tp:docstring>
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in"/>
 		   <arg type="s" name="tone" direction="out">
 			   <tp:docstring>
 			   </tp:docstring>
@@ -354,6 +344,7 @@
 	   <method name="setRingtoneChoice" tp:name-for-bindings="setRingtoneChoice">
 		   <tp:docstring>
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in"/>
 		   <arg type="s" name="tone" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
@@ -455,7 +446,7 @@
 
 	   <!-- Audio devices methods -->
 
-	   <method name="getInputAudioPluginList" tp:name-for-bindings="getInputAudioPluginList">
+	   <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
 		   <tp:docstring>
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
@@ -465,50 +456,49 @@
 		   </arg>
 	   </method>
 
-	   <method name="getOutputAudioPluginList" tp:name-for-bindings="getOutputAudioPluginList">
+	   <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
+		   <arg type="s" name="audioPlugin" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="setInputAudioPlugin" tp:name-for-bindings="setInputAudioPlugin">
+	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="setOutputAudioPlugin" tp:name-for-bindings="setOutputAudioPlugin">
+	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
+		   <arg type="i" name="index" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+	   <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
+		   <arg type="i" name="index" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-		   <tp:docstring>
+	   <method name="setAudioRingtoneDevice" tp:name-for-binding="setAudioRingtoneDevice">
+	           <tp:docstring>
 		   </tp:docstring>
 		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
+		     <tp:docstring>
+		     </tp:docstring>
 		   </arg>
 	   </method>
 
@@ -522,14 +512,6 @@
 		   </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="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
 		   <tp:docstring>
@@ -563,6 +545,20 @@
 		   </arg>
 	   </method>
 
+           <method name="getNoiseSuppressState" tp:name-for-bindings="getNoiseSuppressState">
+	           <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="state" direction="out">
+		           <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setNoiseSuppressState" tp:name-for-binding="setNoiseSuppressState">
+	           <arg type="s" name="state" direction="in">
+	           </arg>
+	   </method>
+
 	   <!--    General Settings Panel         -->
 
 	   <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing">
@@ -592,20 +588,6 @@
 		   </arg>
 	   </method>
 
-	   <method name="setNotify" tp:name-for-bindings="setNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getNotify" tp:name-for-bindings="getNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="level" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
 	   <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
 		   <tp:docstring>
 		   </tp:docstring>
@@ -620,69 +602,6 @@
 		   </arg>
 	   </method>
 
-	   <method name="getDialpad" tp:name-for-bindings="getDialpad">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setDialpad" tp:name-for-bindings="setDialpad">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="display" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getSearchbar" tp:name-for-bindings="getSearchbar">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setSearchbar" tp:name-for-bindings="setSearchbar">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="setHistoryEnabled" tp:name-for-bindings="setHistoryEnabled">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getHistoryEnabled" tp:name-for-bindings="getHistoryEnabled">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getVolumeControls" tp:name-for-bindings="getVolumeControls">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setVolumeControls" tp:name-for-bindings="setVolumeControls">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="display" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
 
 	   <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
 		   <tp:docstring>
@@ -702,125 +621,6 @@
 		   </arg>
 	   </method>
 
-	   <method name="startHidden" tp:name-for-bindings="startHidden">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="isStartHidden" tp:name-for-bindings="isStartHidden">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="popupMode" tp:name-for-bindings="popupMode">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="switchPopupMode" tp:name-for-bindings="switchPopupMode">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getWindowWidth" tp:name-for-bindings="getWindowWidth">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="width" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getWindowHeight" tp:name-for-bindings="getWindowHeight">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="height" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowWidth" tp:name-for-bindings="setWindowWidth">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="width" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowHeight" tp:name-for-bindings="setWindowHeight">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="height" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getWindowPositionX" tp:name-for-bindings="getWindowPositionX">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="posX" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowPositionX" tp:name-for-bindings="setWindowPositionX">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="posX" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getWindowPositionY" tp:name-for-bindings="getWindowPositionY">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="posY" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowPositionY" tp:name-for-bindings="setWindowPositionY">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="posY" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="enableStatusIcon" tp:name-for-bindings="enableStatusIcon">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="value" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="isStatusIconEnabled" tp:name-for-bindings="isStatusIconEnabled">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="value" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-
 	   <!-- Addressbook configuration -->
 	   <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
 		   <tp:docstring>
@@ -938,10 +738,6 @@
 	   <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="s" name="accountID" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
 		   <arg type="a{ss}" name="details" direction="out">
 			   <tp:docstring>
@@ -953,10 +749,6 @@
 		   <tp:docstring>
 		   </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:docstring>
 			   </tp:docstring>
@@ -997,20 +789,20 @@
 	   </method>
 
 	   <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
-                   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+                   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="a{si}" name="shortcutsMap" direction="out">
+		   <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="MapStringInt"/>
+                   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="a{si}" name="shortcutsMap" direction="in">
+		   <arg type="a{ss}" name="shortcutsMap" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
diff --git a/sflphone-client-gnome/src/dbus/dbus.c b/sflphone-client-gnome/src/dbus/dbus.c
index b8c37a8fce6b2df850543205b96448f118c126ea..b19ffc2222121454eb72aaf726a7107edea9242e 100644
--- a/sflphone-client-gnome/src/dbus/dbus.c
+++ b/sflphone-client-gnome/src/dbus/dbus.c
@@ -47,6 +47,10 @@
 #include <actions.h>
 #include <string.h>
 
+#include <widget/imwidget.h>
+
+#include <eel-gconf-extensions.h>
+
 #define DEFAULT_DBUS_TIMEOUT 30000
 
 DBusGConnection * connection;
@@ -55,1167 +59,1139 @@ DBusGProxy * configurationManagerProxy;
 DBusGProxy * instanceProxy;
 
 static void
-incoming_call_cb(DBusGProxy *proxy UNUSED, const gchar* accountID,
-    const gchar* callID, const gchar* from, void * foo  UNUSED )
+incoming_call_cb (DBusGProxy *proxy UNUSED, const gchar* accountID,
+                  const gchar* callID, const gchar* from, void * foo  UNUSED)
 {
-  DEBUG("Incoming call (%s) from %s", callID, from);
+    DEBUG ("Incoming call (%s) from %s", callID, from);
 
-  callable_obj_t * c;
-  gchar *peer_name, *peer_number;
-  // We receive the from field under a formatted way. We want to extract the number and the name of the caller
-  peer_name = call_get_peer_name(from);
-  peer_number = call_get_peer_number(from);
+    callable_obj_t * c;
+    gchar *peer_name, *peer_number;
+    // We receive the from field under a formatted way. We want to extract the number and the name of the caller
+    peer_name = call_get_peer_name (from);
+    peer_number = call_get_peer_number (from);
 
-  DEBUG("    peer name: %s", peer_name);
-  DEBUG("    peer number: %s", peer_number);
+    DEBUG ("    peer name: %s", peer_name);
+    DEBUG ("    peer number: %s", peer_number);
 
-  create_new_call(CALL, CALL_STATE_INCOMING, g_strdup(callID), g_strdup(
-      accountID), peer_name, peer_number, &c);
+    create_new_call (CALL, CALL_STATE_INCOMING, g_strdup (callID), g_strdup (
+                         accountID), peer_name, peer_number, &c);
 #if GTK_CHECK_VERSION(2,10,0)
-  status_tray_icon_blink(TRUE);
-  popup_main_window();
+    status_tray_icon_blink (TRUE);
+    popup_main_window();
 #endif
 
-  set_timestamp(&c->_time_start);
-  notify_incoming_call(c);
-  sflphone_incoming_call(c);
+    set_timestamp (&c->_time_start);
+    notify_incoming_call (c);
+    sflphone_incoming_call (c);
 }
 
 static void
-zrtp_negotiation_failed_cb(DBusGProxy *proxy UNUSED, const gchar* callID,
-    const gchar* reason, const gchar* severity, void * foo  UNUSED )
+zrtp_negotiation_failed_cb (DBusGProxy *proxy UNUSED, const gchar* callID,
+                            const gchar* reason, const gchar* severity, void * foo  UNUSED)
 {
-  DEBUG ("Zrtp negotiation failed.");
-  main_window_zrtp_negotiation_failed(callID, reason, severity);
-  callable_obj_t * c = NULL;
-  c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      notify_zrtp_negotiation_failed(c);
+    DEBUG ("Zrtp negotiation failed.");
+    main_window_zrtp_negotiation_failed (callID, reason, severity);
+    callable_obj_t * c = NULL;
+    c = calllist_get (current_calls, callID);
+
+    if (c) {
+        notify_zrtp_negotiation_failed (c);
     }
 }
 
 static void
-curent_selected_codec(DBusGProxy *proxy UNUSED, const gchar* callID,
-    const gchar* codecName, void * foo  UNUSED )
+curent_selected_codec (DBusGProxy *proxy UNUSED, const gchar* callID UNUSED,
+                       const gchar* codecName UNUSED, void * foo  UNUSED)
 {
-  // DEBUG ("%s codec decided for call %s",codecName,callID);
-  // sflphone_display_selected_codec (codecName);
 }
 
 static void
-volume_changed_cb(DBusGProxy *proxy UNUSED, const gchar* device, const gdouble value,
-    void * foo  UNUSED )
+volume_changed_cb (DBusGProxy *proxy UNUSED, const gchar* device, const gdouble value,
+                   void * foo  UNUSED)
 {
-  DEBUG ("Volume of %s changed to %f.",device, value);
-  set_slider(device, value);
+    DEBUG ("Volume of %s changed to %f.",device, value);
+    set_slider (device, value);
 }
 
 static void
-voice_mail_cb(DBusGProxy *proxy UNUSED, const gchar* accountID, const guint nb,
-    void * foo  UNUSED )
+voice_mail_cb (DBusGProxy *proxy UNUSED, const gchar* accountID, const guint nb,
+               void * foo  UNUSED)
 {
-  DEBUG ("%d Voice mail waiting!",nb);
-  sflphone_notify_voice_mail(accountID, nb);
+    DEBUG ("%d Voice mail waiting!",nb);
+    sflphone_notify_voice_mail (accountID, nb);
 }
 
 static void
-incoming_message_cb(DBusGProxy *proxy UNUSED, const gchar* accountID UNUSED,
-    const gchar* msg, void * foo  UNUSED )
+incoming_message_cb (DBusGProxy *proxy UNUSED, const gchar* callID UNUSED, const gchar *from, const gchar* msg, void * foo  UNUSED)
 {
-  DEBUG ("Message %s!",msg);
+    DEBUG ("Message \"%s\" from %s!", msg, from);
+
+    callable_obj_t *call = NULL;
+    conference_obj_t *conf = NULL;
+
+    // do not display message if instant messaging is disabled
+    gboolean instant_messaging_enabled = TRUE;
+
+    if (eel_gconf_key_exists (INSTANT_MESSAGING_ENABLED))
+        instant_messaging_enabled = eel_gconf_get_integer (INSTANT_MESSAGING_ENABLED);
 
+    if (!instant_messaging_enabled)
+        return;
+
+    // Get the call information. (if this call exist)
+    call = calllist_get (current_calls, callID);
+
+    // Get the conference information (if this conference exist)
+    conf = conferencelist_get (callID);
+
+    /* First check if the call is valid */
+    if (call) {
+
+        /* Make the instant messaging main window pops, add messages only if the main window exist.
+           Elsewhere the message is displayed asynchronously*/
+        if (im_widget_display ( (IMWidget **) (&call->_im_widget), msg, call->_callID, from))
+            im_widget_add_message (IM_WIDGET (call->_im_widget), from, msg, 0);
+    } else if (conf) {
+        /* Make the instant messaging main window pops, add messages only if the main window exist.
+           Elsewhere the message is displayed asynchronously*/
+        if (im_widget_display ( (IMWidget **) (&conf->_im_widget), msg, conf->_confID, from))
+            im_widget_add_message (IM_WIDGET (conf->_im_widget), from, msg, 0);
+    } else {
+        ERROR ("Message received, but no recipient found");
+    }
 }
 
 static void
-call_state_cb(DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* state,
-    void * foo  UNUSED )
-{
-  DEBUG ("Call %s state %s",callID, state);
-  callable_obj_t * c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      if (strcmp(state, "HUNGUP") == 0)
-        {
-          if (c->_state == CALL_STATE_CURRENT)
-            {
-              // peer hung up, the conversation was established, so _stop has been initialized with the current time value
-              DEBUG("call state current");
-              set_timestamp(&c->_time_stop);
-              calltree_update_call(history, c, NULL);
+call_state_cb (DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* state,
+               void * foo  UNUSED)
+{
+    DEBUG ("Call %s state %s",callID, state);
+    callable_obj_t * c = calllist_get (current_calls, callID);
+
+    if (c) {
+        if (strcmp (state, "HUNGUP") == 0) {
+            if (c->_state == CALL_STATE_CURRENT) {
+                // peer hung up, the conversation was established, so _stop has been initialized with the current time value
+                DEBUG ("call state current");
+                set_timestamp (&c->_time_stop);
+                calltree_update_call (history, c, NULL);
             }
-          stop_notification();
-          sflphone_hung_up(c);
-          calltree_update_call(history, c, NULL );
-          status_bar_display_account();
-        }
-      else if (strcmp(state, "UNHOLD_CURRENT") == 0)
-        {
-          sflphone_current(c);
-        }
-      else if (strcmp(state, "UNHOLD_RECORD") == 0)
-        {
-          sflphone_record(c);
-        }
-      else if (strcmp(state, "HOLD") == 0)
-        {
-          sflphone_hold(c);
-        }
-      else if (strcmp(state, "RINGING") == 0)
-        {
-          sflphone_ringing(c);
-        }
-      else if (strcmp(state, "CURRENT") == 0)
-        {
-          sflphone_current(c);
-        }
-      else if (strcmp(state, "FAILURE") == 0)
-        {
-          sflphone_fail(c);
-        }
-      else if (strcmp(state, "BUSY") == 0)
-        {
-          sflphone_busy(c);
+
+            stop_notification();
+            calltree_update_call (history, c, NULL);
+            status_bar_display_account();
+            sflphone_hung_up (c);
+        } else if (strcmp (state, "UNHOLD_CURRENT") == 0) {
+            sflphone_current (c);
+        } else if (strcmp (state, "UNHOLD_RECORD") == 0) {
+            sflphone_record (c);
+        } else if (strcmp (state, "HOLD") == 0) {
+            sflphone_hold (c);
+        } else if (strcmp (state, "RINGING") == 0) {
+            sflphone_ringing (c);
+        } else if (strcmp (state, "CURRENT") == 0) {
+            sflphone_current (c);
+        } else if (strcmp (state, "FAILURE") == 0) {
+            sflphone_fail (c);
+        } else if (strcmp (state, "BUSY") == 0) {
+            sflphone_busy (c);
         }
-    }
-  else
-    {
-      // The callID is unknow, threat it like a new call
-      // If it were an incoming call, we won't be here
-      // It means that a new call has been initiated with an other client (cli for instance)
-      if (strcmp(state, "RINGING") == 0 || strcmp(state, "CURRENT") == 0)
-        {
-          callable_obj_t *new_call;
-          GHashTable *call_details;
-          gchar *type;
-
-          DEBUG ("New ringing call! accountID: %s", callID);
-
-          // We fetch the details associated to the specified call
-          call_details = dbus_get_call_details(callID);
-          create_new_call_from_details(callID, call_details, &new_call);
-
-          // Restore the callID to be synchronous with the daemon
-          new_call->_callID = g_strdup(callID);
-          type = g_hash_table_lookup(call_details, "CALL_TYPE");
-
-          if (g_strcasecmp(type, "0") == 0)
-            {
-              // DEBUG("incoming\n");
-              new_call->_history_state = INCOMING;
-            }
-          else
-            {
-              // DEBUG("outgoing\n");
-              new_call->_history_state = OUTGOING;
+    } else {
+        // The callID is unknow, threat it like a new call
+        // If it were an incoming call, we won't be here
+        // It means that a new call has been initiated with an other client (cli for instance)
+        if (strcmp (state, "RINGING") == 0 || strcmp (state, "CURRENT") == 0) {
+            callable_obj_t *new_call;
+            GHashTable *call_details;
+            gchar *type;
+
+            DEBUG ("New ringing call! accountID: %s", callID);
+
+            // We fetch the details associated to the specified call
+            call_details = dbus_get_call_details (callID);
+            create_new_call_from_details (callID, call_details, &new_call);
+
+            // Restore the callID to be synchronous with the daemon
+            new_call->_callID = g_strdup (callID);
+            type = g_hash_table_lookup (call_details, "CALL_TYPE");
+
+            if (g_strcasecmp (type, "0") == 0) {
+                // DEBUG("incoming\n");
+                new_call->_history_state = INCOMING;
+            } else {
+                // DEBUG("outgoing\n");
+                new_call->_history_state = OUTGOING;
             }
 
-          calllist_add(current_calls, new_call);
-          calllist_add(history, new_call);
-          calltree_add_call(current_calls, new_call, NULL);
-          update_actions();
-          calltree_display(current_calls);
+            calllist_add (current_calls, new_call);
+            calllist_add (history, new_call);
+            calltree_add_call (current_calls, new_call, NULL);
+            update_actions();
+            calltree_display (current_calls);
 
-          //sflphone_incoming_call (new_call);
+            //sflphone_incoming_call (new_call);
         }
     }
 }
 
 static void
-conference_changed_cb(DBusGProxy *proxy UNUSED, const gchar* confID,
-    const gchar* state, void * foo  UNUSED )
+conference_changed_cb (DBusGProxy *proxy UNUSED, const gchar* confID,
+                       const gchar* state, void * foo  UNUSED)
 {
 
-  // sflphone_display_transfer_status("Transfer successfull");
-  conference_obj_t* changed_conf = conferencelist_get(confID);
-  gchar** participants;
-  gchar** part;
+    gchar** part;
+    callable_obj_t *call;
+    gchar* call_id;
 
-  DEBUG("conference new state %s\n", state);
+    // sflphone_display_transfer_status("Transfer successfull");
+    conference_obj_t* changed_conf = conferencelist_get (confID);
+    gchar** old_participants, new_participants;
 
-  if (changed_conf)
-    {
-      // remove old conference from calltree
-      calltree_remove_conference(current_calls, changed_conf, NULL);
+    DEBUG ("conference new state %s\n", state);
 
-      // update conference state
-      if (strcmp(state, "ACTIVE_ATACHED") == 0)
-        {
-          changed_conf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-        }
-      else if (strcmp(state, "ACTIVE_DETACHED") == 0)
-        {
-          changed_conf->_state = CONFERENCE_STATE_ACTIVE_DETACHED;
-        }
-      else if (strcmp(state, "HOLD") == 0)
-        {
-          changed_conf->_state = CONFERENCE_STATE_HOLD;
+    if (changed_conf) {
+        // remove old conference from calltree
+        calltree_remove_conference (current_calls, changed_conf, NULL);
+
+        // update conference state
+        if (strcmp (state, "ACTIVE_ATACHED") == 0) {
+            changed_conf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+        } else if (strcmp (state, "ACTIVE_DETACHED") == 0) {
+            changed_conf->_state = CONFERENCE_STATE_ACTIVE_DETACHED;
+        } else if (strcmp (state, "HOLD") == 0) {
+            changed_conf->_state = CONFERENCE_STATE_HOLD;
+        } else {
+            DEBUG ("Error: conference state not recognized");
         }
-      else
-        {
-          DEBUG("Error: conference state not recognized");
+
+        // reactivate instant messaging window for these calls
+        old_participants = (gchar**) changed_conf->participant_list;
+
+        for (part = old_participants; *part; part++) {
+            call_id = (gchar*) (*part);
+            call = calllist_get (current_calls, call_id);
+
+            if (call && call->_im_widget)
+                im_widget_update_state (IM_WIDGET (call->_im_widget), TRUE);
         }
 
-      participants = (gchar**) dbus_get_participant_list(changed_conf->_confID);
+        new_participants = (gchar **) dbus_get_participant_list (changed_conf->_confID);
+
+        // update conferece participants
+        conference_participant_list_update (new_participants, changed_conf);
 
-      // update conferece participants
-      conference_participant_list_update(participants, changed_conf);
+        // deactivate instant messaging window for new participants
+        new_participants = (gchar**) changed_conf->participant_list;
 
-      // add new conference to calltree
-      calltree_add_conference(current_calls, changed_conf);
+        for (part = new_participants; *part; part++) {
+            call_id = (gchar*) (*part);
+            call = calllist_get (current_calls, call_id);
+
+            if (call && call->_im_widget)
+                im_widget_update_state (IM_WIDGET (call->_im_widget), FALSE);
+        }
+
+        // add new conference to calltree
+        calltree_add_conference (current_calls, changed_conf);
     }
 }
 
 static void
-conference_created_cb(DBusGProxy *proxy UNUSED, const gchar* confID, void * foo  UNUSED )
+conference_created_cb (DBusGProxy *proxy UNUSED, const gchar* confID, void * foo  UNUSED)
 {
-  DEBUG ("DBUS: Conference %s added", confID);
+    DEBUG ("DBUS: Conference %s added", confID);
 
-  conference_obj_t* new_conf;
-  callable_obj_t* call;
-  gchar* call_id;
-  gchar** participants;
-  gchar** part;
+    conference_obj_t* new_conf;
+    callable_obj_t* call;
+    gchar* call_id;
+    gchar** participants;
+    gchar** part;
 
-  create_new_conference(CONFERENCE_STATE_ACTIVE_ATACHED, confID, &new_conf);
+    create_new_conference (CONFERENCE_STATE_ACTIVE_ATACHED, confID, &new_conf);
 
-  participants = (gchar**) dbus_get_participant_list(new_conf->_confID);
+    participants = (gchar**) dbus_get_participant_list (new_conf->_confID);
 
-  // Update conference list
-  conference_participant_list_update(participants, new_conf);
+    // Update conference list
+    conference_participant_list_update (participants, new_conf);
 
-  // Add conference ID in in each calls
-  for (part = participants; *part; part++) {
-      call_id = (gchar*) (*part);
-      call = calllist_get(current_calls, call_id);
-      call->_confID = g_strdup(confID);
-  }
+    // Add conference ID in in each calls
+    for (part = participants; *part; part++) {
+        call_id = (gchar*) (*part);
+        call = calllist_get (current_calls, call_id);
 
-  conferencelist_add(new_conf);
-  calltree_add_conference(current_calls, new_conf);
+        // if a text widget is already created, disable it, use conference widget instead
+        if (call->_im_widget)
+            im_widget_update_state (IM_WIDGET (call->_im_widget), FALSE);
+
+        call->_confID = g_strdup (confID);
+    }
+
+    conferencelist_add (new_conf);
+    calltree_add_conference (current_calls, new_conf);
 }
 
 static void
-conference_removed_cb(DBusGProxy *proxy UNUSED, const gchar* confID, void * foo  UNUSED )
+conference_removed_cb (DBusGProxy *proxy UNUSED, const gchar* confID, void * foo  UNUSED)
 {
-  DEBUG ("DBUS: Conference removed %s", confID);
+    DEBUG ("DBUS: Conference removed %s", confID);
+
+    conference_obj_t * c = conferencelist_get (confID);
+    calltree_remove_conference (current_calls, c, NULL);
+
+    GSList *participant = c->participant_list;
+    callable_obj_t *call;
+
+    // deactivate instant messaging window for this conference
+    if (c->_im_widget)
+        im_widget_update_state (IM_WIDGET (c->_im_widget), FALSE);
+
+    // remove all participant for this conference
+    while (participant) {
 
-  conference_obj_t * c = conferencelist_get(confID);
-  calltree_remove_conference(current_calls, c, NULL);
+        call = calllist_get (current_calls, (const gchar *) (participant->data));
+
+        if (call) {
+            DEBUG ("DBUS: Remove participant %s", call->_callID);
+
+            if (call->_confID) {
+                g_free (call->_confID);
+                call->_confID = NULL;
+            }
+
+            // if an instant messaging was previously disabled, enabled it
+            if (call->_im_widget)
+                im_widget_update_state (IM_WIDGET (call->_im_widget), TRUE);
+        }
 
-  GSList *participant = c->participant_list;
-  callable_obj_t *call;
-  while(participant) {
+        participant = conference_next_participant (participant);
+    }
 
-      call = calllist_get(current_calls, (const gchar *)(participant->data));
-      if(call) {
-	DEBUG("DBUS: Remove participant %s", call->_callID);
-	if(call->_confID){
-	  g_free(call->_confID);
-	  call->_confID = NULL;
-	}
-      }
-      participant = conference_next_participant(participant);
-  }
-  
-  conferencelist_remove(c->_confID);
+    conferencelist_remove (c->_confID);
 }
 
 static void
-accounts_changed_cb(DBusGProxy *proxy UNUSED, void * foo  UNUSED )
+accounts_changed_cb (DBusGProxy *proxy UNUSED, void * foo  UNUSED)
 {
-  DEBUG ("Accounts changed");
-  sflphone_fill_account_list();
-  sflphone_fill_ip2ip_profile();
-  account_list_config_dialog_fill();
+    DEBUG ("Accounts changed");
+    sflphone_fill_account_list();
+    sflphone_fill_ip2ip_profile();
+    account_list_config_dialog_fill();
 
-  // Update the status bar in case something happened
-  // Should fix ticket #1215
-  status_bar_display_account();
+    // Update the status bar in case something happened
+    // Should fix ticket #1215
+    status_bar_display_account();
 
-  // Update the tooltip on the status icon
-  statusicon_set_tooltip ();
+    // Update the tooltip on the status icon
+    statusicon_set_tooltip ();
 }
 
 static void
-transfer_succeded_cb(DBusGProxy *proxy UNUSED, void * foo  UNUSED )
+transfer_succeded_cb (DBusGProxy *proxy UNUSED, void * foo  UNUSED)
 {
-  DEBUG ("Transfer succeded\n");
-  sflphone_display_transfer_status("Transfer successfull");
+    DEBUG ("Transfer succeded\n");
+    sflphone_display_transfer_status ("Transfer successfull");
 }
 
 static void
-transfer_failed_cb(DBusGProxy *proxy UNUSED, void * foo  UNUSED )
+transfer_failed_cb (DBusGProxy *proxy UNUSED, void * foo  UNUSED)
 {
-  DEBUG ("Transfer failed\n");
-  sflphone_display_transfer_status("Transfer failed");
+    DEBUG ("Transfer failed\n");
+    sflphone_display_transfer_status ("Transfer failed");
 }
 
 static void
-secure_sdes_on_cb(DBusGProxy *proxy UNUSED, const gchar *callID, void *foo UNUSED)
+secure_sdes_on_cb (DBusGProxy *proxy UNUSED, const gchar *callID, void *foo UNUSED)
 {
-  DEBUG("SRTP using SDES is on");
-  callable_obj_t *c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      sflphone_srtp_sdes_on(c);
-      notify_secure_on(c);
+    DEBUG ("SRTP using SDES is on");
+    callable_obj_t *c = calllist_get (current_calls, callID);
+
+    if (c) {
+        sflphone_srtp_sdes_on (c);
+        notify_secure_on (c);
     }
 
 }
 
 static void
-secure_sdes_off_cb(DBusGProxy *proxy UNUSED, const gchar *callID, void *foo UNUSED)
+secure_sdes_off_cb (DBusGProxy *proxy UNUSED, const gchar *callID, void *foo UNUSED)
 {
-  DEBUG("SRTP using SDES is off");
-  callable_obj_t *c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      sflphone_srtp_sdes_off(c);
-      notify_secure_off(c);
+    DEBUG ("SRTP using SDES is off");
+    callable_obj_t *c = calllist_get (current_calls, callID);
+
+    if (c) {
+        sflphone_srtp_sdes_off (c);
+        notify_secure_off (c);
     }
 }
 
 static void
-secure_zrtp_on_cb(DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* cipher,
-    void * foo  UNUSED )
+secure_zrtp_on_cb (DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* cipher,
+                   void * foo  UNUSED)
 {
-  DEBUG ("SRTP using ZRTP is ON secure_on_cb");
-  callable_obj_t * c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      c->_srtp_cipher = g_strdup(cipher);
+    DEBUG ("SRTP using ZRTP is ON secure_on_cb");
+    callable_obj_t * c = calllist_get (current_calls, callID);
 
-      sflphone_srtp_zrtp_on(c);
-      notify_secure_on(c);
+    if (c) {
+        c->_srtp_cipher = g_strdup (cipher);
+
+        sflphone_srtp_zrtp_on (c);
+        notify_secure_on (c);
     }
 }
 
 static void
-secure_zrtp_off_cb(DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED )
+secure_zrtp_off_cb (DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED)
 {
-  DEBUG ("SRTP using ZRTP is OFF");
-  callable_obj_t * c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      sflphone_srtp_zrtp_off(c);
-      notify_secure_off(c);
+    DEBUG ("SRTP using ZRTP is OFF");
+    callable_obj_t * c = calllist_get (current_calls, callID);
+
+    if (c) {
+        sflphone_srtp_zrtp_off (c);
+        notify_secure_off (c);
     }
 }
 
 static void
-show_zrtp_sas_cb(DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* sas,
-    const gboolean verified, void * foo  UNUSED )
+show_zrtp_sas_cb (DBusGProxy *proxy UNUSED, const gchar* callID, const gchar* sas,
+                  const gboolean verified, void * foo  UNUSED)
 {
-  DEBUG ("Showing SAS");
-  callable_obj_t * c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      sflphone_srtp_zrtp_show_sas(c, sas, verified);
+    DEBUG ("Showing SAS");
+    callable_obj_t * c = calllist_get (current_calls, callID);
+
+    if (c) {
+        sflphone_srtp_zrtp_show_sas (c, sas, verified);
     }
 }
 
 static void
-confirm_go_clear_cb(DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED )
+confirm_go_clear_cb (DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED)
 {
-  DEBUG ("Confirm Go Clear request");
-  callable_obj_t * c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      sflphone_confirm_go_clear(c);
+    DEBUG ("Confirm Go Clear request");
+    callable_obj_t * c = calllist_get (current_calls, callID);
+
+    if (c) {
+        sflphone_confirm_go_clear (c);
     }
 }
 
 static void
-zrtp_not_supported_cb(DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED )
+zrtp_not_supported_cb (DBusGProxy *proxy UNUSED, const gchar* callID, void * foo  UNUSED)
 {
-  DEBUG ("ZRTP not supported on the other end");
-  callable_obj_t * c = calllist_get(current_calls, callID);
-  if (c)
-    {
-      sflphone_srtp_zrtp_not_supported(c);
-      notify_zrtp_not_supported(c);
+    DEBUG ("ZRTP not supported on the other end");
+    callable_obj_t * c = calllist_get (current_calls, callID);
+
+    if (c) {
+        sflphone_srtp_zrtp_not_supported (c);
+        notify_zrtp_not_supported (c);
     }
 }
 
 static void
-sip_call_state_cb(DBusGProxy *proxy UNUSED, const gchar* callID,
-    const gchar* description, const guint code, void * foo  UNUSED )
+sip_call_state_cb (DBusGProxy *proxy UNUSED, const gchar* callID,
+                   const gchar* description, const guint code, void * foo  UNUSED)
 {
-  callable_obj_t * c = NULL;
-  c = calllist_get(current_calls, callID);
+    callable_obj_t * c = NULL;
+    c = calllist_get (current_calls, callID);
 
-  if (c != NULL)
-    {
-      DEBUG("sip_call_state_cb received code %d", code);
-      sflphone_call_state_changed(c, description, code);
+    if (c != NULL) {
+        DEBUG ("sip_call_state_cb received code %d", code);
+        sflphone_call_state_changed (c, description, code);
     }
 }
 
 static void
-error_alert(DBusGProxy *proxy UNUSED, int errCode, void * foo  UNUSED )
+error_alert (DBusGProxy *proxy UNUSED, int errCode, void * foo  UNUSED)
 {
-  ERROR ("Error notifying : (%i)", errCode);
-  sflphone_throw_exception(errCode);
+    ERROR ("Error notifying : (%i)", errCode);
+    sflphone_throw_exception (errCode);
 }
 
 gboolean
 dbus_connect()
 {
 
-  GError *error = NULL;
-  connection = NULL;
-  instanceProxy = NULL;
-
-  g_type_init();
-
-  connection = dbus_g_bus_get(DBUS_BUS_SESSION, &error);
-
-  if (error)
-    {
-      ERROR ("Failed to open connection to bus: %s",
-          error->message);
-      g_error_free(error);
-      return FALSE;
-    }
-
-  /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */
-
-  instanceProxy = dbus_g_proxy_new_for_name(connection,
-      "org.sflphone.SFLphone", "/org/sflphone/SFLphone/Instance",
-      "org.sflphone.SFLphone.Instance");
-  /*
-   instanceProxy = dbus_g_proxy_new_for_name_owner (connection,
-   "org.sflphone.SFLphone",
-   "/org/sflphone/SFLphone/Instance",
-   "org.sflphone.SFLphone.Instance",
-   &error);
-   */
-
-  if (instanceProxy == NULL)
-    {
-      ERROR ("Failed to get proxy to Instance");
-      return FALSE;
-    }
-
-  DEBUG ("DBus connected to Instance");
-
-  callManagerProxy = dbus_g_proxy_new_for_name(connection,
-      "org.sflphone.SFLphone", "/org/sflphone/SFLphone/CallManager",
-      "org.sflphone.SFLphone.CallManager");
-
-  /*
-   callManagerProxy = dbus_g_proxy_new_for_name_owner (connection,
-   "org.sflphone.SFLphone",
-   "/org/sflphone/SFLphone/CallManager",
-   "org.sflphone.SFLphone.CallManager",
-   &error);
-   */
-  if (callManagerProxy == NULL)
-    {
-      ERROR ("Failed to get proxy to CallManagers");
-      return FALSE;
-    }
-
-  DEBUG ("DBus connected to CallManager");
-  /* STRING STRING STRING Marshaller */
-  /* Incoming call */
-  dbus_g_object_register_marshaller(
-      g_cclosure_user_marshal_VOID__STRING_STRING_STRING, G_TYPE_NONE,
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "incomingCall", G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "incomingCall",
-      G_CALLBACK(incoming_call_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "zrtpNegotiationFailed",
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "zrtpNegotiationFailed",
-      G_CALLBACK(zrtp_negotiation_failed_cb), NULL, NULL);
-
-  /* Current codec */
-  dbus_g_object_register_marshaller(
-      g_cclosure_user_marshal_VOID__STRING_STRING_STRING, G_TYPE_NONE,
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "currentSelectedCodec",
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "currentSelectedCodec",
-      G_CALLBACK(curent_selected_codec), NULL, NULL);
-
-  /* Register a marshaller for STRING,STRING */
-  dbus_g_object_register_marshaller(
-      g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "callStateChanged", G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "callStateChanged",
-      G_CALLBACK(call_state_cb), NULL, NULL);
-
-  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING_INT,
-      G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "voiceMailNotify", G_TYPE_STRING,
-      G_TYPE_INT, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "voiceMailNotify",
-      G_CALLBACK(voice_mail_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "incomingMessage", G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "incomingMessage",
-      G_CALLBACK(incoming_message_cb), NULL, NULL);
-
-  dbus_g_object_register_marshaller(
-      g_cclosure_user_marshal_VOID__STRING_DOUBLE, G_TYPE_NONE, G_TYPE_STRING,
-      G_TYPE_DOUBLE, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "volumeChanged", G_TYPE_STRING,
-      G_TYPE_DOUBLE, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "volumeChanged",
-      G_CALLBACK(volume_changed_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "transferSucceded", G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "transferSucceded",
-      G_CALLBACK(transfer_succeded_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "transferFailed", G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "transferFailed",
-      G_CALLBACK(transfer_failed_cb), NULL, NULL);
-
-  /* Conference related callback */
-
-  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
-      G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "conferenceChanged", G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "conferenceChanged",
-      G_CALLBACK(conference_changed_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "conferenceCreated", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "conferenceCreated",
-      G_CALLBACK(conference_created_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "conferenceRemoved", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "conferenceRemoved",
-      G_CALLBACK(conference_removed_cb), NULL, NULL);
-
-  /* Security related callbacks */
-
-  dbus_g_proxy_add_signal(callManagerProxy, "secureSdesOn", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "secureSdesOn",
-      G_CALLBACK(secure_sdes_on_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "secureSdesOff", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "secureSdesOff",
-      G_CALLBACK(secure_sdes_off_cb), NULL, NULL);
-
-  /* Register a marshaller for STRING,STRING,BOOL */
-  dbus_g_object_register_marshaller(
-      g_cclosure_user_marshal_VOID__STRING_STRING_BOOL, G_TYPE_NONE,
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "showSAS", G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "showSAS",
-      G_CALLBACK(show_zrtp_sas_cb), NULL, NULL);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "secureZrtpOn", G_TYPE_STRING,
-      G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "secureZrtpOn",
-      G_CALLBACK(secure_zrtp_on_cb), NULL, NULL);
-
-  /* Register a marshaller for STRING*/
-  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__STRING,
-      G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(callManagerProxy, "secureZrtpOff", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "secureZrtpOff",
-      G_CALLBACK(secure_zrtp_off_cb), NULL, NULL);
-  dbus_g_proxy_add_signal(callManagerProxy, "zrtpNotSuppOther", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "zrtpNotSuppOther",
-      G_CALLBACK(zrtp_not_supported_cb), NULL, NULL);
-  dbus_g_proxy_add_signal(callManagerProxy, "confirmGoClear", G_TYPE_STRING,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "confirmGoClear",
-      G_CALLBACK(confirm_go_clear_cb), NULL, NULL);
-
-  /* VOID STRING STRING INT */
-  dbus_g_object_register_marshaller(
-      g_cclosure_user_marshal_VOID__STRING_STRING_INT, G_TYPE_NONE,
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-
-  dbus_g_proxy_add_signal(callManagerProxy, "sipCallStateChanged",
-      G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(callManagerProxy, "sipCallStateChanged",
-      G_CALLBACK(sip_call_state_cb), NULL, NULL);
-
-  configurationManagerProxy = dbus_g_proxy_new_for_name(connection,
-      "org.sflphone.SFLphone", "/org/sflphone/SFLphone/ConfigurationManager",
-      "org.sflphone.SFLphone.ConfigurationManager");
-
-  /*
-   configurationManagerProxy = dbus_g_proxy_new_for_name_owner (connection,
-   "org.sflphone.SFLphone",
-   "/org/sflphone/SFLphone/ConfigurationManager",
-   "org.sflphone.SFLphone.ConfigurationManager",
-   &error);
-   */
-  if (!configurationManagerProxy)
-    {
-      ERROR ("Failed to get proxy to ConfigurationManager");
-      return FALSE;
-    }
-  DEBUG ("DBus connected to ConfigurationManager");
-  dbus_g_proxy_add_signal(configurationManagerProxy, "accountsChanged",
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(configurationManagerProxy, "accountsChanged",
-      G_CALLBACK(accounts_changed_cb), NULL, NULL);
-
-  dbus_g_object_register_marshaller(g_cclosure_user_marshal_VOID__INT,
-      G_TYPE_NONE, G_TYPE_INT, G_TYPE_INVALID);
-  dbus_g_proxy_add_signal(configurationManagerProxy, "errorAlert", G_TYPE_INT,
-      G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal(configurationManagerProxy, "errorAlert",
-      G_CALLBACK(error_alert), NULL, NULL);
-
-  /* Defines a default timeout for the proxies */
+    GError *error = NULL;
+    connection = NULL;
+    instanceProxy = NULL;
+
+    g_type_init();
+
+    connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+
+    if (error) {
+        ERROR ("Failed to open connection to bus: %s",
+               error->message);
+        g_error_free (error);
+        return FALSE;
+    }
+
+    /* Create a proxy object for the "bus driver" (name "org.freedesktop.DBus") */
+
+    instanceProxy = dbus_g_proxy_new_for_name (connection,
+                    "org.sflphone.SFLphone", "/org/sflphone/SFLphone/Instance",
+                    "org.sflphone.SFLphone.Instance");
+
+    if (instanceProxy == NULL) {
+        ERROR ("Failed to get proxy to Instance");
+        return FALSE;
+    }
+
+    DEBUG ("DBus connected to Instance");
+
+    callManagerProxy = dbus_g_proxy_new_for_name (connection,
+                       "org.sflphone.SFLphone", "/org/sflphone/SFLphone/CallManager",
+                       "org.sflphone.SFLphone.CallManager");
+
+    if (callManagerProxy == NULL) {
+        ERROR ("Failed to get proxy to CallManagers");
+        return FALSE;
+    }
+
+    DEBUG ("DBus connected to CallManager");
+    /* STRING STRING STRING Marshaller */
+    /* Incoming call */
+    dbus_g_object_register_marshaller (
+        g_cclosure_user_marshal_VOID__STRING_STRING_STRING, G_TYPE_NONE,
+        G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "incomingCall", G_TYPE_STRING,
+                             G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "incomingCall",
+                                 G_CALLBACK (incoming_call_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "zrtpNegotiationFailed",
+                             G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "zrtpNegotiationFailed",
+                                 G_CALLBACK (zrtp_negotiation_failed_cb), NULL, NULL);
+
+    /* Current codec */
+    dbus_g_object_register_marshaller (
+        g_cclosure_user_marshal_VOID__STRING_STRING_STRING, G_TYPE_NONE,
+        G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "currentSelectedCodec",
+                             G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "currentSelectedCodec",
+                                 G_CALLBACK (curent_selected_codec), NULL, NULL);
+
+    /* Register a marshaller for STRING,STRING */
+    dbus_g_object_register_marshaller (
+        g_cclosure_user_marshal_VOID__STRING_STRING, G_TYPE_NONE, G_TYPE_STRING,
+        G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "callStateChanged", G_TYPE_STRING,
+                             G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "callStateChanged",
+                                 G_CALLBACK (call_state_cb), NULL, NULL);
+
+    dbus_g_object_register_marshaller (g_cclosure_user_marshal_VOID__STRING_INT,
+                                       G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "voiceMailNotify", G_TYPE_STRING,
+                             G_TYPE_INT, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "voiceMailNotify",
+                                 G_CALLBACK (voice_mail_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "incomingMessage", G_TYPE_STRING,
+                             G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "incomingMessage",
+                                 G_CALLBACK (incoming_message_cb), NULL, NULL);
+
+    dbus_g_object_register_marshaller (
+        g_cclosure_user_marshal_VOID__STRING_DOUBLE, G_TYPE_NONE, G_TYPE_STRING,
+        G_TYPE_DOUBLE, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "volumeChanged", G_TYPE_STRING,
+                             G_TYPE_DOUBLE, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "volumeChanged",
+                                 G_CALLBACK (volume_changed_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "transferSucceded", G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "transferSucceded",
+                                 G_CALLBACK (transfer_succeded_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "transferFailed", G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "transferFailed",
+                                 G_CALLBACK (transfer_failed_cb), NULL, NULL);
+
+    /* Conference related callback */
+
+    dbus_g_object_register_marshaller (g_cclosure_user_marshal_VOID__STRING,
+                                       G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "conferenceChanged", G_TYPE_STRING,
+                             G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "conferenceChanged",
+                                 G_CALLBACK (conference_changed_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "conferenceCreated", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "conferenceCreated",
+                                 G_CALLBACK (conference_created_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "conferenceRemoved", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "conferenceRemoved",
+                                 G_CALLBACK (conference_removed_cb), NULL, NULL);
+
+    /* Security related callbacks */
+
+    dbus_g_proxy_add_signal (callManagerProxy, "secureSdesOn", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "secureSdesOn",
+                                 G_CALLBACK (secure_sdes_on_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "secureSdesOff", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "secureSdesOff",
+                                 G_CALLBACK (secure_sdes_off_cb), NULL, NULL);
+
+    /* Register a marshaller for STRING,STRING,BOOL */
+    dbus_g_object_register_marshaller (
+        g_cclosure_user_marshal_VOID__STRING_STRING_BOOL, G_TYPE_NONE,
+        G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "showSAS", G_TYPE_STRING,
+                             G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "showSAS",
+                                 G_CALLBACK (show_zrtp_sas_cb), NULL, NULL);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "secureZrtpOn", G_TYPE_STRING,
+                             G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "secureZrtpOn",
+                                 G_CALLBACK (secure_zrtp_on_cb), NULL, NULL);
+
+    /* Register a marshaller for STRING*/
+    dbus_g_object_register_marshaller (g_cclosure_user_marshal_VOID__STRING,
+                                       G_TYPE_NONE, G_TYPE_STRING, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (callManagerProxy, "secureZrtpOff", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "secureZrtpOff",
+                                 G_CALLBACK (secure_zrtp_off_cb), NULL, NULL);
+    dbus_g_proxy_add_signal (callManagerProxy, "zrtpNotSuppOther", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "zrtpNotSuppOther",
+                                 G_CALLBACK (zrtp_not_supported_cb), NULL, NULL);
+    dbus_g_proxy_add_signal (callManagerProxy, "confirmGoClear", G_TYPE_STRING,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "confirmGoClear",
+                                 G_CALLBACK (confirm_go_clear_cb), NULL, NULL);
+
+    /* VOID STRING STRING INT */
+    dbus_g_object_register_marshaller (
+        g_cclosure_user_marshal_VOID__STRING_STRING_INT, G_TYPE_NONE,
+        G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
+
+    dbus_g_proxy_add_signal (callManagerProxy, "sipCallStateChanged",
+                             G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (callManagerProxy, "sipCallStateChanged",
+                                 G_CALLBACK (sip_call_state_cb), NULL, NULL);
+
+    configurationManagerProxy = dbus_g_proxy_new_for_name (connection,
+                                "org.sflphone.SFLphone", "/org/sflphone/SFLphone/ConfigurationManager",
+                                "org.sflphone.SFLphone.ConfigurationManager");
+
+    if (!configurationManagerProxy) {
+        ERROR ("Failed to get proxy to ConfigurationManager");
+        return FALSE;
+    }
+
+    DEBUG ("DBus connected to ConfigurationManager");
+    dbus_g_proxy_add_signal (configurationManagerProxy, "accountsChanged",
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (configurationManagerProxy, "accountsChanged",
+                                 G_CALLBACK (accounts_changed_cb), NULL, NULL);
+
+    dbus_g_object_register_marshaller (g_cclosure_user_marshal_VOID__INT,
+                                       G_TYPE_NONE, G_TYPE_INT, G_TYPE_INVALID);
+    dbus_g_proxy_add_signal (configurationManagerProxy, "errorAlert", G_TYPE_INT,
+                             G_TYPE_INVALID);
+    dbus_g_proxy_connect_signal (configurationManagerProxy, "errorAlert",
+                                 G_CALLBACK (error_alert), NULL, NULL);
+
+    /* Defines a default timeout for the proxies */
 #if HAVE_DBUS_G_PROXY_SET_DEFAULT_TIMEOUT
-  dbus_g_proxy_set_default_timeout(callManagerProxy, DEFAULT_DBUS_TIMEOUT);
-  dbus_g_proxy_set_default_timeout(instanceProxy, DEFAULT_DBUS_TIMEOUT);
-  dbus_g_proxy_set_default_timeout(configurationManagerProxy, DEFAULT_DBUS_TIMEOUT);
+    dbus_g_proxy_set_default_timeout (callManagerProxy, DEFAULT_DBUS_TIMEOUT);
+    dbus_g_proxy_set_default_timeout (instanceProxy, DEFAULT_DBUS_TIMEOUT);
+    dbus_g_proxy_set_default_timeout (configurationManagerProxy, DEFAULT_DBUS_TIMEOUT);
 #endif
 
-  return TRUE;
+    return TRUE;
 }
 
 void
 dbus_clean()
 {
-  g_object_unref(callManagerProxy);
-  g_object_unref(configurationManagerProxy);
-  g_object_unref(instanceProxy);
+    g_object_unref (callManagerProxy);
+    g_object_unref (configurationManagerProxy);
+    g_object_unref (instanceProxy);
 }
 
 void
-dbus_hold(const callable_obj_t * c)
+dbus_hold (const callable_obj_t * c)
 {
-  DEBUG("dbus_hold %s\n", c->_callID);
+    DEBUG ("dbus_hold %s\n", c->_callID);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_hold(callManagerProxy, c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call hold() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_hold (callManagerProxy, c->_callID, &error);
+
+    if (error) {
+        ERROR ("Failed to call hold() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_unhold(const callable_obj_t * c)
+dbus_unhold (const callable_obj_t * c)
 {
-  DEBUG("dbus_unhold %s\n", c->_callID);
+    DEBUG ("dbus_unhold %s\n", c->_callID);
+
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_unhold (callManagerProxy, c->_callID, &error);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_unhold(callManagerProxy, c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call unhold() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call unhold() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_hold_conference(const conference_obj_t * c)
+dbus_hold_conference (const conference_obj_t * c)
 {
-  DEBUG("dbus_hold_conference %s\n", c->_confID);
+    DEBUG ("dbus_hold_conference %s\n", c->_confID);
+
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_hold_conference (callManagerProxy,
+            c->_confID, &error);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_hold_conference(callManagerProxy,
-      c->_confID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call hold() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call hold() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_unhold_conference(const conference_obj_t * c)
+dbus_unhold_conference (const conference_obj_t * c)
 {
-  DEBUG("dbus_unhold_conference %s\n", c->_confID);
+    DEBUG ("dbus_unhold_conference %s\n", c->_confID);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_unhold_conference(callManagerProxy,
-      c->_confID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call unhold() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_unhold_conference (callManagerProxy,
+            c->_confID, &error);
+
+    if (error) {
+        ERROR ("Failed to call unhold() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_hang_up(const callable_obj_t * c)
+dbus_hang_up (const callable_obj_t * c)
 {
-  DEBUG("dbus_hang_up %s\n", c->_callID);
+    DEBUG ("dbus_hang_up %s\n", c->_callID);
+
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_hang_up (callManagerProxy, c->_callID,
+            &error);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_hang_up(callManagerProxy, c->_callID,
-      &error);
-  if (error)
-    {
-      ERROR ("Failed to call hang_up() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call hang_up() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_hang_up_conference(const conference_obj_t * c)
+dbus_hang_up_conference (const conference_obj_t * c)
 {
-  DEBUG("dbus_hang_up_conference %s\n", c->_confID);
+    DEBUG ("dbus_hang_up_conference %s\n", c->_confID);
+
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_hang_up_conference (callManagerProxy,
+            c->_confID, &error);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_hang_up_conference(callManagerProxy,
-      c->_confID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call hang_up() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call hang_up() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_transfert(const callable_obj_t * c)
+dbus_transfert (const callable_obj_t * c)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_transfert(callManagerProxy, c->_callID,
-      c->_trsft_to, &error);
-  if (error)
-    {
-      ERROR ("Failed to call transfert() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_transfert (callManagerProxy, c->_callID,
+            c->_trsft_to, &error);
+
+    if (error) {
+        ERROR ("Failed to call transfert() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_accept(const callable_obj_t * c)
+dbus_accept (const callable_obj_t * c)
 {
 #if GTK_CHECK_VERSION(2,10,0)
-  status_tray_icon_blink(FALSE);
+    status_tray_icon_blink (FALSE);
 #endif
 
-  DEBUG("dbus_accept %s\n", c->_callID);
+    DEBUG ("dbus_accept %s\n", c->_callID);
+
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_accept (callManagerProxy, c->_callID, &error);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_accept(callManagerProxy, c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call accept(%s) on CallManager: %s", c->_callID,
-          (error->message == NULL ? g_quark_to_string(error->domain): error->message));
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call accept(%s) on CallManager: %s", c->_callID,
+               (error->message == NULL ? g_quark_to_string (error->domain) : error->message));
+        g_error_free (error);
     }
 }
 
 void
-dbus_refuse(const callable_obj_t * c)
+dbus_refuse (const callable_obj_t * c)
 {
 #if GTK_CHECK_VERSION(2,10,0)
-  status_tray_icon_blink(FALSE);
+    status_tray_icon_blink (FALSE);
 #endif
 
-  DEBUG("dbus_refuse %s\n", c->_callID);
+    DEBUG ("dbus_refuse %s\n", c->_callID);
+
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_refuse (callManagerProxy, c->_callID, &error);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_refuse(callManagerProxy, c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call refuse() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call refuse() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_place_call(const callable_obj_t * c)
+dbus_place_call (const callable_obj_t * c)
 {
-  DEBUG("dbus_place_call %s\n", c->_callID);
+    DEBUG ("dbus_place_call %s\n", c->_callID);
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_place_call(callManagerProxy, c->_accountID,
-      c->_callID, c->_peer_number, &error);
-  if (error)
-    {
-      ERROR ("Failed to call placeCall() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_place_call (callManagerProxy, c->_accountID,
+            c->_callID, c->_peer_number, &error);
+
+    if (error) {
+        ERROR ("Failed to call placeCall() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 gchar**
 dbus_account_list()
 {
-  GError *error = NULL;
-  char ** array;
+    GError *error = NULL;
+    char ** array;
 
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_account_list(
-      configurationManagerProxy, &array, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_account_list) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_account_list: %s", error->message);
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_account_list (
+                configurationManagerProxy, &array, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_account_list) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_account_list: %s", error->message);
         }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      DEBUG ("DBus called get_account_list() on ConfigurationManager");
-      return array;
-    }
-}
 
-GHashTable*
-dbus_account_details(gchar * accountID)
-{
-  GError *error = NULL;
-  GHashTable * details;
-
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_account_details(
-      configurationManagerProxy, accountID, &details, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_account_details: %s", error->message);
-        }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      return details;
+        g_error_free (error);
+        return NULL;
+    } else {
+        DEBUG ("DBus called get_account_list() on ConfigurationManager");
+        return array;
     }
 }
 
-void
-dbus_set_credential(account_t *a, int index)
+GHashTable*
+dbus_account_details (gchar * accountID)
 {
-  DEBUG("Sending credential %d to server", index);
-  GError *error = NULL;
-  GHashTable * credential = g_ptr_array_index(a->credential_information, index);
+    GError *error = NULL;
+    GHashTable * details;
 
-  if (credential == NULL)
-    {
-      DEBUG("Credential %d was deleted", index);
-    }
-  else
-    {
-      org_sflphone_SFLphone_ConfigurationManager_set_credential(
-          configurationManagerProxy, a->accountID, index, credential, &error);
-    }
+    DEBUG ("Dbus: Get account detail accountid %s", accountID);
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_account_details (
+                configurationManagerProxy, accountID, &details, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_account_details: %s", error->message);
+        }
 
-  if (error)
-    {
-      ERROR ("Failed to call set_credential() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+        g_error_free (error);
+        return NULL;
+    } else {
+        return details;
     }
 }
+
 void
-dbus_set_number_of_credential(account_t *a, int number)
+dbus_set_credential (account_t *a, int index)
 {
-  DEBUG("Sending number of credential %d to server", number);
-  GError *error = NULL;
+    DEBUG ("Sending credential %d to server", index);
+    GError *error = NULL;
+    GHashTable * credential = g_ptr_array_index (a->credential_information, index);
 
-  org_sflphone_SFLphone_ConfigurationManager_set_number_of_credential(
-      configurationManagerProxy, a->accountID, number, &error);
+    if (credential == NULL) {
+        DEBUG ("Credential %d was deleted", index);
+    } else {
+        org_sflphone_SFLphone_ConfigurationManager_set_credential (
+            configurationManagerProxy, a->accountID, index, credential, &error);
+    }
 
-  if (error)
-    {
-      ERROR ("Failed to call set_number_of_credential() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call set_credential() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 void
-dbus_delete_all_credential(account_t *a)
+dbus_delete_all_credential (account_t *a)
 {
-  DEBUG("Deleting all credentials\n");
-  GError *error = NULL;
+    DEBUG ("Deleting all credentials\n");
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_ConfigurationManager_delete_all_credential(
-      configurationManagerProxy, a->accountID, &error);
+    org_sflphone_SFLphone_ConfigurationManager_delete_all_credential (
+        configurationManagerProxy, a->accountID, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call deleteAllCredential on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call deleteAllCredential on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 int
-dbus_get_number_of_credential(gchar * accountID)
+dbus_get_number_of_credential (gchar * accountID)
 {
-  GError *error = NULL;
-  int number = 0;
+    GError *error = NULL;
+    int number = 0;
 
-  DEBUG("Getting number of credential for account %s", accountID);
+    DEBUG ("Getting number of credential for account %s", accountID);
 
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_number_of_credential(
-      configurationManagerProxy, accountID, &number, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_account_details: %s", error->message);
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_number_of_credential (
+                configurationManagerProxy, accountID, &number, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_account_details: %s", error->message);
         }
-      g_error_free(error);
-      return 0;
-    }
-  else
-    {
-      DEBUG("%d credential(s) found for account %s", number, accountID);
-      return number;
+
+        g_error_free (error);
+        return 0;
+    } else {
+        DEBUG ("%d credential(s) found for account %s", number, accountID);
+        return number;
     }
 }
 
 GHashTable*
-dbus_get_credential(gchar * accountID, int index)
-{
-  GError *error = NULL;
-  GHashTable * details;
-
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_credential(
-      configurationManagerProxy, accountID, index, &details, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_account_details: %s", error->message);
+dbus_get_credential (gchar * accountID, int index)
+{
+    GError *error = NULL;
+    GHashTable * details;
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_credential (
+                configurationManagerProxy, accountID, index, &details, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_account_details) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_account_details: %s", error->message);
         }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      return details;
+
+        g_error_free (error);
+        return NULL;
+    } else {
+        return details;
     }
 }
 
 GHashTable*
-dbus_get_ip2_ip_details(void)
-{
-  GError *error = NULL;
-  GHashTable * details;
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_ip2_ip_details(
-      configurationManagerProxy, &details, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_ip2_ip_details) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+dbus_get_ip2_ip_details (void)
+{
+    GError *error = NULL;
+    GHashTable * details;
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_ip2_ip_details (
+                configurationManagerProxy, &details, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_ip2_ip_details) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_ip2_ip_details: %s", error->message);
         }
-      else
-        {
-          ERROR("Error while calling get_ip2_ip_details: %s", error->message);
-        }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      return details;
+
+        g_error_free (error);
+        return NULL;
+    } else {
+        return details;
     }
 }
 
 void
-dbus_set_ip2ip_details(GHashTable * properties)
+dbus_set_ip2ip_details (GHashTable * properties)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_ip2_ip_details(
-      configurationManagerProxy, properties, &error);
-  if (error)
-    {
-      ERROR ("Failed to call set_ip_2ip_details() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_ip2_ip_details (
+        configurationManagerProxy, properties, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_ip_2ip_details() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_send_register(gchar* accountID, const guint enable)
+dbus_send_register (gchar* accountID, const guint enable)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_send_register(
-      configurationManagerProxy, accountID, enable, &error);
-  if (error)
-    {
-      ERROR ("Failed to call send_register() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_send_register (
+        configurationManagerProxy, accountID, enable, &error);
+
+    if (error) {
+        ERROR ("Failed to call send_register() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_remove_account(gchar * accountID)
+dbus_remove_account (gchar * accountID)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_remove_account(
-      configurationManagerProxy, accountID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call remove_account() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_remove_account (
+        configurationManagerProxy, accountID, &error);
+
+    if (error) {
+        ERROR ("Failed to call remove_account() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_set_account_details(account_t *a)
+dbus_set_account_details (account_t *a)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_account_details(
-      configurationManagerProxy, a->accountID, a->properties, &error);
-  if (error)
-    {
-      ERROR ("Failed to call set_account_details() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_account_details (
+        configurationManagerProxy, a->accountID, a->properties, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_account_details() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 gchar*
-dbus_add_account(account_t *a)
+dbus_add_account (account_t *a)
 {
-  gchar* accountId;
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_add_account(
-      configurationManagerProxy, a->properties, &accountId, &error);
-  if (error)
-    {
-      ERROR ("Failed to call add_account() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    gchar* accountId;
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_add_account (
+        configurationManagerProxy, a->properties, &accountId, &error);
+
+    if (error) {
+        ERROR ("Failed to call add_account() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
-  return accountId;
+
+    return accountId;
 }
 
 void
-dbus_set_volume(const gchar * device, gdouble value)
+dbus_set_volume (const gchar * device, gdouble value)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_set_volume(callManagerProxy, device, value,
-      &error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_set_volume (callManagerProxy, device, value,
+            &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call set_volume() on callManagerProxy: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call set_volume() on callManagerProxy: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 gdouble
-dbus_get_volume(const gchar * device)
+dbus_get_volume (const gchar * device)
 {
-  gdouble value;
-  GError *error = NULL;
+    gdouble value;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_CallManager_get_volume(callManagerProxy, device,
-      &value, &error);
+    org_sflphone_SFLphone_CallManager_get_volume (callManagerProxy, device,
+            &value, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call get_volume() on callManagerProxy: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call get_volume() on callManagerProxy: %s",
+               error->message);
+        g_error_free (error);
     }
-  return value;
+
+    return value;
 }
 
 void
-dbus_play_dtmf(const gchar * key)
+dbus_play_dtmf (const gchar * key)
 {
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_CallManager_play_dt_mf(callManagerProxy, key, &error);
+    org_sflphone_SFLphone_CallManager_play_dt_mf (callManagerProxy, key, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call playDTMF() on callManagerProxy: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call playDTMF() on callManagerProxy: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_start_tone(const int start, const guint type)
+dbus_start_tone (const int start, const guint type)
 {
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_CallManager_start_tone(callManagerProxy, start, type,
-      &error);
+    org_sflphone_SFLphone_CallManager_start_tone (callManagerProxy, start, type,
+            &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call startTone() on callManagerProxy: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call startTone() on callManagerProxy: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_register(int pid, gchar * name)
+dbus_register (int pid, gchar * name)
 {
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_Instance_register(instanceProxy, pid, name, &error);
+    org_sflphone_SFLphone_Instance_register (instanceProxy, pid, name, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call register() on instanceProxy: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call register() on instanceProxy: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_unregister(int pid)
+dbus_unregister (int pid)
 {
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_Instance_unregister(instanceProxy, pid, &error);
+    org_sflphone_SFLphone_Instance_unregister (instanceProxy, pid, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call unregister() on instanceProxy: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call unregister() on instanceProxy: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
@@ -1223,162 +1199,126 @@ gchar**
 dbus_codec_list()
 {
 
-  GError *error = NULL;
-  gchar** array = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_codec_list(
-      configurationManagerProxy, &array, &error);
+    GError *error = NULL;
+    gchar** array = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_codec_list (
+        configurationManagerProxy, &array, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call get_codec_list() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call get_codec_list() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
-  return array;
+
+    return array;
 }
 
 gchar**
-dbus_codec_details(int payload)
+dbus_codec_details (int payload)
 {
 
-  GError *error = NULL;
-  gchar ** array;
-  org_sflphone_SFLphone_ConfigurationManager_get_codec_details(
-      configurationManagerProxy, payload, &array, &error);
+    GError *error = NULL;
+    gchar ** array;
+    org_sflphone_SFLphone_ConfigurationManager_get_codec_details (
+        configurationManagerProxy, payload, &array, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call get_codec_details() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call get_codec_details() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
-  return array;
+
+    return array;
 }
 
 gchar*
-dbus_get_current_codec_name(const callable_obj_t * c)
+dbus_get_current_codec_name (const callable_obj_t * c)
 {
 
-  gchar* codecName = "";
-  GError* error = NULL;
+    gchar* codecName = "";
+    GError* error = NULL;
+
+    org_sflphone_SFLphone_CallManager_get_current_codec_name (callManagerProxy,
+            c->_callID, &codecName, &error);
 
-  org_sflphone_SFLphone_CallManager_get_current_codec_name(callManagerProxy,
-      c->_callID, &codecName, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 
-  DEBUG("dbus_get_current_codec_name : codecName : %s", codecName);
+    DEBUG ("dbus_get_current_codec_name : codecName : %s", codecName);
 
-  return codecName;
+    return codecName;
 }
 
 gchar**
-dbus_get_active_codec_list(gchar *accountID)
+dbus_get_active_codec_list (gchar *accountID)
 {
 
-  gchar ** array;
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_active_codec_list(
-      configurationManagerProxy, accountID, &array, &error);
+    gchar ** array;
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_active_codec_list (
+        configurationManagerProxy, accountID, &array, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call get_active_codec_list() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call get_active_codec_list() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
-  return array;
+
+    return array;
 }
 
 void
-dbus_set_active_codec_list(const gchar** list, const gchar *accountID)
+dbus_set_active_codec_list (const gchar** list, const gchar *accountID)
 {
 
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_active_codec_list(
-      configurationManagerProxy, list, accountID, &error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_active_codec_list (
+        configurationManagerProxy, list, accountID, &error);
 
-  if (error)
-    {
-      ERROR ("Failed to call set_active_codec_list() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call set_active_codec_list() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
-/**
- * Get a list of input supported audio plugins
- */
-gchar**
-dbus_get_input_audio_plugin_list()
-{
-  gchar** array;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_input_audio_plugin_list(
-      configurationManagerProxy, &array, &error);
-  if (error)
-    {
-      ERROR("Failed to call get_input_audio_plugin_list() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
-    }
-  return array;
-}
 
 /**
  * Get a list of output supported audio plugins
  */
 gchar**
-dbus_get_output_audio_plugin_list()
-{
-  gchar** array;
-  GError* error = NULL;
-
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_output_audio_plugin_list(
-      configurationManagerProxy, &array, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_output_audio_plugin_list) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+dbus_get_audio_plugin_list()
+{
+    gchar** array;
+    GError* error = NULL;
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_audio_plugin_list (
+                configurationManagerProxy, &array, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_output_plugin_list) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_out_plugin_list: %s", error->message);
         }
-      else
-        {
-          ERROR("Error while calling get_out_audio_plugin_list: %s", error->message);
-        }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      return array;
-    }
-}
 
-void
-dbus_set_input_audio_plugin(gchar* audioPlugin)
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_input_audio_plugin(
-      configurationManagerProxy, audioPlugin, &error);
-  if (error)
-    {
-      ERROR("Failed to call set_input_audio_plugin() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+        g_error_free (error);
+        return NULL;
+    } else {
+        return array;
     }
 }
 
 void
-dbus_set_output_audio_plugin(gchar* audioPlugin)
+dbus_set_audio_plugin (gchar* audioPlugin)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_output_audio_plugin(
-      configurationManagerProxy, audioPlugin, &error);
-  if (error)
-    {
-      ERROR("Failed to call set_output_audio_plugin() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_audio_plugin (
+        configurationManagerProxy, audioPlugin, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_audio_plugin() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
 }
 
@@ -1388,66 +1328,84 @@ dbus_set_output_audio_plugin(gchar* audioPlugin)
 gchar**
 dbus_get_audio_output_device_list()
 {
-  gchar** array;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_audio_output_device_list(
-      configurationManagerProxy, &array, &error);
-  if (error)
-    {
-      ERROR("Failed to call get_audio_output_device_list() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    gchar** array;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_audio_output_device_list (
+        configurationManagerProxy, &array, &error);
+
+    if (error) {
+        ERROR ("Failed to call get_audio_output_device_list() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
-  return array;
+
+    return array;
 }
 
 /**
  * Set audio output device from its index
  */
 void
-dbus_set_audio_output_device(const int index)
+dbus_set_audio_output_device (const int index)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_audio_output_device(
-      configurationManagerProxy, index, &error);
-  if (error)
-    {
-      ERROR("Failed to call set_audio_output_device() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_audio_output_device (
+        configurationManagerProxy, index, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_audio_output_device() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
 }
 
 /**
- * Get all input devices index supported by current audio manager
+ * Set audio input device from its index
  */
-gchar**
-dbus_get_audio_input_device_list()
+void
+dbus_set_audio_input_device (const int index)
 {
-  gchar** array;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_audio_input_device_list(
-      configurationManagerProxy, &array, &error);
-  if (error)
-    {
-      ERROR("Failed to call get_audio_input_device_list() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_audio_input_device (
+        configurationManagerProxy, index, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_audio_input_device() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
-  return array;
 }
 
 /**
- * Set audio input device from its index
+ * Set adio ringtone device from its index
  */
 void
-dbus_set_audio_input_device(const int index)
+dbus_set_audio_ringtone_device (const int index)
+{
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_audio_ringtone_device (
+        configurationManagerProxy, index, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_audio_ringtone_device() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
+    }
+}
+
+/**
+ * Get all input devices index supported by current audio manager
+ */
+gchar**
+dbus_get_audio_input_device_list()
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_audio_input_device(
-      configurationManagerProxy, index, &error);
-  if (error)
-    {
-      ERROR("Failed to call set_audio_input_device() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    gchar** array;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_audio_input_device_list (
+        configurationManagerProxy, &array, &error);
+
+    if (error) {
+        ERROR ("Failed to call get_audio_input_device_list() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
+
+    return array;
 }
 
 /**
@@ -1456,34 +1414,36 @@ dbus_set_audio_input_device(const int index)
 gchar**
 dbus_get_current_audio_devices_index()
 {
-  gchar** array;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_current_audio_devices_index(
-      configurationManagerProxy, &array, &error);
-  if (error)
-    {
-      ERROR("Failed to call get_current_audio_devices_index() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    gchar** array;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_current_audio_devices_index (
+        configurationManagerProxy, &array, &error);
+
+    if (error) {
+        ERROR ("Failed to call get_current_audio_devices_index() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
-  return array;
+
+    return array;
 }
 
 /**
  * Get index
  */
 int
-dbus_get_audio_device_index(const gchar *name)
+dbus_get_audio_device_index (const gchar *name)
 {
-  int index;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_audio_device_index(
-      configurationManagerProxy, name, &index, &error);
-  if (error)
-    {
-      ERROR("Failed to call get_audio_device_index() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    int index;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_audio_device_index (
+        configurationManagerProxy, name, &index, &error);
+
+    if (error) {
+        ERROR ("Failed to call get_audio_device_index() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
-  return index;
+
+    return index;
 }
 
 /**
@@ -1492,1154 +1452,821 @@ dbus_get_audio_device_index(const gchar *name)
 gchar*
 dbus_get_current_audio_output_plugin()
 {
-  gchar* plugin = "";
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_current_audio_output_plugin(
-      configurationManagerProxy, &plugin, &error);
-  if (error)
-    {
-      ERROR("Failed to call get_current_audio_output_plugin() on ConfigurationManager: %s", error->message);
-      g_error_free(error);
+    gchar* plugin = "";
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_current_audio_output_plugin (
+        configurationManagerProxy, &plugin, &error);
+
+    if (error) {
+        ERROR ("Failed to call get_current_audio_output_plugin() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
-  return plugin;
+
+    return plugin;
 }
 
+
+/**
+ * Get noise reduction state
+ */
 gchar*
-dbus_get_ringtone_choice()
+dbus_get_noise_suppress_state()
 {
-  gchar* tone;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_ringtone_choice(
-      configurationManagerProxy, &tone, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  return tone;
-}
+    gchar* state = "";
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_noise_suppress_state (configurationManagerProxy, &state, &error);
 
-void
-dbus_set_ringtone_choice(const gchar* tone)
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_ringtone_choice(
-      configurationManagerProxy, tone, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        ERROR ("DBus: Failed to call get_noise_suppress_state() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
-}
 
-int
-dbus_is_ringtone_enabled()
-{
-  int res;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled(
-      configurationManagerProxy, &res, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  return res;
+    return state;
 }
 
+/**
+ * Set noise reduction state
+ */
 void
-dbus_ringtone_enabled()
+dbus_set_noise_suppress_state (gchar* state)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled(
-      configurationManagerProxy, &error);
-  if (error)
-    {
-      g_error_free(error);
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_noise_suppress_state (
+        configurationManagerProxy, state, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_noise_suppress_state() on ConfigurationManager: %s", error->message);
+        g_error_free (error);
     }
 }
 
-gboolean
-dbus_is_md5_credential_hashing()
+
+gchar*
+dbus_get_ringtone_choice (const gchar *accountID)
 {
-  int res;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_is_md5_credential_hashing(
-      configurationManagerProxy, &res, &error);
-  if (error)
-    {
-      g_error_free(error);
+    gchar* tone;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_ringtone_choice (
+        configurationManagerProxy, accountID, &tone, &error);
+
+    if (error) {
+        g_error_free (error);
     }
-  return res;
+
+    return tone;
 }
 
 void
-dbus_set_md5_credential_hashing(gboolean enabled)
+dbus_set_ringtone_choice (const gchar *accountID, const gchar* tone)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_md5_credential_hashing(
-      configurationManagerProxy, enabled, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-}
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_ringtone_choice (
+        configurationManagerProxy, accountID, tone, &error);
 
-int
-dbus_is_iax2_enabled()
-{
-  int res;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_is_iax2_enabled(
-      configurationManagerProxy, &res, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
-  return res;
 }
 
 int
-dbus_get_dialpad()
+dbus_is_ringtone_enabled (const gchar *accountID)
 {
-  int state;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_dialpad(
-      configurationManagerProxy, &state, &error);
-  if (error)
-    {
-      g_error_free(error);
+    int res;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_is_ringtone_enabled (
+        configurationManagerProxy, accountID, &res, &error);
+
+    if (error) {
+        g_error_free (error);
     }
-  return state;
+
+    return res;
 }
 
 void
-dbus_set_dialpad(gboolean display)
+dbus_ringtone_enabled (const gchar *accountID)
 {
+    DEBUG ("DBUS: Ringtone enabled %s", accountID);
+
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_ringtone_enabled (
+        configurationManagerProxy, accountID, &error);
 
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_dialpad(
-      configurationManagerProxy, display, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 }
 
-int
-dbus_get_searchbar()
-{
-  int state;
-  GError* error = NULL;
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_searchbar(
-      configurationManagerProxy, &state, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_searchbar) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_searchbar: %s", error->message);
-        }
-      g_error_free(error);
-      return -1;
-    }
-  else
-    {
-      return state;
+gboolean
+dbus_is_md5_credential_hashing()
+{
+    int res;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_is_md5_credential_hashing (
+        configurationManagerProxy, &res, &error);
+
+    if (error) {
+        g_error_free (error);
     }
+
+    return res;
 }
 
 void
-dbus_set_searchbar()
+dbus_set_md5_credential_hashing (gboolean enabled)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_searchbar(
-      configurationManagerProxy, &error);
-  if (error)
-    {
-      g_error_free(error);
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_md5_credential_hashing (
+        configurationManagerProxy, enabled, &error);
+
+    if (error) {
+        g_error_free (error);
     }
 }
 
 int
-dbus_get_volume_controls()
+dbus_is_iax2_enabled()
 {
-  int state;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_volume_controls(
-      configurationManagerProxy, &state, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  return state;
-}
+    int res;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_is_iax2_enabled (
+        configurationManagerProxy, &res, &error);
 
-void
-dbus_set_volume_controls(gboolean display)
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_volume_controls(
-      configurationManagerProxy, display, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
+
+    return res;
 }
 
 void
-dbus_join_participant(const gchar* sel_callID, const gchar* drag_callID)
+dbus_join_participant (const gchar* sel_callID, const gchar* drag_callID)
 {
 
-  DEBUG("dbus_join_participant %s and %s\n", sel_callID, drag_callID);
+    DEBUG ("dbus_join_participant %s and %s\n", sel_callID, drag_callID);
+
+    GError* error = NULL;
 
-  GError* error = NULL;
+    org_sflphone_SFLphone_CallManager_join_participant (callManagerProxy,
+            sel_callID, drag_callID, &error);
 
-  org_sflphone_SFLphone_CallManager_join_participant(callManagerProxy,
-      sel_callID, drag_callID, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 
 }
 
 void
-dbus_add_participant(const gchar* callID, const gchar* confID)
+dbus_add_participant (const gchar* callID, const gchar* confID)
 {
 
-  DEBUG("dbus_add_participant %s and %s\n", callID, confID);
+    DEBUG ("dbus_add_participant %s and %s\n", callID, confID);
 
-  GError* error = NULL;
+    GError* error = NULL;
 
-  org_sflphone_SFLphone_CallManager_add_participant(callManagerProxy, callID,
-      confID, &error);
-  if (error)
-    {
-      g_error_free(error);
+    org_sflphone_SFLphone_CallManager_add_participant (callManagerProxy, callID,
+            confID, &error);
+
+    if (error) {
+        g_error_free (error);
     }
 
 }
 
 void
-dbus_add_main_participant(const gchar* confID)
+dbus_add_main_participant (const gchar* confID)
 {
-  DEBUG("dbus_add_participant %s\n", confID);
+    DEBUG ("dbus_add_participant %s\n", confID);
+
+    GError* error = NULL;
 
-  GError* error = NULL;
+    org_sflphone_SFLphone_CallManager_add_main_participant (callManagerProxy,
+            confID, &error);
 
-  org_sflphone_SFLphone_CallManager_add_main_participant(callManagerProxy,
-      confID, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 }
 
 void
-dbus_detach_participant(const gchar* callID)
+dbus_detach_participant (const gchar* callID)
 {
 
-  DEBUG("dbus_detach_participant %s\n", callID);
+    DEBUG ("dbus_detach_participant %s\n", callID);
+
+    GError* error = NULL;
+    org_sflphone_SFLphone_CallManager_detach_participant (callManagerProxy,
+            callID, &error);
 
-  GError* error = NULL;
-  org_sflphone_SFLphone_CallManager_detach_participant(callManagerProxy,
-      callID, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 
 }
 
-dbus_join_conference(const gchar* sel_confID, const gchar* drag_confID)
+void
+dbus_join_conference (const gchar* sel_confID, const gchar* drag_confID)
 {
 
-  DEBUG("dbus_join_conference %s and %s\n", sel_confID, drag_confID);
+    DEBUG ("dbus_join_conference %s and %s\n", sel_confID, drag_confID);
+
+    GError* error = NULL;
 
-  GError* error = NULL;
+    org_sflphone_SFLphone_CallManager_join_conference (callManagerProxy,
+            sel_confID, drag_confID, &error);
 
-  org_sflphone_SFLphone_CallManager_join_conference(callManagerProxy,
-      sel_confID, drag_confID, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 
 }
 
 void
-dbus_set_record(const gchar* id)
+dbus_set_record (const gchar* id)
 {
-  DEBUG("dbus_set_record %s\n", id);
+    DEBUG ("Dbus: dbus_set_record %s", id);
+
+    GError* error = NULL;
+    org_sflphone_SFLphone_CallManager_set_recording (callManagerProxy, id, &error);
 
-  GError* error = NULL;
-  org_sflphone_SFLphone_CallManager_set_recording(callManagerProxy, id, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 }
 
 gboolean
-dbus_get_is_recording(const callable_obj_t * c)
+dbus_get_is_recording (const callable_obj_t * c)
 {
-  DEBUG("dbus_get_is_recording %s\n", c->_callID);
-  GError* error = NULL;
-  gboolean isRecording;
-  org_sflphone_SFLphone_CallManager_get_is_recording(callManagerProxy,
-      c->_callID, &isRecording, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  //DEBUG("RECORDING: %i",isRecording);
-  return isRecording;
-}
+    DEBUG ("Dbus: dbus_get_is_recording %s", c->_callID);
+    GError* error = NULL;
+    gboolean isRecording;
+    org_sflphone_SFLphone_CallManager_get_is_recording (callManagerProxy,
+            c->_callID, &isRecording, &error);
 
-void
-dbus_set_record_path(const gchar* path)
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_record_path(
-      configurationManagerProxy, path, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
-}
 
-gchar*
-dbus_get_record_path(void)
-{
-  GError* error = NULL;
-  gchar *path;
-  org_sflphone_SFLphone_ConfigurationManager_get_record_path(
-      configurationManagerProxy, &path, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  return path;
+    //DEBUG("RECORDING: %i",isRecording);
+    return isRecording;
 }
 
 void
-dbus_set_history_limit(const guint days)
+dbus_set_record_path (const gchar* path)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_history_limit(
-      configurationManagerProxy, days, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-}
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_record_path (
+        configurationManagerProxy, path, &error);
 
-void
-dbus_set_history_enabled()
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_history_enabled(
-      configurationManagerProxy, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
 }
 
 gchar*
-dbus_get_history_enabled()
+dbus_get_record_path (void)
 {
-  gchar* state;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_history_enabled(
-      configurationManagerProxy, &state, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  return state;
-}
+    GError* error = NULL;
+    gchar *path;
+    org_sflphone_SFLphone_ConfigurationManager_get_record_path (
+        configurationManagerProxy, &path, &error);
 
-guint
-dbus_get_history_limit(void)
-{
-  GError* error = NULL;
-  gint days = 30;
-  org_sflphone_SFLphone_ConfigurationManager_get_history_limit(
-      configurationManagerProxy, &days, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
-  return (guint) days;
+
+    return path;
 }
 
 void
-dbus_start_hidden(void)
+dbus_set_history_limit (const guint days)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_start_hidden(
-      configurationManagerProxy, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-}
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_history_limit (
+        configurationManagerProxy, days, &error);
 
-int
-dbus_is_start_hidden(void)
-{
-  GError* error = NULL;
-  int state;
-  org_sflphone_SFLphone_ConfigurationManager_is_start_hidden(
-      configurationManagerProxy, &state, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
-  return state;
 }
 
-int
-dbus_popup_mode(void)
+guint
+dbus_get_history_limit (void)
 {
-  GError* error = NULL;
-  int state;
-  org_sflphone_SFLphone_ConfigurationManager_popup_mode(
-      configurationManagerProxy, &state, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-  return state;
-}
+    GError* error = NULL;
+    gint days = 30;
+    org_sflphone_SFLphone_ConfigurationManager_get_history_limit (
+        configurationManagerProxy, &days, &error);
 
-void
-dbus_switch_popup_mode(void)
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_switch_popup_mode(
-      configurationManagerProxy, &error);
-  if (error)
-    {
-      g_error_free(error);
+    if (error) {
+        g_error_free (error);
     }
-}
 
-void
-dbus_set_notify(void)
-{
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_notify(
-      configurationManagerProxy, &error);
-  if (error)
-    {
-      g_error_free(error);
-    }
-}
-
-guint
-dbus_get_notify(void)
-{
-  gint level;
-  GError* error = NULL;
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_notify(
-      configurationManagerProxy, &level, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_notify) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR ("Error while calling get_notify: %s", error->message);
-        }
-      g_error_free(error);
-      return 0;
-    }
-  else
-    {
-      return (guint) level;
-    }
+    return (guint) days;
 }
 
 void
-dbus_set_audio_manager(int api)
+dbus_set_audio_manager (int api)
 {
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_audio_manager(
-      configurationManagerProxy, api, &error);
-  if (error)
-    {
-      g_error_free(error);
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_audio_manager (
+        configurationManagerProxy, api, &error);
+
+    if (error) {
+        g_error_free (error);
     }
 }
 
 int
-dbus_get_audio_manager(void)
+dbus_get_audio_manager (void)
 {
-  int api;
-  GError* error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_audio_manager(
-      configurationManagerProxy, &api, &error);
-  if (error)
-    {
-      ERROR("Error calling dbus_get_audio_manager");
-      g_error_free(error);
+    int api;
+    GError* error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_audio_manager (
+        configurationManagerProxy, &api, &error);
+
+    if (error) {
+        ERROR ("Error calling dbus_get_audio_manager");
+        g_error_free (error);
     }
 
-  return api;
+    return api;
 }
 
 /*
- void
- dbus_set_sip_address( const gchar* address )
- {
- GError* error = NULL;
- org_sflphone_SFLphone_ConfigurationManager_set_sip_address(
- configurationManagerProxy,
- address,
- &error);
- if(error)
- {
- g_error_free(error);
- }
- }
+   void
+   dbus_set_sip_address( const gchar* address )
+   {
+   GError* error = NULL;
+   org_sflphone_SFLphone_ConfigurationManager_set_sip_address(
+   configurationManagerProxy,
+   address,
+   &error);
+   if(error)
+   {
+   g_error_free(error);
+   }
+   }
  */
 
 /*
 
- gint
- dbus_get_sip_address( void )
- {
- GError* error = NULL;
- gint address;
- org_sflphone_SFLphone_ConfigurationManager_get_sip_address(
- configurationManagerProxy,
- &address,
- &error);
- if(error)
- {
- g_error_free(error);
- }
- return address;
- }
+   gint
+   dbus_get_sip_address( void )
+   {
+   GError* error = NULL;
+   gint address;
+   org_sflphone_SFLphone_ConfigurationManager_get_sip_address(
+   configurationManagerProxy,
+   &address,
+   &error);
+   if(error)
+   {
+   g_error_free(error);
+   }
+   return address;
+   }
  */
 
 GHashTable*
-dbus_get_addressbook_settings(void)
+dbus_get_addressbook_settings (void)
 {
 
-  GError *error = NULL;
-  GHashTable *results = NULL;
+    GError *error = NULL;
+    GHashTable *results = NULL;
+
+    //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
 
-  //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
+    org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings (
+        configurationManagerProxy, &results, &error);
 
-  org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings(
-      configurationManagerProxy, &results, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
+        g_error_free (error);
     }
 
-  return results;
+    return results;
 }
 
 void
-dbus_set_addressbook_settings(GHashTable * settings)
+dbus_set_addressbook_settings (GHashTable * settings)
 {
 
-  GError *error = NULL;
+    GError *error = NULL;
 
-  DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
+    DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
 
-  org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings(
-      configurationManagerProxy, settings, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
-      g_error_free(error);
+    org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings (
+        configurationManagerProxy, settings, &error);
+
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_settings");
+        g_error_free (error);
     }
 }
 
 gchar**
-dbus_get_addressbook_list(void)
+dbus_get_addressbook_list (void)
 {
 
-  GError *error = NULL;
-  gchar** array;
+    GError *error = NULL;
+    gchar** array;
+
+    org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list (
+        configurationManagerProxy, &array, &error);
 
-  org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list(
-      configurationManagerProxy, &array, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_list");
+        g_error_free (error);
     }
 
-  return array;
+    return array;
 }
 
 void
-dbus_set_addressbook_list(const gchar** list)
+dbus_set_addressbook_list (const gchar** list)
 {
 
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list(
-      configurationManagerProxy, list, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list");
-      g_error_free(error);
+    org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list (
+        configurationManagerProxy, list, &error);
+
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_addressbook_list");
+        g_error_free (error);
     }
 }
 
 GHashTable*
-dbus_get_hook_settings(void)
+dbus_get_hook_settings (void)
 {
 
-  GError *error = NULL;
-  GHashTable *results = NULL;
+    GError *error = NULL;
+    GHashTable *results = NULL;
+
+    //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
 
-  //DEBUG ("Calling org_sflphone_SFLphone_ConfigurationManager_get_addressbook_settings");
+    org_sflphone_SFLphone_ConfigurationManager_get_hook_settings (
+        configurationManagerProxy, &results, &error);
 
-  org_sflphone_SFLphone_ConfigurationManager_get_hook_settings(
-      configurationManagerProxy, &results, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_hook_settings");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_hook_settings");
+        g_error_free (error);
     }
 
-  return results;
+    return results;
 }
 
 void
-dbus_set_hook_settings(GHashTable * settings)
+dbus_set_hook_settings (GHashTable * settings)
 {
 
-  GError *error = NULL;
+    GError *error = NULL;
+
+    org_sflphone_SFLphone_ConfigurationManager_set_hook_settings (
+        configurationManagerProxy, settings, &error);
 
-  org_sflphone_SFLphone_ConfigurationManager_set_hook_settings(
-      configurationManagerProxy, settings, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_hook_settings");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_hook_settings");
+        g_error_free (error);
     }
 }
 
 GHashTable*
-dbus_get_call_details(const gchar *callID)
+dbus_get_call_details (const gchar *callID)
 {
-  GError *error = NULL;
-  GHashTable *details = NULL;
+    GError *error = NULL;
+    GHashTable *details = NULL;
 
-  org_sflphone_SFLphone_CallManager_get_call_details(callManagerProxy, callID,
-      &details, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_details");
-      g_error_free(error);
+    org_sflphone_SFLphone_CallManager_get_call_details (callManagerProxy, callID,
+            &details, &error);
+
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_details");
+        g_error_free (error);
     }
 
-  return details;
+    return details;
 }
 
 gchar**
-dbus_get_call_list(void)
+dbus_get_call_list (void)
 {
-  GError *error = NULL;
-  gchar **list = NULL;
+    GError *error = NULL;
+    gchar **list = NULL;
+
+    org_sflphone_SFLphone_CallManager_get_call_list (callManagerProxy, &list,
+            &error);
 
-  org_sflphone_SFLphone_CallManager_get_call_list(callManagerProxy, &list,
-      &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_list");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_call_list");
+        g_error_free (error);
     }
 
-  return list;
+    return list;
 }
 
 gchar**
-dbus_get_conference_list(void)
+dbus_get_conference_list (void)
 {
-  GError *error = NULL;
-  gchar **list = NULL;
+    GError *error = NULL;
+    gchar **list = NULL;
 
-  org_sflphone_SFLphone_CallManager_get_conference_list(callManagerProxy,
-      &list, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_list");
-      g_error_free(error);
+    org_sflphone_SFLphone_CallManager_get_conference_list (callManagerProxy,
+            &list, &error);
+
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_list");
+        g_error_free (error);
     }
 
-  return list;
+    return list;
 }
 
 gchar**
-dbus_get_participant_list(const char *confID)
+dbus_get_participant_list (const gchar *confID)
 {
-  GError *error = NULL;
-  gchar **list = NULL;
+    GError *error = NULL;
+    char **list = NULL;
+
+    DEBUG ("DBUS: Get conference %s participant list", confID);
 
-  DEBUG("DBUS: Get conference %s participant list", confID);
+    org_sflphone_SFLphone_CallManager_get_participant_list (callManagerProxy,
+            confID, &list, &error);
 
-  org_sflphone_SFLphone_CallManager_get_participant_list(callManagerProxy,
-      confID, &list, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_participant_list");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_participant_list");
+        g_error_free (error);
     }
 
-  return list;
+    return list;
 }
 
 GHashTable*
-dbus_get_conference_details(const gchar *confID)
+dbus_get_conference_details (const gchar *confID)
 {
-  GError *error = NULL;
-  GHashTable *details = NULL;
+    GError *error = NULL;
+    GHashTable *details = NULL;
+
+    org_sflphone_SFLphone_CallManager_get_conference_details (callManagerProxy,
+            confID, &details, &error);
 
-  org_sflphone_SFLphone_CallManager_get_conference_details(callManagerProxy,
-      confID, &details, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_details");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_conference_details");
+        g_error_free (error);
     }
 
-  return details;
+    return details;
 }
 
 void
-dbus_set_accounts_order(const gchar* order)
+dbus_set_accounts_order (const gchar* order)
 {
 
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_ConfigurationManager_set_accounts_order(
-      configurationManagerProxy, order, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_accounts_order");
-      g_error_free(error);
+    org_sflphone_SFLphone_ConfigurationManager_set_accounts_order (
+        configurationManagerProxy, order, &error);
+
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_set_accounts_order");
+        g_error_free (error);
     }
 }
 
 GHashTable*
-dbus_get_history(void)
+dbus_get_history (void)
 {
-  GError *error = NULL;
-  GHashTable *entries = NULL;
+    GError *error = NULL;
+    GHashTable *entries = NULL;
+
+    org_sflphone_SFLphone_ConfigurationManager_get_history (
+        configurationManagerProxy, &entries, &error);
 
-  org_sflphone_SFLphone_ConfigurationManager_get_history(
-      configurationManagerProxy, &entries, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_history");
-      g_error_free(error);
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_get_history");
+        g_error_free (error);
     }
 
-  return entries;
+    return entries;
 }
 
 void
-dbus_set_history(GHashTable* entries)
+dbus_set_history (GHashTable* entries)
 {
-  GError *error = NULL;
+    GError *error = NULL;
 
-  org_sflphone_SFLphone_ConfigurationManager_set_history(
-      configurationManagerProxy, entries, &error);
-  if (error)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_CallManager_set_history");
-      g_error_free(error);
+    org_sflphone_SFLphone_ConfigurationManager_set_history (
+        configurationManagerProxy, entries, &error);
+
+    if (error) {
+        ERROR ("Error calling org_sflphone_SFLphone_CallManager_set_history");
+        g_error_free (error);
     }
 }
 
 void
-dbus_confirm_sas(const callable_obj_t * c)
+dbus_confirm_sas (const callable_obj_t * c)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_set_sa_sverified(callManagerProxy,
-      c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call setSASVerified() on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_set_sa_sverified (callManagerProxy,
+            c->_callID, &error);
+
+    if (error) {
+        ERROR ("Failed to call setSASVerified() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_reset_sas(const callable_obj_t * c)
+dbus_reset_sas (const callable_obj_t * c)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_reset_sa_sverified(callManagerProxy,
-      c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call resetSASVerified on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_reset_sa_sverified (callManagerProxy,
+            c->_callID, &error);
+
+    if (error) {
+        ERROR ("Failed to call resetSASVerified on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_set_confirm_go_clear(const callable_obj_t * c)
+dbus_set_confirm_go_clear (const callable_obj_t * c)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_set_confirm_go_clear(callManagerProxy,
-      c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call set_confirm_go_clear on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_set_confirm_go_clear (callManagerProxy,
+            c->_callID, &error);
+
+    if (error) {
+        ERROR ("Failed to call set_confirm_go_clear on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_request_go_clear(const callable_obj_t * c)
+dbus_request_go_clear (const callable_obj_t * c)
 {
-  GError *error = NULL;
-  org_sflphone_SFLphone_CallManager_request_go_clear(callManagerProxy,
-      c->_callID, &error);
-  if (error)
-    {
-      ERROR ("Failed to call request_go_clear on CallManager: %s",
-          error->message);
-      g_error_free(error);
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_request_go_clear (callManagerProxy,
+            c->_callID, &error);
+
+    if (error) {
+        ERROR ("Failed to call request_go_clear on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 gchar**
 dbus_get_supported_tls_method()
 {
-  GError *error = NULL;
-  gchar** array = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_get_supported_tls_method(
-      configurationManagerProxy, &array, &error);
+    GError *error = NULL;
+    gchar** array = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_get_supported_tls_method (
+        configurationManagerProxy, &array, &error);
 
-  if (error != NULL)
-    {
-      ERROR ("Failed to call get_supported_tls_method() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error != NULL) {
+        ERROR ("Failed to call get_supported_tls_method() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
-  return array;
+
+    return array;
 }
 
 GHashTable*
-dbus_get_tls_settings_default(void)
+dbus_get_tls_settings_default (void)
 {
-  GError *error = NULL;
-  GHashTable *results = NULL;
+    GError *error = NULL;
+    GHashTable *results = NULL;
 
-  org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default(
-      configurationManagerProxy, &results, &error);
-  if (error != NULL)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default");
-      g_error_free(error);
+    org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default (
+        configurationManagerProxy, &results, &error);
+
+    if (error != NULL) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_tls_settings_default");
+        g_error_free (error);
     }
 
-  return results;
+    return results;
 }
 
 gchar *
-dbus_get_address_from_interface_name(gchar* interface)
+dbus_get_address_from_interface_name (gchar* interface)
 {
-  GError *error = NULL;
-  gchar * address;
+    GError *error = NULL;
+    gchar * address;
+
+    org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name (
+        configurationManagerProxy, interface, &address, &error);
 
-  org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name(
-      configurationManagerProxy, interface, &address, &error);
-  if (error != NULL)
-    {
-      ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name\n");
-      g_error_free(error);
+    if (error != NULL) {
+        ERROR ("Error calling org_sflphone_SFLphone_ConfigurationManager_get_addr_from_interface_name\n");
+        g_error_free (error);
     }
 
-  return address;
+    return address;
 
 }
 
 gchar **
-dbus_get_all_ip_interface(void)
-{
-  GError *error = NULL;
-  gchar ** array;
-
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface(
-      configurationManagerProxy, &array, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_all_ip_interface: %s", error->message);
+dbus_get_all_ip_interface (void)
+{
+    GError *error = NULL;
+    gchar ** array;
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface (
+                configurationManagerProxy, &array, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_all_ip_interface: %s", error->message);
         }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
-      return array;
+
+        g_error_free (error);
+        return NULL;
+    } else {
+        DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
+        return array;
     }
 }
 
 gchar **
-dbus_get_all_ip_interface_by_name(void)
-{
-  GError *error = NULL;
-  gchar ** array;
-
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface_by_name(
-      configurationManagerProxy, &array, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name(error), error->message);
+dbus_get_all_ip_interface_by_name (void)
+{
+    GError *error = NULL;
+    gchar ** array;
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_all_ip_interface_by_name (
+                configurationManagerProxy, &array, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_all_ip_interface) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_all_ip_interface: %s", error->message);
         }
-      else
-        {
-          ERROR("Error while calling get_all_ip_interface: %s", error->message);
-        }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
-      return array;
-    }
-}
 
-guint
-dbus_get_window_width(void)
-{
-
-  GError *error = NULL;
-  guint value;
-
-  org_sflphone_SFLphone_ConfigurationManager_get_window_width(
-      configurationManagerProxy, &value, &error);
-
-  if (error != NULL)
-    {
-      ERROR ("Failed to call get_window_width() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+        g_error_free (error);
+        return NULL;
+    } else {
+        DEBUG ("DBus called get_all_ip_interface() on ConfigurationManager");
+        return array;
     }
-  return value;
 }
 
-guint
-dbus_get_window_height(void)
-{
-
-  GError *error = NULL;
-  guint value;
-
-  org_sflphone_SFLphone_ConfigurationManager_get_window_height(
-      configurationManagerProxy, &value, &error);
-
-  if (error != NULL)
-    {
-      ERROR ("Failed to call get_window_height() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
-    }
-  return value;
-}
-
-void
-dbus_set_window_width(const guint width)
-{
-
-  GError *error = NULL;
-
-  org_sflphone_SFLphone_ConfigurationManager_set_window_width(
-      configurationManagerProxy, width, &error);
-
-  if (error != NULL)
-    {
-      ERROR ("Failed to call set_window_width() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
-    }
-}
-
-void
-dbus_set_window_height(const guint height)
-{
-
-  GError *error = NULL;
-
-  org_sflphone_SFLphone_ConfigurationManager_set_window_height(
-      configurationManagerProxy, height, &error);
-
-  if (error != NULL)
-    {
-      ERROR ("Failed to call set_window_height() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
-    }
-}
-
-guint
-dbus_get_window_position_x(void)
-{
-
-  GError *error = NULL;
-  guint value;
-
-  org_sflphone_SFLphone_ConfigurationManager_get_window_position_x(
-      configurationManagerProxy, &value, &error);
-
-  if (error != NULL)
-    {
-      ERROR ("Failed to call get_window_position_x() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
-    }
-  return value;
-}
-
-guint
-dbus_get_window_position_y(void)
-{
-
-  GError *error = NULL;
-  guint value;
-
-  org_sflphone_SFLphone_ConfigurationManager_get_window_position_y(
-      configurationManagerProxy, &value, &error);
+GHashTable*
+dbus_get_shortcuts (void)
+{
+    GError *error = NULL;
+    GHashTable * shortcuts;
+
+    if (!org_sflphone_SFLphone_ConfigurationManager_get_shortcuts (
+                configurationManagerProxy, &shortcuts, &error)) {
+        if (error->domain == DBUS_GERROR && error->code
+                == DBUS_GERROR_REMOTE_EXCEPTION) {
+            ERROR ("Caught remote method (get_shortcuts) exception  %s: %s", dbus_g_error_get_name (error), error->message);
+        } else {
+            ERROR ("Error while calling get_shortcuts: %s", error->message);
+        }
 
-  if (error != NULL)
-    {
-      ERROR ("Failed to call get_window_position_y() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+        g_error_free (error);
+        return NULL;
+    } else {
+        return shortcuts;
     }
-  return value;
 }
 
 void
-dbus_set_window_position_x(const guint posx)
+dbus_set_shortcuts (GHashTable * shortcuts)
 {
+    GError *error = NULL;
+    org_sflphone_SFLphone_ConfigurationManager_set_shortcuts (
+        configurationManagerProxy, shortcuts, &error);
 
-  GError *error = NULL;
-
-  org_sflphone_SFLphone_ConfigurationManager_set_window_position_x(
-      configurationManagerProxy, posx, &error);
 
-  if (error != NULL)
-    {
-      ERROR ("Failed to call set_window_position_x() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
+    if (error) {
+        ERROR ("Failed to call set_shortcuts() on ConfigurationManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
 
 void
-dbus_set_window_position_y(const guint posy)
+dbus_send_text_message (const gchar* callID, const gchar *message)
 {
+    GError *error = NULL;
+    org_sflphone_SFLphone_CallManager_send_text_message (
+        callManagerProxy, callID, message, &error);
 
-  GError *error = NULL;
-
-  org_sflphone_SFLphone_ConfigurationManager_set_window_position_y(
-      configurationManagerProxy, posy, &error);
-
-  if (error != NULL)
-    {
-      ERROR ("Failed to call set_window_position_y() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
-    }
-}
-
-GHashTable*
-dbus_get_shortcuts(void)
-{
-  GError *error = NULL;
-  GHashTable * shortcuts;
-  if (!org_sflphone_SFLphone_ConfigurationManager_get_shortcuts(
-      configurationManagerProxy, &shortcuts, &error))
-    {
-      if (error->domain == DBUS_GERROR && error->code
-          == DBUS_GERROR_REMOTE_EXCEPTION)
-        {
-          ERROR ("Caught remote method (get_shortcuts) exception  %s: %s", dbus_g_error_get_name(error), error->message);
-        }
-      else
-        {
-          ERROR("Error while calling get_shortcuts: %s", error->message);
-        }
-      g_error_free(error);
-      return NULL;
-    }
-  else
-    {
-      return shortcuts;
+    if (error) {
+        ERROR ("Failed to call send_text_message() on CallManager: %s",
+               error->message);
+        g_error_free (error);
     }
 }
-
-void
-dbus_set_shortcuts(GHashTable * shortcuts)
-{
-  GError *error = NULL;
-  org_sflphone_SFLphone_ConfigurationManager_set_shortcuts(
-      configurationManagerProxy, shortcuts, &error);
-  if (error)
-    {
-      ERROR ("Failed to call set_shortcuts() on ConfigurationManager: %s",
-          error->message);
-      g_error_free(error);
-    }
-}
-
-
-void dbus_enable_status_icon (const gchar *value) {
-
-       GError *error = NULL;
-
-       org_sflphone_SFLphone_ConfigurationManager_enable_status_icon (configurationManagerProxy, value, &error);
-
-       if (error != NULL) {
-           ERROR ("Failed to call enable_status_icon on ConfigurationManager: %s",
-           error->message);
-           g_error_free (error);
-       }
-}
-
-gchar* dbus_is_status_icon_enabled (void) {
-
-       GError *error = NULL;
-       gchar *value = NULL;
-
-       org_sflphone_SFLphone_ConfigurationManager_is_status_icon_enabled (configurationManagerProxy, &value, &error);
-
-       if (error != NULL) {
-           ERROR ("Failed to call is_status_icon_enabled on ConfigurationManager: %s",
-           error->message);
-           g_error_free (error);
-       }
-       return value;
-}
-
diff --git a/sflphone-client-gnome/src/dbus/dbus.h b/sflphone-client-gnome/src/dbus/dbus.h
index 53e4747cf975300324fe4d0135e2516bd80f6d5c..1389918066cc51259c79f3defb5bc13e8da2a137 100644
--- a/sflphone-client-gnome/src/dbus/dbus.h
+++ b/sflphone-client-gnome/src/dbus/dbus.h
@@ -27,6 +27,7 @@
  *  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
+ *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
 
@@ -60,19 +61,19 @@ void dbus_clean ();
  * CallManager - Hold a call
  * @param c The call to hold
  */
-void dbus_hold (const callable_obj_t * c );
+void dbus_hold (const callable_obj_t * c);
 
 /**
  * CallManager - Unhold a call
  * @param c The call to unhold
  */
-void dbus_unhold (const callable_obj_t * c );
+void dbus_unhold (const callable_obj_t * c);
 
 /**
  * CallManager - Hang up a call
  * @param c The call to hang up
  */
-void dbus_hang_up (const callable_obj_t * c );
+void dbus_hang_up (const callable_obj_t * c);
 
 /**
  * CallManager - Transfer a call
@@ -110,50 +111,43 @@ gchar ** dbus_account_list();
  * @param accountID The unique of the account
  * @return GHashTable* The details of the account
  */
-GHashTable * dbus_account_details(gchar * accountID);
+GHashTable * dbus_account_details (gchar * accountID);
 
 /**
  * ConfigurationManager - Set the details of a specific account
  * @param a The account to update
  */
-void dbus_set_account_details(account_t *a);
+void dbus_set_account_details (account_t *a);
 
 /**
- * ConfigurationManager - Set the additional credential information 
+ * ConfigurationManager - Set the additional credential information
  * of a specific account, for a specific credential index.
  * This function will add the new section on the server side
  * if it cannot be found.
  * @param a The account to update
  * @param index The index for the credential to update
  */
-void dbus_set_credential(account_t *a, int index);
+void dbus_set_credential (account_t *a, int index);
 
 /**
- * ConfigurationManager - Set the additional credential information 
+ * ConfigurationManager - Set the additional credential information
  * of a specific account, for a specific credential index.
  * This function will add the new section on the server side
  * if it cannot be found.
  * @param a The account to update
  * @return int The number of credentials specified
  */
-int dbus_get_number_of_credential(gchar * accountID);
+int dbus_get_number_of_credential (gchar * accountID);
 
 /**
  * ConfigurationManager - Delete all credentials defined for
  * a given account.
  * @param a The account id
  */
-void dbus_delete_all_credential(account_t *a);
-
-/**
- * ConfigurationManager - Set the number of credential that
- * is being used.
- * @param a The account id
- */
-void dbus_set_number_of_credential(account_t *a, int number);
+void dbus_delete_all_credential (account_t *a);
 
 /**
- * ConfigurationManager - Set the additional credential information 
+ * ConfigurationManager - Set the additional credential information
  * of a specific account, for a specific credential index.
  * This function will add the new section on the server side
  * if it cannot be found.
@@ -161,17 +155,17 @@ void dbus_set_number_of_credential(account_t *a, int number);
  * @param index The credential index
  * @return GHashTable* The credential at index "index" for the given account
  */
-GHashTable* dbus_get_credential(gchar * accountID, int index);
+GHashTable* dbus_get_credential (gchar * accountID, int index);
 
 /**
- * ConfigurationManager - Get the details for the ip2ip profile 
+ * ConfigurationManager - Get the details for the ip2ip profile
  */
-GHashTable * dbus_get_ip2_ip_details(void);
+GHashTable * dbus_get_ip2_ip_details (void);
 
 /**
- * ConfigurationManager - Set the details for the ip2ip profile 
+ * ConfigurationManager - Set the details for the ip2ip profile
  */
-void dbus_set_ip2ip_details(GHashTable * properties);
+void dbus_set_ip2ip_details (GHashTable * properties);
 
 /**
  * ConfigurationManager - Send registration request
@@ -180,38 +174,38 @@ void dbus_set_ip2ip_details(GHashTable * properties);
  *		 0 for unregistration request
  *		 1 for registration request
  */
-void dbus_send_register( gchar* accountID , const guint enable );
+void dbus_send_register (gchar* accountID , const guint enable);
 
 /**
  * ConfigurationManager - Add an account to the list
  * @param a The account to add
  */
-gchar* dbus_add_account(account_t *a);
+gchar* dbus_add_account (account_t *a);
 
 /**
  * ConfigurationManager - Remove an account from the list
  * @param accountID The account to remove
  */
-void dbus_remove_account(gchar * accountID);
+void dbus_remove_account (gchar * accountID);
 
 /**
  * ConfigurationManager - Set volume for speaker/mic
  * @param device The speaker or the mic
  * @param value The new value
  */
-void dbus_set_volume(const gchar * device, gdouble value);
+void dbus_set_volume (const gchar * device, gdouble value);
 
 /**
  * ConfigurationManager - Get the volume of a device
  * @param device The speaker or the mic
  */
-gdouble dbus_get_volume(const gchar * device);
+gdouble dbus_get_volume (const gchar * device);
 
 /**
  * ConfigurationManager - Play DTMF
  * @param key The DTMF to send
  */
-void dbus_play_dtmf(const gchar * key);
+void dbus_play_dtmf (const gchar * key);
 
 /**
  * ConfigurationManager - Get the codecs list
@@ -224,7 +218,7 @@ gchar** dbus_codec_list();
  * @param payload The payload of the codec
  * @return gchar** The codec details
  */
-gchar** dbus_codec_details(int payload);
+gchar** dbus_codec_details (int payload);
 
 /**
  * ConfigurationManager - Get the default codec list
@@ -249,31 +243,32 @@ void dbus_set_active_codec_list (const gchar** list, const gchar*);
  * CallManager - return the codec name
  * @param callable_obj_t* current call
  */
-gchar* dbus_get_current_codec_name(const callable_obj_t * c);
+gchar* dbus_get_current_codec_name (const callable_obj_t * c);
 
 /**
- * ConfigurationManager - Get the list of available input audio plugins
+ * ConfigurationManager - Get the list of available output audio plugins
  * @return gchar** The list of plugins
  */
-gchar** dbus_get_input_audio_plugin_list();
+gchar** dbus_get_audio_plugin_list();
+
 
 /**
- * ConfigurationManager - Get the list of available output audio plugins
- * @return gchar** The list of plugins
+ * ConfigurationManager - Select an input audio plugin
+ * @param audioPlugin The string description of the plugin
  */
-gchar** dbus_get_output_audio_plugin_list();
+void dbus_set_audio_plugin (gchar* audioPlugin);
 
 /**
  * ConfigurationManager - Select an input audio plugin
  * @param audioPlugin The string description of the plugin
  */
-void dbus_set_input_audio_plugin(gchar* audioPlugin);
+void dbus_set_input_audio_plugin (gchar* audioPlugin);
 
 /**
  * ConfigurationManager - Select an output audio plugin
  * @param audioPlugin The string description of the plugin
  */
-void dbus_set_output_audio_plugin(gchar* audioPlugin);
+void dbus_set_output_audio_plugin (gchar* audioPlugin);
 
 /**
  * ConfigurationManager - Get the list of available output audio devices
@@ -285,7 +280,7 @@ gchar** dbus_get_audio_output_device_list();
  * ConfigurationManager - Select an output audio device
  * @param index The index of the soundcard
  */
-void dbus_set_audio_output_device(const int index);
+void dbus_set_audio_output_device (const int index);
 
 /**
  * ConfigurationManager - Get the list of available input audio devices
@@ -297,7 +292,7 @@ gchar** dbus_get_audio_input_device_list();
  * ConfigurationManager - Select an input audio device
  * @param index The index of the soundcard
  */
-void dbus_set_audio_input_device(const int index);
+void dbus_set_audio_input_device (const int index);
 
 /**
  * ConfigurationManager - Get the current audio devices
@@ -310,7 +305,7 @@ gchar** dbus_get_current_audio_devices_index();
  * @param name The string description of the audio device
  * @return int The index of the device
  */
-int dbus_get_audio_device_index(const gchar* name);
+int dbus_get_audio_device_index (const gchar* name);
 
 /**
  * ConfigurationManager - Get the current output audio plugin
@@ -322,7 +317,20 @@ int dbus_get_audio_device_index(const gchar* name);
 gchar* dbus_get_current_audio_output_plugin();
 
 /**
- * ConfigurationManager - Query to server to 
+ * ConfigurationManager - Get the current noise suppressor state
+ * @return gchar* The state (enabled/disabled)
+ */
+gchar *dbus_get_noise_suppress_state (void);
+
+/**
+ * ConfigurationManager - Set the current noise suppressor state
+ * @param gchar* The state (enabled/disabled)
+ */
+void dbus_set_noise_suppress_state (gchar *state);
+
+
+/**
+ * ConfigurationManager - Query to server to
  * know if MD5 credential hashing is enabled.
  * @return True if enabled, false otherwise
  *
@@ -333,16 +341,16 @@ gboolean dbus_is_md5_credential_hashing();
  * ConfigurationManager - Set whether or not
  * the server should store credential as
  * a md5 hash.
- * @param enabled 
+ * @param enabled
  */
-void dbus_set_md5_credential_hashing(gboolean enabled);
+void dbus_set_md5_credential_hashing (gboolean enabled);
 
 /**
  * ConfigurationManager - Tells the GUI if IAX2 support is enabled
  * @return int 1 if IAX2 is enabled
  *	       0 otherwise
  */
-int dbus_is_iax2_enabled( void );
+int dbus_is_iax2_enabled (void);
 
 /**
  * ConfigurationManager - Query the server about the ringtone option.
@@ -350,129 +358,50 @@ int dbus_is_iax2_enabled( void );
  * @return int	1 if enabled
  *	        0 otherwise
  */
-int dbus_is_ringtone_enabled( void );
+int dbus_is_ringtone_enabled (const gchar *accountID);
 
 /**
  * ConfigurationManager - Set the ringtone option
  * Inverse current value
  */
-void dbus_ringtone_enabled( void );
+void dbus_ringtone_enabled (const gchar *accountID);
 
 /**
  * ConfigurationManager - Get the ringtone
  * @return gchar* The file name selected as a ringtone
  */
-gchar* dbus_get_ringtone_choice( void );
+gchar* dbus_get_ringtone_choice (const gchar *accountID);
 
 /**
  * ConfigurationManager - Set a ringtone
  * @param tone The file name of the ringtone
  */
-void dbus_set_ringtone_choice( const gchar* tone );
-
-/**
- * ConfigurationManager - Set the dialpad visible or not
- */
-void dbus_set_dialpad (gboolean display);
-
-/**
- * ConfigurationManager - Tells if the user wants to display the dialpad or not
- * @return int 1 if dialpad has to be displayed
- *	       0 otherwise
- */
-int dbus_get_dialpad( void );
-
-/**
- * ConfigurationManager - Set the searchbar visible or not
- */
-void dbus_set_searchbar(  );
-
-/**
- * ConfigurationManager - Tells if the user wants to display the search bar or not
- * @return int 1 if the search bar has to be displayed
- *	       0 otherwise
- */
-int dbus_get_searchbar( void );
-
-/**
- * ConfigurationManager - Set the volume controls visible or not
- */
-void dbus_set_volume_controls (gboolean display);
-
-/**
- * ConfigurationManager - Tells if the user wants to display the volume controls or not
- * @return int 1 if the controls have to be displayed
- *	       0 otherwise
- */
-int dbus_get_volume_controls( void );
-
-/**
- * ConfigurationManager - Configure the start-up option
- * At startup, SFLphone can be displayed or start hidden in the system tray
- */
-void dbus_start_hidden( void );
+void dbus_set_ringtone_choice (const gchar *accountID, const gchar* tone);
 
 /**
  * ConfigurationManager - Gives the maximum number of days the user wants to have in the history
  * @return double The maximum number of days
  */
-guint dbus_get_history_limit( void );
+guint dbus_get_history_limit (void);
 
 /**
  * ConfigurationManager - Gives the maximum number of days the user wants to have in the history
  */
 void dbus_set_history_limit (const guint days);
 
-void dbus_set_history_enabled (void);
-
-gchar* dbus_get_history_enabled (void);
-
-/**
- * ConfigurationManager - Configure the start-up option
- * @return int	1 if SFLphone should start in the system tray
- *	        0 otherwise
- */
-int dbus_is_start_hidden( void );
-
-/**
- * ConfigurationManager - Configure the popup behaviour
- * When SFLphone is in the system tray, you can configure when it popups
- * Never or only on incoming calls
- */
-void dbus_switch_popup_mode( void );
-
-/**
- * ConfigurationManager - Configure the popup behaviour
- * @return int	1 if it should popup on incoming calls
- *		0 if it should never popups
- */
-int dbus_popup_mode( void );
-
 /**
  * ConfigurationManager - Returns the selected audio manager
  * @return int	0	ALSA
  *		1	PULSEAUDIO
  */
-int dbus_get_audio_manager( void );
+int dbus_get_audio_manager (void);
 
 /**
  * ConfigurationManager - Set the audio manager
  * @param api	0	ALSA
  *		1	PULSEAUDIO
  */
-void dbus_set_audio_manager( int api );
-
-/**
- * ConfigurationManager - Configure the notification level
- * @return int	0 disable
- *		1 enable
- */
-guint dbus_get_notify( void );
-
-/**
- * ConfigurationManager - Configure the notification level
- */
-void dbus_set_notify( void );
+void dbus_set_audio_manager (int api);
 
 /**
  * ConfigurationManager - Start a tone when a new call is open and no numbers have been dialed
@@ -481,7 +410,7 @@ void dbus_set_notify( void );
  * @param type  TONE_WITH_MESSAGE
  *		TONE_WITHOUT_MESSAGE
  */
-void dbus_start_tone(const int start , const guint type);
+void dbus_start_tone (const int start , const guint type);
 
 /**
  * Instance - Send registration request to dbus service.
@@ -489,23 +418,42 @@ void dbus_start_tone(const int start , const guint type);
  * @param pid The pid of the processus client
  * @param name The string description of the client. Here : GTK+ Client
  */
-void dbus_register( int pid, gchar * name);
+void dbus_register (int pid, gchar * name);
 
 /**
  * Instance - Send unregistration request to dbus services
  * @param pid The pid of the processus
  */
-void dbus_unregister(int pid);
+void dbus_unregister (int pid);
 
-void dbus_set_sip_address(const gchar* address);
+void dbus_set_sip_address (const gchar* address);
 
-gint dbus_get_sip_address(void);
+gint dbus_get_sip_address (void);
 
-void dbus_add_participant(const gchar* callID, const gchar* confID);
 
+/**
+ * Add a participant (callID) to this conference (confID)
+ */
+void dbus_add_participant (const gchar* callID, const gchar* confID);
+
+/**
+ * Return a list of participant for this conference (confID)
+ */
+gchar** dbus_get_participant_list (const gchar *confID);
+
+/**
+ * Toggle recording for this instance, may be call or conference
+ */
 void dbus_set_record (const gchar * id);
 
+/**
+ * Set the path where the recorded audio files will be stored
+ */
 void dbus_set_record_path (const gchar *path);
+
+/**
+ * Get the path where the recorded audio files are stored
+ */
 gchar* dbus_get_record_path (void);
 
 /**
@@ -527,17 +475,17 @@ void dbus_set_addressbook_list (const gchar** list);
 /**
  * Resolve the local address given an interface name
  */
-gchar * dbus_get_address_from_interface_name(gchar* interface);
+gchar * dbus_get_address_from_interface_name (gchar* interface);
 
 /**
  * Query the daemon to return a list of network interface (described as there IP address)
  */
-gchar** dbus_get_all_ip_interface(void);
+gchar** dbus_get_all_ip_interface (void);
 
 /**
  * Query the daemon to return a list of network interface (described as there name)
  */
-gchar** dbus_get_all_ip_interface_by_name(void);
+gchar** dbus_get_all_ip_interface_by_name (void);
 
 /**
  * Encapsulate all the url hook-related configuration
@@ -552,7 +500,7 @@ GHashTable* dbus_get_hook_settings (void);
 void dbus_set_hook_settings (GHashTable *);
 
 
-gboolean dbus_get_is_recording(const callable_obj_t *);
+gboolean dbus_get_is_recording (const callable_obj_t *);
 
 GHashTable* dbus_get_call_details (const gchar* callID);
 
@@ -571,21 +519,21 @@ void dbus_set_history (GHashTable* entries);
 void sflphone_display_transfer_status (const gchar* message);
 
 /**
- * CallManager - Confirm Short Authentication String 
+ * CallManager - Confirm Short Authentication String
  * for a given callId
  * @param c The call to confirm SAS
  */
 void dbus_confirm_sas (const callable_obj_t * c);
 
 /**
- * CallManager - Reset Short Authentication String 
+ * CallManager - Reset Short Authentication String
  * for a given callId
  * @param c The call to reset SAS
  */
 void dbus_reset_sas (const callable_obj_t * c);
 
 /**
- * CallManager - Request Go Clear in the ZRTP Protocol 
+ * CallManager - Request Go Clear in the ZRTP Protocol
  * for a given callId
  * @param c The call that we want to go clear
  */
@@ -600,26 +548,39 @@ void dbus_set_confirm_go_clear (const callable_obj_t * c);
 
 /**
  * CallManager - Get the list of supported TLS methods from
- * the server in textual form.  
+ * the server in textual form.
  * @return an array of string representing supported methods
  */
 gchar** dbus_get_supported_tls_method();
 
-gchar** dbus_get_participant_list (const char * confID);
+GHashTable* dbus_get_shortcuts (void);
+
+void dbus_set_shortcuts (GHashTable * shortcuts);
+
+void dbus_set_audio_ringtone_device (const int index);
+
+void
+dbus_hang_up_conference (const conference_obj_t * c);
+
+void
+dbus_hold_conference (const conference_obj_t * c);
+
+void
+dbus_unhold_conference (const conference_obj_t * c);
+
+void
+dbus_detach_participant (const gchar* callID);
+
+void
+dbus_join_participant (const gchar* sel_callID, const gchar* drag_callID);
 
-guint dbus_get_window_width (void);
-guint dbus_get_window_height (void);
-void dbus_set_window_height (const guint height);
-void dbus_set_window_width (const guint width);
-guint dbus_get_window_position_x (void);
-guint dbus_get_window_position_y (void);
-void dbus_set_window_position_x (const guint posx);
-void dbus_set_window_position_y (const guint posy);
+void
+dbus_join_conference (const gchar* sel_confID, const gchar* drag_confID);
 
-GHashTable* dbus_get_shortcuts(void);
-void dbus_set_shortcuts(GHashTable * shortcuts);
+void
+dbus_add_main_participant (const gchar* confID);
 
-void dbus_enable_status_icon (const gchar*);
-gchar* dbus_is_status_icon_enabled (void);
+/* Instant messaging */
+void dbus_send_text_message (const gchar* callID, const gchar *message);
 
 #endif
diff --git a/sflphone-client-gnome/src/dialpad.c b/sflphone-client-gnome/src/dialpad.c
index 31ed1374132a772d02195a4d732c7f30ca195f8b..04009dc0450c9fb1e57f407f528965269251b900 100644
--- a/sflphone-client-gnome/src/dialpad.c
+++ b/sflphone-client-gnome/src/dialpad.c
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #include <dialpad.h>
 #include <actions.h>
 
@@ -37,80 +37,80 @@
 static void
 dialpad_pressed (GtkWidget * widget UNUSED, gpointer data)
 {
-  gtk_widget_grab_focus(GTK_WIDGET(current_calls->view));
-  sflphone_keypad(0, (gchar*) data);
+    gtk_widget_grab_focus (GTK_WIDGET (current_calls->view));
+    sflphone_keypad (0, (gchar*) data);
 }
 
-GtkWidget * 
+GtkWidget *
 get_numpad_button (const gchar* number, gboolean twolines, const gchar * letters)
 {
-  GtkWidget * button;
-  GtkWidget * label;
-  gchar * markup;
-  
-  button = gtk_button_new ();
-  label = gtk_label_new ( "1" );
-  gtk_label_set_single_line_mode ( GTK_LABEL(label), FALSE );
-  gtk_label_set_justify( GTK_LABEL(label), GTK_JUSTIFY_CENTER );
-  markup = g_markup_printf_escaped("<big><b>%s</b></big>%s%s", number, (twolines == TRUE ? "\n": ""), letters);
-  gtk_label_set_markup ( GTK_LABEL(label), markup);
-  gtk_container_add (GTK_CONTAINER (button), label);
-  g_signal_connect (G_OBJECT (button), "clicked",
-                    G_CALLBACK (dialpad_pressed), (gchar*)number);
-  
-  return button;
+    GtkWidget * button;
+    GtkWidget * label;
+    gchar * markup;
+
+    button = gtk_button_new ();
+    label = gtk_label_new ("1");
+    gtk_label_set_single_line_mode (GTK_LABEL (label), FALSE);
+    gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
+    markup = g_markup_printf_escaped ("<big><b>%s</b></big>%s%s", number, (twolines == TRUE ? "\n": ""), letters);
+    gtk_label_set_markup (GTK_LABEL (label), markup);
+    gtk_container_add (GTK_CONTAINER (button), label);
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      G_CALLBACK (dialpad_pressed), (gchar*) number);
+
+    return button;
 }
 
-GtkWidget * 
+GtkWidget *
 create_dialpad()
 {
-  GtkWidget * button;
-  GtkWidget * table;
-  
-  table = gtk_table_new ( 4, 3, TRUE /* homogeneous */);
-  gtk_table_set_row_spacings( GTK_TABLE(table), 5);
-  gtk_table_set_col_spacings( GTK_TABLE(table), 5);
-  gtk_container_set_border_width (GTK_CONTAINER(table), 5);
-  
-  button = get_numpad_button("1", TRUE, "");
-  gtk_table_attach ( GTK_TABLE( table ), button, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("2", TRUE, "a b c");
-  gtk_table_attach ( GTK_TABLE( table ), button, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("3", TRUE, "d e f");
-  gtk_table_attach ( GTK_TABLE( table ), button, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  
-  button = get_numpad_button("4", TRUE, "g h i");
-  gtk_table_attach ( GTK_TABLE( table ), button, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("5", TRUE, "j k l");
-  gtk_table_attach ( GTK_TABLE( table ), button, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("6", TRUE, "m n o");
-  gtk_table_attach ( GTK_TABLE( table ), button, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  
-  button = get_numpad_button("7", TRUE, "p q r s");
-  gtk_table_attach ( GTK_TABLE( table ), button, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("8", TRUE, "t u v");
-  gtk_table_attach ( GTK_TABLE( table ), button, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("9", TRUE, "w x y z");
-  gtk_table_attach ( GTK_TABLE( table ), button, 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  
-  button = get_numpad_button("*", FALSE, "");
-  gtk_table_attach ( GTK_TABLE( table ), button, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("0", FALSE, "");
-  gtk_table_attach ( GTK_TABLE( table ), button, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  button = get_numpad_button("#", FALSE, "");
-  gtk_table_attach ( GTK_TABLE( table ), button, 2, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
-  
-  return table;
-  
+    GtkWidget * button;
+    GtkWidget * table;
+
+    table = gtk_table_new (4, 3, TRUE /* homogeneous */);
+    gtk_table_set_row_spacings (GTK_TABLE (table), 5);
+    gtk_table_set_col_spacings (GTK_TABLE (table), 5);
+    gtk_container_set_border_width (GTK_CONTAINER (table), 5);
+
+    button = get_numpad_button ("1", TRUE, "");
+    gtk_table_attach (GTK_TABLE (table), button, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("2", TRUE, "a b c");
+    gtk_table_attach (GTK_TABLE (table), button, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("3", TRUE, "d e f");
+    gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+
+    button = get_numpad_button ("4", TRUE, "g h i");
+    gtk_table_attach (GTK_TABLE (table), button, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("5", TRUE, "j k l");
+    gtk_table_attach (GTK_TABLE (table), button, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("6", TRUE, "m n o");
+    gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+
+    button = get_numpad_button ("7", TRUE, "p q r s");
+    gtk_table_attach (GTK_TABLE (table), button, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("8", TRUE, "t u v");
+    gtk_table_attach (GTK_TABLE (table), button, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("9", TRUE, "w x y z");
+    gtk_table_attach (GTK_TABLE (table), button, 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+
+    button = get_numpad_button ("*", FALSE, "");
+    gtk_table_attach (GTK_TABLE (table), button, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("0", FALSE, "");
+    gtk_table_attach (GTK_TABLE (table), button, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    button = get_numpad_button ("#", FALSE, "");
+    gtk_table_attach (GTK_TABLE (table), button, 2, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
+
+    return table;
+
 }
diff --git a/sflphone-client-gnome/src/dialpad.h b/sflphone-client-gnome/src/dialpad.h
index c95f5caf55541fd8db6fe6e4152c35db652fc945..c25f2ebff216bdfa52b1a98fc3313c84ec6676d1 100644
--- a/sflphone-client-gnome/src/dialpad.h
+++ b/sflphone-client-gnome/src/dialpad.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __DIALPAD_H__
 #define __DIALPAD_H__
 
@@ -42,4 +42,4 @@
  */
 GtkWidget * create_dialpad();
 
-#endif 
+#endif
diff --git a/sflphone-client-gnome/src/eel-gconf-extensions.c b/sflphone-client-gnome/src/eel-gconf-extensions.c
new file mode 100644
index 0000000000000000000000000000000000000000..1835935eeddfa86c22201518232f8a3a021dbcdd
--- /dev/null
+++ b/sflphone-client-gnome/src/eel-gconf-extensions.c
@@ -0,0 +1,609 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* eel-gconf-extensions.c - Stuff to make GConf easier to use.
+
+   Copyright (C) 2000, 2001 Eazel, Inc.
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: Ramiro Estrugo <ramiro@eazel.com>
+*/
+
+#include <stdlib.h>
+#include <config.h>
+#include "eel-gconf-extensions.h"
+
+#include <gconf/gconf-client.h>
+#include <gconf/gconf.h>
+#include <gtk/gtkwidget.h>
+#include <libgnome/gnome-i18n.h>
+#include <gtk/gtkmessagedialog.h>
+
+static GConfClient *global_gconf_client = NULL;
+
+static void
+global_client_free (void)
+{
+    if (global_gconf_client == NULL) {
+        return;
+    }
+
+    g_object_unref (G_OBJECT (global_gconf_client));
+    global_gconf_client = NULL;
+}
+
+/* Public */
+GConfClient *
+eel_gconf_client_get_global (void)
+{
+    /* Initialize gconf if needed */
+    if (!gconf_is_initialized ()) {
+        char *argv[] = { "eel-preferences", NULL };
+        GError *error = NULL;
+        char *teststr;
+
+        if (!gconf_init (1, argv, &error)) {
+            if (eel_gconf_handle_error (&error)) {
+                return NULL;
+            }
+        }
+
+        /* check if gconf schemas are working */
+        teststr = gconf_client_get_string (eel_gconf_client_get_global(),
+                                           "/apps/gpdf/gconf_test", NULL);
+
+        if (!teststr) {
+            GtkWidget *dialog;
+            dialog = gtk_message_dialog_new (NULL,
+                                             GTK_DIALOG_MODAL,
+                                             GTK_MESSAGE_ERROR,
+                                             GTK_BUTTONS_OK,
+                                             _ ("Cannot find a schema for gpdf preferences. \n"
+                                                "Check your gconf setup, look at gpdf FAQ for \n"
+                                                "more info"));
+            gtk_dialog_run (GTK_DIALOG (dialog));
+            exit (0);
+        } else {
+            g_free (teststr);
+        }
+
+    }
+
+    if (global_gconf_client == NULL) {
+        global_gconf_client = gconf_client_get_default ();
+        g_atexit (global_client_free);
+    }
+
+    return global_gconf_client;
+}
+
+gboolean
+eel_gconf_handle_error (GError **error)
+{
+    g_return_val_if_fail (error != NULL, FALSE);
+
+    if (*error != NULL) {
+        g_warning (_ ("GConf error:\n  %s"), (*error)->message);
+        g_error_free (*error);
+        *error = NULL;
+
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
+void
+eel_gconf_set_boolean (const char *key,
+                       gboolean boolean_value)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_set_bool (client, key, boolean_value, &error);
+    eel_gconf_handle_error (&error);
+}
+
+gboolean
+eel_gconf_get_boolean (const char *key)
+{
+    gboolean result;
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, FALSE);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, FALSE);
+
+    result = gconf_client_get_bool (client, key, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        result = FALSE;
+    }
+
+    return result;
+}
+
+void
+eel_gconf_set_integer (const char *key,
+                       int int_value)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_set_int (client, key, int_value, &error);
+    eel_gconf_handle_error (&error);
+}
+
+int
+eel_gconf_get_integer (const char *key)
+{
+    int result;
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, 0);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, 0);
+
+    result = gconf_client_get_int (client, key, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        result = 0;
+    }
+
+    return result;
+}
+
+void
+eel_gconf_set_float (const char *key,
+                     gfloat float_value)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_set_float (client, key, float_value, &error);
+    eel_gconf_handle_error (&error);
+}
+
+gfloat
+eel_gconf_get_float (const char *key)
+{
+    gfloat result;
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, 0);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, 0);
+
+    result = gconf_client_get_float (client, key, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        result = 0;
+    }
+
+    return result;
+}
+
+void
+eel_gconf_set_string (const char *key,
+                      const char *string_value)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_if_fail (key != NULL);
+    g_return_if_fail (string_value != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_set_string (client, key, string_value, &error);
+    eel_gconf_handle_error (&error);
+}
+
+void
+eel_gconf_unset (const char *key)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_unset (client, key, &error);
+    eel_gconf_handle_error (&error);
+}
+
+char *
+eel_gconf_get_string (const char *key)
+{
+    char *result;
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, NULL);
+
+    result = gconf_client_get_string (client, key, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        result = g_strdup ("");
+    }
+
+    return result;
+}
+
+void
+eel_gconf_set_string_list (const char *key,
+                           const GSList *slist)
+{
+    GConfClient *client;
+    GError *error;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    error = NULL;
+    gconf_client_set_list (client, key, GCONF_VALUE_STRING,
+                           /* Need cast cause of GConf api bug */
+                           (GSList *) slist,
+                           &error);
+    eel_gconf_handle_error (&error);
+}
+
+GSList *
+eel_gconf_get_string_list (const char *key)
+{
+    GSList *slist;
+    GConfClient *client;
+    GError *error;
+
+    g_return_val_if_fail (key != NULL, NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, NULL);
+
+    error = NULL;
+    slist = gconf_client_get_list (client, key, GCONF_VALUE_STRING, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        slist = NULL;
+    }
+
+    return slist;
+}
+
+/* This code wasn't part of the original eel-gconf-extensions.c */
+void
+eel_gconf_set_integer_list (const char *key,
+                            const GSList *slist)
+{
+    GConfClient *client;
+    GError *error;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    error = NULL;
+    gconf_client_set_list (client, key, GCONF_VALUE_INT,
+                           /* Need cast cause of GConf api bug */
+                           (GSList *) slist,
+                           &error);
+    eel_gconf_handle_error (&error);
+}
+
+GSList *
+eel_gconf_get_integer_list (const char *key)
+{
+    GSList *slist;
+    GConfClient *client;
+    GError *error;
+
+    g_return_val_if_fail (key != NULL, NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, NULL);
+
+    error = NULL;
+    slist = gconf_client_get_list (client, key, GCONF_VALUE_INT, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        slist = NULL;
+    }
+
+    return slist;
+}
+/* End of added code */
+
+gboolean
+eel_gconf_is_default (const char *key)
+{
+    gboolean result;
+    GConfValue *value;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, FALSE);
+
+    value = gconf_client_get_without_default (eel_gconf_client_get_global (), key, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        if (value != NULL) {
+            gconf_value_free (value);
+        }
+
+        return FALSE;
+    }
+
+    result = (value == NULL);
+
+    if (value != NULL) {
+        gconf_value_free (value);
+    }
+
+
+    return result;
+}
+
+gboolean
+eel_gconf_monitor_add (const char *directory)
+{
+    GError *error = NULL;
+    GConfClient *client;
+
+    g_return_val_if_fail (directory != NULL, FALSE);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, FALSE);
+
+    gconf_client_add_dir (client,
+                          directory,
+                          GCONF_CLIENT_PRELOAD_NONE,
+                          &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+gboolean
+eel_gconf_monitor_remove (const char *directory)
+{
+    GError *error = NULL;
+    GConfClient *client;
+
+    if (directory == NULL) {
+        return FALSE;
+    }
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, FALSE);
+
+    gconf_client_remove_dir (client,
+                             directory,
+                             &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+void
+eel_gconf_suggest_sync (void)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_suggest_sync (client, &error);
+    eel_gconf_handle_error (&error);
+}
+
+GConfValue*
+eel_gconf_get_value (const char *key)
+{
+    GConfValue *value = NULL;
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, NULL);
+
+    value = gconf_client_get (client, key, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        if (value != NULL) {
+            gconf_value_free (value);
+            value = NULL;
+        }
+    }
+
+    return value;
+}
+
+void
+eel_gconf_set_value (const char *key, const GConfValue *value)
+{
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_if_fail (key != NULL);
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_set (client, key, value, &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        return;
+    }
+}
+
+gboolean
+eel_gconf_key_exists (const char *key)
+{
+    GConfValue *value = NULL;
+    GConfClient *client;
+    GError *error = NULL;
+    gboolean error_occurred;
+    gboolean value_found;
+
+    g_return_val_if_fail (key != NULL, FALSE);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, FALSE);
+
+    value = gconf_client_get (client, key, &error);
+
+    value_found = (value != NULL);
+    error_occurred = (error != NULL);
+
+    eel_gconf_value_free (value);
+
+    if (error != NULL) {
+        g_error_free (error);
+    }
+
+    return (!error_occurred && value_found);
+}
+
+void
+eel_gconf_value_free (GConfValue *value)
+{
+    if (value == NULL) {
+        return;
+    }
+
+    gconf_value_free (value);
+}
+
+guint
+eel_gconf_notification_add (const char *key,
+                            GConfClientNotifyFunc notification_callback,
+                            gpointer callback_data)
+{
+    guint notification_id;
+    GConfClient *client;
+    GError *error = NULL;
+
+    g_return_val_if_fail (key != NULL, EEL_GCONF_UNDEFINED_CONNECTION);
+    g_return_val_if_fail (notification_callback != NULL, EEL_GCONF_UNDEFINED_CONNECTION);
+
+    client = eel_gconf_client_get_global ();
+    g_return_val_if_fail (client != NULL, EEL_GCONF_UNDEFINED_CONNECTION);
+
+    notification_id = gconf_client_notify_add (client,
+                      key,
+                      notification_callback,
+                      callback_data,
+                      NULL,
+                      &error);
+
+    if (eel_gconf_handle_error (&error)) {
+        if (notification_id != EEL_GCONF_UNDEFINED_CONNECTION) {
+            gconf_client_notify_remove (client, notification_id);
+            notification_id = EEL_GCONF_UNDEFINED_CONNECTION;
+        }
+    }
+
+    return notification_id;
+}
+
+void
+eel_gconf_notification_remove (guint notification_id)
+{
+    GConfClient *client;
+
+    if (notification_id == EEL_GCONF_UNDEFINED_CONNECTION) {
+        return;
+    }
+
+    client = eel_gconf_client_get_global ();
+    g_return_if_fail (client != NULL);
+
+    gconf_client_notify_remove (client, notification_id);
+}
+
+/* Simple wrapper for eel_gconf_notifier_add which
+ * adds the notifier id to the GList given as argument
+ * so that a call to gpdf_notification_free can remove the notifiers
+ */
+void
+gpdf_notification_add (const char *key,
+                       GConfClientNotifyFunc notification_callback,
+                       gpointer callback_data,
+                       GList **notifiers)
+{
+    guint id = 0;
+
+    id = eel_gconf_notification_add (key,
+                                     notification_callback,
+                                     callback_data);
+
+    if (notifiers != NULL) {
+        *notifiers = g_list_append (*notifiers,
+                                    GINT_TO_POINTER (id));
+    }
+}
+
+/* Removes all the notifiers listed in notifiers */
+/* Frees the notifiers list */
+void
+gpdf_notification_remove (GList **notifiers)
+{
+    g_list_foreach (*notifiers,
+                    (GFunc) eel_gconf_notification_remove,
+                    NULL);
+    g_list_free (*notifiers);
+    *notifiers = NULL;
+}
+
+
diff --git a/sflphone-client-gnome/src/eel-gconf-extensions.h b/sflphone-client-gnome/src/eel-gconf-extensions.h
new file mode 100644
index 0000000000000000000000000000000000000000..f9e4f5c381159e79d732e5c55a687a009d7814c4
--- /dev/null
+++ b/sflphone-client-gnome/src/eel-gconf-extensions.h
@@ -0,0 +1,88 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* eel-gconf-extensions.h - Stuff to make GConf easier to use.
+
+   Copyright (C) 2000, 2001 Eazel, Inc.
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: Ramiro Estrugo <ramiro@eazel.com>
+*/
+
+#ifndef EEL_GCONF_EXTENSIONS_H
+#define EEL_GCONF_EXTENSIONS_H
+
+#include <glib/gerror.h>
+#include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
+
+#ifdef __cplusplus
+BEGIN_EXTERN_C
+#endif
+
+#define EEL_GCONF_UNDEFINED_CONNECTION 0
+
+GConfClient *eel_gconf_client_get_global (void);
+gboolean     eel_gconf_handle_error (GError                **error);
+void         eel_gconf_set_boolean (const char             *key,
+                                    gboolean                boolean_value);
+gboolean     eel_gconf_get_boolean (const char             *key);
+int          eel_gconf_get_integer (const char             *key);
+void         eel_gconf_set_integer (const char             *key,
+                                    int                     int_value);
+gfloat       eel_gconf_get_float (const char             *key);
+void         eel_gconf_set_float (const char             *key,
+                                  gfloat                 float_value);
+char *       eel_gconf_get_string (const char             *key);
+void         eel_gconf_set_string (const char             *key,
+                                   const char             *string_value);
+GSList *     eel_gconf_get_string_list (const char             *key);
+void         eel_gconf_set_string_list (const char             *key,
+                                        const GSList           *string_list_value);
+gboolean     eel_gconf_is_default (const char             *key);
+gboolean     eel_gconf_monitor_add (const char             *directory);
+gboolean     eel_gconf_monitor_remove (const char             *directory);
+void         eel_gconf_suggest_sync (void);
+GConfValue*  eel_gconf_get_value (const char             *key);
+gboolean     eel_gconf_value_is_equal (const GConfValue       *a,
+                                       const GConfValue       *b);
+void         eel_gconf_set_value (const char *key,
+                                  const GConfValue *value);
+gboolean     eel_gconf_key_exists (const char *key);
+
+void         eel_gconf_value_free (GConfValue             *value);
+void         eel_gconf_unset (const char *key);
+
+/* Functions which weren't part of the eel-gconf-extensions.h file from eel */
+GSList *eel_gconf_get_integer_list (const char *key);
+void eel_gconf_set_integer_list (const char *key,
+                                 const GSList *slist);
+void gpdf_notification_add (const char *key,
+                            GConfClientNotifyFunc notification_callback,
+                            gpointer callback_data,
+                            GList **notifiers);
+void gpdf_notification_remove (GList **notifiers);
+guint eel_gconf_notification_add (const char *key,
+                                  GConfClientNotifyFunc notification_callback,
+                                  gpointer callback_data);
+void eel_gconf_notification_remove (guint notification_id);
+
+#ifdef __cplusplus
+END_EXTERN_C
+#endif
+
+#endif /* EEL_GCONF_EXTENSIONS_H */
+
diff --git a/sflphone-client-gnome/src/errors.c b/sflphone-client-gnome/src/errors.c
index 0dbd1240014d8d810155b4484213bb4f06cfc989..bc11bc83a03a5075c48db9b0b09adc36e9d13f56 100644
--- a/sflphone-client-gnome/src/errors.c
+++ b/sflphone-client-gnome/src/errors.c
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> 
- *                                                                              
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -31,21 +31,23 @@
 #include <errors.h>
 #include <sflphone_const.h>
 
-  void
-sflphone_throw_exception( int err )
+void
+sflphone_throw_exception (int err)
 {
-  gchar* markup=""; 
-  switch( err ){
-    case ALSA_PLAYBACK_DEVICE:
-      markup = g_markup_printf_escaped(_("ALSA notification\n\nError while opening playback device"));
-      break;
-    case ALSA_CAPTURE_DEVICE:
-      markup = g_markup_printf_escaped(_("ALSA notification\n\nError while opening capture device"));
-      break;
-    case PULSEAUDIO_NOT_RUNNING:
-      markup = g_markup_printf_escaped(_("Pulseaudio notification\n\nPulseaudio is not running"));
-      break;
-  }
-  main_window_error_message( markup );  
-  free( markup );
+    gchar* markup="";
+
+    switch (err) {
+        case ALSA_PLAYBACK_DEVICE:
+            markup = g_markup_printf_escaped (_ ("ALSA notification\n\nError while opening playback device"));
+            break;
+        case ALSA_CAPTURE_DEVICE:
+            markup = g_markup_printf_escaped (_ ("ALSA notification\n\nError while opening capture device"));
+            break;
+        case PULSEAUDIO_NOT_RUNNING:
+            markup = g_markup_printf_escaped (_ ("Pulseaudio notification\n\nPulseaudio is not running"));
+            break;
+    }
+
+    main_window_error_message (markup);
+    free (markup);
 }
diff --git a/sflphone-client-gnome/src/errors.h b/sflphone-client-gnome/src/errors.h
index 2c87178ff3c020408fa40a1f9ab524c1167e5a86..80d1e08da2e13d1c1fbb3a8a435434813f41d610 100644
--- a/sflphone-client-gnome/src/errors.h
+++ b/sflphone-client-gnome/src/errors.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> 
- *                                                                              
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __ERRORS_H
 #define __ERRORS_H
 
@@ -45,6 +45,6 @@
  *	  ALSA_PLAYBACK_ERROR
  *	  ALSA_CAPTURE_ERROR
  */
-void sflphone_throw_exception( int err );
+void sflphone_throw_exception (int err);
 
 #endif
diff --git a/sflphone-client-gnome/src/icons/icon_factory.c b/sflphone-client-gnome/src/icons/icon_factory.c
index c18e038b0ae7346607cd8885c692e2001ab39215..4b612c1a482d0450f118a74d785199b12c98d8c7 100644
--- a/sflphone-client-gnome/src/icons/icon_factory.c
+++ b/sflphone-client-gnome/src/icons/icon_factory.c
@@ -29,59 +29,70 @@
  */
 
 #include "icon_factory.h"
+#include "icons/pixmap_data.h"
+
 
 static GtkIconFactory *icon_factory = NULL;
 
 void add_icon (GtkIconFactory *factory, const gchar *stock_id, const guint8 *icon_data, GtkIconSize size)
 {
-	GtkIconSet *icons;
-	GtkIconSource *source;
-	GdkPixbuf *pixbuf;
-
-	icons = gtk_icon_factory_lookup (factory, stock_id);
-	if (!icons)
-	{
-		pixbuf = gdk_pixbuf_new_from_inline (-1, icon_data, FALSE, NULL);
-		source = gtk_icon_source_new ();
-		gtk_icon_source_set_pixbuf (source, pixbuf);
-		gtk_icon_source_set_size (source, size);
-
-		icons = gtk_icon_set_new ();
-		gtk_icon_set_add_source (icons, source);
-
-		gtk_icon_factory_add (factory, stock_id, icons);
-
-		g_object_unref (G_OBJECT (pixbuf));
-		gtk_icon_source_free (source);
-		gtk_icon_set_unref (icons);
-	}
-	else
-		DEBUG ("Icon %s already exists in factory\n", stock_id);
+    GtkIconSet *icons;
+    GtkIconSource *source;
+    GdkPixbuf *pixbuf;
+
+    icons = gtk_icon_factory_lookup (factory, stock_id);
+
+    if (!icons) {
+        pixbuf = gdk_pixbuf_new_from_inline (-1, icon_data, FALSE, NULL);
+        source = gtk_icon_source_new ();
+        gtk_icon_source_set_pixbuf (source, pixbuf);
+        gtk_icon_source_set_size (source, size);
+
+        icons = gtk_icon_set_new ();
+        gtk_icon_set_add_source (icons, source);
+
+        gtk_icon_factory_add (factory, stock_id, icons);
+
+        g_object_unref (G_OBJECT (pixbuf));
+        gtk_icon_source_free (source);
+        gtk_icon_set_unref (icons);
+    } else
+        DEBUG ("Icon %s already exists in factory\n", stock_id);
+}
+
+GtkIconSet* lookup_sflphone_factory (const gchar *stock_id)
+{
+
+    return gtk_icon_factory_lookup (icon_factory, stock_id);
 }
 
 void register_sflphone_stock_icons (GtkIconFactory *factory)
 {
-	add_icon (factory, GTK_STOCK_PICKUP, gnome_stock_pickup, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_HANGUP, gnome_stock_hangup, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_DIAL, gnome_stock_dial, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_TRANSFER, gnome_stock_transfer, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_ONHOLD, gnome_stock_onhold, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_OFFHOLD, gnome_stock_offhold, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_CALL_CURRENT, gnome_stock_call_current, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_ADDRESSBOOK, gnome_stock_addressbook, GTK_ICON_SIZE_SMALL_TOOLBAR);	
-	add_icon (factory, GTK_STOCK_CALLS, gnome_stock_calls, GTK_ICON_SIZE_SMALL_TOOLBAR);	
+    add_icon (factory, GTK_STOCK_PICKUP, gnome_stock_pickup, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_HANGUP, gnome_stock_hangup, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_DIAL, gnome_stock_dial, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_TRANSFER, gnome_stock_transfer, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_ONHOLD, gnome_stock_onhold, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_OFFHOLD, gnome_stock_offhold, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_IM, gnome_stock_im, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_CALL_CURRENT, gnome_stock_call_current, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_ADDRESSBOOK, gnome_stock_addressbook, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_CALLS, gnome_stock_calls, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_SFLPHONE, gnome_stock_sflphone, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_FAIL, gnome_stock_fail, GTK_ICON_SIZE_SMALL_TOOLBAR);
+    add_icon (factory, GTK_STOCK_USER, gnome_stock_user, GTK_ICON_SIZE_SMALL_TOOLBAR);
 }
 
 void init_icon_factory (void)
 {
-	// Init the factory
-	icon_factory = gtk_icon_factory_new ();
+    // Init the factory
+    icon_factory = gtk_icon_factory_new ();
 
-	// Load icons
-	register_sflphone_stock_icons (icon_factory);
+    // Load icons
+    register_sflphone_stock_icons (icon_factory);
 
-	// Specify a default icon set
-	gtk_icon_factory_add_default (icon_factory);
+    // Specify a default icon set
+    gtk_icon_factory_add_default (icon_factory);
 }
 
 
diff --git a/sflphone-client-gnome/src/icons/icon_factory.h b/sflphone-client-gnome/src/icons/icon_factory.h
index 6392832ac6515ae1ee9c640c92f03040ec1a6683..400006f621bcaf3a5d39e4da893a422f46d71c94 100644
--- a/sflphone-client-gnome/src/icons/icon_factory.h
+++ b/sflphone-client-gnome/src/icons/icon_factory.h
@@ -41,14 +41,20 @@ G_BEGIN_DECLS
 #define GTK_STOCK_HANGUP				"gnome-stock-hangup"
 #define GTK_STOCK_ONHOLD				"gnome-stock-onhold"
 #define GTK_STOCK_OFFHOLD				"gnome-stock-offhold"
+#define GTK_STOCK_IM					"gnome-stock-im"
 #define GTK_STOCK_TRANSFER				"gnome-stock-transfer"
 #define GTK_STOCK_DIAL					"gnome-stock-dial"
 #define GTK_STOCK_CALL_CURRENT			"gnome-stock-call-current"
 #define GTK_STOCK_ADDRESSBOOK			"gnome-stock-addressbook"
 #define GTK_STOCK_CALLS					"gnome-stock-calls"
+#define GTK_STOCK_SFLPHONE				"gnome-stock-sflphone"
+#define GTK_STOCK_FAIL					"gnome-stock-fail"
+#define GTK_STOCK_USER					"gnome-stock-user"
 
 void init_icon_factory (void);
 
+GtkIconSet* lookup_sflphone_factory (const gchar *stock_id);
+
 G_END_DECLS
 
 #endif
diff --git a/sflphone-client-gnome/src/icons/pixmap_data.h b/sflphone-client-gnome/src/icons/pixmap_data.h
index ce8fcc648c82673ca20b783dda03d1bdef575f04..b38046be4d852eb15cb47ea0cc0844da244febe0 100644
--- a/sflphone-client-gnome/src/icons/pixmap_data.h
+++ b/sflphone-client-gnome/src/icons/pixmap_data.h
@@ -39,100 +39,101 @@ G_BEGIN_DECLS
 #pragma align 4 (gnome_stock_pickup)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_pickup[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_pickup[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_pickup[] = 
+static const guint8 gnome_stock_pickup[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0'\260\0\204&\260\0\222\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0'\261\0b&\260\0\357&\260\0\357'\262\0p\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\257\0F"
-  "&\260\0\342&\260\0\345&\260\0\345&\260\0\344%\256\0R\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\263\0/'\260\0\322"
-  "&\260\0\333&\260\0\333&\260\0\333&\260\0\333&\257\0\326(\256\0""9\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0#\260\0\35%\260\0\277"
-  "&\261\0\320&\261\0\320&\261\0\320&\261\0\320&\261\0\320&\261\0\320&\261"
-  "\0\304\"\254\0%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\257\0\20'\261\0"
-  "\252'\260\0\306'\260\0\306'\260\0\306'\260\0\306'\260\0\306'\260\0\306"
-  "'\260\0\306'\260\0\306'\261\0\260#\256\0\26\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\266\0"
-  "\7&\261\0\223&\260\0\274&\260\0\274&\260\0\274&\260\0\274&\260\0\274"
-  "&\260\0\274&\260\0\274&\260\0\274&\260\0\274&\260\0\274&\260\0\233.\271"
-  "\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\200\0\2'\257\0|'\260\0\262'\260\0\262'\260\0\262'\260\0\262"
-  "'\260\0\262'\260\0\262'\260\0\262'\260\0\262'\260\0\262'\260\0\262'\260"
-  "\0\262'\260\0\262'\260\0\204@\277\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'\257\0c&\260\0\250&\260\0\250&\260\0"
-  "\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250"
-  "&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\261\0l\0\0\0"
-  "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\260\0J'\260\0\236"
-  "'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260"
-  "\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0"
-  "\236'\260\0\236'\260\0\236'\260\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0&\255\0""5&\261\0\223&\260\0\224&\260\0\224&\260\0\224&\260\0\224"
-  "&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260"
-  "\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0"
-  "\224&\260\0=\0\0\0\0\0\0\0\0\0\0\0\0#\261\0$(\260\0\207'\260\0\212'\260"
-  "\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0"
-  "\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212"
-  "'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\210$\260\0*\0\0\0"
-  "\0!\261\0\27&\260\0x&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257"
-  "\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0"
-  "\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200"
-  "&\257\0\200&\257\0\200&\257\0\200%\260\0{$\255\0\34""3\231\0\5\40\237"
-  "\0\10\40\237\0\10\40\237\0\10\40\237\0\10&\256\0/'\257\0v'\257\0v'\257"
-  "\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'"
-  "\257\0v&\262\0""5\40\237\0\10\40\237\0\10\40\237\0\10\40\237\0\10""3"
-  "\231\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\256\0&&\260\0k&\260"
-  "\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&"
-  "\260\0k&\260\0k)\256\0,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\264\0\"%\260\0a%\260\0a%\260\0a%"
-  "\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260"
-  "\0a&\263\0(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0)\255\0\37&\260\0W&\260\0W&\260\0W&\260\0W&\260"
-  "\0W&\260\0W&\260\0W&\260\0W&\260\0W&\260\0W&\260\0W&\260\0W#\261\0$\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0&\263\0\33$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M"
-  "$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M(\257\0\40\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0+\252\0\30&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C"
-  "&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C$\255\0\34\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\263\0"
-  "\24$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256"
-  "\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9!\261\0\27\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\36\245\0\21&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/"
-  "&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/(\256\0\23\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0'\261\0\15)\263\0%)\263\0%)\263\0%)\263\0%)\263\0%)\263\0%)\263\0%"
-  ")\263\0%)\263\0%)\263\0%)\263\0%)\263\0%\"\273\0\17\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\263"
-  "\0\12&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263"
-  "\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33.\271\0\13\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0+\252\0\6-\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21-"
-  "\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21"
-  "$\266\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0'\260\0\204&\260\0\222\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0'\261\0b&\260\0\357&\260\0\357'\262\0p\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\257\0F"
+      "&\260\0\342&\260\0\345&\260\0\345&\260\0\344%\256\0R\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\263\0/'\260\0\322"
+      "&\260\0\333&\260\0\333&\260\0\333&\260\0\333&\257\0\326(\256\0""9\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0#\260\0\35%\260\0\277"
+      "&\261\0\320&\261\0\320&\261\0\320&\261\0\320&\261\0\320&\261\0\320&\261"
+      "\0\304\"\254\0%\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\257\0\20'\261\0"
+      "\252'\260\0\306'\260\0\306'\260\0\306'\260\0\306'\260\0\306'\260\0\306"
+      "'\260\0\306'\260\0\306'\261\0\260#\256\0\26\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\266\0"
+      "\7&\261\0\223&\260\0\274&\260\0\274&\260\0\274&\260\0\274&\260\0\274"
+      "&\260\0\274&\260\0\274&\260\0\274&\260\0\274&\260\0\274&\260\0\233.\271"
+      "\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\200\0\2'\257\0|'\260\0\262'\260\0\262'\260\0\262'\260\0\262"
+      "'\260\0\262'\260\0\262'\260\0\262'\260\0\262'\260\0\262'\260\0\262'\260"
+      "\0\262'\260\0\262'\260\0\204@\277\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'\257\0c&\260\0\250&\260\0\250&\260\0"
+      "\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250"
+      "&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\260\0\250&\261\0l\0\0\0"
+      "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\260\0J'\260\0\236"
+      "'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260"
+      "\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0\236'\260\0"
+      "\236'\260\0\236'\260\0\236'\260\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0&\255\0""5&\261\0\223&\260\0\224&\260\0\224&\260\0\224&\260\0\224"
+      "&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260"
+      "\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0\224&\260\0"
+      "\224&\260\0=\0\0\0\0\0\0\0\0\0\0\0\0#\261\0$(\260\0\207'\260\0\212'\260"
+      "\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0"
+      "\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\212"
+      "'\260\0\212'\260\0\212'\260\0\212'\260\0\212'\260\0\210$\260\0*\0\0\0"
+      "\0!\261\0\27&\260\0x&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257"
+      "\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0"
+      "\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200&\257\0\200"
+      "&\257\0\200&\257\0\200&\257\0\200%\260\0{$\255\0\34""3\231\0\5\40\237"
+      "\0\10\40\237\0\10\40\237\0\10\40\237\0\10&\256\0/'\257\0v'\257\0v'\257"
+      "\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'\257\0v'"
+      "\257\0v&\262\0""5\40\237\0\10\40\237\0\10\40\237\0\10\40\237\0\10""3"
+      "\231\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\256\0&&\260\0k&\260"
+      "\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&\260\0k&"
+      "\260\0k&\260\0k)\256\0,\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\264\0\"%\260\0a%\260\0a%\260\0a%"
+      "\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260\0a%\260"
+      "\0a&\263\0(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0)\255\0\37&\260\0W&\260\0W&\260\0W&\260\0W&\260"
+      "\0W&\260\0W&\260\0W&\260\0W&\260\0W&\260\0W&\260\0W&\260\0W#\261\0$\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0&\263\0\33$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M"
+      "$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M$\260\0M(\257\0\40\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0+\252\0\30&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C"
+      "&\257\0C&\257\0C&\257\0C&\257\0C&\257\0C$\255\0\34\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&\263\0"
+      "\24$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256"
+      "\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9$\256\0""9!\261\0\27\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\36\245\0\21&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/"
+      "&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/&\256\0/(\256\0\23\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0'\261\0\15)\263\0%)\263\0%)\263\0%)\263\0%)\263\0%)\263\0%)\263\0%"
+      ")\263\0%)\263\0%)\263\0%)\263\0%)\263\0%\"\273\0\17\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\263"
+      "\0\12&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263"
+      "\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33&\263\0\33.\271\0\13\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0+\252\0\6-\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21-"
+      "\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21-\264\0\21"
+      "$\266\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 
 /* GdkPixbuf RGBA C-Source image dump */
@@ -141,108 +142,109 @@ static const guint8 gnome_stock_pickup[] =
 #pragma align 4 (gnome_stock_hangup)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_hangup[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_hangup[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_hangup[] = 
+static const guint8 gnome_stock_hangup[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\0\0\3\277\40\0\10\277\40"
-  "\0\10\277\40\0\10\277\40\0\10\277\40\0\10\277\40\0\10\266$\0\7\266$\0"
-  "\7\266$\0\7\266$\0\7\266$\0\7\266$\0\7\252\0\0\3\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\237\40\0"
-  "\10\256\33\0\23\256\33\0\23\252\34\0\22\252\34\0\22\252\34\0\22\252\34"
-  "\0\22\252\34\0\22\252\34\0\22\252\34\0\22\252\34\0\22\252\34\0\22\252"
-  "\34\0\22\277\40\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\25\0\14\260\32\0\35\260\32\0\35"
-  "\260\32\0\35\260\32\0\35\260\32\0\35\260\32\0\35\260\32\0\35\260\32\0"
-  "\35\255\33\0\34\255\33\0\34\255\33\0\34\255\33\0\34\261\24\0\15\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\277\40\0\20\263\32\0(\263\32\0(\263\32\0(\263\32\0(\261\32\0'"
-  "\261\32\0'\261\32\0'\261\32\0'\261\32\0'\261\32\0'\261\32\0'\261\32\0"
-  "'\270\34\0\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\252\30\0\25\257\31\0""3\263\32\0""2\263\32\0"
-  "2\263\32\0""2\263\32\0""2\263\32\0""2\263\32\0""2\263\32\0""2\263\32"
-  "\0""2\263\32\0""2\261\32\0""1\261\32\0""1\261\26\0\27\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255"
-  "\24\0\31\260\31\0=\260\31\0=\260\31\0=\260\31\0=\260\31\0=\260\31\0="
-  "\260\31\0=\256\32\0<\256\32\0<\256\32\0<\256\32\0<\256\32\0<\255\33\0"
-  "\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\263\21\0\36\261\25\0H\261\25\0H\261\25\0H\260\26\0G\260"
-  "\26\0G\260\26\0G\260\26\0G\260\26\0G\260\26\0G\260\26\0G\260\26\0G\260"
-  "\26\0G\262\27\0!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\27\0\"\261\26\0R\261\26\0R\261\26\0"
-  "R\261\26\0R\261\26\0R\261\26\0R\261\26\0R\261\26\0R\261\26\0R\260\26"
-  "\0Q\260\26\0Q\260\26\0Q\256\24\0&\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\256\24\0&\257\23\0]\257"
-  "\23\0]\257\23\0]\257\23\0]\257\23\0]\257\26\0\\\257\26\0\\\257\26\0\\"
-  "\257\26\0\\\257\26\0\\\257\26\0\\\257\26\0\\\262\30\0+\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\262"
-  "\22\0+\261\24\0h\260\24\0g\260\24\0g\260\24\0g\260\24\0g\260\24\0g\260"
-  "\24\0g\260\24\0g\260\24\0g\260\24\0g\260\24\0g\257\24\0f\257\25\0""0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\263\20\0/\261\22\0r\261\22\0r\261\22\0r\261\22\0r\261\22"
-  "\0r\261\22\0r\261\22\0r\260\22\0q\260\22\0q\260\22\0q\260\22\0q\260\22"
-  "\0q\262\23\0""5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\257\17\0""3\257\20\0}\257\20\0}\257\20\0}"
-  "\261\20\0|\261\20\0|\261\20\0|\261\20\0|\261\20\0|\261\20\0|\261\20\0"
-  "|\261\20\0|\261\20\0|\260\22\0:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\255\22\0\34\260\21\0-\260\21\0-\260\21\0-\260\21\0-\261\20\0R\260"
-  "\17\0\207\260\17\0\207\260\17\0\207\260\17\0\207\260\17\0\207\260\17"
-  "\0\207\260\17\0\207\260\17\0\207\260\17\0\207\257\17\0\206\257\17\0\206"
-  "\257\17\0\206\260\17\0W\260\21\0-\260\21\0-\260\21\0-\260\21\0-\260\22"
-  "\0\35\261\24\0\15\256\15\0x\260\16\0\222\260\16\0\222\260\16\0\222\260"
-  "\16\0\222\260\16\0\222\260\16\0\222\260\16\0\222\260\16\0\222\260\16"
-  "\0\222\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221"
-  "\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221\257"
-  "\16\0\220\257\17\0y\257\20\0\20\0\0\0\0\263\0\0\12\256\12\0{\257\13\0"
-  "\235\257\13\0\235\257\13\0\235\257\13\0\235\257\13\0\235\261\13\0\234"
-  "\261\13\0\234\261\13\0\234\261\13\0\234\261\13\0\234\261\13\0\234\261"
-  "\13\0\234\261\13\0\234\261\13\0\234\260\14\0\233\260\14\0\233\260\14"
-  "\0\233\260\14\0\233\260\14\0~\261\24\0\15\0\0\0\0\0\0\0\0\0\0\0\0\237"
-  "\0\0\10\260\12\0~\260\13\0\247\260\13\0\247\260\13\0\247\260\13\0\247"
-  "\260\13\0\247\260\13\0\247\260\13\0\247\260\13\0\247\260\13\0\247\260"
-  "\13\0\247\261\13\0\246\261\13\0\246\261\13\0\246\261\13\0\246\261\13"
-  "\0\246\261\13\0\246\261\12\0\202\271\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\252\0\0\6\260\10\0~\260\11\0\262\260\11\0\262\260\11\0"
-  "\262\260\11\0\262\260\11\0\262\260\12\0\261\260\12\0\261\260\12\0\261"
-  "\260\12\0\261\260\12\0\261\260\12\0\261\260\12\0\261\260\12\0\261\260"
-  "\12\0\261\257\12\0\203\277\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\277\0\0\4\257\10\0}\260\10\0\274\260\10\0\274\260"
-  "\10\0\274\260\10\0\274\260\10\0\274\260\10\0\274\260\10\0\274\260\10"
-  "\0\274\260\10\0\274\260\10\0\274\260\10\0\273\260\10\0\273\260\10\0\204"
-  "\266\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\377\0\0\2\257\6\0|\260\6\0\307\260\6\0\307\260\6\0\307"
-  "\260\6\0\307\260\6\0\307\260\6\0\306\260\6\0\306\260\6\0\306\260\6\0"
-  "\306\260\6\0\306\261\6\0\202\231\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\1"
-  "\260\4\0x\260\5\0\321\260\5\0\321\260\5\0\321\260\5\0\321\260\5\0\321"
-  "\260\5\0\321\260\5\0\321\260\5\0\321\260\4\0\201\377\0\0\2\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\261\4\0r\260\3\0\334\260\3\0\334\260"
-  "\3\0\334\260\3\0\334\260\3\0\334\260\3\0\333\257\4\0}\377\0\0\1\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\257\2\0m\260\3"
-  "\0\346\260\3\0\346\260\3\0\346\260\3\0\346\260\4\0w\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\260"
-  "\0\0d\257\1\0\360\260\1\0\361\257\0\0p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\257\0\0\\\257\0\0i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\0\0\3\277\40\0\10\277\40"
+      "\0\10\277\40\0\10\277\40\0\10\277\40\0\10\277\40\0\10\266$\0\7\266$\0"
+      "\7\266$\0\7\266$\0\7\266$\0\7\266$\0\7\252\0\0\3\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\237\40\0"
+      "\10\256\33\0\23\256\33\0\23\252\34\0\22\252\34\0\22\252\34\0\22\252\34"
+      "\0\22\252\34\0\22\252\34\0\22\252\34\0\22\252\34\0\22\252\34\0\22\252"
+      "\34\0\22\277\40\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\25\0\14\260\32\0\35\260\32\0\35"
+      "\260\32\0\35\260\32\0\35\260\32\0\35\260\32\0\35\260\32\0\35\260\32\0"
+      "\35\255\33\0\34\255\33\0\34\255\33\0\34\255\33\0\34\261\24\0\15\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\277\40\0\20\263\32\0(\263\32\0(\263\32\0(\263\32\0(\261\32\0'"
+      "\261\32\0'\261\32\0'\261\32\0'\261\32\0'\261\32\0'\261\32\0'\261\32\0"
+      "'\270\34\0\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\252\30\0\25\257\31\0""3\263\32\0""2\263\32\0"
+      "2\263\32\0""2\263\32\0""2\263\32\0""2\263\32\0""2\263\32\0""2\263\32"
+      "\0""2\263\32\0""2\261\32\0""1\261\32\0""1\261\26\0\27\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255"
+      "\24\0\31\260\31\0=\260\31\0=\260\31\0=\260\31\0=\260\31\0=\260\31\0="
+      "\260\31\0=\256\32\0<\256\32\0<\256\32\0<\256\32\0<\256\32\0<\255\33\0"
+      "\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\263\21\0\36\261\25\0H\261\25\0H\261\25\0H\260\26\0G\260"
+      "\26\0G\260\26\0G\260\26\0G\260\26\0G\260\26\0G\260\26\0G\260\26\0G\260"
+      "\26\0G\262\27\0!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\27\0\"\261\26\0R\261\26\0R\261\26\0"
+      "R\261\26\0R\261\26\0R\261\26\0R\261\26\0R\261\26\0R\261\26\0R\260\26"
+      "\0Q\260\26\0Q\260\26\0Q\256\24\0&\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\256\24\0&\257\23\0]\257"
+      "\23\0]\257\23\0]\257\23\0]\257\23\0]\257\26\0\\\257\26\0\\\257\26\0\\"
+      "\257\26\0\\\257\26\0\\\257\26\0\\\257\26\0\\\262\30\0+\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\262"
+      "\22\0+\261\24\0h\260\24\0g\260\24\0g\260\24\0g\260\24\0g\260\24\0g\260"
+      "\24\0g\260\24\0g\260\24\0g\260\24\0g\260\24\0g\257\24\0f\257\25\0""0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\263\20\0/\261\22\0r\261\22\0r\261\22\0r\261\22\0r\261\22"
+      "\0r\261\22\0r\261\22\0r\260\22\0q\260\22\0q\260\22\0q\260\22\0q\260\22"
+      "\0q\262\23\0""5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\257\17\0""3\257\20\0}\257\20\0}\257\20\0}"
+      "\261\20\0|\261\20\0|\261\20\0|\261\20\0|\261\20\0|\261\20\0|\261\20\0"
+      "|\261\20\0|\261\20\0|\260\22\0:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\255\22\0\34\260\21\0-\260\21\0-\260\21\0-\260\21\0-\261\20\0R\260"
+      "\17\0\207\260\17\0\207\260\17\0\207\260\17\0\207\260\17\0\207\260\17"
+      "\0\207\260\17\0\207\260\17\0\207\260\17\0\207\257\17\0\206\257\17\0\206"
+      "\257\17\0\206\260\17\0W\260\21\0-\260\21\0-\260\21\0-\260\21\0-\260\22"
+      "\0\35\261\24\0\15\256\15\0x\260\16\0\222\260\16\0\222\260\16\0\222\260"
+      "\16\0\222\260\16\0\222\260\16\0\222\260\16\0\222\260\16\0\222\260\16"
+      "\0\222\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221"
+      "\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221\260\16\0\221\257"
+      "\16\0\220\257\17\0y\257\20\0\20\0\0\0\0\263\0\0\12\256\12\0{\257\13\0"
+      "\235\257\13\0\235\257\13\0\235\257\13\0\235\257\13\0\235\261\13\0\234"
+      "\261\13\0\234\261\13\0\234\261\13\0\234\261\13\0\234\261\13\0\234\261"
+      "\13\0\234\261\13\0\234\261\13\0\234\260\14\0\233\260\14\0\233\260\14"
+      "\0\233\260\14\0\233\260\14\0~\261\24\0\15\0\0\0\0\0\0\0\0\0\0\0\0\237"
+      "\0\0\10\260\12\0~\260\13\0\247\260\13\0\247\260\13\0\247\260\13\0\247"
+      "\260\13\0\247\260\13\0\247\260\13\0\247\260\13\0\247\260\13\0\247\260"
+      "\13\0\247\261\13\0\246\261\13\0\246\261\13\0\246\261\13\0\246\261\13"
+      "\0\246\261\13\0\246\261\12\0\202\271\0\0\13\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\252\0\0\6\260\10\0~\260\11\0\262\260\11\0\262\260\11\0"
+      "\262\260\11\0\262\260\11\0\262\260\12\0\261\260\12\0\261\260\12\0\261"
+      "\260\12\0\261\260\12\0\261\260\12\0\261\260\12\0\261\260\12\0\261\260"
+      "\12\0\261\257\12\0\203\277\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\277\0\0\4\257\10\0}\260\10\0\274\260\10\0\274\260"
+      "\10\0\274\260\10\0\274\260\10\0\274\260\10\0\274\260\10\0\274\260\10"
+      "\0\274\260\10\0\274\260\10\0\274\260\10\0\273\260\10\0\273\260\10\0\204"
+      "\266\0\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\377\0\0\2\257\6\0|\260\6\0\307\260\6\0\307\260\6\0\307"
+      "\260\6\0\307\260\6\0\307\260\6\0\306\260\6\0\306\260\6\0\306\260\6\0"
+      "\306\260\6\0\306\261\6\0\202\231\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\1"
+      "\260\4\0x\260\5\0\321\260\5\0\321\260\5\0\321\260\5\0\321\260\5\0\321"
+      "\260\5\0\321\260\5\0\321\260\5\0\321\260\4\0\201\377\0\0\2\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\261\4\0r\260\3\0\334\260\3\0\334\260"
+      "\3\0\334\260\3\0\334\260\3\0\334\260\3\0\333\257\4\0}\377\0\0\1\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\257\2\0m\260\3"
+      "\0\346\260\3\0\346\260\3\0\346\260\3\0\346\260\4\0w\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\260"
+      "\0\0d\257\1\0\360\260\1\0\361\257\0\0p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\257\0\0\\\257\0\0i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 /* GdkPixbuf RGBA C-Source image dump */
 
@@ -250,101 +252,102 @@ static const guint8 gnome_stock_hangup[] =
 #pragma align 4 (gnome_stock_onhold)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_onhold[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_onhold[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_onhold[] = 
+static const guint8 gnome_stock_onhold[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\40jj\30\34knQ\35kp\217\33mq\330\35jo\377\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UU\3\33mm/\35joj\34lr\254\33mq\350"
-  "\34jo\374\27sy\362\20~\207\374\13\207\217\377\35jo\377\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\""
-  "fw\17\34jnH\35lp\202\33ns\310\35kq\367\33nr\365\24z\201\364\15\206\217"
-  "\377\6\220\231\377\1\231\242\377\0\230\242\377\0\227\241\377\2\222\235"
-  "\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "$mm\16\33ls\247\33ns\337\34ko\374\30sy\361\21\201\210\371\12\215\226"
-  "\377\3\227\242\377\0\234\247\377\0\233\246\377\1\231\243\377\6\216\230"
-  "\377\15\204\213\377\24sx\374\34kp\377\2\220\233\377\35jo\377\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32fo\36\35jo\377\7\224"
-  "\236\377\1\237\252\377\0\240\252\377\0\236\251\377\2\231\244\377\11\215"
-  "\226\377\17\201\210\376\27pv\371\34jo\375\33gk\370\26TW\341\22EG\324"
-  "\35jo\377\2\216\230\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\14\13+/G\33lp\373\1\236\251\377\13\213\223\377\22"
-  "{\203\374\30mr\372\34jn\376\30af\360\23IM\330\15.1\302\4\20\22\255\0"
-  "\0\0\243\0\0\0\243\4\22\23\256\33ko\373\2\214\225\377\35jo\377\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0x\4\22\23\254\33ko\375"
-  "\3\227\241\377\35jo\377\21@D\317\12%&\272\2\6\6\247\0\0\0\243\0\0\0\233"
-  "\0\0\0\232\0\0\0\234\0\0\0\243\0\0\0\237\4\22\23\256\33ko\373\2\212\223"
-  "\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t"
-  "\4\22\23\256\33jo\375\3\225\237\377\33im\374\0\0\0\231\0\0\0\237\0\0"
-  "\0\213\0\0\0c\0\0\0;\0\0\0\30\0\0\0\0\0\0\0:\0\0\0\234\4\22\23\256\33"
-  "ko\373\2\207\220\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0t\4\22\23\256\33jo\375\3\223\235\377\34ko\371\0\0\0$\0"
-  "\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0\234\4\22"
-  "\23\256\33ko\373\2\205\217\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jo\375\3\221\233\377\34lp\366"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0"
-  "\234\4\22\23\256\33ko\373\2\202\214\377\35jo\377\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jo\375\3\217\230\377"
-  "\34lp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0:\0\0\0\234\4\22\23\256\33ko\373\2\200\212\377\35jo\377\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jn\375\3\215"
-  "\226\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0:\0\0\0\234\4\22\23\256\33jo\373\2~\207\377\35jo\377\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jn\375"
-  "\3\212\224\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0:\0\0\0\234\4\22\23\256\33jo\373\2|\204\377\35jo\377"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33"
-  "jn\375\3\210\221\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\30mm\25\26QT\216\25UZ\342\31bf\364\35jo\377\2z\202\377\35jo"
-  "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256"
-  "\33jn\375\3\206\220\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UU"
-  "\3\32bf\177\35ko\371\24ms\372\13u|\377\10w~\377\12t|\377\2w\177\377\35"
-  "jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23"
-  "\256\33jn\375\3\204\215\377\34ko\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*\26"
-  "SV\325\27kq\373\5z\202\377\0|\204\377\0z\202\377\0y\201\377\0w\177\377"
-  "\5t{\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\36lp;\22EH"
-  "\264\25RV\342\35jo\377\3\202\213\377\34ko\366\0\0\0\0\0\0\0\0\0\0\0O"
-  "\15""13\275\27jp\373\1{\203\377\0z\203\377\0y\201\377\0x\200\377\0v~"
-  "\377\0u}\377\11qw\377\33kp\311\0\0\0\0\0\0\0\0\0\0\0\0\31aeG\32gn\350"
-  "\32lp\370\21tz\375\16x\200\377\20v}\377\3\200\211\377\34ko\366\0\0\0"
-  "\0\0\0\0%\0\0\0\233\26W]\347\13u{\377\0y\202\377\0x\200\377\0v~\377\0"
-  "u}\377\0t|\377\6px\377\34jp\366\35lq4\0\0\0\0\0\0\0\12\22GJ\251\33jn"
-  "\374\13}\203\377\0\206\217\377\0\205\216\377\0\204\214\377\0\202\213"
-  "\377\7{\203\377\35jo\377\0\0\0\0\0\0\0d\0\0\0\242\26SV\341\21ou\375\0"
-  "w\177\377\0v~\377\0t|\377\4rz\377\20kr\375\34jn\367\33jmT\0\0\0\0\0\0"
-  "\0\12\13$&\250\32jn\373\3\204\215\377\0\205\216\377\0\204\215\377\0\203"
-  "\213\377\0\201\212\377\0\200\210\377\11x\200\377\34lp\346\0\0\0\0\0\0"
-  "\0D\0\0\0\234\4\22\22\255\31`e\362\32gm\374\27gm\371\32hl\372\34hn\371"
-  "\34hl\245!kk\37\0\0\0\0\0\0\0\0\0\0\0h\24RX\340\14y\201\377\0\204\215"
-  "\377\0\203\214\377\0\201\212\377\0\200\211\377\0\177\207\377\3{\204\377"
-  "\32mq\364\34ipI\0\0\0\0\0\0\0\1\0\0\0G\0\0\0\202\0\0\0\222\5\25\26\225"
-  "\16""02\200\20@D@3ff\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\26W"
-  "]\347\15w\177\377\0\202\212\377\0\201\211\377\0\177\210\377\1}\206\377"
-  "\13v|\377\33kp\370\35io\205\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0k\11\40!\261\33hm\373\25jp\372\20pv\374\23lr\372\33in\374\33"
-  "gm\341\34jnH\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\3\0\0\0A\4\21\21z\16""47\241\23FI\245\25PTy\35ch,\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\40jj\30\34knQ\35kp\217\33mq\330\35jo\377\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UU\3\33mm/\35joj\34lr\254\33mq\350"
+      "\34jo\374\27sy\362\20~\207\374\13\207\217\377\35jo\377\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\""
+      "fw\17\34jnH\35lp\202\33ns\310\35kq\367\33nr\365\24z\201\364\15\206\217"
+      "\377\6\220\231\377\1\231\242\377\0\230\242\377\0\227\241\377\2\222\235"
+      "\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "$mm\16\33ls\247\33ns\337\34ko\374\30sy\361\21\201\210\371\12\215\226"
+      "\377\3\227\242\377\0\234\247\377\0\233\246\377\1\231\243\377\6\216\230"
+      "\377\15\204\213\377\24sx\374\34kp\377\2\220\233\377\35jo\377\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32fo\36\35jo\377\7\224"
+      "\236\377\1\237\252\377\0\240\252\377\0\236\251\377\2\231\244\377\11\215"
+      "\226\377\17\201\210\376\27pv\371\34jo\375\33gk\370\26TW\341\22EG\324"
+      "\35jo\377\2\216\230\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\14\13+/G\33lp\373\1\236\251\377\13\213\223\377\22"
+      "{\203\374\30mr\372\34jn\376\30af\360\23IM\330\15.1\302\4\20\22\255\0"
+      "\0\0\243\0\0\0\243\4\22\23\256\33ko\373\2\214\225\377\35jo\377\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0x\4\22\23\254\33ko\375"
+      "\3\227\241\377\35jo\377\21@D\317\12%&\272\2\6\6\247\0\0\0\243\0\0\0\233"
+      "\0\0\0\232\0\0\0\234\0\0\0\243\0\0\0\237\4\22\23\256\33ko\373\2\212\223"
+      "\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t"
+      "\4\22\23\256\33jo\375\3\225\237\377\33im\374\0\0\0\231\0\0\0\237\0\0"
+      "\0\213\0\0\0c\0\0\0;\0\0\0\30\0\0\0\0\0\0\0:\0\0\0\234\4\22\23\256\33"
+      "ko\373\2\207\220\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0t\4\22\23\256\33jo\375\3\223\235\377\34ko\371\0\0\0$\0"
+      "\0\0\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0\234\4\22"
+      "\23\256\33ko\373\2\205\217\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jo\375\3\221\233\377\34lp\366"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0:\0\0\0"
+      "\234\4\22\23\256\33ko\373\2\202\214\377\35jo\377\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jo\375\3\217\230\377"
+      "\34lp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0:\0\0\0\234\4\22\23\256\33ko\373\2\200\212\377\35jo\377\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jn\375\3\215"
+      "\226\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0:\0\0\0\234\4\22\23\256\33jo\373\2~\207\377\35jo\377\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33jn\375"
+      "\3\212\224\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0:\0\0\0\234\4\22\23\256\33jo\373\2|\204\377\35jo\377"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256\33"
+      "jn\375\3\210\221\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\30mm\25\26QT\216\25UZ\342\31bf\364\35jo\377\2z\202\377\35jo"
+      "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23\256"
+      "\33jn\375\3\206\220\377\34kp\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UU"
+      "\3\32bf\177\35ko\371\24ms\372\13u|\377\10w~\377\12t|\377\2w\177\377\35"
+      "jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\4\22\23"
+      "\256\33jn\375\3\204\215\377\34ko\366\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*\26"
+      "SV\325\27kq\373\5z\202\377\0|\204\377\0z\202\377\0y\201\377\0w\177\377"
+      "\5t{\377\35jo\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\36lp;\22EH"
+      "\264\25RV\342\35jo\377\3\202\213\377\34ko\366\0\0\0\0\0\0\0\0\0\0\0O"
+      "\15""13\275\27jp\373\1{\203\377\0z\203\377\0y\201\377\0x\200\377\0v~"
+      "\377\0u}\377\11qw\377\33kp\311\0\0\0\0\0\0\0\0\0\0\0\0\31aeG\32gn\350"
+      "\32lp\370\21tz\375\16x\200\377\20v}\377\3\200\211\377\34ko\366\0\0\0"
+      "\0\0\0\0%\0\0\0\233\26W]\347\13u{\377\0y\202\377\0x\200\377\0v~\377\0"
+      "u}\377\0t|\377\6px\377\34jp\366\35lq4\0\0\0\0\0\0\0\12\22GJ\251\33jn"
+      "\374\13}\203\377\0\206\217\377\0\205\216\377\0\204\214\377\0\202\213"
+      "\377\7{\203\377\35jo\377\0\0\0\0\0\0\0d\0\0\0\242\26SV\341\21ou\375\0"
+      "w\177\377\0v~\377\0t|\377\4rz\377\20kr\375\34jn\367\33jmT\0\0\0\0\0\0"
+      "\0\12\13$&\250\32jn\373\3\204\215\377\0\205\216\377\0\204\215\377\0\203"
+      "\213\377\0\201\212\377\0\200\210\377\11x\200\377\34lp\346\0\0\0\0\0\0"
+      "\0D\0\0\0\234\4\22\22\255\31`e\362\32gm\374\27gm\371\32hl\372\34hn\371"
+      "\34hl\245!kk\37\0\0\0\0\0\0\0\0\0\0\0h\24RX\340\14y\201\377\0\204\215"
+      "\377\0\203\214\377\0\201\212\377\0\200\211\377\0\177\207\377\3{\204\377"
+      "\32mq\364\34ipI\0\0\0\0\0\0\0\1\0\0\0G\0\0\0\202\0\0\0\222\5\25\26\225"
+      "\16""02\200\20@D@3ff\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\26W"
+      "]\347\15w\177\377\0\202\212\377\0\201\211\377\0\177\210\377\1}\206\377"
+      "\13v|\377\33kp\370\35io\205\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0k\11\40!\261\33hm\373\25jp\372\20pv\374\23lr\372\33in\374\33"
+      "gm\341\34jnH\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\3\0\0\0A\4\21\21z\16""47\241\23FI\245\25PTy\35ch,\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 /* GdkPixbuf RGBA C-Source image dump */
 
@@ -352,109 +355,110 @@ static const guint8 gnome_stock_onhold[] =
 #pragma align 4 (gnome_stock_dial)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_dial[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_dial[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_dial[] = 
+static const guint8 gnome_stock_dial[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
-  "\377\2f\231\\\31\200\257\200\20\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\5\377"
-  "\377\354)\374\374\352J\252\305\230r\316\335\271b\373\373\351G\377\377"
-  "\360#\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\377\377\377\11\377\377\354D\375\375\337g\375\375\332}\302\325\243"
-  "\236\334\347\271\222\375\375\332{\374\374\340b\373\373\352=\377\377\377"
-  "\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\2\210\256zk\347\355"
-  "\312t\374\374\323\222\374\373\313\257\307\330\243\262\341\351\267\253"
-  "\374\373\315\254\373\373\326\216\333\346\300r\204\255y]\0\0\0\0\0\0\0"
-  "\0\24v\0\15\27\200\0\247\30\200\0\270\30~\0\270\26~\0i\0\0\0\0$m\0\7"
-  "\26\200\0\241\30\200\0\270\30~\0\270\30~\0u\377\377\363\26\355\365\325"
-  "b\211\266o\335\231\276w\354\236\311\200\335\240\312\205\266\375\375\337"
-  "p\362\366\315\213\270\316\223\302\257\310\222\242\363\366\334X\377\377"
-  "\353\15\0\0\0\0\24z\0d\40\231\0\377!\232\0\377\40\226\0\377\30~\0\323"
-  "\0\0\0\0\24w\0M\37\225\0\375!\232\0\377\40\226\0\377\30\201\0\334\377"
-  "\377\356-\311\336\256\215\255\324\206\373\223\312q\377q\274T\377R\242"
-  ";\351\345\360\317E\365\367\331e\353\360\304\230\374\374\321\233\375\375"
-  "\337g\377\377\357\40\0\0\0\0\27|\0m\35\221\0\377\36\217\0\377\35\212"
-  "\0\377\26z\0\325\0\0\0\0\25w\0V\34\214\0\377\36\217\0\377\35\213\0\377"
-  "\27{\0\337\377\377\3545\310\336\253\225\264\326\213\373\216\306m\377"
-  "_\255E\377.\211\27\347\266\325\252*\374\374\346S\373\373\326\211\374"
-  "\372\317\243\375\375\336m\377\377\354(\0\0\0\0\25y\0c\34\206\0\377\34"
-  "\204\0\377\33\177\0\377\26v\0\321\0\0\0\0\24w\0K\33\204\0\374\34\204"
-  "\0\377\33\200\0\377\26w\0\333\377\377\356-\314\340\260\213\253\317\206"
-  "\372\203\266e\377l\254R\377P\232:\350\345\360\322D\351\356\316h\307\330"
-  "\246\244\374\374\321\233\375\375\337g\377\377\357\40\0\0\0\0\34q\0\11"
-  "\25w\0\235\25v\0\255\25t\0\255\25r\0b\0\0\0\0\0f\0\5\24v\0\227\25v\0"
-  "\255\25t\0\255\23p\0m\377\377\363\26\276\325\254r\204\260k\334\257\313"
-  "\211\346\241\306\204\327\234\300\201\266\361\366\326q\373\373\327\207"
-  "\324\341\254\270\237\275\206\252\313\334\267g\377\377\377\15\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\377\377\377\2\247\304\231Z\375\375\336m\374\374"
-  "\324\223\374\373\313\260\310\330\243\261\341\351\267\253\374\373\313"
-  "\255\373\373\324\217\370\372\333i\237\277\217P\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\26y\0""9\23|\0P\23|\0P\24z\0\31\0\0\0\0\0\0\0\0\24x\0""3\23|\0P\23"
-  "|\0P\21w\0\36\0\0\0\0\377\377\346\12\262\320\236f\263\323\230\227\305"
-  "\337\245\247\262\315\226\254\335\347\272\224\375\375\332|\374\374\340"
-  "c\373\373\357>\377\377\377\5\0\0\0\0\0\0\0\0\25w\0<\34\217\0\365\37\225"
-  "\0\377\36\222\0\377\30~\0\316\0\0\0\0\23s\0(\33\214\0\360\37\225\0\377"
-  "\36\222\0\377\30\200\0\330\0\0\0\0\24v\0\32\40\213\5\352E\250(\377`\261"
-  "E\377_\242I\355\311\332\261h\373\373\352H\377\377\361%\377\377\377\3"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\25w\0V\35\221\0\377\37\223\0\377\36\217\0\377"
-  "\30}\0\327\0\0\0\0\21s\0<\34\217\0\377\37\223\0\377\36\217\0\377\30~"
-  "\0\337\0\0\0\0\21q\0-\34\215\0\364\37\224\0\377!\220\3\377!\203\13\347"
-  "X\235N\32\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25w\0"
-  "V\34\210\0\377\35\210\0\377\34\204\0\377\27y\0\327\0\0\0\0\21s\0<\33"
-  "\207\0\377\35\210\0\377\34\204\0\377\27x\0\337\0\0\0\0\21q\0-\33\206"
-  "\0\364\35\211\0\377\34\204\0\377\27y\0\345\21w\0\17\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20s\0\37\27x\0\325\26w\0\337\25u\0\337"
-  "\25t\0\251\0\0\0\0\15s\0\24\26x\0\322\26w\0\337\25v\0\337\25s\0\266\0"
-  "\0\0\0\25j\0\14\27w\0\314\26w\0\337\25v\0\337\24t\0\300\0\200\0\2\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\20x\0\40\31\204\0\316\32\210\0\322\32\206\0\322"
-  "\27\177\0\243\0\0\0\0\15s\0\24\30\204\0\313\32\210\0\322\32\206\0\322"
-  "\26}\0\257\0\0\0\0\25j\0\14\27\203\0\306\32\210\0\322\32\206\0\322\30"
-  "\200\0\266\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\27"
-  "|\0m\36\224\0\377\40\227\0\377\37\222\0\377\30\177\0\327\0\0\0\0\24t"
-  "\0K\35\222\0\377\40\227\0\377\37\223\0\377\30\200\0\337\0\0\0\0\21q\0"
-  "-\35\220\0\364\40\230\0\377\37\223\0\377\32\201\0\345\21w\0\17\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\27|\0m\35\213\0\377\36\214"
-  "\0\377\35\207\0\377\30z\0\327\0\0\0\0\24t\0K\34\212\0\377\36\214\0\377"
-  "\35\210\0\377\27z\0\337\0\0\0\0\21q\0-\33\210\0\364\36\215\0\377\35\210"
-  "\0\377\30|\0\345\21w\0\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\24w\0K\32~\0\367\32\177\0\377\32z\0\377\25u\0\315\0\0\0\0\24u\0"
-  "2\30}\0\363\32\177\0\377\32{\0\377\24u\0\327\0\0\0\0\22r\0\35\30}\0\352"
-  "\32\200\0\377\32{\0\377\26u\0\336$m\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\27v\0C\23r\0`\23r\0`\22r\0\35\0\0\0\0\0\0"
-  "\0\0\25q\0=\23r\0`\23r\0`\16q\0$\0\0\0\0\0\0\0\0\27r\0""8\23r\0`\23r"
-  "\0`\22w\0+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377"
+      "\377\2f\231\\\31\200\257\200\20\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\5\377"
+      "\377\354)\374\374\352J\252\305\230r\316\335\271b\373\373\351G\377\377"
+      "\360#\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\377\377\377\11\377\377\354D\375\375\337g\375\375\332}\302\325\243"
+      "\236\334\347\271\222\375\375\332{\374\374\340b\373\373\352=\377\377\377"
+      "\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\2\210\256zk\347\355"
+      "\312t\374\374\323\222\374\373\313\257\307\330\243\262\341\351\267\253"
+      "\374\373\315\254\373\373\326\216\333\346\300r\204\255y]\0\0\0\0\0\0\0"
+      "\0\24v\0\15\27\200\0\247\30\200\0\270\30~\0\270\26~\0i\0\0\0\0$m\0\7"
+      "\26\200\0\241\30\200\0\270\30~\0\270\30~\0u\377\377\363\26\355\365\325"
+      "b\211\266o\335\231\276w\354\236\311\200\335\240\312\205\266\375\375\337"
+      "p\362\366\315\213\270\316\223\302\257\310\222\242\363\366\334X\377\377"
+      "\353\15\0\0\0\0\24z\0d\40\231\0\377!\232\0\377\40\226\0\377\30~\0\323"
+      "\0\0\0\0\24w\0M\37\225\0\375!\232\0\377\40\226\0\377\30\201\0\334\377"
+      "\377\356-\311\336\256\215\255\324\206\373\223\312q\377q\274T\377R\242"
+      ";\351\345\360\317E\365\367\331e\353\360\304\230\374\374\321\233\375\375"
+      "\337g\377\377\357\40\0\0\0\0\27|\0m\35\221\0\377\36\217\0\377\35\212"
+      "\0\377\26z\0\325\0\0\0\0\25w\0V\34\214\0\377\36\217\0\377\35\213\0\377"
+      "\27{\0\337\377\377\3545\310\336\253\225\264\326\213\373\216\306m\377"
+      "_\255E\377.\211\27\347\266\325\252*\374\374\346S\373\373\326\211\374"
+      "\372\317\243\375\375\336m\377\377\354(\0\0\0\0\25y\0c\34\206\0\377\34"
+      "\204\0\377\33\177\0\377\26v\0\321\0\0\0\0\24w\0K\33\204\0\374\34\204"
+      "\0\377\33\200\0\377\26w\0\333\377\377\356-\314\340\260\213\253\317\206"
+      "\372\203\266e\377l\254R\377P\232:\350\345\360\322D\351\356\316h\307\330"
+      "\246\244\374\374\321\233\375\375\337g\377\377\357\40\0\0\0\0\34q\0\11"
+      "\25w\0\235\25v\0\255\25t\0\255\25r\0b\0\0\0\0\0f\0\5\24v\0\227\25v\0"
+      "\255\25t\0\255\23p\0m\377\377\363\26\276\325\254r\204\260k\334\257\313"
+      "\211\346\241\306\204\327\234\300\201\266\361\366\326q\373\373\327\207"
+      "\324\341\254\270\237\275\206\252\313\334\267g\377\377\377\15\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\377\377\377\2\247\304\231Z\375\375\336m\374\374"
+      "\324\223\374\373\313\260\310\330\243\261\341\351\267\253\374\373\313"
+      "\255\373\373\324\217\370\372\333i\237\277\217P\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\26y\0""9\23|\0P\23|\0P\24z\0\31\0\0\0\0\0\0\0\0\24x\0""3\23|\0P\23"
+      "|\0P\21w\0\36\0\0\0\0\377\377\346\12\262\320\236f\263\323\230\227\305"
+      "\337\245\247\262\315\226\254\335\347\272\224\375\375\332|\374\374\340"
+      "c\373\373\357>\377\377\377\5\0\0\0\0\0\0\0\0\25w\0<\34\217\0\365\37\225"
+      "\0\377\36\222\0\377\30~\0\316\0\0\0\0\23s\0(\33\214\0\360\37\225\0\377"
+      "\36\222\0\377\30\200\0\330\0\0\0\0\24v\0\32\40\213\5\352E\250(\377`\261"
+      "E\377_\242I\355\311\332\261h\373\373\352H\377\377\361%\377\377\377\3"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\25w\0V\35\221\0\377\37\223\0\377\36\217\0\377"
+      "\30}\0\327\0\0\0\0\21s\0<\34\217\0\377\37\223\0\377\36\217\0\377\30~"
+      "\0\337\0\0\0\0\21q\0-\34\215\0\364\37\224\0\377!\220\3\377!\203\13\347"
+      "X\235N\32\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\25w\0"
+      "V\34\210\0\377\35\210\0\377\34\204\0\377\27y\0\327\0\0\0\0\21s\0<\33"
+      "\207\0\377\35\210\0\377\34\204\0\377\27x\0\337\0\0\0\0\21q\0-\33\206"
+      "\0\364\35\211\0\377\34\204\0\377\27y\0\345\21w\0\17\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20s\0\37\27x\0\325\26w\0\337\25u\0\337"
+      "\25t\0\251\0\0\0\0\15s\0\24\26x\0\322\26w\0\337\25v\0\337\25s\0\266\0"
+      "\0\0\0\25j\0\14\27w\0\314\26w\0\337\25v\0\337\24t\0\300\0\200\0\2\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\20x\0\40\31\204\0\316\32\210\0\322\32\206\0\322"
+      "\27\177\0\243\0\0\0\0\15s\0\24\30\204\0\313\32\210\0\322\32\206\0\322"
+      "\26}\0\257\0\0\0\0\25j\0\14\27\203\0\306\32\210\0\322\32\206\0\322\30"
+      "\200\0\266\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\27"
+      "|\0m\36\224\0\377\40\227\0\377\37\222\0\377\30\177\0\327\0\0\0\0\24t"
+      "\0K\35\222\0\377\40\227\0\377\37\223\0\377\30\200\0\337\0\0\0\0\21q\0"
+      "-\35\220\0\364\40\230\0\377\37\223\0\377\32\201\0\345\21w\0\17\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\27|\0m\35\213\0\377\36\214"
+      "\0\377\35\207\0\377\30z\0\327\0\0\0\0\24t\0K\34\212\0\377\36\214\0\377"
+      "\35\210\0\377\27z\0\337\0\0\0\0\21q\0-\33\210\0\364\36\215\0\377\35\210"
+      "\0\377\30|\0\345\21w\0\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\24w\0K\32~\0\367\32\177\0\377\32z\0\377\25u\0\315\0\0\0\0\24u\0"
+      "2\30}\0\363\32\177\0\377\32{\0\377\24u\0\327\0\0\0\0\22r\0\35\30}\0\352"
+      "\32\200\0\377\32{\0\377\26u\0\336$m\0\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\27v\0C\23r\0`\23r\0`\22r\0\35\0\0\0\0\0\0"
+      "\0\0\25q\0=\23r\0`\23r\0`\16q\0$\0\0\0\0\0\0\0\0\27r\0""8\23r\0`\23r"
+      "\0`\22w\0+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 /* GdkPixbuf RGBA C-Source image dump */
 
@@ -462,104 +466,105 @@ static const guint8 gnome_stock_dial[] =
 #pragma align 4 (gnome_stock_transfer)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_transfer[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_transfer[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_transfer[] = 
+static const guint8 gnome_stock_transfer[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21i\377=\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\21i\377\210\24h\377@\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\21i\377\210\22h\377\232\24i\3773\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\21i\377\210\22i\377\234\23h\377\237\22k\377+\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\21i\377\210\22i\377\234\22h\377\246\21h\377\247\17d\377"
-  "!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\4\27]\377"
-  "\13\17i\377\21\26o\377\27\22j\377\35\16c\377$\22e\377+\25h\3771\23k\377"
-  "7\20g\377>\23i\377D\21k\377J\20i\377P\22h\377\216\22i\377\234\22h\377"
-  "\246\21h\377\261\22h\377\246\27h\377\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<"
-  "\22h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22"
-  "h\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22i\377\250"
-  "\17i\377\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0m\377\7\16c\377\22\22d\377"
-  "\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22"
-  "h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21h\377"
-  "\261\22h\377\273\22h\377\306\23h\377\244\34U\377\11\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22h"
-  "\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h\377"
-  "\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306\22h"
-  "\377\321\21h\377\230\0f\377\5\0\0\0\0\0\0\0\0\0m\377\7\16c\377\22\22"
-  "d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377"
-  "g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21"
-  "h\377\261\22h\377\273\22h\377\306\22h\377\321\21h\377\333\21g\377\224"
-  "\0\0\377\1\0\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21"
-  "f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377"
-  "\206\22h\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h"
-  "\377\306\22h\377\321\21h\377\333\22h\377\346\22h\377\200\0\0\0\0\0m\377"
-  "\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377"
-  "Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377"
-  "\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306\22h\377\321\21h"
-  "\377\333\22h\377\346\22h\377\361\23h\377n\0m\377\7\16c\377\22\22d\377"
-  "\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22"
-  "h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21h\377"
-  "\261\22h\377\273\22h\377\306\22h\377\321\21h\377\333\22h\377\346\22h"
-  "\377\361\21h\377v\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21"
-  "f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377"
-  "\206\22h\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h"
-  "\377\306\22h\377\321\21h\377\333\22h\377\346\22g\377\212\0\0\0\0\0m\377"
-  "\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377"
-  "Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377"
-  "\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306\22h\377\321\21h"
-  "\377\333\21g\377\224\0\0\377\1\0\0\0\0\0m\377\7\16c\377\22\22d\377\34"
-  "\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22h"
-  "\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21h\377"
-  "\261\22h\377\273\22h\377\306\22h\377\321\21h\377\242\0f\377\5\0\0\0\0"
-  "\0\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22"
-  "h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h"
-  "\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306"
-  "\23h\377\245\24b\377\15\0\0\0\0\0\0\0\0\0\0\0\0\0m\377\7\16c\377\22\22"
-  "d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377"
-  "g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21"
-  "h\377\261\22h\377\273\22i\377\252\17i\377\21\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\200\377\4\27]\377\13\17i\377\21\26o\377\27\22j\377\35\16c"
-  "\377$\22e\377+\25h\3771\23k\3777\20g\377>\23i\377D\21k\377J\20i\377P"
-  "\22h\377\216\22i\377\234\22h\377\246\21h\377\261\22h\377\254\22d\377"
-  "\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\21i\377\210\22i\377\234\22h\377\246\21h\377\247\17i\377\""
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\21i\377\210\22i\377\234\23h\377\242\21i\377.\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\21i\377\210\22h\377\232\22j\377:\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\21i\377\210\24h\377@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\23i\377D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\21i\377=\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\21i\377\210\24h\377@\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\21i\377\210\22h\377\232\24i\3773\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\21i\377\210\22i\377\234\23h\377\237\22k\377+\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\21i\377\210\22i\377\234\22h\377\246\21h\377\247\17d\377"
+      "!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\4\27]\377"
+      "\13\17i\377\21\26o\377\27\22j\377\35\16c\377$\22e\377+\25h\3771\23k\377"
+      "7\20g\377>\23i\377D\21k\377J\20i\377P\22h\377\216\22i\377\234\22h\377"
+      "\246\21h\377\261\22h\377\246\27h\377\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<"
+      "\22h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22"
+      "h\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22i\377\250"
+      "\17i\377\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0m\377\7\16c\377\22\22d\377"
+      "\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22"
+      "h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21h\377"
+      "\261\22h\377\273\22h\377\306\23h\377\244\34U\377\11\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22h"
+      "\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h\377"
+      "\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306\22h"
+      "\377\321\21h\377\230\0f\377\5\0\0\0\0\0\0\0\0\0m\377\7\16c\377\22\22"
+      "d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377"
+      "g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21"
+      "h\377\261\22h\377\273\22h\377\306\22h\377\321\21h\377\333\21g\377\224"
+      "\0\0\377\1\0\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21"
+      "f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377"
+      "\206\22h\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h"
+      "\377\306\22h\377\321\21h\377\333\22h\377\346\22h\377\200\0\0\0\0\0m\377"
+      "\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377"
+      "Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377"
+      "\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306\22h\377\321\21h"
+      "\377\333\22h\377\346\22h\377\361\23h\377n\0m\377\7\16c\377\22\22d\377"
+      "\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22"
+      "h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21h\377"
+      "\261\22h\377\273\22h\377\306\22h\377\321\21h\377\333\22h\377\346\22h"
+      "\377\361\21h\377v\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21"
+      "f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377"
+      "\206\22h\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h"
+      "\377\306\22h\377\321\21h\377\333\22h\377\346\22g\377\212\0\0\0\0\0m\377"
+      "\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377"
+      "Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377"
+      "\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306\22h\377\321\21h"
+      "\377\333\21g\377\224\0\0\377\1\0\0\0\0\0m\377\7\16c\377\22\22d\377\34"
+      "\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377g\22h"
+      "\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21h\377"
+      "\261\22h\377\273\22h\377\306\22h\377\321\21h\377\242\0f\377\5\0\0\0\0"
+      "\0\0\0\0\0m\377\7\16c\377\22\22d\377\34\24i\377'\20h\3771\21f\377<\22"
+      "h\377G\23h\377Q\21i\377\\\21h\377g\22h\377q\23i\377|\21i\377\206\22h"
+      "\377\221\22i\377\234\22h\377\246\21h\377\261\22h\377\273\22h\377\306"
+      "\23h\377\245\24b\377\15\0\0\0\0\0\0\0\0\0\0\0\0\0m\377\7\16c\377\22\22"
+      "d\377\34\24i\377'\20h\3771\21f\377<\22h\377G\23h\377Q\21i\377\\\21h\377"
+      "g\22h\377q\23i\377|\21i\377\206\22h\377\221\22i\377\234\22h\377\246\21"
+      "h\377\261\22h\377\273\22i\377\252\17i\377\21\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\200\377\4\27]\377\13\17i\377\21\26o\377\27\22j\377\35\16c"
+      "\377$\22e\377+\25h\3771\23k\3777\20g\377>\23i\377D\21k\377J\20i\377P"
+      "\22h\377\216\22i\377\234\22h\377\246\21h\377\261\22h\377\254\22d\377"
+      "\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\21i\377\210\22i\377\234\22h\377\246\21h\377\247\17i\377\""
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\21i\377\210\22i\377\234\23h\377\242\21i\377.\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\21i\377\210\22h\377\232\22j\377:\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\21i\377\210\24h\377@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\23i\377D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 
 /* GdkPixbuf RGBA C-Source image dump */
@@ -568,96 +573,206 @@ static const guint8 gnome_stock_transfer[] =
 #pragma align 4 (gnome_stock_offhold)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_offhold[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_offhold[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_offhold[] = 
+static const guint8 gnome_stock_offhold[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0ix\21\0mss\0mr\210\0lt@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "3ff\5\14kqV\14lr\250\0lr}\0mv\34\0\0\0\0\0ht\26\0ls\343\0ls\377\0ls\377"
-  "\0ls\377\0ms\242\0\200\200\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\34qq\11\33mm/\32kqX\33ms\205\26lq\320\17ou\377\22kp"
-  "\377\0ls\377\0ls\364\0lq-\0ks\212\0ls\377\0ls\377\0ls\377\0ls\377\0l"
-  "s\377\0ks\253\0ff\5\0\0\0\0\0\0\0\0\40`p\20\34mm6\35nta\33ms\214\34k"
-  "p\235\26tz\230\16\202\212\237\5\206\216\324\1\207\217\377\1\205\216\377"
-  "\21lq\377\0ls\377\0ls\377\0ks\262\0lr\256\0ls\377\0ls\377\0ls\377\0l"
-  "s\377\0ls\377\3lr\377\11lr\300\32mtn\34ns\222\34lq\234\26y\200\230\15"
-  "\207\217\240\6\222\233\241\0\233\245\241\0\232\245\241\0\216\226\324"
-  "\4\201\211\377\10z\200\377\2\203\213\377\21lq\377\0ls\377\0ls\377\0l"
-  "t\326\0lsv\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\22lq\377\16sy\377"
-  "\11\202\212\341\5\226\241\243\0\236\251\241\0\236\250\241\2\232\245\241"
-  "\6\217\230\241\16\202\212\237\20qy\321\21lq\377\17ls\377\22kp\377\2\201"
-  "\211\377\21kq\377\0ls\377\0ls\377\0ks\235\0\200\200\6\0ls\377\0ls\377"
-  "\0ls\377\0ls\377\0ls\377\17ls\377\3\210\220\377\1\212\223\377\6\205\215"
-  "\342\16\201\211\240\27rw\230\35ko\236\33lt\206\15lq\266\6ls\377\1ls\377"
-  "\0ls\377\21lq\377\2\177\207\377\21kq\377\0ls\377\0lr\341\0ju\30\0\0\0"
-  "\0\0pp\20\0ms\312\0ls\377\0ls\377\0ls\377\17ls\377\3\207\216\377\22k"
-  "p\377\15ms\377\13mr\314\26ot.$mm\7\0lr\223\0ls\377\0ls\377\0ls\377\0"
-  "ls\377\21lq\377\2~\206\377\21kq\377\0ls\340\0lt!\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0fw\17\0ls\307\0ls\377\0ls\377\17ls\377\3\205\216\377\22kp\377\0"
-  "ls\377\0ls\377\0ls\266\0kr\230\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377"
-  "\21lq\377\2}\204\377\22kq\362\0pp\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0fw\17\0ks\305\0ls\377\17ls\377\3\204\214\377\22kp\377\0ls\377"
-  "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\21l"
-  "q\377\2|\204\362\32ko\247\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0mm\16\0lr\304\17ls\377\3\202\213\377\22kp\377\0ls\377\0"
-  "ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\22lp\361"
-  "\3~\210\254\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0vv\15\21ls\345\3\201\211\377\22kp\377\0ls\377\0ls\377"
-  "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\332\32lo\247\3\177"
-  "\210\241\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\32mr\224\3\201\211\351\22kp\377\0ls\377\0ls\377"
-  "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0mt\332\0hq\33\34lo\234\3}\205"
-  "\241\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\33lq\220\3\201\211\335\22kp\377\0ls\377\0ls\377\0ls"
-  "\377\0ls\377\0ls\377\0ls\377\0ls\377\0ms\305\0f\200\12\34lo\234\3z\203"
-  "\241\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0UU\3\22lr\326\3}\205\377\22kp\377\0ls\377\0ls\377\0ls\377\0"
-  "ls\377\0ls\377\0ls\377\4ls\377\12lr\377\17mq\337\34ko\245\3x\200\241"
-  "\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0U"
-  "U\3\0ks\244\17lr\377\3|\204\377\22kp\377\0ls\377\0ls\377\0ls\377\0ls"
-  "\377\3ls\377\16lq\377\17lr\377\11rx\377\5sz\377\7rx\351\3w\177\245\35"
-  "ko\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UU\3\0ls\246"
-  "\0ls\377\17kr\377\3{\202\377\22kp\377\0ls\377\0ls\377\0ls\377\2ls\377"
-  "\20lq\377\10rx\377\0v}\377\0u}\377\0t{\377\0sz\377\3rx\351\34jo\246\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\4\3ls\257\10lr\377\13"
-  "lr\377\22kp\377\3y\201\377\22kp\377\0ls\377\0ls\377\0ls\324\16lr\333"
-  "\10ry\377\0v}\377\0t|\377\0t{\377\0sz\377\0ry\377\6nv\377\16kr\337\0"
-  "fw\17\0\0\0\0\0\0\0\0\0\0\0\0\22mm\16\16lr\315\21lr\377\13qx\377\6v}"
-  "\377\10u{\377\2y\201\377\22kp\377\0ls\377\0ls\317\0ht\26\35kp\240\1u"
-  "|\344\0t{\377\0sz\377\0ry\377\0qx\377\4ov\377\20kq\377\3ls\377\0ls\307"
-  "\0fw\17\0\0\0\0\40\200\200\10\22lr\331\13qy\377\1}\204\377\0|\204\377"
-  "\0{\202\377\0z\202\377\1x\177\377\22kp\377\0ls\316\0ky\23\0\0\0\0\35"
-  "kp\217\13sy\242\1t|\343\0qx\377\4pv\377\13mt\377\20kp\377\4kr\377\0l"
-  "s\377\0ls\377\0ls\377\0\200\200\6\17mr\233\12ry\377\0}\204\377\0{\203"
-  "\377\0{\202\377\0y\201\377\0y\200\377\4u|\377\17lq\347\0qq\22\0\0\0\0"
-  "\0\0\0\0\34hq\33\32lp\200\34kp\235\23kp\341\17lq\377\11lr\377\1ks\377"
-  "\0ls\377\0ls\377\0ls\377\0ls\377\0lt\213\23kr\333\3y\201\377\0{\202\377"
-  "\0z\201\377\0y\200\377\0x\177\377\3v|\377\21jr\353\23mv6\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\6\0mr\260\0ls\377\0ls"
-  "\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\322\22lr\313\10s{\377\0y\200"
-  "\377\0x\200\377\2v}\377\11qw\377\21kq\353\27koL\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\6\0ls\255\0ls\377"
-  "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\273\14jnA\17lq\370\21kq\377\20k"
-  "r\377\20lq\377\15kr\335\24bo'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ff\5\0lt\252\0ls\377\0ls\377"
-  "\0ls\377\0ls\374\0ksE\0\0\0\0\0lq-\2ms\242\1ls\275\0lrt\0tt\13\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0lrU\0mt\267\0lt\254\0js<\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0ix\21\0mss\0mr\210\0lt@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "3ff\5\14kqV\14lr\250\0lr}\0mv\34\0\0\0\0\0ht\26\0ls\343\0ls\377\0ls\377"
+      "\0ls\377\0ms\242\0\200\200\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\34qq\11\33mm/\32kqX\33ms\205\26lq\320\17ou\377\22kp"
+      "\377\0ls\377\0ls\364\0lq-\0ks\212\0ls\377\0ls\377\0ls\377\0ls\377\0l"
+      "s\377\0ks\253\0ff\5\0\0\0\0\0\0\0\0\40`p\20\34mm6\35nta\33ms\214\34k"
+      "p\235\26tz\230\16\202\212\237\5\206\216\324\1\207\217\377\1\205\216\377"
+      "\21lq\377\0ls\377\0ls\377\0ks\262\0lr\256\0ls\377\0ls\377\0ls\377\0l"
+      "s\377\0ls\377\3lr\377\11lr\300\32mtn\34ns\222\34lq\234\26y\200\230\15"
+      "\207\217\240\6\222\233\241\0\233\245\241\0\232\245\241\0\216\226\324"
+      "\4\201\211\377\10z\200\377\2\203\213\377\21lq\377\0ls\377\0ls\377\0l"
+      "t\326\0lsv\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\22lq\377\16sy\377"
+      "\11\202\212\341\5\226\241\243\0\236\251\241\0\236\250\241\2\232\245\241"
+      "\6\217\230\241\16\202\212\237\20qy\321\21lq\377\17ls\377\22kp\377\2\201"
+      "\211\377\21kq\377\0ls\377\0ls\377\0ks\235\0\200\200\6\0ls\377\0ls\377"
+      "\0ls\377\0ls\377\0ls\377\17ls\377\3\210\220\377\1\212\223\377\6\205\215"
+      "\342\16\201\211\240\27rw\230\35ko\236\33lt\206\15lq\266\6ls\377\1ls\377"
+      "\0ls\377\21lq\377\2\177\207\377\21kq\377\0ls\377\0lr\341\0ju\30\0\0\0"
+      "\0\0pp\20\0ms\312\0ls\377\0ls\377\0ls\377\17ls\377\3\207\216\377\22k"
+      "p\377\15ms\377\13mr\314\26ot.$mm\7\0lr\223\0ls\377\0ls\377\0ls\377\0"
+      "ls\377\21lq\377\2~\206\377\21kq\377\0ls\340\0lt!\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0fw\17\0ls\307\0ls\377\0ls\377\17ls\377\3\205\216\377\22kp\377\0"
+      "ls\377\0ls\377\0ls\266\0kr\230\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377"
+      "\21lq\377\2}\204\377\22kq\362\0pp\40\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0fw\17\0ks\305\0ls\377\17ls\377\3\204\214\377\22kp\377\0ls\377"
+      "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\21l"
+      "q\377\2|\204\362\32ko\247\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0mm\16\0lr\304\17ls\377\3\202\213\377\22kp\377\0ls\377\0"
+      "ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\22lp\361"
+      "\3~\210\254\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0vv\15\21ls\345\3\201\211\377\22kp\377\0ls\377\0ls\377"
+      "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\332\32lo\247\3\177"
+      "\210\241\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\32mr\224\3\201\211\351\22kp\377\0ls\377\0ls\377"
+      "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\377\0mt\332\0hq\33\34lo\234\3}\205"
+      "\241\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\33lq\220\3\201\211\335\22kp\377\0ls\377\0ls\377\0ls"
+      "\377\0ls\377\0ls\377\0ls\377\0ls\377\0ms\305\0f\200\12\34lo\234\3z\203"
+      "\241\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0UU\3\22lr\326\3}\205\377\22kp\377\0ls\377\0ls\377\0ls\377\0"
+      "ls\377\0ls\377\0ls\377\4ls\377\12lr\377\17mq\337\34ko\245\3x\200\241"
+      "\34kp\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0U"
+      "U\3\0ks\244\17lr\377\3|\204\377\22kp\377\0ls\377\0ls\377\0ls\377\0ls"
+      "\377\3ls\377\16lq\377\17lr\377\11rx\377\5sz\377\7rx\351\3w\177\245\35"
+      "ko\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0UU\3\0ls\246"
+      "\0ls\377\17kr\377\3{\202\377\22kp\377\0ls\377\0ls\377\0ls\377\2ls\377"
+      "\20lq\377\10rx\377\0v}\377\0u}\377\0t{\377\0sz\377\3rx\351\34jo\246\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\4\3ls\257\10lr\377\13"
+      "lr\377\22kp\377\3y\201\377\22kp\377\0ls\377\0ls\377\0ls\324\16lr\333"
+      "\10ry\377\0v}\377\0t|\377\0t{\377\0sz\377\0ry\377\6nv\377\16kr\337\0"
+      "fw\17\0\0\0\0\0\0\0\0\0\0\0\0\22mm\16\16lr\315\21lr\377\13qx\377\6v}"
+      "\377\10u{\377\2y\201\377\22kp\377\0ls\377\0ls\317\0ht\26\35kp\240\1u"
+      "|\344\0t{\377\0sz\377\0ry\377\0qx\377\4ov\377\20kq\377\3ls\377\0ls\307"
+      "\0fw\17\0\0\0\0\40\200\200\10\22lr\331\13qy\377\1}\204\377\0|\204\377"
+      "\0{\202\377\0z\202\377\1x\177\377\22kp\377\0ls\316\0ky\23\0\0\0\0\35"
+      "kp\217\13sy\242\1t|\343\0qx\377\4pv\377\13mt\377\20kp\377\4kr\377\0l"
+      "s\377\0ls\377\0ls\377\0\200\200\6\17mr\233\12ry\377\0}\204\377\0{\203"
+      "\377\0{\202\377\0y\201\377\0y\200\377\4u|\377\17lq\347\0qq\22\0\0\0\0"
+      "\0\0\0\0\34hq\33\32lp\200\34kp\235\23kp\341\17lq\377\11lr\377\1ks\377"
+      "\0ls\377\0ls\377\0ls\377\0ls\377\0lt\213\23kr\333\3y\201\377\0{\202\377"
+      "\0z\201\377\0y\200\377\0x\177\377\3v|\377\21jr\353\23mv6\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\6\0mr\260\0ls\377\0ls"
+      "\377\0ls\377\0ls\377\0ls\377\0ls\377\0ls\322\22lr\313\10s{\377\0y\200"
+      "\377\0x\200\377\2v}\377\11qw\377\21kq\353\27koL\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\6\0ls\255\0ls\377"
+      "\0ls\377\0ls\377\0ls\377\0ls\377\0ls\273\14jnA\17lq\370\21kq\377\20k"
+      "r\377\20lq\377\15kr\335\24bo'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ff\5\0lt\252\0ls\377\0ls\377"
+      "\0ls\377\0ls\374\0ksE\0\0\0\0\0lq-\2ms\242\1ls\275\0lrt\0tt\13\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0lrU\0mt\267\0lt\254\0js<\0\0\0\0"
+    };
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (gnome_stock_im)
+#endif
+#ifdef __GNUC__
+static const guint8 gnome_stock_im[] __attribute__ ( (__aligned__ (4))) =
+#else
+static const guint8 gnome_stock_im[] =
+#endif
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\4\0\200\0&\0\201\0K\0\200\0"
+      "^\0\201\0i\0\200\0l\0~\0a\0\200\0P\0\200\0,\0\200\0\10\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\200\0\4\0\200\0N\0\200\0\226\0\177\0\323\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\177\0\327\0\200\0\241\0\201\0[\0\216\0\11\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\0K\0\200\0\301\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\314\0\201\0c\0\200\0\2\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0U\0\3\0\177\0\207\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\243\0q\0\11\0\0\0\0\0\0\0\0\0"
+      "\201\0u\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\232\0\0\0\0\0\205\0"
+      "\27\0\177\0\327\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "6\0\200\0D\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\201\0i\0}\0""9\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\201\0]\0q\0\11\0\200\0\304\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\200\0\325\0\200\0\34\0\0\0\0\0~\0A\0\177\0\327\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\200\0`\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0B\0\177\0\313\0\200\0\334\0\200"
+      "\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0"
+      "\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\324\0~\0[\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0y\0\23\0\200\0|\0\177\0\323\0\200\0\334\0"
+      "\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334"
+      "\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0"
+      "\330\0\177\0\215\0\200\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\200\0\16\0~\0M\0\200\0\215\0\200\0\271\0\177"
+      "\0\331\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\334\0\200\0\333\0"
+      "\177\0\277\0\200\0\225\0\200\0X\0y\0\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\26"
+      "\0\200\0,\0\203\0#\0\237\0\10\0\200\0\26\0|\0#\0\203\0%\0\200\0\30\0"
+      "\200\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\22\0\201\0\236\0"
+      "\200\0\315\0\200\0\315\0\200\0\315\0\200\0\277\0\201\0E\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0(\0\200"
+      "\0\307\0\200\0\315\0\200\0\315\0\200\0\315\0\200\0\315\0\200\0v\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0{\0\33\0\201\0Y\0\201\0q\0\201\0g\0\202\0""7\0\0\0\1\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\4\0~\0{\0\200\0\254"
+      "\0\200\0\250\0\200\0d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0U\0\3\0\201\0k\0\200\0\236\0\177"
+      "\0\231\0\200\0T\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 
 /* GdkPixbuf RGBA C-Source image dump */
@@ -666,98 +781,99 @@ static const guint8 gnome_stock_offhold[] =
 #pragma align 4 (gnome_stock_call_current)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_call_current[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_call_current[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_call_current[] = 
+static const guint8 gnome_stock_call_current[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\0\0\0"
-  "/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\12""8\0\205\21c\0\324\22f\0\326\12"
-  "-\0k\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\2\0\11\0:\20U\0\262\26\205\0\362\23r\0\364\24}\0\364\20e\0"
-  "\334\3\30\0J\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0%\20^\0\316\33\241\0\376\32\241\0\377\30\224\0\377\21g\0\364"
-  "\23w\0\375\17S\0\277\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0=\214U*\0\377\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\20\20^\0\301\30\231\0\377\30\231\0\377\27\216\0\377"
-  "\24z\0\377\21b\0\363\17_\0\335\0\13\0-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0<\214Ux:\217U0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15L\0\236\27\220\0\377\27\220\0\377\26\211"
-  "\0\377\23{\0\377\17]\0\356\17_\0\352\3\32\0M\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0""3\231M\12=\215S\\\0\0\0\0<\215Q/<\214Ux\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7+\0j\25\204\0\363\30\224\0\377"
-  "\26\211\0\377\24|\0\377\20Y\0\362\16M\0\265\0\5\0""2\0\0\0\0\0\0\0\0"
-  ":\216TF\0\377\0\1\0\0\0\0<\214T\203\0\0\0\0\0\377\0\1<\215S\245\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0""6\22o\0\332"
-  "\30\227\0\377\26\215\0\377\21h\0\355\12*\0\206\0\0\0\25\0\0\0\0\0\0\0"
-  "\0\0\0\0\0;\215R8>\213UB\0\0\0\0;\214S\201\0\0\0\0\0\0\0\0=\215T\244"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\20"
-  "`\0\305\31\233\0\377\27\220\0\377\24~\0\377\16I\0\250\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0<\216Ts\0\0\0\0;\215TyI\222I\7\0\0\0\0;\215T"
-  "\243\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\13A\0\212\27\214\0\370\30\224\0\377\26\211\0\377\17\\\0\326\0\0\0\26"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0;\215Tt\0\0\0\0;\216Sh;\211X\32\0\0\0"
-  "\0=\215T\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\11\0""9\22n\0\332\30\227\0\377\26\214\0\377\23s\0\363\12;"
-  "\0\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0;\215Tt\0\0\0\0<\216Ts3\231M\12"
-  "\0\0\0\0=\215T\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\11\17W\0\270\30\225\0\377\27\220\0\377\25\204\0"
-  "\377\16[\0\330\0\0\0\24\0\0\0\0\0\0\0\0""9\216U\11<\215Sn\0\0\0\0;\214"
-  "S\201\0\0\0\0\0\0\0\0=\215T\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\33\0T\24t\0\343\30\224\0\377\26"
-  "\211\0\377\22s\0\364\13=\0\215\0\0\0\0\0\0\0\0<\214SY>\213U!\0\0\0\0"
-  ";\216T\205\0\0\0\0""9\216U\11<\214T\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17Z\0\273\27\221"
-  "\0\377\26\214\0\377\25\202\0\377\20^\0\337\5\35\0""5\0\0\0\0>\213U!\0"
-  "\0\0\0+\200U\6<\215U{\0\0\0\0=\214SG;\216S_\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\31\0R\22o\0"
-  "\341\27\220\0\377\25\205\0\377\23w\0\377\15Q\0\304\0\0\0\12\0\0\0\0\0"
-  "\0\0\0\0\0\0\0@\200@\4\0\0\0\0;\216T\205;\211X\32\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10"
-  "\15H\0\233\25\202\0\364\26\211\0\377\24~\0\377\21g\0\357\12@\0\224\0"
-  "\0\0\5\0\0\0\7\3\25\0J\0\0\0\35\0\0\0\0\0\377\0\1\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\40\20]\0\313\26\211\0\377\25\201\0\377\23w\0\377\20_\0"
-  "\345\11""1\0\210\16U\0\326\23l\0\346\20`\0\315\4\27\0C\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\27\0N\20d\0\334\25\204\0\377\23z\0\377"
-  "\21o\0\377\20a\0\357\21k\0\375\23g\0\366\24|\0\375\17Z\0\313\0\7\0#\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\11(\0l\21j\0\342\24~\0\377"
-  "\22s\0\377\20h\0\377\20b\0\377\20f\0\377\21b\0\365\21m\0\370\13:\0\210"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\11<\0\210\22i\0"
-  "\346\23w\0\377\21k\0\377\17a\0\377\17_\0\377\17[\0\373\20d\0\371\16S"
-  "\0\304\0\0\0\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15\12"
-  ";\0\206\21f\0\346\21o\0\377\17d\0\377\17_\0\377\17_\0\377\20Z\0\362\17"
-  "U\0\316\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\15\12""7\0\202\20`\0\340\20h\0\377\17_\0\377\17\\\0\366\20V\0"
-  "\363\10,\0y\0\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\12\7)\0k\17Z\0\336\16U\0\324\13""9\0\212\0\6\0(\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\4\3\15\0P\0\0\0+\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\0\0\0"
+      "/\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\12""8\0\205\21c\0\324\22f\0\326\12"
+      "-\0k\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\2\0\11\0:\20U\0\262\26\205\0\362\23r\0\364\24}\0\364\20e\0"
+      "\334\3\30\0J\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0%\20^\0\316\33\241\0\376\32\241\0\377\30\224\0\377\21g\0\364"
+      "\23w\0\375\17S\0\277\0\0\0\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0=\214U*\0\377\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\20\20^\0\301\30\231\0\377\30\231\0\377\27\216\0\377"
+      "\24z\0\377\21b\0\363\17_\0\335\0\13\0-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0<\214Ux:\217U0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15L\0\236\27\220\0\377\27\220\0\377\26\211"
+      "\0\377\23{\0\377\17]\0\356\17_\0\352\3\32\0M\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0""3\231M\12=\215S\\\0\0\0\0<\215Q/<\214Ux\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7+\0j\25\204\0\363\30\224\0\377"
+      "\26\211\0\377\24|\0\377\20Y\0\362\16M\0\265\0\5\0""2\0\0\0\0\0\0\0\0"
+      ":\216TF\0\377\0\1\0\0\0\0<\214T\203\0\0\0\0\0\377\0\1<\215S\245\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0""6\22o\0\332"
+      "\30\227\0\377\26\215\0\377\21h\0\355\12*\0\206\0\0\0\25\0\0\0\0\0\0\0"
+      "\0\0\0\0\0;\215R8>\213UB\0\0\0\0;\214S\201\0\0\0\0\0\0\0\0=\215T\244"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\20"
+      "`\0\305\31\233\0\377\27\220\0\377\24~\0\377\16I\0\250\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0<\216Ts\0\0\0\0;\215TyI\222I\7\0\0\0\0;\215T"
+      "\243\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\13A\0\212\27\214\0\370\30\224\0\377\26\211\0\377\17\\\0\326\0\0\0\26"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0;\215Tt\0\0\0\0;\216Sh;\211X\32\0\0\0"
+      "\0=\215T\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\11\0""9\22n\0\332\30\227\0\377\26\214\0\377\23s\0\363\12;"
+      "\0\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0;\215Tt\0\0\0\0<\216Ts3\231M\12"
+      "\0\0\0\0=\215T\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\11\17W\0\270\30\225\0\377\27\220\0\377\25\204\0"
+      "\377\16[\0\330\0\0\0\24\0\0\0\0\0\0\0\0""9\216U\11<\215Sn\0\0\0\0;\214"
+      "S\201\0\0\0\0\0\0\0\0=\215T\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\33\0T\24t\0\343\30\224\0\377\26"
+      "\211\0\377\22s\0\364\13=\0\215\0\0\0\0\0\0\0\0<\214SY>\213U!\0\0\0\0"
+      ";\216T\205\0\0\0\0""9\216U\11<\214T\236\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17Z\0\273\27\221"
+      "\0\377\26\214\0\377\25\202\0\377\20^\0\337\5\35\0""5\0\0\0\0>\213U!\0"
+      "\0\0\0+\200U\6<\215U{\0\0\0\0=\214SG;\216S_\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\31\0R\22o\0"
+      "\341\27\220\0\377\25\205\0\377\23w\0\377\15Q\0\304\0\0\0\12\0\0\0\0\0"
+      "\0\0\0\0\0\0\0@\200@\4\0\0\0\0;\216T\205;\211X\32\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10"
+      "\15H\0\233\25\202\0\364\26\211\0\377\24~\0\377\21g\0\357\12@\0\224\0"
+      "\0\0\5\0\0\0\7\3\25\0J\0\0\0\35\0\0\0\0\0\377\0\1\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\40\20]\0\313\26\211\0\377\25\201\0\377\23w\0\377\20_\0"
+      "\345\11""1\0\210\16U\0\326\23l\0\346\20`\0\315\4\27\0C\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\27\0N\20d\0\334\25\204\0\377\23z\0\377"
+      "\21o\0\377\20a\0\357\21k\0\375\23g\0\366\24|\0\375\17Z\0\313\0\7\0#\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\11(\0l\21j\0\342\24~\0\377"
+      "\22s\0\377\20h\0\377\20b\0\377\20f\0\377\21b\0\365\21m\0\370\13:\0\210"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\11\11<\0\210\22i\0"
+      "\346\23w\0\377\21k\0\377\17a\0\377\17_\0\377\17[\0\373\20d\0\371\16S"
+      "\0\304\0\0\0\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15\12"
+      ";\0\206\21f\0\346\21o\0\377\17d\0\377\17_\0\377\17_\0\377\20Z\0\362\17"
+      "U\0\316\0\0\0\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\15\12""7\0\202\20`\0\340\20h\0\377\17_\0\377\17\\\0\366\20V\0"
+      "\363\10,\0y\0\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\12\7)\0k\17Z\0\336\16U\0\324\13""9\0\212\0\6\0(\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\4\3\15\0P\0\0\0+\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
 
 /* GdkPixbuf RGBA C-Source image dump */
 
@@ -765,134 +881,135 @@ static const guint8 gnome_stock_call_current[] =
 #pragma align 4 (gnome_stock_addressbook)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_addressbook[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_addressbook[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_addressbook[] = 
+static const guint8 gnome_stock_addressbook[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0#Q\220n3[\226\3105]\231\3125]\231\3125]\231\312"
-  "5]\231\3125]\231\3125]\231\3125]\231\3125]\231\3125]\231\3125]\231\312"
-  "5]\231\3125]\231\3125]\231\3121[\227\306&Q\213X\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\200\200\200\2\227\241\244bGl\237\367\\\202\263\377"
-  "~\234\301\377~\234\301\377~\234\301\377~\234\301\377~\234\301\377~\234"
-  "\301\377~\234\301\377~\234\301\377~\234\301\377~\234\301\377~\234\301"
-  "\377~\234\301\377~\234\301\377r\223\274\3778a\232\332\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\304\304\261\15\307\312\304\312\276\304\310\377Os\246"
-  "\376\237\263\313\377\334\343\352\377\334\343\352\377\334\343\352\377"
-  "\334\343\352\377\334\343\352\377\334\343\352\377\334\343\352\377\334"
-  "\343\352\377\334\343\352\377\334\343\352\377\334\343\352\377\334\343"
-  "\352\377\333\342\350\377\310\321\332\377=d\234\341\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\331\335\326\301\350\350\345\377f\201\242\264e\211\266"
-  "\375}\235\304\377\202\241\305\377\202\241\305\377\202\241\305\377\202"
-  "\241\305\377\202\241\305\377\202\241\305\377\201\240\305\377\201\240"
-  "\305\377\201\240\305\377\201\240\305\377\201\240\305\377\200\237\304"
-  "\377\177\236\304\377~\235\303\377Z~\257\374(U\2179\1\0\0\0\0\0\0\0\0"
-  "\0\0\0\326\330\324\376\326\330\322\373Dj\237\314\221\265\331\377a\215"
-  "\300\377q\236\316\377r\237\317\377r\237\317\377r\237\317\377r\237\317"
-  "\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377p\235\315\377"
-  "o\234\315\377n\233\314\377l\232\313\377k\231\312\377\217\260\326\377"
-  "7gs\347a\253\32\261Z\251\13D\0\0\0\0\300\303\274\342\323\324\320\377"
-  "\223\241\255\377\247\257\264\377\257\267\272\377Lv\254\377r\237\317\377"
-  "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377q\236"
-  "\316\377o\234\315\377n\233\314\377m\232\313\377k\231\312\377j\230\311"
-  "\377i\227\311\377\216\260\326\377Gw\200\377\257\347w\377q\267.\306\0"
-  "\0\0\0\310\313\305\257\275\277\271\377\305\306\303\377\274\276\274\377"
-  "|\216\237\377_\213\276\377r\237\317\377r\237\317\377r\237\317\377r\237"
-  "\317\377q\236\316\377p\235\315\377o\234\314\377m\232\313\377l\231\313"
-  "\377k\230\312\377j\227\311\377h\226\310\377g\225\307\377\213\255\324"
-  "\377Aut\377\232\342S\377v\2744\306\0\0\0\0\333\335\327\376\333\335\331"
-  "\374Hm\240\313\216\262\331\377n\233\314\377r\237\317\377r\237\317\377"
-  "r\237\317\377r\237\317\377\206\254\325\377\304\326\352\377\350\357\367"
-  "\377\362\366\372\377\344\354\365\377\273\320\346\377x\241\316\377g\225"
-  "\307\377f\224\307\377e\223\306\377\210\253\323\377Buv\377\237\343\\\377"
-  "t\2721\305\0\0\0\0\304\306\300\360\320\321\315\377\202\225\251\376\226"
-  "\247\262\377\230\245\262\377R~\262\377r\237\317\377q\236\316\377\250"
-  "\303\341\377\373\374\376\377\322\340\357\377\242\276\335\377\221\263"
-  "\327\377\237\274\334\377\324\341\357\377\367\371\374\377\217\260\325"
-  "\377d\222\305\377c\221\304\377\206\251\321\377Cux\377\242\343a\377r\271"
-  "-\305\0\0\0\0\274\277\271\234\276\301\273\377\313\314\310\377\307\310"
-  "\305\377\231\242\251\377W\203\267\377p\235\315\377\225\266\332\377\372"
-  "\373\375\377\227\270\332\377k\230\312\377o\232\313\377o\233\312\377g"
-  "\225\307\377f\223\306\377\244\277\335\377\370\372\374\377p\232\311\377"
-  "a\217\303\377\202\247\317\377Dlu\376\241\306A\376{\253\26\305\0\0\0\0"
-  "\337\342\334\375\337\340\333\375Xt\234\331\214\254\315\377p\235\316\377"
-  "o\234\315\377n\233\314\377\343\354\365\377\264\313\344\377j\227\311\377"
-  "\251\303\340\377\374\375\376\377\374\375\376\377\332\345\361\377\366"
-  "\371\374\377b\220\304\377\323\340\356\377\265\312\343\377_\215\301\377"
-  "\200\245\316\377Sn~\377\352\332l\377\347\322[\366\312\244\10C\311\314"
-  "\305\365\320\321\314\376r\213\247\372\214\241\267\377y\220\250\377W\202"
-  "\266\377}\245\320\377\377\377\377\377v\240\316\377z\241\316\377\375\375"
-  "\376\377\260\310\342\377s\234\312\377\340\351\363\377\366\370\373\377"
-  "`\216\303\377\246\300\335\377\323\337\356\377\\\213\300\377}\242\314"
-  "\377Tpw\377\364\342S\377\363\342o\377\311\246\10d\262\264\255\234\306"
-  "\310\302\377\314\315\311\377\314\315\311\377\257\263\263\377Mx\256\377"
-  "\214\257\325\377\367\372\374\377g\225\307\377\222\263\327\377\377\377"
-  "\377\377x\240\315\377b\220\304\377\260\307\341\377\366\370\373\377^\214"
-  "\301\377\245\277\334\377\317\335\354\377Z\211\277\377{\240\313\377To"
-  "z\377\364\345d\377\363\342r\377\311\246\10d\337\341\335\371\333\334\327"
-  "\376h}\231\352\207\242\275\377d\217\300\377i\226\310\377\201\246\321"
-  "\377\375\376\376\377j\227\310\377\203\250\321\377\377\377\377\377\217"
-  "\260\324\377`\216\302\377\310\330\352\377\365\370\373\377b\220\302\377"
-  "\337\350\363\377\246\277\334\377X\207\275\377w\235\311\377To{\377\364"
-  "\346q\377\362\342q\377\311\246\10d\316\320\312\371\316\321\313\376[z"
-  "\241\356\200\236\276\377]}\246\377Y\205\272\377f\224\306\377\361\365"
-  "\372\377\231\267\330\377b\220\303\377\321\337\356\377\366\371\374\377"
-  "\335\347\362\377\363\367\373\377\374\375\376\377\356\363\370\377\317"
-  "\335\354\377_\213\300\377V\205\274\377u\233\310\377Tp\200\377\365\350"
-  "|\377\360\336j\375\311\245\6U\263\266\256\261\314\316\311\377\313\314"
-  "\311\377\316\320\314\377\272\274\270\377Cm\245\377c\221\305\377\250\301"
-  "\336\377\356\363\371\377r\233\311\377a\217\302\377\220\257\324\377\221"
-  "\260\324\377{\241\314\377\230\265\327\377{\240\313\377W\205\274\377U"
-  "\204\273\377T\203\272\377r\231\306\377Xez\375\343\235N\367\347\240R\364"
-  "\333z\36\254\336\341\334\362\320\323\316\377z\213\235\366\206\233\260"
-  "\377[\201\254\377`\216\303\377a\217\303\377a\217\302\377\311\331\352"
-  "\377\360\364\371\377\233\270\330\377i\223\305\377^\213\300\377w\235\311"
-  "\377\271\315\343\377\305\325\350\377U\204\273\377S\202\272\377R\201\271"
-  "\377p\226\305\377_jw\377\371\260C\377\374\272Y\377\345\224E\326\320\322"
-  "\315\372\317\320\313\374Jn\235\340t\232\306\377Jr\243\377Z\207\274\377"
-  "_\215\302\377^\214\301\377^\213\300\377\235\271\331\377\347\356\366\377"
-  "\377\377\377\377\377\377\377\377\375\376\376\377\324\340\356\377~\242"
-  "\313\377S\202\271\377Q\200\270\377P\177\267\377l\223\302\377^iv\377\371"
-  "\261G\377\374\267S\377\344\221@\326\267\273\263\306\322\323\317\377\275"
-  "\300\277\377\306\310\304\377\300\300\275\377\77j\241\377]\213\300\377"
-  "\\\212\277\377Z\211\277\377Y\210\276\377X\207\275\377g\220\302\377p\227"
-  "\306\377_\213\276\377S\202\271\377R\201\270\377P\177\267\377O~\267\377"
-  "N}\266\377j\221\301\377^jy\377\372\271Y\377\374\273\\\377\343\216=\325"
-  "\333\335\331\336\306\307\304\377\231\243\251\375\226\243\256\377Zz\236"
-  "\377[\211\275\377`\216\302\377_\215\302\377_\214\301\377]\213\300\377"
-  "\\\212\277\377[\212\277\377Z\210\276\377Y\207\276\377X\206\275\377W\206"
-  "\274\377V\205\273\377U\203\272\377T\202\272\377m\225\304\377^l}\377\372"
-  "\276g\377\374\300f\377\342\2147\324\323\326\321\375\322\324\317\373="
-  "g\235\303w\237\314\377N{\261\377a\220\303\377d\222\305\377c\221\305\377"
-  "b\221\304\377b\220\304\377a\217\303\377a\217\303\377_\216\302\377_\215"
-  "\302\377^\215\301\377]\214\301\377]\214\301\377\\\212\300\377[\212\277"
-  "\377s\233\311\377P]u\361\341\2105\314\342\2101\314\331r\23\206\273\275"
-  "\270\326\323\325\321\377\247\260\265\374\266\272\270\377\272\276\274"
-  "\377Fp\247\377i\227\311\377i\226\311\377h\226\311\377h\225\310\377h\225"
-  "\310\377g\225\310\377g\224\310\377f\224\307\377f\223\307\377e\223\307"
-  "\377e\223\306\377e\222\306\377d\222\306\377z\241\316\377%O\210\273\0"
-  "\0\0\3\0\0\0\0\0\0\0\0\221\230\221%\251\254\246\343\266\270\270\377\255"
-  "\263\264\377l\203\234\377c\221\303\377q\236\317\377q\236\317\377q\236"
-  "\316\377q\236\316\377q\236\316\377p\236\316\377p\236\316\377p\236\316"
-  "\377p\235\316\377p\235\316\377p\235\316\377p\235\316\377o\235\316\377"
-  "\177\247\322\377\"H\177\273\0\0\0\36\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\34"
-  "\30""0R`Qy\253\351e\214\273\364e\214\272\364e\213\272\364e\213\272\364"
-  "e\213\272\364d\213\272\364d\213\272\364c\212\271\364c\212\271\364b\212"
-  "\271\364b\212\271\364a\211\271\364a\211\270\364a\210\270\364`\210\270"
-  "\364Fo\242\344\21\37;J\0\0\0\32\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0#Q\220n3[\226\3105]\231\3125]\231\3125]\231\312"
+      "5]\231\3125]\231\3125]\231\3125]\231\3125]\231\3125]\231\3125]\231\312"
+      "5]\231\3125]\231\3125]\231\3121[\227\306&Q\213X\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\200\200\200\2\227\241\244bGl\237\367\\\202\263\377"
+      "~\234\301\377~\234\301\377~\234\301\377~\234\301\377~\234\301\377~\234"
+      "\301\377~\234\301\377~\234\301\377~\234\301\377~\234\301\377~\234\301"
+      "\377~\234\301\377~\234\301\377r\223\274\3778a\232\332\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\304\304\261\15\307\312\304\312\276\304\310\377Os\246"
+      "\376\237\263\313\377\334\343\352\377\334\343\352\377\334\343\352\377"
+      "\334\343\352\377\334\343\352\377\334\343\352\377\334\343\352\377\334"
+      "\343\352\377\334\343\352\377\334\343\352\377\334\343\352\377\334\343"
+      "\352\377\333\342\350\377\310\321\332\377=d\234\341\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\331\335\326\301\350\350\345\377f\201\242\264e\211\266"
+      "\375}\235\304\377\202\241\305\377\202\241\305\377\202\241\305\377\202"
+      "\241\305\377\202\241\305\377\202\241\305\377\201\240\305\377\201\240"
+      "\305\377\201\240\305\377\201\240\305\377\201\240\305\377\200\237\304"
+      "\377\177\236\304\377~\235\303\377Z~\257\374(U\2179\1\0\0\0\0\0\0\0\0"
+      "\0\0\0\326\330\324\376\326\330\322\373Dj\237\314\221\265\331\377a\215"
+      "\300\377q\236\316\377r\237\317\377r\237\317\377r\237\317\377r\237\317"
+      "\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377p\235\315\377"
+      "o\234\315\377n\233\314\377l\232\313\377k\231\312\377\217\260\326\377"
+      "7gs\347a\253\32\261Z\251\13D\0\0\0\0\300\303\274\342\323\324\320\377"
+      "\223\241\255\377\247\257\264\377\257\267\272\377Lv\254\377r\237\317\377"
+      "r\237\317\377r\237\317\377r\237\317\377r\237\317\377r\237\317\377q\236"
+      "\316\377o\234\315\377n\233\314\377m\232\313\377k\231\312\377j\230\311"
+      "\377i\227\311\377\216\260\326\377Gw\200\377\257\347w\377q\267.\306\0"
+      "\0\0\0\310\313\305\257\275\277\271\377\305\306\303\377\274\276\274\377"
+      "|\216\237\377_\213\276\377r\237\317\377r\237\317\377r\237\317\377r\237"
+      "\317\377q\236\316\377p\235\315\377o\234\314\377m\232\313\377l\231\313"
+      "\377k\230\312\377j\227\311\377h\226\310\377g\225\307\377\213\255\324"
+      "\377Aut\377\232\342S\377v\2744\306\0\0\0\0\333\335\327\376\333\335\331"
+      "\374Hm\240\313\216\262\331\377n\233\314\377r\237\317\377r\237\317\377"
+      "r\237\317\377r\237\317\377\206\254\325\377\304\326\352\377\350\357\367"
+      "\377\362\366\372\377\344\354\365\377\273\320\346\377x\241\316\377g\225"
+      "\307\377f\224\307\377e\223\306\377\210\253\323\377Buv\377\237\343\\\377"
+      "t\2721\305\0\0\0\0\304\306\300\360\320\321\315\377\202\225\251\376\226"
+      "\247\262\377\230\245\262\377R~\262\377r\237\317\377q\236\316\377\250"
+      "\303\341\377\373\374\376\377\322\340\357\377\242\276\335\377\221\263"
+      "\327\377\237\274\334\377\324\341\357\377\367\371\374\377\217\260\325"
+      "\377d\222\305\377c\221\304\377\206\251\321\377Cux\377\242\343a\377r\271"
+      "-\305\0\0\0\0\274\277\271\234\276\301\273\377\313\314\310\377\307\310"
+      "\305\377\231\242\251\377W\203\267\377p\235\315\377\225\266\332\377\372"
+      "\373\375\377\227\270\332\377k\230\312\377o\232\313\377o\233\312\377g"
+      "\225\307\377f\223\306\377\244\277\335\377\370\372\374\377p\232\311\377"
+      "a\217\303\377\202\247\317\377Dlu\376\241\306A\376{\253\26\305\0\0\0\0"
+      "\337\342\334\375\337\340\333\375Xt\234\331\214\254\315\377p\235\316\377"
+      "o\234\315\377n\233\314\377\343\354\365\377\264\313\344\377j\227\311\377"
+      "\251\303\340\377\374\375\376\377\374\375\376\377\332\345\361\377\366"
+      "\371\374\377b\220\304\377\323\340\356\377\265\312\343\377_\215\301\377"
+      "\200\245\316\377Sn~\377\352\332l\377\347\322[\366\312\244\10C\311\314"
+      "\305\365\320\321\314\376r\213\247\372\214\241\267\377y\220\250\377W\202"
+      "\266\377}\245\320\377\377\377\377\377v\240\316\377z\241\316\377\375\375"
+      "\376\377\260\310\342\377s\234\312\377\340\351\363\377\366\370\373\377"
+      "`\216\303\377\246\300\335\377\323\337\356\377\\\213\300\377}\242\314"
+      "\377Tpw\377\364\342S\377\363\342o\377\311\246\10d\262\264\255\234\306"
+      "\310\302\377\314\315\311\377\314\315\311\377\257\263\263\377Mx\256\377"
+      "\214\257\325\377\367\372\374\377g\225\307\377\222\263\327\377\377\377"
+      "\377\377x\240\315\377b\220\304\377\260\307\341\377\366\370\373\377^\214"
+      "\301\377\245\277\334\377\317\335\354\377Z\211\277\377{\240\313\377To"
+      "z\377\364\345d\377\363\342r\377\311\246\10d\337\341\335\371\333\334\327"
+      "\376h}\231\352\207\242\275\377d\217\300\377i\226\310\377\201\246\321"
+      "\377\375\376\376\377j\227\310\377\203\250\321\377\377\377\377\377\217"
+      "\260\324\377`\216\302\377\310\330\352\377\365\370\373\377b\220\302\377"
+      "\337\350\363\377\246\277\334\377X\207\275\377w\235\311\377To{\377\364"
+      "\346q\377\362\342q\377\311\246\10d\316\320\312\371\316\321\313\376[z"
+      "\241\356\200\236\276\377]}\246\377Y\205\272\377f\224\306\377\361\365"
+      "\372\377\231\267\330\377b\220\303\377\321\337\356\377\366\371\374\377"
+      "\335\347\362\377\363\367\373\377\374\375\376\377\356\363\370\377\317"
+      "\335\354\377_\213\300\377V\205\274\377u\233\310\377Tp\200\377\365\350"
+      "|\377\360\336j\375\311\245\6U\263\266\256\261\314\316\311\377\313\314"
+      "\311\377\316\320\314\377\272\274\270\377Cm\245\377c\221\305\377\250\301"
+      "\336\377\356\363\371\377r\233\311\377a\217\302\377\220\257\324\377\221"
+      "\260\324\377{\241\314\377\230\265\327\377{\240\313\377W\205\274\377U"
+      "\204\273\377T\203\272\377r\231\306\377Xez\375\343\235N\367\347\240R\364"
+      "\333z\36\254\336\341\334\362\320\323\316\377z\213\235\366\206\233\260"
+      "\377[\201\254\377`\216\303\377a\217\303\377a\217\302\377\311\331\352"
+      "\377\360\364\371\377\233\270\330\377i\223\305\377^\213\300\377w\235\311"
+      "\377\271\315\343\377\305\325\350\377U\204\273\377S\202\272\377R\201\271"
+      "\377p\226\305\377_jw\377\371\260C\377\374\272Y\377\345\224E\326\320\322"
+      "\315\372\317\320\313\374Jn\235\340t\232\306\377Jr\243\377Z\207\274\377"
+      "_\215\302\377^\214\301\377^\213\300\377\235\271\331\377\347\356\366\377"
+      "\377\377\377\377\377\377\377\377\375\376\376\377\324\340\356\377~\242"
+      "\313\377S\202\271\377Q\200\270\377P\177\267\377l\223\302\377^iv\377\371"
+      "\261G\377\374\267S\377\344\221@\326\267\273\263\306\322\323\317\377\275"
+      "\300\277\377\306\310\304\377\300\300\275\377\77j\241\377]\213\300\377"
+      "\\\212\277\377Z\211\277\377Y\210\276\377X\207\275\377g\220\302\377p\227"
+      "\306\377_\213\276\377S\202\271\377R\201\270\377P\177\267\377O~\267\377"
+      "N}\266\377j\221\301\377^jy\377\372\271Y\377\374\273\\\377\343\216=\325"
+      "\333\335\331\336\306\307\304\377\231\243\251\375\226\243\256\377Zz\236"
+      "\377[\211\275\377`\216\302\377_\215\302\377_\214\301\377]\213\300\377"
+      "\\\212\277\377[\212\277\377Z\210\276\377Y\207\276\377X\206\275\377W\206"
+      "\274\377V\205\273\377U\203\272\377T\202\272\377m\225\304\377^l}\377\372"
+      "\276g\377\374\300f\377\342\2147\324\323\326\321\375\322\324\317\373="
+      "g\235\303w\237\314\377N{\261\377a\220\303\377d\222\305\377c\221\305\377"
+      "b\221\304\377b\220\304\377a\217\303\377a\217\303\377_\216\302\377_\215"
+      "\302\377^\215\301\377]\214\301\377]\214\301\377\\\212\300\377[\212\277"
+      "\377s\233\311\377P]u\361\341\2105\314\342\2101\314\331r\23\206\273\275"
+      "\270\326\323\325\321\377\247\260\265\374\266\272\270\377\272\276\274"
+      "\377Fp\247\377i\227\311\377i\226\311\377h\226\311\377h\225\310\377h\225"
+      "\310\377g\225\310\377g\224\310\377f\224\307\377f\223\307\377e\223\307"
+      "\377e\223\306\377e\222\306\377d\222\306\377z\241\316\377%O\210\273\0"
+      "\0\0\3\0\0\0\0\0\0\0\0\221\230\221%\251\254\246\343\266\270\270\377\255"
+      "\263\264\377l\203\234\377c\221\303\377q\236\317\377q\236\317\377q\236"
+      "\316\377q\236\316\377q\236\316\377p\236\316\377p\236\316\377p\236\316"
+      "\377p\235\316\377p\235\316\377p\235\316\377p\235\316\377o\235\316\377"
+      "\177\247\322\377\"H\177\273\0\0\0\36\0\0\0\1\0\0\0\0\0\0\0\1\0\0\0\34"
+      "\30""0R`Qy\253\351e\214\273\364e\214\272\364e\213\272\364e\213\272\364"
+      "e\213\272\364d\213\272\364d\213\272\364c\212\271\364c\212\271\364b\212"
+      "\271\364b\212\271\364a\211\271\364a\211\270\364a\210\270\364`\210\270"
+      "\364Fo\242\344\21\37;J\0\0\0\32\0\0\0\0\0\0\0\0"
+    };
 
 /* GdkPixbuf RGBA C-Source image dump */
 
@@ -900,109 +1017,1169 @@ static const guint8 gnome_stock_addressbook[] =
 #pragma align 4 (gnome_stock_calls)
 #endif
 #ifdef __GNUC__
-static const guint8 gnome_stock_calls[] __attribute__ ((__aligned__ (4))) = 
+static const guint8 gnome_stock_calls[] __attribute__ ( (__aligned__ (4))) =
+#else
+static const guint8 gnome_stock_calls[] =
+#endif
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\0\0\0\2\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\22\11.\0p\20^\0\311\12\77\0\202\0\0\0\13\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34q\34\11\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3"
+      "\4\14\0>\15Z\0\275\23p\0\365\24w\0\361\24v\0\353\11<\0\210\0\0\0\4\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\3\377\377\370#\377\377\370H\224\267"
+      "\207\206\377\377\366U\377\377\3655\377\377\355\16\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\31\0e\22s\0\344\32\241\0\376\31\234\0"
+      "\377\24y\0\367\22p\0\364\21c\0\335\4\21\0;\0\0\0\0\0\0\0\0\377\377\346"
+      "\12\377\377\365P\377\377\360{\375\375\360\225\261\312\242\272\375\375"
+      "\357\234\375\375\360\211\377\377\365h\377\377\370&\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\5\36\0]\24}\0\352\31\234\0\377\31\227\0\377\26"
+      "\210\0\377\21c\0\363\22o\0\375\14E\0\233\0\0\0\0t\242t\13\275\323\263"
+      "h\375\375\360\212\376\376\353\267\376\376\350\326\301\325\254\352\376"
+      "\376\347\340\376\376\352\307\375\375\355\240\360\364\345t\206\260}7\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\21o\0\333\30\225\0\377\27\221"
+      "\0\377\24\203\0\377\22i\0\375\20d\0\364\15Q\0\300\0\0\0\2\377\377\370"
+      "&\277\324\261\223\262\313\243\313\357\365\331\335\376\376\354\262\346"
+      "\356\330\244\375\375\354\245\374\374\351\306\314\335\272\331\256\311"
+      "\240\263\344\354\327_\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\20"
+      "g\0\313\31\230\0\377\27\216\0\377\25\203\0\377\22o\0\377\17W\0\365\13"
+      "A\0\244\0\0\0\4\377\377\365N\375\375\360\227\372\373\343\332\315\335"
+      "\276\275\377\377\362z\377\377\366Y\377\377\365f\336\347\321\240\346\356"
+      "\322\326\376\376\353\264\377\377\362r\377\377\377\22\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\5\16U\0\261\30\226\0\377\27\221\0\377\25\205\0\377\17"
+      "Y\0\347\7(\0r\0\0\0\26\377\377\377\1\377\377\364_\375\375\354\243\376"
+      "\376\347\337\375\375\356\232\377\377\366V\377\377\377\30\377\377\372"
+      "8\377\377\360{\376\376\352\300\376\376\352\303\377\377\361}\377\377\366"
+      "\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7-\0l\25\203\0\361\30\225\0\377\26"
+      "\212\0\377\21^\0\330\0\0\0!\0\0\0\0\377\377\377\1\377\377\364[\375\375"
+      "\355\240\376\376\350\344\347\356\326\250\377\377\364a\377\377\3724\377"
+      "\377\370I\351\360\335\211\367\372\345\306\376\376\352\276\377\377\362"
+      "z\377\377\377\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0""3\23m\0\330\31"
+      "\230\0\377\27\216\0\377\22q\0\361\7""1\0n\0\0\0\0\0\0\0\0\377\377\367"
+      "=\347\356\333\223\270\320\246\331\321\340\277\314\375\375\357\222\377"
+      "\377\362x\375\375\361\202\356\363\335\257\276\323\253\351\311\333\272"
+      "\270\377\377\363i\377\377\377\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\11\17W\0\265\30\226\0\377\27\221\0\377\25\204\0\377\17V\0\314\0\0"
+      "\0\11\0\0\0\0\272\316\261\32\246\303\234\215\371\372\350\245\376\376"
+      "\350\324\376\376\351\315\270\317\247\316\376\376\352\303\376\376\347"
+      "\340\376\376\353\273\324\342\306\224\236\277\224_\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\36\0\\\25{\0\351\30\225\0\377\26\212\0"
+      "\377\21k\0\354\10/\0b\0\0\0\0\0\0\0\0\377\377\364.\377\377\362s\375\375"
+      "\357\234\376\376\352\271\273\320\251\325\376\376\352\301\376\376\355"
+      "\253\375\375\360\207\377\377\366U\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\20a\0\313\30\226\0\377\27\215\0\377"
+      "\24\202\0\377\17V\0\317\0\0\0\13\0\0\0\0\0\0\0\0\377\377\370#\377\377"
+      "\364^\377\377\362w\245\302\231\242\377\377\361}\377\377\363k\377\377"
+      "\367@\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\7,\0m\25|\0\354\27\221\0\377\25\206\0\377\21l\0\360\13"
+      "=\0\206\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\4\377\377\363\26\230\274"
+      "\2179\377\377\366\35\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\20_\0\312\30"
+      "\221\0\377\26\212\0\377\24\177\0\377\17\\\0\336\5\31\0""3\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\40"
+      "\0Y\22n\0\341\27\215\0\377\25\203\0\377\23s\0\376\15P\0\305\0\0\0\21"
+      "\0\0\0\0\0\0\0\7\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\10\15G\0\232\24\177\0\363\25\206\0\377\23{\0\377\22i\0\364\15"
+      "H\0\256\7\25\0I\16U\0\267\21b\0\323\12""1\0i\0\0\0\3\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\40\17[\0\310\26\204\0\376\24\177\0\377\22"
+      "t\0\377\17`\0\357\20`\0\352\23m\0\367\26\202\0\364\22k\0\337\6#\0X\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14\0>\20`\0\324\25\177\0"
+      "\377\23w\0\377\21m\0\377\21j\0\377\24w\0\377\23t\0\370\24\201\0\374\17"
+      "]\0\311\0\0\0\27\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\35\0Y"
+      "\20c\0\334\22z\0\377\22p\0\377\20e\0\377\21j\0\377\24y\0\377\21g\0\364"
+      "\22l\0\347\6\34\0R\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\3\5$\0b\20`\0\334\22s\0\377\20i\0\377\17_\0\377\22l\0\377\22i\0\363"
+      "\22q\0\377\12;\0z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\3\5\40\0a\17^\0\331\21j\0\377\17b\0\377\17_\0\377\22b\0\365\17"
+      "Z\0\336\3\30\0V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\3\3\26\0R\17X\0\320\20_\0\366\16W\0\327\13C\0\235\0\6\0"
+      "+\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\11\0<\13""5\0\213\0\5\0""0\0\0\0\2\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
+
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (gnome_stock_sflphone)
+#endif
+#ifdef __GNUC__
+static const guint8 gnome_stock_sflphone[] __attribute__ ( (__aligned__ (4))) =
 #else
-static const guint8 gnome_stock_calls[] = 
+static const guint8 gnome_stock_sflphone[] =
 #endif
-{ ""
-  /* Pixbuf magic (0x47646b50) */
-  "GdkP"
-  /* length: header (24) + pixel_data (2304) */
-  "\0\0\11\30"
-  /* pixdata_type (0x1010002) */
-  "\1\1\0\2"
-  /* rowstride (96) */
-  "\0\0\0`"
-  /* width (24) */
-  "\0\0\0\30"
-  /* height (24) */
-  "\0\0\0\30"
-  /* pixel_data: */
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\0\0\0\2\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\22\11.\0p\20^\0\311\12\77\0\202\0\0\0\13\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34q\34\11\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3"
-  "\4\14\0>\15Z\0\275\23p\0\365\24w\0\361\24v\0\353\11<\0\210\0\0\0\4\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\3\377\377\370#\377\377\370H\224\267"
-  "\207\206\377\377\366U\377\377\3655\377\377\355\16\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\31\0e\22s\0\344\32\241\0\376\31\234\0"
-  "\377\24y\0\367\22p\0\364\21c\0\335\4\21\0;\0\0\0\0\0\0\0\0\377\377\346"
-  "\12\377\377\365P\377\377\360{\375\375\360\225\261\312\242\272\375\375"
-  "\357\234\375\375\360\211\377\377\365h\377\377\370&\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\5\36\0]\24}\0\352\31\234\0\377\31\227\0\377\26"
-  "\210\0\377\21c\0\363\22o\0\375\14E\0\233\0\0\0\0t\242t\13\275\323\263"
-  "h\375\375\360\212\376\376\353\267\376\376\350\326\301\325\254\352\376"
-  "\376\347\340\376\376\352\307\375\375\355\240\360\364\345t\206\260}7\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\21o\0\333\30\225\0\377\27\221"
-  "\0\377\24\203\0\377\22i\0\375\20d\0\364\15Q\0\300\0\0\0\2\377\377\370"
-  "&\277\324\261\223\262\313\243\313\357\365\331\335\376\376\354\262\346"
-  "\356\330\244\375\375\354\245\374\374\351\306\314\335\272\331\256\311"
-  "\240\263\344\354\327_\377\377\377\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0!\20"
-  "g\0\313\31\230\0\377\27\216\0\377\25\203\0\377\22o\0\377\17W\0\365\13"
-  "A\0\244\0\0\0\4\377\377\365N\375\375\360\227\372\373\343\332\315\335"
-  "\276\275\377\377\362z\377\377\366Y\377\377\365f\336\347\321\240\346\356"
-  "\322\326\376\376\353\264\377\377\362r\377\377\377\22\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\5\16U\0\261\30\226\0\377\27\221\0\377\25\205\0\377\17"
-  "Y\0\347\7(\0r\0\0\0\26\377\377\377\1\377\377\364_\375\375\354\243\376"
-  "\376\347\337\375\375\356\232\377\377\366V\377\377\377\30\377\377\372"
-  "8\377\377\360{\376\376\352\300\376\376\352\303\377\377\361}\377\377\366"
-  "\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7-\0l\25\203\0\361\30\225\0\377\26"
-  "\212\0\377\21^\0\330\0\0\0!\0\0\0\0\377\377\377\1\377\377\364[\375\375"
-  "\355\240\376\376\350\344\347\356\326\250\377\377\364a\377\377\3724\377"
-  "\377\370I\351\360\335\211\367\372\345\306\376\376\352\276\377\377\362"
-  "z\377\377\377\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0""3\23m\0\330\31"
-  "\230\0\377\27\216\0\377\22q\0\361\7""1\0n\0\0\0\0\0\0\0\0\377\377\367"
-  "=\347\356\333\223\270\320\246\331\321\340\277\314\375\375\357\222\377"
-  "\377\362x\375\375\361\202\356\363\335\257\276\323\253\351\311\333\272"
-  "\270\377\377\363i\377\377\377\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\11\17W\0\265\30\226\0\377\27\221\0\377\25\204\0\377\17V\0\314\0\0"
-  "\0\11\0\0\0\0\272\316\261\32\246\303\234\215\371\372\350\245\376\376"
-  "\350\324\376\376\351\315\270\317\247\316\376\376\352\303\376\376\347"
-  "\340\376\376\353\273\324\342\306\224\236\277\224_\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\36\0\\\25{\0\351\30\225\0\377\26\212\0"
-  "\377\21k\0\354\10/\0b\0\0\0\0\0\0\0\0\377\377\364.\377\377\362s\375\375"
-  "\357\234\376\376\352\271\273\320\251\325\376\376\352\301\376\376\355"
-  "\253\375\375\360\207\377\377\366U\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\32\20a\0\313\30\226\0\377\27\215\0\377"
-  "\24\202\0\377\17V\0\317\0\0\0\13\0\0\0\0\0\0\0\0\377\377\370#\377\377"
-  "\364^\377\377\362w\245\302\231\242\377\377\361}\377\377\363k\377\377"
-  "\367@\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\7,\0m\25|\0\354\27\221\0\377\25\206\0\377\21l\0\360\13"
-  "=\0\206\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\4\377\377\363\26\230\274"
-  "\2179\377\377\366\35\377\377\377\13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\31\20_\0\312\30"
-  "\221\0\377\26\212\0\377\24\177\0\377\17\\\0\336\5\31\0""3\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\40"
-  "\0Y\22n\0\341\27\215\0\377\25\203\0\377\23s\0\376\15P\0\305\0\0\0\21"
-  "\0\0\0\0\0\0\0\7\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\10\15G\0\232\24\177\0\363\25\206\0\377\23{\0\377\22i\0\364\15"
-  "H\0\256\7\25\0I\16U\0\267\21b\0\323\12""1\0i\0\0\0\3\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\40\17[\0\310\26\204\0\376\24\177\0\377\22"
-  "t\0\377\17`\0\357\20`\0\352\23m\0\367\26\202\0\364\22k\0\337\6#\0X\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14\0>\20`\0\324\25\177\0"
-  "\377\23w\0\377\21m\0\377\21j\0\377\24w\0\377\23t\0\370\24\201\0\374\17"
-  "]\0\311\0\0\0\27\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\35\0Y"
-  "\20c\0\334\22z\0\377\22p\0\377\20e\0\377\21j\0\377\24y\0\377\21g\0\364"
-  "\22l\0\347\6\34\0R\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\3\5$\0b\20`\0\334\22s\0\377\20i\0\377\17_\0\377\22l\0\377\22i\0\363"
-  "\22q\0\377\12;\0z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\3\5\40\0a\17^\0\331\21j\0\377\17b\0\377\17_\0\377\22b\0\365\17"
-  "Z\0\336\3\30\0V\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\3\3\26\0R\17X\0\320\20_\0\366\16W\0\327\13C\0\235\0\6\0"
-  "+\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\11\0<\13""5\0\213\0\5\0""0\0\0\0\2\0\0\0\0\0\0\0\0"
-  "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (14400) */
+      "\0\0""8X"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (240) */
+      "\0\0\0\360"
+      /* width (60) */
+      "\0\0\0<"
+      /* height (60) */
+      "\0\0\0<"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0++\6\0&+5\0$*[\0%+"
+      "\203\0%+\240\0%+\254\0%,\273\0%,\273\0%+\263\0$+\250\0%,\222\0%,n\0$"
+      "+G\0''\32\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0$,#\0$+x\0%,\273\0%+\365\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+"
+      "\377\0%+\330\0%*\227\0%,K\0""33\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0++\6\0%*a\0%,\301\0"
+      "%+\376\0%+\377\0%+\377\0%+\377\0%+\377\2'-\377\26""8=\377+JO\3774QV\377"
+      ">Z_\377>Z_\3778UZ\3771OT\377\40@F\377\12.3\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\351\0%+\217\0$,#\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\34""9\11\0%*m\0%+\342\0%+\377\0%+\377\0%+\377"
+      "\6*0\377.LQ\377Unr\377|\217\222\377\226\245\250\377\221\241\244\377~"
+      "\221\224\377r\206\211\377k\200\203\377g}\200\377q\205\210\377x\213\216"
+      "\377\206\230\232\377\231\250\252\377\213\234\237\377g}\201\377@\\`\377"
+      "\25""7<\377\0%+\377\0%+\377\0%+\377\0%+\374\0%+\245\0%,)\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0&*I\0%+\333\0%+\377\0%+\377\0%+\377$DI\377]ux\377\217"
+      "\237\242\377y\214\220\377Rko\377.MQ\377\25""7<\377\7+1\377\10,2\377\10"
+      ",2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\14/5\377!BG\377A"
+      "]a\377g}\200\377\217\237\242\377w\213\216\377\77[_\377\7+1\377\0%+\377"
+      "\0%+\377\0%+\373\0%+\217\0''\15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40""0\20\0&*\251\0%+\377\0%+\377\0%+\377"
+      ",KP\377u\211\214\377\207\230\233\377Lfj\377\33<A\377\11-2\377\11-2\377"
+      "\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2"
+      "\377\10,2\377\7+1\377\7+1\377\7+1\377\7+1\377\7+1\377\12-3\3776TX\377"
+      "k\200\203\377\215\236\240\377Mgk\377\14/5\377\0%+\377\0%+\377\0%+\346"
+      "\0$,F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0',4\0%+\336\0%"
+      "+\377\0%+\377\26""8=\377o\204\207\377\203\225\230\377<Y]\377\13/4\377"
+      "\11-2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2"
+      "\377\10,2\377\10,2\377\10,2\377\7+1\377\7+1\377\7+1\377\7+1\377\7+1\377"
+      "\7+1\377\7+1\377\7+1\377\7+1\377\6*0\377\37\77D\377cz}\377\214\235\237"
+      "\377=Y^\377\1&,\377\0%+\377\0%+\375\0&+\210\0@@\4\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0&,W\0%+\371\0%+\377\1&,\377Fae\377\215\236\240\377Hcg\377\13/4"
+      "\377\11-2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10"
+      ",2\377\10,2\377\10,2\377\7+1\377\7+1\377\7+1\377\7+1\377\7+1\377\7+1"
+      "\377\7+1\377\7+1\377\7+1\377\7+1\377\6*0\377\6*0\377\6*0\377\6*0\377"
+      "\6*0\377#CI\377z\214\220\377u\211\214\377\23""5;\377\0%+\377\0%+\377"
+      "\0%+\271\0++\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0&+k\0%+\375\0%+\377\14/5\377j\200\203\377t\210"
+      "\213\377\31:@\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377"
+      "\10,2\377\10,2\377\10,2\377\10,2\377\7+1\377\7+1\377\7+1\377\7+1\377"
+      "\7+1\377\7+1\377\7+1\377\7+1\377\7+1\377\6*0\377\6*0\377\6*0\377\6*0"
+      "\377\6*0\377\6*0\377\6*0\377\6*0\377\6*0\377\7+1\377Gbf\377\212\233\236"
+      "\377/MR\377\0%+\377\0%+\377\0%+\312\0$1\25\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$,i\0%+\377\0%+\377\22""4:\377~\221"
+      "\224\377Tmq\377\12.3\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377"
+      "\10,2\377\10,2\377\10,2\377\7+1\377\7+1\377\7+1\377\7+1\377\7+1\377\7"
+      "+1\377\6*0\377\6*0\377\6*0\377\5)/\377\5)/\377\5)/\377\6*0\377\6*0\377"
+      "\6*0\377\6*0\377\6*0\377\6*0\377\6*0\377\5)/\377\5)/\377\5)/\377\5)/"
+      "\377%DI\377\204\226\231\377@\\`\377\0%+\377\0%+\377\0$+\322\0\"3\17\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%+Z\0%+\374\0%+\377\27""9"
+      ">\377\203\225\230\377@[`\377\10,2\377\10,2\377\10,2\377\10,2\377\10,"
+      "2\377\10,2\377\31:\77\377\12.4\377\7+1\377\7+1\377\7+1\377\7+1\377\5"
+      ")/\377\3(-\377\2'-\377\1&,\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\2'-\377\3(-\377\4(.\377\5)/\377\5)/\377\5)/"
+      "\377\5)/\377\5)/\377\5)/\377\5)/\377\25""7<\377|\217\222\377Jdi\377\0"
+      "%+\377\0%+\377\0&+\276\0\32""3\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&+5\0%"
+      "+\371\0%+\377\20""38\377\201\223\226\3775RV\377\10,2\377\10,2\377\10"
+      ",2\377\10,2\377\10,2\377\12.4\377\203\224\226\377\351\353\353\377\225"
+      "\242\245\377\7+1\377\5)/\377\2'-\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+"
+      "\377\0%+\377\0%+\377\0%+\377\0%+\377\2'-\377\4(.\377\5)/\377\5)/\377"
+      "\5)/\377\5)/\377\4(.\377\15""05\377t\210\213\377D_d\377\0%+\377\0%+\377"
+      "\0%,\244\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40""0\20\0%+\337\0%+\377\10,2\377x\214"
+      "\217\377>Y^\377\10,2\377\10,2\377\10,2\377\10,2\377\10,2\377'FK\377\312"
+      "\317\321\377\360\360\360\377\360\360\360\377\355\355\356\377Ump\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%,\377\0KX\377\0FR\377"
+      "\0%+\377\0FQ\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+"
+      "\377\0%+\377\0%+\377\0%+\377\1&,\377\3(-\377\4(.\377\4(.\377\4(.\377"
+      "\4(.\377\17""17\377}\220\223\3773QU\377\0%+\377\0%+\377\0&+d\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0&,\252\0%+\377\0%+\377`w{\377Hcg\377\7+1\377\10,2\377\10,2\377"
+      "\7+1\377\7+1\377\32;@\377\341\343\343\377\360\360\360\377\357\357\357"
+      "\377\357\357\357\377\356\356\356\377\341\343\344\377#BG\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0""19\377\0o\202\377\0o\202\377\0%+\377"
+      "\0o\202\377\0Ve\377\0:D\377\0%+\377\0""6>\377\0&,\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\1&,\377\3(-\377\4(.\377\4(."
+      "\377\4(.\377\30""9>\377\200\222\225\377\26""8=\377\0%+\377\0%+\365\0"
+      "&-(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "&*I\0%+\377\0%+\3779VZ\377j\200\203\377\10,2\377\10,2\377\7+1\377\7+"
+      "1\377\7+1\377fz}\377fvy\377\244\254\255\377\357\357\357\377\356\356\356"
+      "\377\356\356\356\377\355\355\355\377\354\354\354\377\305\313\314\377"
+      "\6*0\377\0;D\377\0.6\377\0%+\377\0gy\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0%+\377\0o\202\377\0fx\377\0o\202\377\0%+\377\0o\202\377\0Ra\377"
+      "\0\77J\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0"
+      "%+\377\2'-\377\4(.\377\3(-\377\3(-\377+JO\377v\212\215\377\4(.\377\0"
+      "%+\377\0$+\275\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\40\40\10\0%+\333\0%+\377\15""06\377|\217\222\377\21""39\377\7+1"
+      "\377\7+1\377\7+1\377\7+1\377Jch\377\352\353\353\377\347\350\350\3779"
+      "LP\377\314\317\320\377\355\355\355\377\355\355\355\377\354\354\354\377"
+      "\354\354\354\377\353\353\353\377\225\243\245\377\0Yi\377\0\77J\377\0"
+      "2:\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0%+\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0%+\377\0o\202\377\0Yi\377\0o\202\377\0]m\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\1&,"
+      "\377\3(-\377\3(-\377\3(-\377Qjo\377E`d\377\0%+\377\0%+\377\0%+Y\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%*m\0%+\377\0%+\377[sw\377"
+      "7TY\377\7+1\377\7+1\377\7+1\377\7+1\377\6',\377\317\324\324\377\357\357"
+      "\357\377\356\356\356\377\322\325\325\3774HK\377\342\343\343\377\354\354"
+      "\354\377\353\353\353\377\353\353\353\377\352\352\352\377\351\351\351"
+      "\377V\223\236\377\0DP\377\0n\200\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0%+\377\0n\200\377\0o\202\377\0o\202\377\0%+\377\0o\202\377"
+      "\0Ve\377\0o\202\377\0o\202\377\0)0\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\3(-\377\3(-\377\11-3\377y\214"
+      "\220\377\21""49\377\0%+\377\0%+\335\0@@\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0++\6\0%+\342\0%+\377\27""9>\377m\202\206\377\6*0\377\7+1\377\7"
+      "+1\377\7+1\377\7).\377I[^\377\356\356\356\377\356\356\356\377\355\355"
+      "\355\377\354\354\354\377\254\263\264\377[jl\377\352\352\352\377\352\352"
+      "\352\377\352\352\352\377\351\351\351\377\350\350\350\377\321\330\331"
+      "\377\33mz\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0%+\377\0j{\377\0o\202\377\0o\202\377\0%+\377\0o\202\377\0Uc\377\0o"
+      "\202\377\0o\202\377\0bs\377\0+2\377\0%+\377\0%+\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\2'-\377\2'-\377/MR\377Wos\377"
+      "\0%+\377\0%+\377\0$,]\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%*a\0%+\377\0"
+      "%+\377[sw\377'FK\377\7+1\377\7+1\377\7+1\377\6*0\377\5\40%\377\221\232"
+      "\233\377\355\355\355\377\355\355\355\377\354\354\354\377\354\354\354"
+      "\377\353\353\353\377w\203\205\377\223\234\236\377\351\351\351\377\351"
+      "\351\351\377\350\350\350\377\342\342\342\377\337\337\337\377\255\302"
+      "\306\377\4q\203\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0%+\377"
+      "\0fw\377\0o\202\377\0o\202\377\0%+\377\0o\202\377\0Uc\377\0o\202\377"
+      "\0o\202\377\0i{\377\0j}\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\2'-\377\2'-\377o\204\207\377\20"
+      "38\377\0%+\377\0%+\325\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%+\302\0%+\377"
+      "\21""49\377l\201\205\377\5)/\377\7+1\377\6*0\377\6*0\377\6).\377\4\34"
+      "!\377\255\264\265\377\354\354\354\377\354\354\354\377\353\353\353\377"
+      "\353\353\353\377\352\352\352\377\346\346\347\377FWZ\377\277\304\304\377"
+      "\350\350\350\377\344\344\344\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377r\250\262\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0%+\377\0aq\377\0o\202\377\0o\202\377\0%+\377\0o\202\377\0Xh\377\0o"
+      "\202\377\0o\202\377\0n\201\377\0o\202\377\0""2:\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\2'-\377"
+      "/MR\377Pin\377\0%+\377\0%+\377\0$-9\0\0\0\0\0\0\0\0\0&-\"\0%+\376\0%"
+      "+\377E`d\3776SX\377\6*0\377\6*0\377\6*0\377\6*0\377\5%+\377\1\32\37\377"
+      "\271\276\277\377\353\353\353\377\353\353\353\377\352\352\352\377\352"
+      "\352\352\377\351\351\351\377\350\350\350\377\325\327\327\3778KN\377\330"
+      "\332\332\377\340\340\340\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\326\332\333\377\16v\210\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0'.\377\0\\l\377\0o\202\377\0o\202\377\0&-\377\0o\202\377\0Yi\377\0"
+      "o\202\377\0o\202\377\0n\201\377\0o\202\377\0LY\377\0-4\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\1&,\377"
+      "\3(.\377u\211\214\377\3(-\377\0%+\377\0&+\225\0\0\0\0\0\0\0\0\0&*y\0"
+      "%+\377\1&,\377s\207\213\377\12-3\377\6*0\377\6*0\377\6*0\377\6*0\377"
+      "\3\"'\377\0\31\35\377\252\261\261\377\352\352\352\377\352\352\352\377"
+      "\351\351\351\377\351\351\351\377\350\350\350\377\350\350\350\377\347"
+      "\347\347\377\265\272\273\377FWZ\377\336\336\336\377\337\337\337\377\337"
+      "\337\337\377\334\335\336\377N\226\243\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0o\202\377\0*0\377\0Tc\377\0o\202\377\0m\177\377\0+2\377\0o\202"
+      "\377\0Yi\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0n\201\377\0"
+      "BM\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\1&,\377Nhl\377,KP\377\0%+\377\0%+\352\0\0\0\2\0\0\0"
+      "\0\0%+\272\0%+\377\32;A\377_vz\377\5)/\377\6*0\377\6*0\377\6*0\377\5"
+      ")/\377\0\37$\377\0\31\35\377\226\237\240\377\351\351\351\377\351\351"
+      "\351\377\350\350\350\377\350\350\350\377\347\347\347\377\347\347\347"
+      "\377\346\346\346\377\345\345\345\377z\205\206\377x\204\205\377\337\337"
+      "\337\377\312\321\322\3779\206\224\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0,4\377\0P]\377\0o\202\377\0i{\377\0""08\377\0"
+      "o\202\377\0Yi\377\0o\202\377\0o\202\377\0o\201\377\0o\202\377\0n\201"
+      "\377\0\77J\377\0O]\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\40@F\377Zrv\377\0%+\377\0%+\377\0&+"
+      "/\0++\6\0%+\365\0%+\377>Z_\377<X]\377\6*0\377\6*0\377\5)/\377\5)/\377"
+      "\2'-\377\0\40&\377\0\40%\377{\213\215\377\350\350\350\377\350\350\350"
+      "\377\347\347\347\377\347\347\347\377\346\346\346\377\346\346\346\377"
+      "\345\345\345\377\342\342\342\377\336\336\336\377J[]\377o\202\205\377"
+      "\25n}\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0""07\377\0JW\377\0o\202\377\0fw\377\0""4=\377\0o\202\377\0Yi\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0AL\377\0o\202"
+      "\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\2'-\377v\212\215\377\0%+\377\0%+\377\0&+r\0&+5\0%+\377"
+      "\0%+\377`w{\377\31;@\377\5)/\377\5)/\377\5)/\377\4(.\377\0%+\377\0^m"
+      "\377\0KX\377=fn\377\350\350\350\377\347\347\347\377\346\346\346\377\346"
+      "\346\346\377\345\345\345\377\345\345\345\377\344\344\344\377\340\340"
+      "\340\377\337\337\337\377Xhk\377\0""6>\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0j}\377\0Tb\377\0o\202"
+      "\377\0fw\377\0""9B\377\0o\202\377\0[j\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0o\202\377\0o\202\377\0DP\377\0o\202\377\0Xg\377\0)0\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377by|\377"
+      "\26""8=\377\0%+\377\0&,\252\0$*[\0%+\377\0%+\377u\211\214\377\5*/\377"
+      "\5)/\377\5)/\377\5)/\377\2'-\377\0%+\377\0fx\377\0KX\377\4AL\377\332"
+      "\334\334\377\346\346\346\377\345\345\345\377\345\345\345\377\344\344"
+      "\344\377\344\344\344\377\343\343\343\377\337\337\337\377\337\337\337"
+      "\377\34;A\377\0;D\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o"
+      "\202\377\0o\202\377\0o\202\377\0o\202\377\0du\377\0o\202\377\0fw\377"
+      "\0>H\377\0o\202\377\0^m\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0KW\377\0o\202\377\0o\202\377\0ar\377\0""08\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377Hcg\377/MR\377"
+      "\0%+\377\0%+\321\0%+\204\0%+\377\6*0\377q\206\211\377\4(.\377\5)/\377"
+      "\5)/\377\5.4\377\0%,\377\0AL\377\0n\201\377\0MZ\377\0DO\377\244\263\266"
+      "\377\345\345\345\377\344\344\344\377\344\344\344\377\343\343\343\377"
+      "\343\343\343\377\341\341\341\377\337\337\337\377\337\337\337\377B\\`"
+      "\377\0;D\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0"
+      "o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0fw\377\0BN\377"
+      "\0o\202\377\0^m\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0P\\\377\0m\177\377\0o\202\377\0o\202\377\0N\\\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\3774QV\377C^c\377\0%+\377"
+      "\0%+\367\0$+\241\0%+\377\26""8=\377_vz\377\4(.\377\5)/\377\5)/\377\3"
+      "hy\377\0""2:\377\0dv\377\0o\202\377\0Ud\377\0KX\377Ku|\377\344\344\344"
+      "\377\344\344\344\377\343\343\343\377\342\342\342\377\342\342\342\377"
+      "\340\340\340\377\337\337\337\377\337\337\337\377\203\235\241\377\0;D"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0fw\377\0GS\377\0o\202\377"
+      "\0^m\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0Xh\377"
+      "\0h{\377\0o\202\377\0o\202\377\0o\202\377\0""5>\377\0%+\377\0%+\377\0"
+      "%+\377\0EQ\377\0%+\377\0%+\377\0%+\377\"BG\377Unr\377\0%+\377\0%+\377"
+      "\0%+\255\0%+\377\40@F\377Vor\377\4(.\377\4(.\377\4_n\377\1p\202\377\0"
+      "MZ\377\0fx\377\0o\202\377\0_p\377\0KX\377\2LY\377\307\321\322\377\343"
+      "\343\343\377\342\342\342\377\341\341\341\377\341\341\341\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\331\334\335\377\40U^\377\0o"
+      "\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0hz\377\0LY\377\0o\202\377\0^m"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0`p\377\0"
+      "du\377\0o\202\377\0o\202\377\0o\202\377\0fx\377\0DP\377\0DP\377\0%+\377"
+      "\0o\202\377\0%+\377\0%+\377\0%+\377\27""9>\377]ux\377\0%+\377\0%+\377"
+      "\0%+\272\0%+\377&EK\377Nhl\377\4(.\377\4""07\377\4q\204\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0l\177\377\0MZ\377\0KX\377f\217\226"
+      "\377\342\342\342\377\341\341\341\377\341\341\341\377\340\340\340\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\242"
+      "\300\306\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0"
+      "o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0l~\377\0P^\377"
+      "\0o\202\377\0^n\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0hz\377\0]m\377\0o\202\377\0o\202\377\0o\202\377\0m\200\377\0Wf"
+      "\377\0o\202\377\0Xh\377\0o\202\377\0%+\377\0%+\377\0%+\377\21""49\377"
+      "dz~\377\0%+\377\0%+\377\0%,\301\0%+\377'FK\377Lfj\377\4""6>\377\4q\204"
+      "\377\3q\203\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0Yi\377\0KX\377\13R_\377\316\324\326\377\340\340\340\377\340\340\340"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377Y\234\247\377\0o\202\377\0o\202\377\0"
+      "o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0o\202\377\0P^\377\0o\202\377\0bs\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0o\202\377\0o\202\377\0o\201\377\0]m\377\0o\202\377\0o\202\377\0"
+      "n\201\377\0o\202\377\0Zj\377\0o\202\377\0o\202\377\0o\202\377\0[j\377"
+      "\0_o\377\0%,\377\20""38\377e{\177\377\0%+\377\0%+\377\0%+\264\0%+\377"
+      "\"BG\377Qjn\377\4+2\377\4q\204\377\2p\203\377\0o\202\377\0o\202\377\0"
+      "o\202\377\0o\202\377\0o\202\377\0i{\377\0KX\377\0KX\377Y\206\216\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\326\332"
+      "\333\377%\202\222\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o"
+      "\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0Tc\377\0o\202\377"
+      "\0bs\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202"
+      "\377\0]l\377\0o\202\377\0o\202\377\0j}\377\0o\202\377\0Yi\377\0j|\377"
+      "\0fw\377\0o\202\377\0o\202\377\0P]\377\0.6\377\25""7<\377_vz\377\0%+"
+      "\377\0%+\377\0%+\245\0%+\377\33<A\377Wos\377\3(-\377\3""4<\377\1o\201"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0We\377\0KX\377\3MZ\377\266\304\306\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\270\307\311\377\10s\205\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0"
+      "o\202\377\0Tc\377\0o\202\377\0bs\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0^m\377\0o\202\377\0o\202\377\0j}\377"
+      "\0o\202\377\0KX\377\0j}\377\0ev\377\0o\202\377\0HT\377\0%+\377\0%+\377"
+      "\33<A\377Wos\377\0%+\377\0%+\377\0$+\224\0%+\377\16""17\377e{\177\377"
+      "\2'-\377\3(-\377\1+3\377\0o\202\377\0^m\377\0o\202\377\0o\202\377\0o"
+      "\202\377\0o\202\377\0j|\377\0LY\377\0KX\3779q{\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\210\264\273"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0Xh\377\0o\202\377\0du\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0^n\377\0o\202\377\0o\202"
+      "\377\0`q\377\0o\202\377\0""7A\377\0n\201\377\0o\202\377\0<F\377\0""0"
+      "8\377\0%+\377\0%+\377(GL\377Jdi\377\0%+\377\0%+\377\0%*m\0%+\377\0%+"
+      "\377q\206\211\377\2'-\377\3(-\377\1&,\377\0KX\377\0N[\377\0&,\377\0o"
+      "\202\377\0o\202\377\0o\202\377\0o\202\377\0[k\377\0KX\377\0KX\377\213"
+      "\247\254\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377[\235\250\377\0o\202\377\0o\202\377\0o\202\377\0"
+      "o\202\377\0o\202\377\0o\202\377\0o\202\377\0Yh\377\0o\202\377\0gy\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0"
+      "bs\377\0o\202\377\0o\202\377\0Tc\377\0o\202\377\0.5\377\0HT\377\0]m\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377=Y^\3775RW\377\0%+\377\0%+\342\0#+H\0"
+      "%+\377\0%+\377g}\201\377\13/4\377\3(-\377\1&,\377\0*0\377\0*0\377\0%"
+      "+\377\0o\202\377\0o\202\377\0o\202\377\0""7@\377\0Ra\377\0N\\\377\0K"
+      "X\377\13R_\377\303\314\316\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\332\335\335\3774\211\227\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0]m\377\0n\200\377\0l\177"
+      "\377\0o\202\377\0o\202\377\0o\202\377\0o\202\377\0du\377\0""9C\377\0"
+      "^o\377\0o\202\377\0o\202\377\0""6\77\377\0o\202\377\0/7\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377Pin\377!AF\377\0%+\377\0$+\275"
+      "\0))\31\0%+\377\0%+\377Hcg\377(GL\377\2'-\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0.6\377\0o\202\377\0o\202\377\0%+\377\0%+\377\0du\377\0KX\377"
+      "\0KX\3774nx\377\333\334\335\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\313\325\327\377\32|\215\377\0o\202\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\0[j\377\0m\200\3770\207\226\377\255"
+      "\306\312\377v\252\263\377\0o\202\377\0o\202\377\0%+\377\0%+\377\0^m\377"
+      "\0o\202\377\0o\202\377\0%+\377\0'-\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377j\200\203\377\6*0\377\0%+\377\0%+\217\0\0\0\0"
+      "\0%+\330\0%+\377'FK\377Hcg\377\2'-\377\1&,\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0o\202\377\0o\202\377\0%+\377\0%+\377\0o\202\377\0Yh\377\0K"
+      "X\377\0KX\377c\215\224\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\300\320\322\377\27{\214\377\0o\202\377"
+      "\0o\202\377\0o\202\377\0o\202\377\1[i\377k\245\256\377\334\335\336\377"
+      "\337\337\337\377\337\337\337\377U\232\246\377\0o\202\377\0%+\377\0%+"
+      "\377\0\\k\377\0o\202\377\0""3<\377\0%+\377\0%+\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\16""17\377ax|\377\0%+\377\0%+\377\0$+"
+      "M\0\0\0\0\0%*\227\0%+\377\7+1\377h~\201\377\1&,\377\1&,\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0EQ\377\0_n\377\0%+\377\0%+\377\0FS\377\0m\177"
+      "\377\0Q^\377\0KX\377\1LY\377\225\250\253\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\272\314\317\377"
+      "!\177\220\377\0o\202\377\0o\202\377\0o\202\377\212\250\255\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\327\333\334"
+      "\377,\205\225\377\0%+\377\0%+\377\0]l\377\0j|\377\0/6\377\0%+\377\0%"
+      "+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\3773QU\377=Y^\377\0"
+      "%+\377\0%+\374\0\"3\17\0\0\0\0\0%,K\0%+\377\0%+\377Rko\377\34=B\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0Zh\377\0i{\377\0MZ\377\0KX\377\13#'\377\270\274\275\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\332\335\335\377|\255\266\377L\225\241\377N\213\225\377p\215\222"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\303\321\323\377\21""39\377\0%+\377\0LY\377\0""8A\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+"
+      "\377^uy\377\17""27\377\0%+\377\0%+\277\0\0\0\0\0\0\0\0\0@@\4\0%+\351"
+      "\0%+\377%EJ\377Ich\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0o\202\377\0bs\377\0KX\377\0"
+      "\31\35\377\33""15\377\315\317\320\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377Ty\200\377\241\266\272\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\241\253"
+      "\255\377\2'-\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+"
+      "\377\0%+\377\0%+\377\0%+\377\21""49\377]ux\377\0%+\377\0%+\377\0$,c\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0%+\217\0%+\377\1&,\377dz~\377\12.3\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+"
+      "\377\0""7@\377\0Yh\377\1IV\377\5\35!\377\7\37#\3776IL\377\331\332\332"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\326\331\331\3777oy\377\305"
+      "\316\317\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377i}\200\377\0%+\377\0%+\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377Hcg\377&EK\377\0%+\377"
+      "\0%+\366\0$$\16\0\0\0\0\0\0\0\0\0\0\0\0\0#+$\0%+\373\0%+\377/MR\377A"
+      "]a\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\1&,\377\4(.\377\6>G\377\5R`\377\13&+\377\14#'\377\16%)\377O"
+      "_a\377\334\334\335\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\275\310"
+      "\312\377<s|\377\332\334\334\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\333\334\334\377/LQ\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\15""06\377ax|\377\1&,\377\0"
+      "%+\377\0%+\226\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%+\245\0%+\377"
+      "\2'-\377f|\200\377\21""49\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\3(-\377\7+1\377\14/5\377\17""27\377\22""4:\377\26""7"
+      "<\377\22+.\377\22),\377\24*-\377^kn\377\336\336\336\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\225\256\262\377_\212\221\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\301"
+      "\306\306\377\15""06\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377Pin\377)HM\377\0%+\377\0%+\372\0!)\37\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0$+*\0%+\373\0%+\377%EJ\377Vor\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\1&,\377\5)/\377\12.3\377\16""17\377\22""4:\377"
+      "\26""8=\377\31:@\377\34=B\377\37>D\377\31""04\377\31/2\377\32/3\377^"
+      "ln\377\332\332\332\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377_\212\221"
+      "\377\224\255\262\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\221\236\240\377\2'-\377\0%+\377\0%+"
+      "\377\0%+\377\0%+\377\0%+\377\37@E\377[sw\377\1&,\377\0%+\377\0%+\231"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0%+\217\0%+"
+      "\377\0%+\377Tmq\3770NS\377\0%+\377\0%+\377\0%+\377\2'-\377\7+1\377\14"
+      "/5\377\20""38\377\25""7<\377\31:@\377\34=B\377\40@F\377$DI\377'FK\377"
+      "(FK\377\37""69\377\40""48\377!58\377P_b\377\322\324\324\377\337\337\337"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\332\334\334\3777oy\377\276\305\307\377\337\337\337\377\337"
+      "\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377A[_\377\4"
+      "(.\377\0%+\377\0%+\377\0%+\377\10,2\377g}\201\377\24""6<\377\0%+\377"
+      "\0%+\355\0$1\25\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0$$\16\0%+\344\0%+\377\13.4\377i\177\202\377\26""8=\377\0%+\377\2"
+      "'-\377\7+1\377\14/5\377\21""49\377\26""8=\377\33<A\377\37@E\377#CH\377"
+      "'FK\377*IN\377.LQ\3771OT\3772NS\377(=A\377&:=\377':=\377>PR\377\265\274"
+      "\275\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\302\311\312\377HXZ\377\327\330\330\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\241\254\255\377\22""4"
+      "9\377\12.3\377\5)/\377\0%+\377\1&,\377Tmq\3776SX\377\0%+\377\0%+\377"
+      "\0$,i\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0#+H\0%+\376\0%+\377\37@E\377h~\201\377\20""38\377\7+1\377\15"
+      "06\377\22""4:\377\27""9>\377\34=B\377!AF\377%EJ\377*IN\377.LQ\3771OT"
+      "\3774QV\3778UZ\377;W\\\377=X]\3770FI\377,\77B\377-@C\377/BE\377u\227"
+      "\234\377\332\334\334\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\234\243\245\377cps\377\337\337\337\377"
+      "\337\337\337\377\227\241\243\377\40@F\377\25""7<\377\20""38\377\12.3"
+      "\377\5)/\377\77[_\377Tmq\377\1&,\377\0%+\377\0%+\270\0\0\0\2\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0$,\206\0%+\377\0%+\3771OT\377e{\177\377\23""5;\377\22""4:\377\30"
+      ":\77\377\35>C\377\"BG\377'FK\377,KP\3770NS\3774QV\3779VZ\377<X]\377\77"
+      "[_\377B]b\377D_d\377Gbf\377=SW\3772DH\3773EG\3773EI\377\40`k\377\237"
+      "\264\270\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337"
+      "\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337"
+      "\377\337\337\337\377my{\377\207\221\222\377l{}\377%DI\377\40@F\377\33"
+      "<A\377\26""8=\377\20""38\3779VZ\377cz}\377\7+1\377\0%+\377\0%+\345\0"
+      "#.\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0U\3\0$+\275\0%+\377\0%+\377<X]\377g}\201"
+      "\377\"BG\377\36\77D\377#CH\377(GL\377-KP\3772PU\3777TY\377;W\\\377\77"
+      "[_\377C^c\377Fae\377Ich\377Lfj\377Nhl\377Pin\377Kbf\377<NQ\3778IL\377"
+      "4IM\377\0KX\377Xfh\377\216\251\256\377\327\330\330\377\337\337\337\377"
+      "\337\337\337\377\337\337\337\377\337\337\337\377\337\337\337\377\337"
+      "\337\337\377\234\243\244\377*AE\377/LQ\377*IN\377%EJ\377\40@F\377\33"
+      "<A\377D_d\377g}\201\377\12.3\377\0%+\377\0%+\365\0%*7\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\32""3\12\0%+\310\0%+\377\0%+\3779VZ\377p\205\210"
+      "\3772PU\377)HM\377.LQ\3773QU\3778UZ\377=Y^\377A]a\377Fae\377Ich\377M"
+      "gk\377Pin\377Slp\377Vor\377Wos\377Yqu\377Zrv\377Ocg\377ART\3770MS\377"
+      "=MP\377<LO\377\77PR\377fsu\377\204\215\217\377\227\236\237\377\222\232"
+      "\233\377\200\214\216\377Rhk\3778QU\377:W[\3775RW\3770NS\377+JO\377'F"
+      "K\377Vor\377e{\177\377\14/5\377\0%+\377\0%+\374\0$+N\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$1\25\0%+\321\0%+\377\0%+\377-"
+      "KP\377w\213\216\377Nhl\3774QV\3779VZ\377>Z_\377C^c\377Gbf\377Lfj\377"
+      "Pin\377Tmq\377Wos\377[sw\377]ux\377_vz\377`w{\377by|\377by|\377ax{\377"
+      "Vjl\377I[^\377BQT\377@OR\377>NQ\377<MO\377:KM\3778IL\377\77TW\377Ich"
+      "\377E`d\377@\\`\377;W\\\3776SX\3779VZ\377k\200\204\377[sw\377\7+1\377"
+      "\0%+\377\0%+\374\0$,b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\40""0\20\0%+\300\0%+\377\0%+\377\27""9>\377l\201"
+      "\205\377k\200\204\377Fae\377C^c\377Ich\377Mgk\377Rko\377Vor\377[sw\377"
+      "^uy\377ax|\377dz~\377f|\200\377h~\201\377j\200\203\377j\200\203\377j"
+      "\200\203\377j\200\203\377i\177\202\377e{~\377\\pt\377Wkn\377Thl\377S"
+      "il\377Wnr\377Tmq\377Pin\377Kei\377Fae\377B]b\377Yqu\377y\214\220\377"
+      "<X]\377\2'-\377\0%+\377\0%+\366\0$*O\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\40\10\0%,\244"
+      "\0%+\377\0%+\377\7+1\377E`d\377~\221\224\377j\200\203\377Qjn\377Tmq\377"
+      "Xpt\377]ux\377ax|\377e{\177\377i\177\202\377k\200\204\377n\203\206\377"
+      "o\204\207\377q\206\211\377r\206\212\377r\206\212\377q\206\211\377p\205"
+      "\210\377o\204\207\377m\202\206\377j\200\203\377f|\200\377cz}\377_vz\377"
+      "[sw\377Vor\377Qjn\377[sw\377y\214\220\377i\177\202\377\34=B\377\0%+\377"
+      "\0%+\377\0%+\344\0#,:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&+e\0%"
+      "+\365\0%+\377\0%+\377\26""8=\377]ux\377\203\225\230\377v\212\215\377"
+      "dz~\377cz}\377h~\201\377l\201\205\377o\204\207\377s\207\213\377u\211"
+      "\214\377w\213\216\377y\214\220\377y\214\220\377y\214\220\377y\214\220"
+      "\377x\214\217\377v\212\215\377t\210\213\377q\206\211\377n\203\206\377"
+      "j\200\203\377e{\177\377ax|\377k\200\204\377\177\222\225\377y\214\220"
+      "\3774QV\377\2'-\377\0%+\377\0%+\377\0%+\271\0$1\25\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&-(\0$+\275\0%+\377\0%+\377\0"
+      "%+\377\31:@\377Vor\377\205\227\232\377\210\231\234\377\200\222\225\377"
+      "w\213\216\377v\212\215\377y\214\220\377}\220\223\377~\221\224\377\200"
+      "\222\225\377\201\223\226\377\201\223\226\377\201\223\226\377\177\222"
+      "\225\377~\221\224\377{\216\221\377x\214\217\377u\211\214\377|\217\222"
+      "\377\206\230\232\377\210\231\234\377q\206\211\3773QU\377\5)/\377\0%+"
+      "\377\0%+\377\0&+\356\0%,h\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&+X\0%+\336\0%+\377\0%"
+      "+\377\0%+\377\12.3\3771OT\377cz}\377\210\231\234\377\217\237\242\377"
+      "\225\244\247\377\230\247\251\377\225\244\247\377\223\243\245\377\222"
+      "\242\244\377\221\241\244\377\223\243\245\377\224\244\246\377\226\245"
+      "\250\377\227\246\251\377\221\241\244\377\216\236\241\377v\212\215\377"
+      "Gbf\377\32;A\377\1&,\377\0%+\377\0%+\377\0%+\372\0$+\233\0&&\24\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@\4\0$,]\0%+\324\0%+\377\0%+\377\0%"
+      "+\377\0%+\377\4(.\377\35>C\3772PU\377Hcg\377ax|\377o\204\207\377y\214"
+      "\220\377{\216\221\377r\206\212\377j\200\203\377Vor\377:W[\377(GL\377"
+      "\16""17\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\366\0%+\226\0((\40\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0$-9\0$+\224\0%+\352\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377"
+      "\0%+\377\0%+\377\0%+\374\0%+\300\0$,b\0\"3\17\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\2\0&+/\0$+q\0%+\253\0%+\321\0%+\367\0%+\377\0"
+      "%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\377\0%+\343\0%+\274\0%+\217"
+      "\0$+M\0\"3\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (gnome_stock_fail)
+#endif
+#ifdef __GNUC__
+static const guint8 gnome_stock_fail[] __attribute__ ( (__aligned__ (4))) =
+#else
+static const guint8 gnome_stock_fail[] =
+#endif
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (2304) */
+      "\0\0\11\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (96) */
+      "\0\0\0`"
+      /* width (24) */
+      "\0\0\0\30"
+      /* height (24) */
+      "\0\0\0\30"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0>\0\7%;\0\11""8;\0\24\15\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\0\0\4=\0\13"
+      ".9\0\13-U\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1=\0\13"
+      "\\N\0\17\321V\0\20\341E\0\16\251>\0\11\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""3\0\0\12C\0\15\211R\0\20\334R\0"
+      "\20\333A\0\15\2059\0\0\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0=\0\13\\R\0"
+      "\20\335v\0\30\377}\0\32\377d\0\24\372F\0\15\256>\0\11\35\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213[\0\22\356{\0"
+      "\31\377{\0\32\377Z\0\21\355A\0\15\206I\0\0\7\0\0\0\0\0\0\0\0""8\0\14"
+      ")O\0\17\323u\0\30\377~\0\32\377~\0\32\377~\0\32\377d\0\24\372F\0\15\256"
+      ">\0\11\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213[\0\22\356"
+      "{\0\31\377~\0\32\377~\0\32\377{\0\31\377X\0\21\352<\0\11Q\0\0\0\0\0\0"
+      "\0\0""9\0\13CZ\0\22\350~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32"
+      "\377d\0\24\372F\0\15\256>\0\11\35\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213"
+      "[\0\22\356{\0\31\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377g\0\24\376"
+      "A\0\13r\0\0\0\0\0\0\0\0""9\0\16\22H\0\15\265i\0\25\375~\0\32\377~\0\32"
+      "\377~\0\32\377~\0\32\377~\0\32\377d\0\24\372F\0\15\256>\0\11\35""3\0"
+      "\0\12B\0\15\213[\0\22\356{\0\31\377~\0\32\377~\0\32\377~\0\32\377~\0"
+      "\32\377r\0\30\377N\0\17\3209\0\12""1\0\0\0\0\0\0\0\0\0\0\0\0;\0\15'I"
+      "\0\16\272i\0\25\375~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377"
+      "d\0\24\372G\0\15\264A\0\13\244[\0\22\356{\0\31\377~\0\32\377~\0\32\377"
+      "~\0\32\377~\0\32\377r\0\30\377N\0\16\3249\0\13H\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0;\0\15'H\0\16\273j\0\25\375~\0\32\377~\0\32\377~\0"
+      "\32\377~\0\32\377~\0\32\377e\0\24\372Y\0\21\361{\0\31\377~\0\32\377~"
+      "\0\32\377~\0\32\377~\0\32\377r\0\30\377O\0\20\3259\0\13H\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""9\0\15(J\0\16\273j\0\25"
+      "\375~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32"
+      "\377~\0\32\377~\0\32\377~\0\32\377s\0\30\377O\0\20\325;\0\12J\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""8\0"
+      "\14)I\0\16\274j\0\25\375~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32"
+      "\377~\0\32\377~\0\32\377~\0\32\377s\0\30\377O\0\20\325:\0\12K\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0=\0\14*H\0\15\300g\0\24\376~\0\32\377~\0\32\377~\0\32\377"
+      "~\0\32\377~\0\32\377~\0\32\377s\0\30\377N\0\16\3309\0\12L\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0""3\0\0\12\77\0\13\246Z\0\22\364~\0\32\377~\0\32\377"
+      "~\0\32\377~\0\32\377~\0\32\377~\0\32\377g\0\24\376F\0\15\267>\0\11\35"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213[\0\22\356{\0\31\377~\0\32\377"
+      "~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377d\0\24\372"
+      "F\0\15\256>\0\11\35\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213[\0\22\356{\0\31\377~\0\32"
+      "\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32"
+      "\377~\0\32\377d\0\24\372F\0\15\256>\0\11\35\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213[\0\22\356{\0\31\377"
+      "~\0\32\377~\0\32\377~\0\32\377~\0\32\377s\0\30\377o\0\26\377~\0\32\377"
+      "~\0\32\377~\0\32\377~\0\32\377~\0\32\377d\0\24\372F\0\15\256>\0\11\35"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0""3\0\0\12B\0\15\213[\0\22\356"
+      "{\0\31\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377q\0\27\377N\0\16\325"
+      "G\0\15\276i\0\25\375~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377"
+      "d\0\24\372F\0\15\256>\0\11\35\0\0\0\0\0\0\0\0\0\0\0\0@\0\0\4C\0\15\212"
+      "[\0\22\356{\0\31\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377q\0\27\377"
+      "O\0\17\3239\0\13H<\0\15&I\0\16\272i\0\25\375~\0\32\377~\0\32\377~\0\32"
+      "\377~\0\32\377~\0\32\377d\0\24\372F\0\15\256:\0\14\26\0\0\0\0\0\0\0\0"
+      ";\0\11""8U\0\20\337{\0\31\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377"
+      "q\0\27\377O\0\17\3239\0\13H\0\0\0\0\0\0\0\0<\0\15&I\0\16\272i\0\25\375"
+      "~\0\32\377~\0\32\377~\0\32\377~\0\32\377~\0\32\377`\0\23\366@\0\15d\0"
+      "\0\0\0\0\0\0\0""9\0\11:V\0\20\341}\0\31\377~\0\32\377~\0\32\377~\0\32"
+      "\377q\0\27\377O\0\17\3239\0\13H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\0\15"
+      "&I\0\16\272i\0\25\375~\0\32\377~\0\32\377~\0\32\377~\0\32\377c\0\24\370"
+      "=\0\14h\0\0\0\0\0\0\0\0+\0\0\6D\0\14\223^\0\23\362}\0\31\377~\0\32\377"
+      "q\0\27\377O\0\17\3239\0\13H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0<\0\15&I\0\16\272i\0\25\375~\0\32\377~\0\32\377g\0\24\374H\0\16"
+      "\2659\0\11\33\0\0\0\0\0\0\0\0\0\0\0\0""7\0\22\16C\0\14\224\\\0\22\357"
+      "h\0\25\377N\0\17\3219\0\13H\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0<\0\15&I\0\16\272d\0\23\372b\0\23\371H\0\15\265"
+      ":\0\7#\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0;\0\0\15<\0\13]C\0\13s"
+      ":\0\12""5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0:\0\10\37@\0\14k\77\0\14j>\0\11\35\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
+
+
+/* GdkPixbuf RGBA C-Source image dump */
+
+#ifdef __SUNPRO_C
+#pragma align 4 (gnome_stock_user)
+#endif
+#ifdef __GNUC__
+static const guint8 gnome_stock_user[] __attribute__ ( (__aligned__ (4))) =
+#else
+static const guint8 gnome_stock_user[] =
+#endif
+    { ""
+      /* Pixbuf magic (0x47646b50) */
+      "GdkP"
+      /* length: header (24) + pixel_data (9216) */
+      "\0\0$\30"
+      /* pixdata_type (0x1010002) */
+      "\1\1\0\2"
+      /* rowstride (192) */
+      "\0\0\0\300"
+      /* width (48) */
+      "\0\0\0""0"
+      /* height (48) */
+      "\0\0\0""0"
+      /* pixel_data: */
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252\252\252\3\205"
+      "\211\201E\217\220\215\217\214\217\212\272\211\213\206\306\213\215\207"
+      "\302\217\220\214\261\215\217\210r\211\211\203'\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\212\217\2052\214\216\211\264\255\256\253\300\333\333\331\311"
+      "\360\360\357\311\367\367\367\311\365\365\364\311\353\354\353\311\320"
+      "\320\315\307\226\226\223\302\215\217\213\213\222\222\200\16\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216"
+      "\216\213M\223\224\220\301\337\341\336\311\365\365\364\311\364\364\362"
+      "\311\365\365\364\311\366\366\365\311\366\366\366\311\366\366\365\311"
+      "\366\366\365\311\365\365\364\311\307\307\303\305\213\216\212\265\213"
+      "\213\213\26\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\212\217\2052\225\227\222\300\353\353\351\311\360\360\357\311\357\357"
+      "\355\311\362\362\361\311\366\366\365\311\372\372\371\311\373\373\372"
+      "\311\367\367\367\311\365\365\364\311\362\362\360\311\364\364\364\311"
+      "\325\326\324\310\215\220\213\256\222\222\222\7\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\4\216\220\213\265\342\342\341\311"
+      "\354\354\351\311\353\353\351\311\357\357\355\311\364\364\362\311\367"
+      "\367\366\311\373\373\373\311\376\376\374\311\372\372\371\311\365\365"
+      "\364\311\361\361\360\311\355\355\353\311\362\362\361\311\277\300\274"
+      "\303\215\217\212k\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\214"
+      "\206T\266\270\264\301\355\355\353\311\346\346\344\311\351\351\350\311"
+      "\357\357\355\311\362\362\361\311\366\366\365\311\371\371\371\311\372"
+      "\372\372\311\367\367\367\311\364\364\364\311\360\360\357\311\354\354"
+      "\353\311\351\351\350\311\355\355\354\311\220\222\216\274\207\207\207"
+      "\21\377\377\377\1\207\207\207\21\200\200\200\4\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\217\220\212"
+      "\250\336\336\333\311\346\346\343\311\346\346\343\311\351\351\347\311"
+      "\355\355\353\311\360\360\357\311\364\364\362\311\365\365\364\311\366"
+      "\366\365\311\365\365\364\311\362\362\361\311\357\357\355\311\353\353"
+      "\351\311\347\347\346\311\337\337\336\317\235\236\233\343\216\220\213"
+      "\351\212\214\207\374\220\222\215\370\211\213\206\375\215\217\213\351"
+      "\216\220\211\232\212\212\2050\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\222\222\222\7\214\216\211\305\355\355\353\311\341\341\335\311"
+      "\343\343\341\311\347\347\346\311\351\351\350\311\355\355\354\311\360"
+      "\360\357\311\362\362\360\311\362\362\361\311\361\361\360\311\357\357"
+      "\355\311\354\354\351\311\351\351\347\311\263\264\261\344\221\223\216"
+      "\375\306\307\304\376\351\352\350\377\367\367\367\377\371\371\370\377"
+      "\371\371\371\377\357\357\356\377\320\321\317\376\224\226\221\366\215"
+      "\220\212\250\200\200\200\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\211\211"
+      "\34\227\232\225\300\353\353\351\311\336\336\333\311\341\341\336\311\346"
+      "\346\342\311\350\350\346\311\351\351\350\311\354\354\351\311\357\357"
+      "\354\311\357\357\354\311\355\355\353\311\353\353\351\311\351\351\347"
+      "\311\245\246\243\356\252\253\250\375\357\357\356\377\364\364\363\377"
+      "\364\364\362\377\365\365\364\377\367\367\366\377\367\367\366\377\366"
+      "\366\365\377\366\366\365\377\364\364\363\377\274\275\272\371\215\220"
+      "\213\327\210\210\210\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\211\211\211\34\227\232"
+      "\225\300\351\351\347\311\333\333\330\311\337\337\333\311\342\342\337"
+      "\311\344\344\342\311\347\347\344\311\350\350\346\311\351\351\347\311"
+      "\351\351\350\311\351\351\347\311\350\350\346\311\260\261\256\346\257"
+      "\260\254\375\361\361\360\377\356\356\354\377\357\357\356\377\363\363"
+      "\362\377\367\367\366\377\372\372\372\377\373\373\372\377\370\370\367"
+      "\377\364\364\363\377\361\361\360\377\364\364\363\377\306\306\304\372"
+      "\217\221\213\302\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\222\222\222\7\214\216"
+      "\211\305\351\351\350\311\331\331\325\311\333\333\331\311\337\337\333"
+      "\311\341\341\336\311\343\343\341\311\346\346\342\311\346\346\343\311"
+      "\346\346\343\311\346\346\343\311\323\324\317\321\231\233\227\374\356"
+      "\356\355\377\352\352\350\377\354\354\352\377\360\360\356\377\364\364"
+      "\363\377\370\370\367\377\374\374\374\377\375\375\374\377\371\371\370"
+      "\377\364\364\363\377\360\360\357\377\355\355\353\377\362\362\361\377"
+      "\254\255\251\362\212\214\207Y\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\214\216\211\251"
+      "\332\332\330\311\333\333\331\311\331\331\325\311\333\333\330\311\336"
+      "\336\332\311\337\337\333\311\341\341\336\311\341\341\336\311\341\341"
+      "\337\311\341\341\336\311\242\243\236\360\323\324\321\377\352\352\347"
+      "\377\347\347\345\377\353\353\351\377\357\357\355\377\363\363\362\377"
+      "\366\366\366\377\371\371\371\377\371\371\371\377\367\367\366\377\363"
+      "\363\362\377\357\357\356\377\354\354\352\377\352\352\350\377\346\346"
+      "\345\377\215\216\212\347\200\200\200\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0}\200z\\\263\263"
+      "\257\302\346\346\343\311\326\326\323\311\330\330\324\311\332\332\326"
+      "\311\333\333\330\311\335\335\331\311\335\335\332\311\335\335\332\311"
+      "\327\327\325\314\217\221\215\375\354\354\353\377\343\343\340\377\346"
+      "\346\343\377\352\352\347\377\355\355\354\377\361\361\357\377\363\363"
+      "\362\377\365\365\364\377\366\366\365\377\364\364\363\377\361\361\360"
+      "\377\356\356\354\377\352\352\350\377\346\346\344\377\357\357\355\377"
+      "\240\242\236\360\206\213\2067\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\40\40\40\20\213\215\210"
+      "\271\333\333\331\311\341\341\335\311\326\326\323\311\326\326\323\311"
+      "\326\326\324\311\330\330\325\311\331\331\325\311\331\331\326\311\300"
+      "\301\275\327\250\251\246\374\353\353\350\377\340\340\335\377\344\344"
+      "\341\377\350\350\345\377\353\353\351\377\356\356\354\377\360\360\357"
+      "\377\361\361\360\377\361\361\360\377\360\360\357\377\356\356\354\377"
+      "\353\353\351\377\350\350\346\377\345\345\342\377\352\352\350\377\302"
+      "\303\277\373\207\211\205u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\203|L\200\201~\303\224\227"
+      "\221\311\342\342\341\311\341\341\336\311\326\326\323\311\326\326\323"
+      "\311\326\326\323\311\326\326\323\311\326\326\323\311\266\267\263\334"
+      "\263\264\261\375\347\347\345\377\336\336\333\377\342\342\337\377\345"
+      "\345\343\377\350\350\346\377\352\352\350\377\354\354\352\377\355\355"
+      "\354\377\355\355\354\377\354\354\353\377\353\353\351\377\350\350\346"
+      "\377\345\345\343\377\342\342\337\377\346\346\344\377\314\315\311\377"
+      "\213\215\212\226\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\377\377\377\2\215\217\211\200\247\250\244\302\330\330"
+      "\326\311\256\257\255\311\222\223\217\311\326\326\324\311\350\350\346"
+      "\311\337\337\333\311\331\331\325\311\326\326\323\311\326\326\324\311"
+      "\273\273\267\333\261\262\256\375\346\346\344\377\334\334\331\377\337"
+      "\337\334\377\342\342\337\377\345\345\342\377\347\347\344\377\350\350"
+      "\346\377\351\351\347\377\351\351\347\377\350\350\346\377\347\347\345"
+      "\377\345\345\342\377\342\342\340\377\340\340\335\377\344\344\342\377"
+      "\311\312\307\377\212\214\207\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\2\217\217\211\210\270\270\263\302"
+      "\366\366\365\311\347\347\346\311\316\316\314\311\256\257\253\311\221"
+      "\221\214\311\247\247\244\311\320\320\316\311\343\343\341\311\351\351"
+      "\347\311\350\350\346\311\310\310\304\325\241\243\240\374\347\347\345"
+      "\377\331\331\326\377\334\334\331\377\337\337\334\377\341\341\336\377"
+      "\343\343\340\377\344\344\342\377\345\345\343\377\345\345\343\377\344"
+      "\344\342\377\343\343\341\377\341\341\337\377\337\337\334\377\335\335"
+      "\331\377\346\346\343\377\272\273\270\371\211\211\204l\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\217\221\213r\270\270\264"
+      "\302\364\364\364\311\357\357\354\311\357\357\355\311\337\337\336\311"
+      "\316\316\314\311\274\274\274\311\242\242\241\311\224\224\222\311\216"
+      "\221\212\311\212\214\206\311\214\215\210\311\221\222\214\312\213\215"
+      "\210\375\346\346\344\377\330\330\324\377\331\331\325\377\333\333\330"
+      "\377\336\336\332\377\337\337\334\377\340\340\335\377\341\341\336\377"
+      "\341\341\336\377\340\340\335\377\337\337\334\377\336\336\333\377\334"
+      "\334\330\377\331\331\326\377\352\352\347\377\227\230\225\363\206\214"
+      "\206(\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\213\213\206"
+      "7\237\241\233\300\364\364\362\311\354\354\351\311\354\354\353\311\357"
+      "\357\355\311\361\361\357\311\343\343\342\311\324\324\323\311\310\310"
+      "\310\311\300\300\300\311\271\271\271\311\270\270\270\311\272\272\272"
+      "\311\275\275\274\311\230\231\226\354\306\306\303\376\342\342\337\377"
+      "\326\326\322\377\330\330\324\377\332\332\326\377\333\333\330\377\334"
+      "\334\331\377\335\335\332\377\335\335\332\377\334\334\331\377\333\333"
+      "\330\377\332\332\326\377\330\330\324\377\336\336\333\377\330\330\325"
+      "\377\213\215\210\331\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\200\200\200\2\216\220\212\265\351\351\350\311\355\355\353\311\351"
+      "\351\350\311\354\354\353\311\357\357\355\311\361\361\357\311\364\364"
+      "\362\311\355\355\354\311\342\342\342\311\332\332\332\311\326\326\326"
+      "\311\324\324\324\311\325\325\325\311\331\331\330\311\303\303\302\321"
+      "\220\222\216\375\343\343\341\377\335\335\332\377\326\326\322\377\326"
+      "\326\322\377\327\327\323\377\330\330\324\377\331\331\325\377\331\331"
+      "\325\377\330\330\325\377\327\327\324\377\326\326\322\377\332\332\326"
+      "\377\347\347\345\377\231\232\226\367knkJ\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\211\214\205E\265\265\262\300\362\362\360\311"
+      "\350\350\346\311\351\351\350\311\354\354\351\311\357\357\355\311\360"
+      "\360\357\311\362\362\361\311\365\365\364\311\367\367\366\311\366\366"
+      "\365\311\362\362\362\311\360\360\360\311\362\362\362\311\360\360\357"
+      "\313\245\246\243\354\213\213\207\376\234\236\231\377\345\345\343\377"
+      "\340\340\335\377\326\326\322\377\326\326\322\377\326\326\322\377\326"
+      "\326\322\377\326\326\322\377\326\326\322\377\326\326\322\377\335\335"
+      "\331\377\351\351\346\377\255\257\253\377\207\211\205\374\200\202\177"
+      "\215\252\252\252\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\220\221"
+      "\214\236\341\342\341\311\351\351\351\311\347\347\346\311\351\351\347"
+      "\311\351\351\347\311\357\357\354\311\360\360\357\311\362\362\360\311"
+      "\364\364\364\311\366\366\365\311\367\367\366\311\367\367\367\311\371"
+      "\371\371\311\354\354\353\316\230\231\225\370\306\310\304\376\330\330"
+      "\327\377\246\247\245\377\226\227\224\377\332\333\327\377\350\350\346"
+      "\377\337\337\334\377\333\333\327\377\331\331\325\377\332\332\326\377"
+      "\336\336\333\377\346\346\344\377\341\341\336\377\242\244\240\377\236"
+      "\237\233\377\330\330\327\377\256\261\254\367\216\217\212\302\200\200"
+      "\200\12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0fff\5\214\217\211\303\364\364\362\311"
+      "\346\346\343\311\347\347\344\311\336\336\333\311\351\351\350\311\355"
+      "\355\353\311\357\357\355\311\361\361\357\311\362\362\361\311\364\364"
+      "\364\311\365\365\364\311\366\366\366\311\350\351\346\317\230\231\224"
+      "\371\331\332\330\376\365\365\364\377\341\341\340\377\313\313\312\377"
+      "\252\253\251\377\217\221\213\377\245\247\243\377\314\315\312\377\336"
+      "\336\333\377\344\344\341\377\340\340\335\377\322\322\320\377\260\261"
+      "\256\377\216\220\212\377\245\245\242\377\315\315\313\377\346\346\344"
+      "\377\367\367\366\377\300\301\275\370\216\217\212\304\216\216\216\11\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\211\211\200\32\227\232\226\300\362\362\361\311\344"
+      "\344\341\311\344\344\342\311\310\310\307\311\351\351\350\311\354\354"
+      "\351\311\357\357\354\311\357\357\357\311\361\361\360\311\362\362\361"
+      "\311\364\364\362\311\360\360\360\312\232\234\230\367\332\332\330\376"
+      "\363\363\363\377\355\355\353\377\357\357\355\377\336\336\335\377\314"
+      "\314\313\377\273\273\273\377\243\243\242\377\225\227\223\377\220\222"
+      "\215\377\215\217\213\377\217\221\215\377\225\226\222\377\240\241\237"
+      "\377\273\273\272\377\315\315\314\377\337\337\336\377\357\357\356\377"
+      "\357\357\355\377\366\366\365\377\276\300\275\370\216\217\213\262\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\207\207\200\"\234\237\233\277\361\361\360\311\343\343"
+      "\341\311\306\306\305\311\333\333\331\311\351\351\347\311\351\351\351"
+      "\311\354\354\351\311\357\357\354\311\357\357\357\311\360\360\357\311"
+      "\361\361\360\311\264\265\261\350\303\303\301\375\364\364\362\377\353"
+      "\353\351\377\355\355\353\377\357\357\356\377\361\361\360\377\341\341"
+      "\340\377\324\324\323\377\310\310\310\377\300\300\277\377\274\274\274"
+      "\377\273\273\273\377\274\274\274\377\301\301\301\377\311\311\311\377"
+      "\325\325\324\377\343\343\342\377\362\362\360\377\357\357\356\377\355"
+      "\355\354\377\355\355\353\377\365\365\364\377\250\250\244\364\210\213"
+      "\206e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\211\211\211\15\220\221\214\303\364\364\362\311\333\333"
+      "\331\311\270\270\265\311\346\346\343\311\347\347\346\311\351\351\347"
+      "\311\353\353\351\311\354\354\351\311\355\355\354\311\357\357\355\311"
+      "\336\336\336\320\233\234\227\374\362\362\361\377\352\352\350\377\353"
+      "\353\351\377\355\355\353\377\357\357\356\377\361\361\360\377\363\363"
+      "\362\377\355\355\354\377\343\343\342\377\334\334\333\377\330\330\330"
+      "\377\327\327\327\377\330\330\330\377\334\334\334\377\344\344\343\377"
+      "\357\357\356\377\364\364\363\377\362\362\360\377\357\357\356\377\355"
+      "\355\354\377\353\353\351\377\355\355\353\377\357\357\355\377\217\221"
+      "\214\357\217\217\200\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\213\216\212\267\347\347\346\311\313"
+      "\313\312\311\312\312\310\311\344\344\342\311\346\346\343\311\347\347"
+      "\346\311\351\351\347\311\351\351\350\311\353\353\351\311\354\354\353"
+      "\311\254\255\247\354\325\326\324\376\356\356\354\377\350\350\346\377"
+      "\352\352\351\377\355\355\353\377\357\357\355\377\361\361\360\377\363"
+      "\363\362\377\365\365\364\377\367\367\366\377\367\367\366\377\364\364"
+      "\364\377\364\364\364\377\364\364\364\377\370\370\370\377\367\367\367"
+      "\377\365\365\364\377\363\363\362\377\361\361\360\377\357\357\356\377"
+      "\355\355\353\377\353\353\351\377\351\351\347\377\360\360\356\377\313"
+      "\314\311\371\214\216\213\212\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\214\214\207j\276\276\272\304"
+      "\330\330\326\311\341\341\335\311\343\343\341\311\344\344\342\311\346"
+      "\346\343\311\347\347\346\311\350\350\346\311\351\351\347\311\347\347"
+      "\346\312\215\217\213\375\361\362\360\377\347\347\345\377\350\350\346"
+      "\377\352\352\350\377\352\352\350\377\356\356\354\377\360\360\357\377"
+      "\362\362\361\377\364\364\363\377\366\366\365\377\367\367\367\377\370"
+      "\370\370\377\371\371\370\377\371\371\370\377\367\367\367\377\366\366"
+      "\365\377\364\364\363\377\362\362\361\377\361\361\357\377\356\356\355"
+      "\377\353\353\352\377\352\352\350\377\350\350\346\377\350\350\346\377"
+      "\361\361\357\377\214\216\211\362\231\231\231\5\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0NNC\27\212\213\207"
+      "\277\325\325\324\311\351\351\350\311\341\341\336\311\343\343\341\311"
+      "\344\344\341\311\346\346\343\311\346\346\344\311\347\347\346\311\316"
+      "\317\315\325\252\253\246\374\361\361\360\377\345\345\343\377\347\347"
+      "\345\377\326\326\324\377\353\353\351\377\355\355\354\377\357\357\356"
+      "\377\361\361\360\377\363\363\361\377\364\364\363\377\365\365\364\377"
+      "\366\366\365\377\367\367\366\377\366\366\366\377\366\366\365\377\364"
+      "\364\363\377\363\363\362\377\361\361\360\377\357\357\356\377\356\356"
+      "\354\377\354\354\352\377\352\352\350\377\350\350\345\377\346\346\343"
+      "\377\361\361\360\377\253\256\251\361\211\211\205C\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16^^[L\220"
+      "\220\214\303\344\344\342\311\357\357\355\311\347\347\346\311\344\344"
+      "\342\311\344\344\342\311\344\344\342\311\346\346\343\311\300\301\277"
+      "\333\271\271\266\375\356\356\355\377\344\344\342\377\332\332\330\377"
+      "\326\326\324\377\352\352\350\377\354\354\352\377\356\356\354\377\357"
+      "\357\356\377\361\361\360\377\362\362\361\377\363\363\362\377\364\364"
+      "\363\377\364\364\363\377\364\364\363\377\364\364\363\377\362\362\361"
+      "\377\361\361\360\377\360\360\356\377\356\356\355\377\354\354\353\377"
+      "\352\352\351\377\332\332\331\377\347\347\344\377\345\345\342\377\355"
+      "\355\353\377\310\310\306\374\210\212\206v\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\13\0\0\0\34UURT\211"
+      "\213\207\300\266\267\265\304\336\336\333\311\354\354\351\311\360\360"
+      "\357\311\364\364\364\311\365\365\364\311\306\306\303\336\274\276\272"
+      "\375\355\355\354\377\343\343\341\377\276\276\275\377\347\347\345\377"
+      "\351\351\347\377\353\353\351\377\354\354\353\377\356\356\354\377\357"
+      "\357\356\377\360\360\357\377\361\361\360\377\362\362\361\377\362\362"
+      "\361\377\362\362\361\377\361\361\360\377\361\361\357\377\357\357\356"
+      "\377\356\356\355\377\355\355\353\377\353\353\351\377\351\351\347\377"
+      "\336\336\333\377\317\317\315\377\344\344\341\377\352\352\350\377\325"
+      "\325\322\377\213\216\211\232\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\21\0\0\0\34\34\34\34-"
+      "ilgf\205\207\200\237\212\214\210\272\212\213\206\302\207\212\205\310"
+      "\210\212\205\311\210\212\205\327\251\253\247\374\360\360\356\377\315"
+      "\315\313\377\303\303\300\377\346\346\343\377\350\350\345\377\351\351"
+      "\347\377\353\353\351\377\354\354\352\377\355\355\354\377\356\356\355"
+      "\377\357\357\356\377\360\360\356\377\360\360\357\377\360\360\356\377"
+      "\357\357\356\377\356\356\355\377\356\356\354\377\354\354\353\377\353"
+      "\353\351\377\352\352\347\377\350\350\346\377\346\346\344\377\266\266"
+      "\264\377\327\327\324\377\352\352\350\377\320\320\316\377\214\216\210"
+      "\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\13\0\0\0\21\0\0\0\24\0\0\0\26\0\0\0\26"
+      "\0\0\0\26\0\0\0\26\0\0\0\26<<<&\213\215\211\370\360\360\357\377\272\272"
+      "\267\377\331\331\326\377\345\345\342\377\346\346\344\377\350\350\345"
+      "\377\351\351\347\377\352\352\350\377\353\353\352\377\354\354\353\377"
+      "\355\355\353\377\356\356\354\377\356\356\354\377\356\356\354\377\355"
+      "\355\353\377\354\354\353\377\354\354\352\377\352\352\351\377\351\351"
+      "\347\377\350\350\346\377\346\346\344\377\345\345\342\377\270\270\266"
+      "\377\265\265\263\377\355\355\353\377\273\274\267\366\210\213\206e\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\2\0\0\0\2\0\0\0\2\0\0"
+      "\0\2\0\0\0\2\0\0\0\2\214\215\211\272\316\317\314\376\323\323\321\377"
+      "\341\341\337\377\343\343\340\377\345\345\342\377\346\346\344\377\347"
+      "\347\345\377\350\350\346\377\351\351\347\377\352\352\350\377\353\353"
+      "\351\377\353\353\351\377\353\353\352\377\353\353\351\377\353\353\351"
+      "\377\352\352\350\377\352\352\347\377\351\351\346\377\347\347\345\377"
+      "\346\346\344\377\345\345\342\377\343\343\341\377\307\307\304\377\254"
+      "\254\252\377\350\350\346\377\217\221\215\366||u#\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0`d`8\207\210\205\367\342\342\341\377\350\350\346\377\341\341\337"
+      "\377\343\343\340\377\344\344\341\377\345\345\343\377\346\346\344\377"
+      "\347\347\345\377\350\350\346\377\351\351\347\377\351\351\347\377\351"
+      "\351\347\377\351\351\347\377\351\351\347\377\350\350\346\377\350\350"
+      "\345\377\347\347\344\377\346\346\343\377\344\344\342\377\343\343\340"
+      "\377\342\342\337\377\325\325\324\377\327\327\326\377\263\264\261\371"
+      "\202\203\177\261\0\0\0\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26mmkz\227\231"
+      "\225\370\350\350\346\377\356\356\355\377\350\350\346\377\346\346\344"
+      "\377\346\346\344\377\345\345\344\377\346\346\344\377\347\347\345\377"
+      "\350\350\346\377\351\351\346\377\351\351\347\377\351\351\346\377\350"
+      "\350\346\377\350\350\346\377\347\347\345\377\347\347\345\377\347\347"
+      "\344\377\346\346\345\377\351\351\347\377\356\356\355\377\354\354\352"
+      "\377\257\260\256\373\207\210\203\341\36\36\36""3\0\0\0\24\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\22\0\0\0&_a]y\213\216\207\365\265\267\264\370\332"
+      "\332\330\377\346\346\345\377\354\354\352\377\362\362\361\377\361\361"
+      "\360\377\362\362\361\377\361\361\360\377\361\361\357\377\361\361\357"
+      "\377\361\361\357\377\360\360\357\377\360\360\357\377\360\360\357\377"
+      "\357\357\357\377\356\356\355\377\347\347\346\377\334\334\333\377\273"
+      "\274\272\374\216\220\212\370|}y\300\33\33\33A\0\0\0$\0\0\0\20\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\26\0\0\0%\34\34\34""7hhf}\203\204\177"
+      "\275\211\214\206\337\212\213\207\352\212\214\207\364\211\213\206\367"
+      "\211\213\206\367\211\213\206\367\211\213\206\367\211\213\206\367\211"
+      "\213\206\367\211\213\206\367\211\213\206\367\211\213\206\367\211\213"
+      "\206\367\212\214\207\362\212\213\206\342\205\210\203\315qro\223<<<L\0"
+      "\0\0-\0\0\0$\0\0\0\25\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2"
+      "\0\0\0\16\0\0\0\24\0\0\0\30\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0"
+      "\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0"
+      "\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\32\0\0\0\30\0\0\0\24"
+      "\0\0\0\15\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1"
+      "\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0"
+      "\0\1\0\0\0\1\0\0\0\1\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+      "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
+    };
+
+
 
 
 G_END_DECLS
diff --git a/sflphone-client-gnome/src/imwindow.c b/sflphone-client-gnome/src/imwindow.c
new file mode 100644
index 0000000000000000000000000000000000000000..c76b66588d6e519277f151f2b3ce1d6e01bdffd7
--- /dev/null
+++ b/sflphone-client-gnome/src/imwindow.c
@@ -0,0 +1,286 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
+ *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
+ *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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 <config.h>
+#include <gtk/gtk.h>
+#include <eel-gconf-extensions.h>
+#include <sflphone_const.h>
+
+#include <imwindow.h>
+#include <contacts/calltab.h>
+#include <contacts/calltab.h>
+
+/** Local variables */
+GtkWidget *im_window = NULL;
+GtkWidget *im_notebook = NULL;
+
+static gboolean window_configure_cb (GtkWidget *wini UNUSED, GdkEventConfigure *event)
+{
+    int pos_x, pos_y;
+
+    eel_gconf_set_integer (CONF_IM_WINDOW_WIDTH, event->width);
+    eel_gconf_set_integer (CONF_IM_WINDOW_HEIGHT, event->height);
+
+    gtk_window_get_position (GTK_WINDOW (im_window_get()), &pos_x, &pos_y);
+    eel_gconf_set_integer (CONF_IM_WINDOW_POSITION_X, pos_x);
+    eel_gconf_set_integer (CONF_IM_WINDOW_POSITION_Y, pos_y);
+
+    return FALSE;
+}
+
+/**
+ * Minimize the main window.
+ */
+static gboolean
+on_delete (GtkWidget * widget UNUSED, gpointer data UNUSED)
+{
+    /* Only hide the main window that contains all the instant messaging instances */
+    gtk_widget_hide (GTK_WIDGET (im_window_get()));
+    return TRUE;
+}
+
+static void
+on_switch_page (GtkNotebook *notebook, GtkNotebookPage *page UNUSED, guint page_num, gpointer userdata UNUSED)
+{
+    guint index = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
+
+    GtkWidget *tab = gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), page_num);
+
+    // show the current widget
+    gtk_widget_grab_focus (tab);
+    gtk_widget_show_now (tab);
+
+    g_print ("switch to %i -  current = %i\n", page_num, index);
+}
+
+static void
+im_window_init()
+{
+    const char *window_title = "SFLphone IM Client";
+    int width, height, position_x, position_y;
+
+    // Get configuration stored in gconf
+    width = eel_gconf_get_integer (CONF_IM_WINDOW_WIDTH);
+
+    if (width <= 0)
+        width = 400;
+
+    height = eel_gconf_get_integer (CONF_IM_WINDOW_HEIGHT);
+
+    if (height <= 0)
+        height = 500;
+
+    position_x = eel_gconf_get_integer (CONF_IM_WINDOW_POSITION_X);
+    position_y = eel_gconf_get_integer (CONF_IM_WINDOW_POSITION_Y);
+
+    im_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_container_set_border_width (GTK_CONTAINER (im_window), 0);
+    gtk_window_set_title (GTK_WINDOW (im_window), window_title);
+    gtk_window_set_default_size (GTK_WINDOW (im_window), width, height);
+    gtk_window_set_default_icon_from_file (LOGO, NULL);
+    gtk_window_set_position (GTK_WINDOW (im_window), GTK_WIN_POS_MOUSE);
+
+    gtk_widget_set_name (im_window, "imwindow");
+
+    GtkWidget *im_vbox = gtk_vbox_new (FALSE /*homogeneous*/, 0 /*spacing*/);
+    im_notebook = gtk_notebook_new ();
+
+    gtk_container_add (GTK_CONTAINER (im_window), im_vbox);
+    gtk_box_pack_start (GTK_BOX (im_vbox), im_notebook, TRUE, TRUE, 0);
+    gtk_widget_show (im_notebook);
+
+    g_signal_connect (G_OBJECT (im_window), "delete-event", G_CALLBACK (on_delete), NULL);
+    g_signal_connect_object (G_OBJECT (im_window), "configure-event", G_CALLBACK (window_configure_cb), NULL, 0);
+    g_signal_connect (G_OBJECT (im_notebook), "switch-page", G_CALLBACK (on_switch_page), NULL);
+
+    /* make sure that everything is visible */
+    gtk_widget_show_all (im_window);
+
+    // Restore position according to the configuration stored in gconf
+    gtk_window_move (GTK_WINDOW (im_window), position_x, position_y);
+}
+
+GtkWidget *
+im_window_get()
+{
+    if (im_window == NULL)
+        im_window_init();
+
+    return im_window;
+}
+
+
+gboolean
+im_window_is_active ()
+{
+
+    if (!im_window)
+        return FALSE;
+    else
+        return gtk_window_is_active (GTK_WINDOW (im_window));
+}
+
+gboolean
+im_window_is_visible ()
+{
+    return gtk_widget_get_visible (im_window);
+}
+
+void
+im_window_show ()
+{
+    gtk_window_present (GTK_WINDOW (im_window_get ()));
+}
+
+void
+im_window_add (GtkWidget *widget)
+{
+    if (im_window_get()) {
+        /* Add the new tab to the notebook */
+        im_window_add_tab (widget);
+
+        /* Show it all */
+        gtk_widget_show_all (im_window);
+    } else
+        ERROR ("Could not create the main instant messaging window");
+}
+
+gint
+im_window_get_nb_tabs()
+{
+    if (im_notebook)
+        return gtk_notebook_get_n_pages (im_notebook);
+    else
+        return 0;
+}
+
+static void
+close_tab_cb (GtkButton *button UNUSED, gpointer userdata)
+{
+    /* We want here to close the current tab */
+    im_window_remove_tab (GTK_WIDGET (userdata));
+
+    /* If no tabs are opened anymore, close the IM window */
+    // gtk_widget_destroy (im_window);
+}
+
+void
+im_window_add_tab (GtkWidget *widget)
+{
+    /* Cast the paramater */
+    IMWidget *im = IM_WIDGET (widget);
+
+    /* Fetch the call */
+    callable_obj_t *im_widget_call = calllist_get (current_calls, im->call_id);
+    conference_obj_t *im_widget_conf = conferencelist_get (im->call_id);
+
+    /* A container to include the tab label and the close button */
+    GtkWidget *tab_Container = gtk_hbox_new (FALSE, 3);
+    GtkWidget *tab_Label;
+    im->tab = tab_Container;
+
+    if (im_widget_call)
+        tab_Label = gtk_label_new (get_peer_information (im_widget_call));
+    else if (im_widget_conf)
+        tab_Label = gtk_label_new ("Conferencing");
+    else
+        tab_Label = gtk_label_new ("");
+
+    GtkWidget *tab_CloseButton = gtk_button_new ();
+
+    /* Pack it all */
+    gtk_button_set_relief (GTK_BUTTON (tab_CloseButton), GTK_RELIEF_NONE);
+    gtk_box_pack_start (GTK_BOX (tab_Container), tab_Label, TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (tab_Container), tab_CloseButton, FALSE, FALSE, 0);
+    gtk_container_add (GTK_CONTAINER (tab_CloseButton), gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU));
+
+    /* Connect a signal to the close button on each tab, to be able to close the tabs individually */
+    g_signal_connect (tab_CloseButton, "clicked", G_CALLBACK (close_tab_cb), widget);
+
+    /* Show it */
+    gtk_widget_show_all (im_notebook);
+    gtk_widget_show_all (tab_Container);
+
+    /* Add the page to the notebook */
+    guint tabIndex = gtk_notebook_append_page (GTK_NOTEBOOK (im_notebook), widget, tab_Container);
+
+    /* TODO Switch to the newly opened tab. Still not working */
+    DEBUG ("SWITCH TO NEW TAB: %i", tabIndex);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (im_notebook), -1);
+
+    /* Decide whether or not displaying the tabs of the notebook */
+    im_window_hide_show_tabs ();
+}
+
+void
+im_window_hide_show_tabs ()
+{
+    /* If only one tab is open, do not display the tab, only the content */
+    if (gtk_notebook_get_n_pages (GTK_NOTEBOOK (im_notebook)) == 1) {
+        gtk_notebook_set_show_tabs (GTK_NOTEBOOK (im_notebook), FALSE);
+    } else
+        gtk_notebook_set_show_tabs (GTK_NOTEBOOK (im_notebook), TRUE);
+
+}
+
+void
+im_window_show_tab (GtkWidget *widget)
+{
+    int pageIndex = gtk_notebook_page_num (GTK_NOTEBOOK (im_notebook), widget);
+
+    if (pageIndex != -1)
+        gtk_notebook_set_current_page (GTK_NOTEBOOK (im_notebook), pageIndex);
+}
+
+void
+im_window_remove_tab (GtkWidget *widget)
+{
+    // Remove the widget from the window
+
+    /* We want here to close the current tab */
+    guint index = gtk_notebook_page_num (GTK_NOTEBOOK (im_notebook), GTK_WIDGET (widget));
+    gtk_notebook_remove_page (GTK_NOTEBOOK (im_notebook), index);
+
+    /* Need to do some memory clean up, so that we could re-open an Im widget for this call later. */
+    IMWidget *im = IM_WIDGET (widget);
+    callable_obj_t *call = calllist_get (current_calls, im->call_id);
+    conference_obj_t *conf = conferencelist_get (im->call_id);
+
+    if (call)
+        call->_im_widget = NULL;
+
+    if (conf)
+        conf->_im_widget = NULL;
+
+    /* Decide whether or not displaying the tabs of the notebook */
+    im_window_hide_show_tabs ();
+}
diff --git a/sflphone-client-gnome/src/imwindow.h b/sflphone-client-gnome/src/imwindow.h
new file mode 100644
index 0000000000000000000000000000000000000000..f0d1de2e0774a4da3eb11345c69952cd2084cc40
--- /dev/null
+++ b/sflphone-client-gnome/src/imwindow.h
@@ -0,0 +1,95 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux Inc.
+ *
+ *  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 __IMWINDOW_H__
+#define __IMWINDOW_H__
+
+#include <gtk/gtk.h>
+#include <gtk/gtk.h>
+
+#include <widget/imwidget.h>
+
+#define IM_WINDOW_WIDTH 280
+#define IM_WINDOW_HEIGHT 320
+
+/** @file imwindow.h
+  * @brief The IM window of the client.
+  */
+
+/*! @function
+ * Display the IM window
+ * @return GtkWidget* The IM window
+ */
+GtkWidget *im_window_get();
+
+/*!	@function
+@abstract	Add IM widget to the IM window
+ */
+void im_window_add (GtkWidget *widget);
+
+/*! @function
+ @abstract	Remove IM widget from the IM window
+ */
+void im_window_remove_tab (GtkWidget *widget);
+
+void im_window_show ();
+
+/**
+ * Return wether the instant messaging window have been created or not
+ */
+gboolean im_window_is_active (void);
+
+/**
+ * Return wether the instant messaging window is visible
+ */
+gboolean im_window_is_visible (void);
+
+/**
+ * Return the number of tabs already open in instant messaging window
+ */
+gint im_window_get_nb_tabs (void);
+
+/*! @function
+@abstract	Add a new tab in the notebook. Each tab is an IM Widget
+@param		The IM widget
+*/
+void im_window_add_tab (GtkWidget *widget);
+
+/*! @function
+@abstract	Decide whether or not the notebook should display its tab. Display the tabs only if more than one tab is opened.
+*/
+void im_window_hide_show_tabs ();
+
+/*! @function
+@abstract Select the specified tab as current in instant messaging window
+@param The tab to be set as current
+*/
+void im_window_show_tab (GtkWidget *widget);
+
+#endif
diff --git a/sflphone-client-gnome/src/logger.c b/sflphone-client-gnome/src/logger.c
new file mode 100644
index 0000000000000000000000000000000000000000..66994fe0a34c9ab845ea84a5dfc5edc2a0bf38d2
--- /dev/null
+++ b/sflphone-client-gnome/src/logger.c
@@ -0,0 +1,82 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 <logger.h>
+#include <stdarg.h>
+#include <string.h>
+#include <stdio.h>
+
+int log_level = LOG_INFO;
+
+void internal_log (const int level, const char* format, ...)
+{
+    if (level > log_level)
+        return;
+
+    va_list ap;
+    char *prefix = "<> ";
+    char buffer[4000];
+    char message[4096];
+
+    switch (level) {
+        case LOG_ERR: {
+            prefix = "<error> ";
+            break;
+        }
+        case LOG_WARN: {
+            prefix = "<warning> ";
+            break;
+        }
+        case LOG_INFO: {
+            prefix = "<info> ";
+            break;
+        }
+        case LOG_DEBUG: {
+            prefix = "<debug> ";
+            break;
+        }
+    }
+
+    va_start (ap, format);
+    vsprintf (buffer, format, ap);
+    va_end (ap);
+
+    message[0] = '\0';
+    strncat (message, prefix, strlen (prefix));
+    strncat (message, buffer, strlen (buffer));
+    strncat (message, "\n", 1);
+
+    fprintf (stderr, "%s", message);
+}
+
+void set_log_level (const int level)
+{
+    log_level = level;
+}
diff --git a/sflphone-client-gnome/src/logger.h b/sflphone-client-gnome/src/logger.h
new file mode 100644
index 0000000000000000000000000000000000000000..0d2ac5c5e435320b242fa33f28e4f27dbdbc20c4
--- /dev/null
+++ b/sflphone-client-gnome/src/logger.h
@@ -0,0 +1,47 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Julien Bonjean <julien.bonjean@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 __LOGGER_H
+#define __LOGGER_H
+
+void internal_log (const int level, const char* format, ...);
+void set_log_level (const int level);
+
+#define LOG_ERR 1
+#define LOG_WARN 2
+#define LOG_INFO 3
+#define LOG_DEBUG 4
+
+#define ERROR(...)     internal_log(LOG_ERR, __VA_ARGS__)
+#define WARN(...)      internal_log(LOG_WARN, __VA_ARGS__)
+#define INFO(...)      internal_log(LOG_INFO, __VA_ARGS__)
+#define DEBUG(...)     internal_log(LOG_DEBUG, __VA_ARGS__)
+
+#endif
diff --git a/sflphone-client-gnome/src/main.c b/sflphone-client-gnome/src/main.c
index 6ab9d8c8329698041ee2e5b4144393ec7ae11d87..b3b6b2ebb150358b78c2e8184bfd0ec63eb3a978 100644
--- a/sflphone-client-gnome/src/main.c
+++ b/sflphone-client-gnome/src/main.c
@@ -31,129 +31,100 @@
 #include <actions.h>
 #include <calllist.h>
 #include <config.h>
+#include <logger.h>
 #include <dbus/dbus.h>
 #include <mainwindow.h>
 #include <statusicon.h>
 #include <libgnome/libgnome.h>
 #include <libgnomeui/libgnomeui.h>
+#include <eel-gconf-extensions.h>
 
 #include <gtk/gtk.h>
 #include <stdlib.h>
 
 #include "shortcuts.h"
 
-/**
- * Stop logging engine
- */
-static void
-shutdown_logging ()
-{
-  if (log4c_fini ())
-    {
-      ERROR("log4c_fini() failed");
-    }
-}
-
-/**
- * Start loggin engine
- */
-static void
-startup_logging ()
-{
-  log4c_init ();
-  if (log4c_load (DATA_DIR "/log4crc") == -1)
-    g_warning ("Cannot load log4j configuration file : %s", DATA_DIR "/log4crc");
-
-  log4c_sfl_gtk_category = log4c_category_get ("org.sflphone.gtk");
-}
-
 int
 main (int argc, char *argv[])
 {
-  // Handle logging
-  int i;
-  gboolean statusicon = FALSE;
-
-  // Startup logging
-  startup_logging ();
-
-  // Check arguments if debug mode is activated
-  for (i = 0; i < argc; i++)
-    if (g_strcmp0 (argv[i], "--debug") == 0)
-      log4c_category_set_priority (log4c_sfl_gtk_category, LOG4C_PRIORITY_DEBUG);
-
-  // Start GTK application
-
-  gtk_init (&argc, &argv);
-
-  g_print ("%s %s\n", PACKAGE, VERSION);
-  g_print ("\nCopyright (c) 2005 2006 2007 2008 2009 2010 Savoir-faire Linux Inc.\n\n");
-  g_print ("This is free software.  You may redistribute copies of it under the terms of\n" \
-           "the GNU General Public License Version 3 <http://www.gnu.org/licenses/gpl.html>.\n" \
-           "There is NO WARRANTY, to the extent permitted by law.\n\n" \
-           "Additional permission under GNU GPL version 3 section 7:\n\n" \
-           "If you modify this program, or any covered work, by linking or\n" \
-           "combining it with the OpenSSL project's OpenSSL library (or a\n" \
-           "modified version of that library), containing parts covered by the\n" \
-           "terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.\n" \
-           "grants you additional permission to convey the resulting work.\n" \
-           "Corresponding Source for a non-source form of such a combination\n" \
-           "shall include the source code for the parts of OpenSSL used as well\n" \
-           "as that of the covered work.\n\n");
-
-  DEBUG("Logging Started");
-
-  srand (time (NULL));
-
-  // Internationalization
-  bindtextdomain ("sflphone-client-gnome", LOCALEDIR);
-  textdomain ("sflphone-client-gnome");
-
-  // Initialises the GNOME libraries
-  gnome_program_init ("sflphone", VERSION, LIBGNOMEUI_MODULE, argc, argv,
-      GNOME_PROGRAM_STANDARD_PROPERTIES,
-						NULL) ;
-
-  if (sflphone_init ())
-    {
-
-      if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0)
-          statusicon = TRUE;
-
-      if (statusicon)                   show_status_icon ();
-      create_main_window ();
-
-      if (statusicon && dbus_is_start_hidden ())
-        {
-          gtk_widget_hide (GTK_WIDGET( get_main_window() ));
-          set_minimized (TRUE);
+    // Handle logging
+    int i;
+
+    // Check arguments if debug mode is activated
+    for (i = 0; i < argc; i++)
+        if (g_strcmp0 (argv[i], "--debug") == 0)
+            set_log_level (LOG_DEBUG);
+
+    // GtkWidget *window;
+    g_thread_init (NULL);
+    gdk_threads_init ();
+    gdk_threads_enter ();
+
+    // Start GTK application
+    gtk_init (&argc, &argv);
+
+    g_print ("%s %s\n", PACKAGE, VERSION);
+    g_print ("\nCopyright (c) 2005 2006 2007 2008 2009 2010 Savoir-faire Linux Inc.\n\n");
+    g_print ("This is free software.  You may redistribute copies of it under the terms of\n" \
+             "the GNU General Public License Version 3 <http://www.gnu.org/licenses/gpl.html>.\n" \
+             "There is NO WARRANTY, to the extent permitted by law.\n\n" \
+             "Additional permission under GNU GPL version 3 section 7:\n\n" \
+             "If you modify this program, or any covered work, by linking or\n" \
+             "combining it with the OpenSSL project's OpenSSL library (or a\n" \
+             "modified version of that library), containing parts covered by the\n" \
+             "terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.\n" \
+             "grants you additional permission to convey the resulting work.\n" \
+             "Corresponding Source for a non-source form of such a combination\n" \
+             "shall include the source code for the parts of OpenSSL used as well\n" \
+             "as that of the covered work.\n\n");
+
+    srand (time (NULL));
+
+    // Internationalization
+    bindtextdomain ("sflphone-client-gnome", LOCALEDIR);
+    textdomain ("sflphone-client-gnome");
+
+    // Initialises the GNOME libraries
+    gnome_program_init ("sflphone", VERSION, LIBGNOMEUI_MODULE, argc, argv,
+                        GNOME_PROGRAM_STANDARD_PROPERTIES,
+                        NULL) ;
+
+    if (sflphone_init ()) {
+
+        if (eel_gconf_get_integer (SHOW_STATUSICON))
+            show_status_icon ();
+
+        create_main_window ();
+
+        if (eel_gconf_get_integer (SHOW_STATUSICON) && eel_gconf_get_integer (START_HIDDEN)) {
+            gtk_widget_hide (GTK_WIDGET (get_main_window()));
+            set_minimized (TRUE);
         }
 
 
-      status_bar_display_account ();
+        status_bar_display_account ();
 
-      // Load the history
-      sflphone_fill_history ();
+        // Load the history
+        sflphone_fill_history ();
 
-      // Get the active calls and conferences at startup
-      sflphone_fill_call_list ();
-      sflphone_fill_conference_list ();
+        // Get the active calls and conferences at startup
+        sflphone_fill_call_list ();
+        sflphone_fill_conference_list ();
 
-      // Update the GUI
-      update_actions ();
+        // Update the GUI
+        update_actions ();
 
-      shortcuts_initialize_bindings();
+        shortcuts_initialize_bindings();
 
-      /* start the main loop */
-      gtk_main ();
+        /* start the main loop */
+        gtk_main ();
     }
 
-  // Cleanly stop logging
-  shutdown_logging ();
+    gdk_threads_leave ();
 
-  shortcuts_destroy_bindings();
+    shortcuts_destroy_bindings();
 
-  return 0;
+    return 0;
 }
 
 /** @mainpage SFLphone GTK+ Client Documentation
diff --git a/sflphone-client-gnome/src/mainwindow.c b/sflphone-client-gnome/src/mainwindow.c
index 81fbe51c51167aeb705227f8fba2af19a6e6e3da..2494a6875182537e03406a496da0b2a7c04846b1 100644
--- a/sflphone-client-gnome/src/mainwindow.c
+++ b/sflphone-client-gnome/src/mainwindow.c
@@ -42,8 +42,10 @@
 #include <assistant.h>
 #include <widget/gtkscrollbook.h>
 #include <widget/minidialog.h>
+#include "uimanager.h"
 
 #include <gtk/gtk.h>
+#include <eel-gconf-extensions.h>
 
 /** Local variables */
 GtkUIManager *ui_manager = NULL;
@@ -58,22 +60,29 @@ GtkWidget * statusBar = NULL;
 GtkWidget * filterEntry = NULL;
 PidginScrollBook *embedded_error_notebook;
 
-static gboolean
-window_configure_cb (GtkWidget *win, GdkEventConfigure *event)
+gchar *status_current_message = NULL;
+// pthread_mutex_t statusbar_message_mutex;
+GMutex *gmutex;
+
+/**
+ * Handle main window resizing
+ */
+static gboolean window_configure_cb (GtkWidget *win UNUSED, GdkEventConfigure *event)
 {
 
-  int pos_x, pos_y;
+    int pos_x, pos_y;
 
-  dbus_set_window_width ((guint) event->width);
-  dbus_set_window_height ((guint) event->height);
+    eel_gconf_set_integer (CONF_MAIN_WINDOW_WIDTH, event->width);
+    eel_gconf_set_integer (CONF_MAIN_WINDOW_HEIGHT, event->height);
 
-  gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y);
-  dbus_set_window_position_x ((guint) pos_x);
-  dbus_set_window_position_y ((guint) pos_y);
+    gtk_window_get_position (GTK_WINDOW (window), &pos_x, &pos_y);
+    eel_gconf_set_integer (CONF_MAIN_WINDOW_POSITION_X, pos_x);
+    eel_gconf_set_integer (CONF_MAIN_WINDOW_POSITION_Y, pos_y);
 
-  return FALSE;
+    return FALSE;
 }
 
+
 /**
  * Minimize the main window.
  */
@@ -81,13 +90,15 @@ static gboolean
 on_delete (GtkWidget * widget UNUSED, gpointer data UNUSED)
 {
 
-    if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) {
-        gtk_widget_hide (GTK_WIDGET( get_main_window() ));
+    if (eel_gconf_get_integer (SHOW_STATUSICON)) {
+        gtk_widget_hide (GTK_WIDGET (get_main_window()));
         set_minimized (TRUE);
+    } else {
+        sflphone_quit ();
     }
-    else {
-      sflphone_quit ();
-    }
+
+    // pthread_mutex_destroy (&statusbar_message_mutex);
+    g_mutex_free (gmutex);
     return TRUE;
 }
 
@@ -95,29 +106,26 @@ on_delete (GtkWidget * widget UNUSED, gpointer data UNUSED)
 gboolean
 main_window_ask_quit ()
 {
-  guint count = calllist_get_size (current_calls);
-  GtkWidget * dialog;
-  gint response;
-  gchar * question;
-
-  if (count == 1)
-    {
-      question = _("There is one call in progress.");
-    }
-  else
-    {
-      question = _("There are calls in progress.");
+    guint count = calllist_get_size (current_calls);
+    GtkWidget * dialog;
+    gint response;
+    gchar * question;
+
+    if (count == 1) {
+        question = _ ("There is one call in progress.");
+    } else {
+        question = _ ("There are calls in progress.");
     }
 
-  dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window),
-      GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s\n%s",
-      question, _("Do you still want to quit?") );
+    dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (window),
+             GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s\n%s",
+             question, _ ("Do you still want to quit?"));
 
-  response = gtk_dialog_run (GTK_DIALOG (dialog));
+    response = gtk_dialog_run (GTK_DIALOG (dialog));
 
-  gtk_widget_destroy (dialog);
+    gtk_widget_destroy (dialog);
 
-  return (response == GTK_RESPONSE_NO)? FALSE : TRUE ;
+    return (response == GTK_RESPONSE_NO) ? FALSE : TRUE ;
 
 
 }
@@ -125,393 +133,437 @@ main_window_ask_quit ()
 static gboolean
 on_key_released (GtkWidget *widget, GdkEventKey *event, gpointer user_data UNUSED)
 {
-  DEBUG("On key released from Main Window : %s", gtk_widget_get_name(widget));
-
-  if (focus_is_on_searchbar == FALSE)
-    {
-      // If a modifier key is pressed, it's a shortcut, pass along
-      if (event->state & GDK_CONTROL_MASK || event->state & GDK_MOD1_MASK
-          || event->keyval == 60 || // <
-          event->keyval == 62 || // >
-          event->keyval == 34 || // "
-          event->keyval == 65289 || // tab
-          event->keyval == 65361 || // left arrow
-          event->keyval == 65363 || // right arrow
-          event->keyval >= 65470 || // F-keys
-          event->keyval == 32 // space
-      )
-        return FALSE;
-      else
-        sflphone_keypad (event->keyval, event->string);
+    DEBUG ("On key released from Main Window : %s", gtk_widget_get_name (widget));
+
+    if (focus_is_on_searchbar == FALSE) {
+        // If a modifier key is pressed, it's a shortcut, pass along
+        if (event->state & GDK_CONTROL_MASK || event->state & GDK_MOD1_MASK
+                || event->keyval == 60 || // <
+                event->keyval == 62 || // >
+                event->keyval == 34 || // "
+                event->keyval == 65289 || // tab
+                event->keyval == 65361 || // left arrow
+                event->keyval == 65362 || // up arrow
+                event->keyval == 65363 || // right arrow
+                event->keyval == 65364 || // down arrow
+                event->keyval >= 65470 || // F-keys
+                event->keyval == 32 // space
+           )
+            return FALSE;
+        else
+            sflphone_keypad (event->keyval, event->string);
     }
 
-  return TRUE;
+    return TRUE;
 }
 
 void
 focus_on_mainwindow_out ()
 {
-  //  gtk_widget_grab_focus(GTK_WIDGET(window));
+    //  gtk_widget_grab_focus(GTK_WIDGET(window));
 
 }
 
 void
 focus_on_mainwindow_in ()
 {
-  //  gtk_widget_grab_focus(GTK_WIDGET(window));
+    //  gtk_widget_grab_focus(GTK_WIDGET(window));
 }
 
 void
 create_main_window ()
 {
-  GtkWidget *widget;
-  gchar *path;
-  GError *error = NULL;
-  gboolean ret;
-  const char *window_title = "SFLphone VoIP Client";
-  int width, height, position_x, position_y;
-
-  focus_is_on_calltree = FALSE;
-  focus_is_on_searchbar = FALSE;
-
-  // Get configuration stored
-  width = dbus_get_window_width ();
-  height = dbus_get_window_height ();
-  position_x = dbus_get_window_position_x ();
-  position_y = dbus_get_window_position_y ();
-
-  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-  gtk_container_set_border_width (GTK_CONTAINER (window), 0);
-  gtk_window_set_title (GTK_WINDOW (window), window_title);
-  gtk_window_set_default_size (GTK_WINDOW (window), width, height);
-  gtk_window_set_default_icon_from_file (LOGO, NULL);
-  gtk_window_set_position (GTK_WINDOW( window ), GTK_WIN_POS_MOUSE);
-
-  /* Connect the destroy event of the window with our on_destroy function
-   * When the window is about to be destroyed we get a notificaiton and
-   * stop the main GTK loop
-   */
-  g_signal_connect (G_OBJECT (window), "delete-event",
-      G_CALLBACK (on_delete), NULL);
-
-  g_signal_connect (G_OBJECT (window), "key-release-event",
-      G_CALLBACK (on_key_released), NULL);
-
-  g_signal_connect_after (G_OBJECT (window), "focus-in-event",
-      G_CALLBACK (focus_on_mainwindow_in), NULL);
-
-  g_signal_connect_after (G_OBJECT (window), "focus-out-event",
-      G_CALLBACK (focus_on_mainwindow_out), NULL);
-
-  g_signal_connect_object (G_OBJECT (window), "configure-event",
-      G_CALLBACK (window_configure_cb), NULL, 0);
-
-  gtk_widget_set_name (window, "mainwindow");
-
-  ret = uimanager_new (&ui_manager);
-  if (!ret)
-    {
-      ERROR ("Could not load xml GUI\n");
-      g_error_free (error);
-      exit (1);
+    GtkWidget *widget;
+    GError *error = NULL;
+    gboolean ret;
+    const char *window_title = "SFLphone VoIP Client";
+    int width, height, position_x, position_y;
+
+    focus_is_on_calltree = FALSE;
+    focus_is_on_searchbar = FALSE;
+
+    // Get configuration stored in gconf
+    width =  eel_gconf_get_integer (CONF_MAIN_WINDOW_WIDTH);
+    height =  eel_gconf_get_integer (CONF_MAIN_WINDOW_HEIGHT);
+    position_x =  eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_X);
+    position_y =  eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_Y);
+
+    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_container_set_border_width (GTK_CONTAINER (window), 0);
+    gtk_window_set_title (GTK_WINDOW (window), window_title);
+    gtk_window_set_default_size (GTK_WINDOW (window), width, height);
+    gtk_window_set_default_icon_from_file (LOGO,
+                                           NULL);
+    gtk_window_set_position (GTK_WINDOW (window) , GTK_WIN_POS_MOUSE);
+
+    /* Connect the destroy event of the window with our on_destroy function
+     * When the window is about to be destroyed we get a notificaiton and
+     * stop the main GTK loop
+     */
+    g_signal_connect (G_OBJECT (window), "delete-event",
+                      G_CALLBACK (on_delete), NULL);
+
+    g_signal_connect (G_OBJECT (window), "key-release-event",
+                      G_CALLBACK (on_key_released), NULL);
+
+    g_signal_connect_after (G_OBJECT (window), "focus-in-event",
+                            G_CALLBACK (focus_on_mainwindow_in), NULL);
+
+    g_signal_connect_after (G_OBJECT (window), "focus-out-event",
+                            G_CALLBACK (focus_on_mainwindow_out), NULL);
+
+    g_signal_connect_object (G_OBJECT (window), "configure-event",
+                             G_CALLBACK (window_configure_cb), NULL, 0);
+
+    gtk_widget_set_name (window, "mainwindow");
+
+    ret = uimanager_new (&ui_manager);
+
+    if (!ret) {
+        ERROR ("Could not load xml GUI\n");
+        g_error_free (error);
+        exit (1);
     }
 
-  /* Create an accel group for window's shortcuts */
-  gtk_window_add_accel_group (GTK_WINDOW(window),
-      gtk_ui_manager_get_accel_group (ui_manager));
-
-  vbox = gtk_vbox_new (FALSE /*homogeneous*/, 0 /*spacing*/);
-  subvbox = gtk_vbox_new (FALSE /*homogeneous*/, 5 /*spacing*/);
-
-  create_menus (ui_manager, &widget);
-  gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/,
-      0 /*padding*/);
-
-  create_toolbar_actions (ui_manager, &widget);
-  // Do not override GNOME user settings
-  gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/,
-      0 /*padding*/);
-
-  gtk_box_pack_start (GTK_BOX (vbox), current_calls->tree, TRUE /*expand*/,
-      TRUE /*fill*/, 0 /*padding*/);
-  gtk_box_pack_start (GTK_BOX (vbox), history->tree, TRUE /*expand*/,
-      TRUE /*fill*/, 0 /*padding*/);
-  gtk_box_pack_start (GTK_BOX (vbox), contacts->tree, TRUE /*expand*/,
-      TRUE /*fill*/, 0 /*padding*/);
-
-  gtk_box_pack_start (GTK_BOX (vbox), subvbox, FALSE /*expand*/,
-      FALSE /*fill*/, 0 /*padding*/);
-
-  embedded_error_notebook = PIDGIN_SCROLL_BOOK(pidgin_scroll_book_new());
-  gtk_box_pack_start (GTK_BOX(subvbox), GTK_WIDGET(embedded_error_notebook),
-      FALSE, FALSE, 0);
-
-  if (SHOW_VOLUME)
-    {
-      speaker_control = create_slider ("speaker");
-      gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/,
-          TRUE /*fill*/, 0 /*padding*/);
-      gtk_widget_show_all (speaker_control);
-      mic_control = create_slider ("mic");
-      gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/,
-          TRUE /*fill*/, 0 /*padding*/);
-      gtk_widget_show_all (mic_control);
+    /* Create an accel group for window's shortcuts */
+    gtk_window_add_accel_group (GTK_WINDOW (window),
+                                gtk_ui_manager_get_accel_group (ui_manager));
+
+    vbox = gtk_vbox_new (FALSE /*homogeneous*/, 0 /*spacing*/);
+    subvbox = gtk_vbox_new (FALSE /*homogeneous*/, 5 /*spacing*/);
+
+    create_menus (ui_manager, &widget);
+    gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/,
+                        0 /*padding*/);
+
+    create_toolbar_actions (ui_manager, &widget);
+    // Do not override GNOME user settings
+    gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE /*expand*/, TRUE /*fill*/,
+                        0 /*padding*/);
+
+    gtk_box_pack_start (GTK_BOX (vbox), current_calls->tree, TRUE /*expand*/,
+                        TRUE /*fill*/, 0 /*padding*/);
+    gtk_box_pack_start (GTK_BOX (vbox), history->tree, TRUE /*expand*/,
+                        TRUE /*fill*/, 0 /*padding*/);
+    gtk_box_pack_start (GTK_BOX (vbox), contacts->tree, TRUE /*expand*/,
+                        TRUE /*fill*/, 0 /*padding*/);
+
+    g_signal_connect_object (G_OBJECT (window), "configure-event",
+                             G_CALLBACK (window_configure_cb), NULL, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), subvbox, FALSE /*expand*/,
+                        FALSE /*fill*/, 0 /*padding*/);
+
+    embedded_error_notebook = PIDGIN_SCROLL_BOOK (pidgin_scroll_book_new());
+    gtk_box_pack_start (GTK_BOX (subvbox), GTK_WIDGET (embedded_error_notebook),
+                        FALSE, FALSE, 0);
+
+    if (SHOW_VOLUME) {
+        speaker_control = create_slider ("speaker");
+        gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/,
+                          TRUE /*fill*/, 0 /*padding*/);
+        gtk_widget_show_all (speaker_control);
+        mic_control = create_slider ("mic");
+        gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/,
+                          TRUE /*fill*/, 0 /*padding*/);
+        gtk_widget_show_all (mic_control);
     }
 
-  if (SHOW_DIALPAD)
-    {
-      dialpad = create_dialpad ();
-      gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/,
-          TRUE /*fill*/, 0 /*padding*/);
-      gtk_widget_show_all (dialpad);
+
+    if (eel_gconf_get_boolean (CONF_SHOW_DIALPAD)) {
+        dialpad = create_dialpad();
+        gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
+        gtk_widget_show_all (dialpad);
     }
 
-  /* Status bar */
-  statusBar = gtk_statusbar_new ();
-  gtk_box_pack_start (GTK_BOX (vbox), statusBar, FALSE /*expand*/,
-      TRUE /*fill*/, 0 /*padding*/);
-  gtk_container_add (GTK_CONTAINER (window), vbox);
+    /* Status bar */
+    statusBar = gtk_statusbar_new ();
+    gtk_box_pack_start (GTK_BOX (vbox), statusBar, FALSE /*expand*/,
+                        TRUE /*fill*/, 0 /*padding*/);
+    gtk_container_add (GTK_CONTAINER (window), vbox);
+
+    /* make sure that everything, window and label, are visible */
+    gtk_widget_show_all (window);
 
-  /* make sure that everything, window and label, are visible */
-  gtk_widget_show_all (window);
+    /* dont't show the history */
+    gtk_widget_hide (history->tree);
 
-  /* dont't show the history */
-  gtk_widget_hide (history->tree);
+    /* dont't show the contact list */
+    gtk_widget_hide (contacts->tree);
 
-  /* dont't show the contact list */
-  gtk_widget_hide (contacts->tree);
+    searchbar_init (history);
+    searchbar_init (contacts);
 
-  searchbar_init (history);
-  searchbar_init (contacts);
+    /* don't show waiting layer */
+    gtk_widget_hide (waitingLayer);
 
-  /* don't show waiting layer */
-  gtk_widget_hide (waitingLayer);
+    // pthread_mutex_init (&statusbar_message_mutex, NULL);
+    gmutex = g_mutex_new();
 
-  // Configuration wizard
-  if (account_list_get_size () == 1)
-    {
+    // Configuration wizard
+    if (account_list_get_size () == 1) {
 #if GTK_CHECK_VERSION(2,10,0)
-      build_wizard ();
+        build_wizard ();
 #else
-      GtkWidget * dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW(window),
-          GTK_DIALOG_DESTROY_WITH_PARENT,
-          GTK_MESSAGE_INFO,
-          GTK_BUTTONS_YES_NO,
-          "<b><big>Welcome to SFLphone!</big></b>\n\nThere are no VoIP accounts configured, would you like to edit the preferences now?");
+        GtkWidget * dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (window),
+                             GTK_DIALOG_DESTROY_WITH_PARENT,
+                             GTK_MESSAGE_INFO,
+                             GTK_BUTTONS_YES_NO,
+                             "<b><big>Welcome to SFLphone!</big></b>\n\nThere are no VoIP accounts configured, would you like to edit the preferences now?");
 
-      int response = gtk_dialog_run (GTK_DIALOG(dialog));
+        int response = gtk_dialog_run (GTK_DIALOG (dialog));
 
-      gtk_widget_destroy (GTK_WIDGET(dialog));
+        gtk_widget_destroy (GTK_WIDGET (dialog));
 
-      if (response == GTK_RESPONSE_YES)
-        {
-          show_preferences_dialog();
+        if (response == GTK_RESPONSE_YES) {
+            show_preferences_dialog();
         }
+
 #endif
     }
 
-  // Move the main window
-  gtk_window_move (GTK_WINDOW (window), position_x, position_y);
+    // Restore position according to the configuration stored in gconf
+    gtk_window_move (GTK_WINDOW (window), position_x, position_y);
 }
 
 GtkAccelGroup *
 get_accel_group ()
 {
-  return accelGroup;
+    return accelGroup;
 }
 
 GtkWidget *
 get_main_window ()
 {
-  return window;
+    return window;
 }
 
 void
 main_window_message (GtkMessageType type, gchar * markup)
 {
 
-  GtkWidget * dialog = gtk_message_dialog_new_with_markup (
-      GTK_WINDOW(get_main_window()), GTK_DIALOG_MODAL
-          | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_CLOSE, NULL);
+    GtkWidget * dialog = gtk_message_dialog_new_with_markup (
+                             GTK_WINDOW (get_main_window()), GTK_DIALOG_MODAL
+                             | GTK_DIALOG_DESTROY_WITH_PARENT, type, GTK_BUTTONS_CLOSE, NULL);
 
-  gtk_window_set_title (GTK_WINDOW(dialog), _("SFLphone Error"));
-  gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG(dialog), markup);
+    gtk_window_set_title (GTK_WINDOW (dialog), _ ("SFLphone Error"));
+    gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup);
 
-  gtk_dialog_run (GTK_DIALOG(dialog));
-  gtk_widget_destroy (GTK_WIDGET(dialog));
+    gtk_dialog_run (GTK_DIALOG (dialog));
+    gtk_widget_destroy (GTK_WIDGET (dialog));
 }
 
 void
 main_window_error_message (gchar * markup)
 {
-  main_window_message (GTK_MESSAGE_ERROR, markup);
+    main_window_message (GTK_MESSAGE_ERROR, markup);
 }
 
 void
 main_window_warning_message (gchar * markup)
 {
-  main_window_message (GTK_MESSAGE_WARNING, markup);
+    main_window_message (GTK_MESSAGE_WARNING, markup);
 }
 
 void
 main_window_info_message (gchar * markup)
 {
-  main_window_message (GTK_MESSAGE_INFO, markup);
+    main_window_message (GTK_MESSAGE_INFO, markup);
 }
 
 void
 main_window_dialpad (gboolean state)
 {
 
-  g_print ("main_window_dialpad\n");
+    g_print ("main_window_dialpad\n");
 
-  if (state)
-    {
-      dialpad = create_dialpad ();
-      gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/,
-          TRUE /*fill*/, 0 /*padding*/);
-      gtk_widget_show_all (dialpad);
-    }
-  else
-    {
-      gtk_container_remove (GTK_CONTAINER (subvbox), dialpad);
+    if (state) {
+        dialpad = create_dialpad ();
+        gtk_box_pack_end (GTK_BOX (subvbox), dialpad, FALSE /*expand*/,
+                          TRUE /*fill*/, 0 /*padding*/);
+        gtk_widget_show_all (dialpad);
+    } else {
+        gtk_container_remove (GTK_CONTAINER (subvbox), dialpad);
     }
 }
 
 void
 main_window_volume_controls (gboolean state)
 {
-  if (state)
-    {
-      speaker_control = create_slider ("speaker");
-      gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/,
-          TRUE /*fill*/, 0 /*padding*/);
-      gtk_widget_show_all (speaker_control);
-      mic_control = create_slider ("mic");
-      gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/,
-          TRUE /*fill*/, 0 /*padding*/);
-      gtk_widget_show_all (mic_control);
-    }
-  else
-    {
-      gtk_container_remove (GTK_CONTAINER(subvbox), speaker_control);
-      gtk_container_remove (GTK_CONTAINER(subvbox), mic_control);
+    if (state) {
+        speaker_control = create_slider ("speaker");
+        gtk_box_pack_end (GTK_BOX (subvbox), speaker_control, FALSE /*expand*/,
+                          TRUE /*fill*/, 0 /*padding*/);
+        gtk_widget_show_all (speaker_control);
+        mic_control = create_slider ("mic");
+        gtk_box_pack_end (GTK_BOX (subvbox), mic_control, FALSE /*expand*/,
+                          TRUE /*fill*/, 0 /*padding*/);
+        gtk_widget_show_all (mic_control);
+    } else {
+        gtk_container_remove (GTK_CONTAINER (subvbox), speaker_control);
+        gtk_container_remove (GTK_CONTAINER (subvbox), mic_control);
     }
 }
 
 void
-statusbar_push_message (const gchar * message, guint id)
+statusbar_push_message (const gchar *left_hand_message, const gchar *right_hand_message, guint id)
 {
-  gtk_statusbar_push (GTK_STATUSBAR(statusBar), id, message);
+    // The actual message to be push in the statusbar
+    gchar *message_to_display;
+
+    g_mutex_lock (gmutex);
+    // pthread_mutex_lock (&statusbar_message_mutex);
+
+    g_free (status_current_message);
+    // store the left hand message so that it can be reused in case of clock update
+    status_current_message = g_strdup (left_hand_message);
+
+    // Format message according to right hand member
+    if (right_hand_message)
+        message_to_display = g_strdup_printf ("%s           %s",
+                                              left_hand_message, right_hand_message);
+    else
+        message_to_display = g_strdup (left_hand_message);
+
+    // Push into the statusbar
+    gtk_statusbar_push (GTK_STATUSBAR (statusBar), id, message_to_display);
+
+    g_free (message_to_display);
+
+    // pthread_mutex_unlock (&statusbar_message_mutex);
+    g_mutex_unlock (gmutex);
 }
 
 void
 statusbar_pop_message (guint id)
 {
-  gtk_statusbar_pop (GTK_STATUSBAR(statusBar), id);
+    gtk_statusbar_pop (GTK_STATUSBAR (statusBar), id);
+}
+
+void
+statusbar_update_clock (gchar *msg)
+{
+    gchar *message = NULL;
+
+    if (!msg) {
+        statusbar_pop_message (__MSG_ACCOUNT_DEFAULT);
+        statusbar_push_message (message, NULL, __MSG_ACCOUNT_DEFAULT);
+    }
+
+
+    // pthread_mutex_lock (&statusbar_message_mutex);
+    g_mutex_lock (gmutex);
+    message = g_strdup (status_current_message);
+    // pthread_mutex_unlock (&statusbar_message_mutex);
+    g_mutex_unlock (gmutex);
+
+    if (message) {
+        statusbar_pop_message (__MSG_ACCOUNT_DEFAULT);
+        statusbar_push_message (message, msg, __MSG_ACCOUNT_DEFAULT);
+    }
+
+    g_free (message);
+    message = NULL;
+
 }
 
 static void
 add_error_dialog (GtkWidget *dialog, callable_obj_t * call)
 {
-  gtk_container_add (GTK_CONTAINER(embedded_error_notebook), dialog);
-  call_add_error (call, dialog);
+    gtk_container_add (GTK_CONTAINER (embedded_error_notebook), dialog);
+    call_add_error (call, dialog);
 }
 
 static void
 destroy_error_dialog_cb (GtkObject *dialog, callable_obj_t * call)
 {
-  call_remove_error (call, dialog);
+    call_remove_error (call, dialog);
 }
 
 void
 main_window_zrtp_not_supported (callable_obj_t * c)
 {
-  account_t* account_details = NULL;
-  gchar* warning_enabled = "";
-
-  account_details = account_list_get_by_id (c->_accountID);
-  if (account_details != NULL)
-    {
-      warning_enabled = g_hash_table_lookup (account_details->properties,
-          ACCOUNT_ZRTP_NOT_SUPP_WARNING);
-      DEBUG("Warning Enabled %s", warning_enabled);
-    }
-  else
-    {
-      DEBUG("Account is null callID %s", c->_callID);
-      GHashTable * properties = NULL;
-      sflphone_get_ip2ip_properties (&properties);
-      if (properties != NULL)
-        {
-          warning_enabled = g_hash_table_lookup (properties,
-              ACCOUNT_ZRTP_NOT_SUPP_WARNING);
+    account_t* account_details = NULL;
+    gchar* warning_enabled = "";
+
+    account_details = account_list_get_by_id (c->_accountID);
+
+    if (account_details != NULL) {
+        warning_enabled = g_hash_table_lookup (account_details->properties,
+                                               ACCOUNT_ZRTP_NOT_SUPP_WARNING);
+        DEBUG ("Warning Enabled %s", warning_enabled);
+    } else {
+        DEBUG ("Account is null callID %s", c->_callID);
+        GHashTable * properties = NULL;
+        sflphone_get_ip2ip_properties (&properties);
+
+        if (properties != NULL) {
+            warning_enabled = g_hash_table_lookup (properties,
+                                                   ACCOUNT_ZRTP_NOT_SUPP_WARNING);
         }
     }
 
-  if (g_strcasecmp (warning_enabled, "true") == 0)
-    {
-      PidginMiniDialog *mini_dialog;
-      gchar *desc = g_markup_printf_escaped (
-          _("ZRTP is not supported by peer %s\n"), c->_peer_number);
-      mini_dialog = pidgin_mini_dialog_new (
-          _("Secure Communication Unavailable"), desc,
-          GTK_STOCK_DIALOG_WARNING);
-      pidgin_mini_dialog_add_button (mini_dialog, _("Continue"), NULL, NULL);
-      pidgin_mini_dialog_add_button (mini_dialog, _("Stop Call"),
-          sflphone_hang_up, NULL);
-
-      g_signal_connect_after(mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
-
-      add_error_dialog (GTK_WIDGET(mini_dialog), c);
+    if (g_strcasecmp (warning_enabled, "true") == 0) {
+        PidginMiniDialog *mini_dialog;
+        gchar *desc = g_markup_printf_escaped (
+                          _ ("ZRTP is not supported by peer %s\n"), c->_peer_number);
+        mini_dialog = pidgin_mini_dialog_new (
+                          _ ("Secure Communication Unavailable"), desc,
+                          GTK_STOCK_DIALOG_WARNING);
+        pidgin_mini_dialog_add_button (mini_dialog, _ ("Continue"), NULL, NULL);
+        pidgin_mini_dialog_add_button (mini_dialog, _ ("Stop Call"),
+                                       sflphone_hang_up, NULL);
+
+        g_signal_connect_after (mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
+
+        add_error_dialog (GTK_WIDGET (mini_dialog), c);
     }
 }
 
 void
 main_window_zrtp_negotiation_failed (const gchar* callID, const gchar* reason,
-    const gchar* severity)
+                                     const gchar* severity)
 {
-  gchar* peer_number = "(number unknown)";
-  callable_obj_t * c = NULL;
-  c = calllist_get (current_calls, callID);
-  if (c != NULL)
-    {
-      peer_number = c->_peer_number;
+    gchar* peer_number = "(number unknown)";
+    callable_obj_t * c = NULL;
+    c = calllist_get (current_calls, callID);
+
+    if (c != NULL) {
+        peer_number = c->_peer_number;
     }
 
-  PidginMiniDialog *mini_dialog;
-  gchar
-      *desc =
-          g_markup_printf_escaped (
-              _("A %s error forced the call with %s to fall under unencrypted mode.\nExact reason: %s\n"),
-              severity, peer_number, reason);
-  mini_dialog = pidgin_mini_dialog_new (_("ZRTP negotiation failed"), desc,
-      GTK_STOCK_DIALOG_WARNING);
-  pidgin_mini_dialog_add_button (mini_dialog, _("Continue"), NULL, NULL);
-  pidgin_mini_dialog_add_button (mini_dialog, _("Stop Call"), sflphone_hang_up,
-      NULL);
-
-  g_signal_connect_after(mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
-
-  add_error_dialog (GTK_WIDGET(mini_dialog), c);
+    PidginMiniDialog *mini_dialog;
+    gchar
+    *desc =
+        g_markup_printf_escaped (
+            _ ("A %s error forced the call with %s to fall under unencrypted mode.\nExact reason: %s\n"),
+            severity, peer_number, reason);
+    mini_dialog = pidgin_mini_dialog_new (_ ("ZRTP negotiation failed"), desc,
+                                          GTK_STOCK_DIALOG_WARNING);
+    pidgin_mini_dialog_add_button (mini_dialog, _ ("Continue"), NULL, NULL);
+    pidgin_mini_dialog_add_button (mini_dialog, _ ("Stop Call"), sflphone_hang_up,
+                                   NULL);
+
+    g_signal_connect_after (mini_dialog, "destroy", (GCallback) destroy_error_dialog_cb, c);
+
+    add_error_dialog (GTK_WIDGET (mini_dialog), c);
 }
 
 void
 main_window_confirm_go_clear (callable_obj_t * c)
 {
-  PidginMiniDialog *mini_dialog;
-  gchar
-      *desc =
-          g_markup_printf_escaped (
-              _("%s wants to stop using secure communication. Confirm will resume conversation without SRTP.\n"),
-              c->_peer_number);
-  mini_dialog = pidgin_mini_dialog_new (_("Confirm Go Clear"), desc,
-      GTK_STOCK_STOP);
-  pidgin_mini_dialog_add_button (mini_dialog, _("Confirm"),
-      (PidginMiniDialogCallback) sflphone_set_confirm_go_clear, NULL);
-  pidgin_mini_dialog_add_button (mini_dialog, _("Stop Call"), sflphone_hang_up,
-      NULL);
-
-  add_error_dialog (GTK_WIDGET(mini_dialog), c);
+    PidginMiniDialog *mini_dialog;
+    gchar
+    *desc =
+        g_markup_printf_escaped (
+            _ ("%s wants to stop using secure communication. Confirm will resume conversation without SRTP.\n"),
+            c->_peer_number);
+    mini_dialog = pidgin_mini_dialog_new (_ ("Confirm Go Clear"), desc,
+                                          GTK_STOCK_STOP);
+    pidgin_mini_dialog_add_button (mini_dialog, _ ("Confirm"),
+                                   (PidginMiniDialogCallback) sflphone_set_confirm_go_clear, NULL);
+    pidgin_mini_dialog_add_button (mini_dialog, _ ("Stop Call"), sflphone_hang_up,
+                                   NULL);
+
+    add_error_dialog (GTK_WIDGET (mini_dialog), c);
 }
 
diff --git a/sflphone-client-gnome/src/mainwindow.h b/sflphone-client-gnome/src/mainwindow.h
index db7007cd3c315733710fa8c4ab9c2ebf00ee8887..991bbcb6cc826563159e464537ff93d31bda1714 100644
--- a/sflphone-client-gnome/src/mainwindow.h
+++ b/sflphone-client-gnome/src/mainwindow.h
@@ -54,7 +54,7 @@ GtkWidget *waitingLayer;
 /**
  * Build the main window
  */
-void create_main_window ( );
+void create_main_window ();
 
 /**
  * Display a dialog window
@@ -67,43 +67,51 @@ gboolean main_window_ask_quit() ;
 /**
   * Shows/Hides the dialpad on the mainwindow
   */
-void main_window_dialpad( gboolean state );
+void main_window_dialpad (gboolean state);
 
 /**
   * Shows/Hides the dialpad on the mainwindow
   */
-void main_window_volume_controls( gboolean state );
+void main_window_volume_controls (gboolean state);
 
 /**
  * Display an error message
  * @param markup  The error message
  */
-void main_window_error_message(gchar * markup);
+void main_window_error_message (gchar * markup);
 
 /**
  * Display a warning message
  * @param markup  The warning message
  */
-void main_window_warning_message(gchar * markup);
+void main_window_warning_message (gchar * markup);
 
 /**
  * Display an info message
  * @param markup  The info message
  */
-void main_window_info_message(gchar * markup);
+void main_window_info_message (gchar * markup);
 
 /**
  * Push a message on the statusbar stack
- * @param message The message to display
+ * @param left_hand_message The message to display on the left side
+ * @param right_hand_message The message to display on the right side
  * @param id  The identifier of the message
  */
-void statusbar_push_message( const gchar* message , guint id );
+void statusbar_push_message (const gchar *left_hand_message, const gchar *right_hand_message, guint id);
 
 /**
  * Pop a message from the statusbar stack
  * @param id  The identifier of the message
  */
-void statusbar_pop_message( guint id );
+void statusbar_pop_message (guint id);
+
+/**
+ * Update selected call's clock in statusbar
+ * @param id  The identifier of the message
+ */
+void statusbar_update_clock (gchar *time);
+
 
 //static gboolean
 //on_key_released (GtkWidget *widget, GdkEventKey *event,
@@ -114,10 +122,10 @@ gboolean focus_is_on_calltree;
 
 gboolean focus_is_on_searchbar;
 
-void main_window_zrtp_not_supported(callable_obj_t * c);
+void main_window_zrtp_not_supported (callable_obj_t * c);
 
-void main_window_zrtp_negotiation_failed(const gchar* callID, const gchar* reason, const gchar* severity);
+void main_window_zrtp_negotiation_failed (const gchar* callID, const gchar* reason, const gchar* severity);
 
-void main_window_confirm_go_clear(callable_obj_t * c);
+void main_window_confirm_go_clear (callable_obj_t * c);
 
 #endif
diff --git a/sflphone-client-gnome/src/reqaccount.c b/sflphone-client-gnome/src/reqaccount.c
index dda30b8dc6b2e549bd081e1b3340d291ddc822e0..463298d563168494c6fc9904c155220abcd8bc9e 100644
--- a/sflphone-client-gnome/src/reqaccount.c
+++ b/sflphone-client-gnome/src/reqaccount.c
@@ -50,96 +50,108 @@
 
 #include "reqaccount.h"
 
-int req(char *host, int port, char *req, char *ret) {
-
-  int s;
-  struct sockaddr_in servSockAddr;
-  struct hostent *servHostEnt;
-  long int length=0;
-  long int status=0;
-  int i=0;
-  FILE *f;
-  char buf[1024];
-
-  bzero(&servSockAddr, sizeof(servSockAddr));
-  servHostEnt = gethostbyname(host);
-  if (servHostEnt == NULL) {
-      strcpy(ret, "gethostbyname");
-      return -1;
-  }
-  bcopy((char *)servHostEnt->h_addr, (char *)&servSockAddr.sin_addr, servHostEnt->h_length);
-  servSockAddr.sin_port = htons(port);
-  servSockAddr.sin_family = AF_INET;
-
-  if ((s = socket(AF_INET,SOCK_STREAM,0)) < 0) {
-    strcpy(ret, "socket");
-    return -1;
-  }
-
-  if(connect(s, (const struct sockaddr *) &servSockAddr, (socklen_t) sizeof(servSockAddr)) < 0 ) {
-    perror("foo");
-    strcpy(ret, "connect");
-    return -1;
-  }
-
-  f = fdopen(s, "r+");
-
-  fprintf(f, "%s HTTP/1.1\r\n", req);
-  fprintf(f, "Host: %s\r\n", host);
-  fputs("User-Agent: SFLphone\r\n", f);
-  fputs("\r\n", f);
-
-  while (strncmp(fgets(buf, sizeof(buf), f), "\r\n", 2)) {
-    const char *len_h = "content-length";
-    const char *status_h = "HTTP/1.1";
-    if (strncasecmp(buf, len_h, strlen(len_h)) == 0)
-      length = atoi(buf + strlen(len_h) + 1);
-    if (strncasecmp(buf, status_h, strlen(status_h)) == 0)
-      status = atoi(buf + strlen(status_h) + 1);
-  }
-  for (i = 0; i < length; i++)
-    ret[i] = fgetc(f);
-
-  if (status != 200) {
-    sprintf(ret, "http error: %ld", status);
-    return -1;
-  }
-
-  fclose(f);
-  shutdown(s, 2);
-  close(s);
-  return 0;
+int req (char *host, int port, char *req, char *ret)
+{
+
+    int s;
+    struct sockaddr_in servSockAddr;
+    struct hostent *servHostEnt;
+    long int length=0;
+    long int status=0;
+    int i=0;
+    FILE *f;
+    char buf[1024];
+
+    bzero (&servSockAddr, sizeof (servSockAddr));
+    servHostEnt = gethostbyname (host);
+
+    if (servHostEnt == NULL) {
+        strcpy (ret, "gethostbyname");
+        return -1;
+    }
+
+    bcopy ( (char *) servHostEnt->h_addr, (char *) &servSockAddr.sin_addr, servHostEnt->h_length);
+    servSockAddr.sin_port = htons (port);
+    servSockAddr.sin_family = AF_INET;
+
+    if ( (s = socket (AF_INET,SOCK_STREAM,0)) < 0) {
+        strcpy (ret, "socket");
+        return -1;
+    }
+
+    if (connect (s, (const struct sockaddr *) &servSockAddr, (socklen_t) sizeof (servSockAddr)) < 0) {
+        perror ("foo");
+        strcpy (ret, "connect");
+        return -1;
+    }
+
+    f = fdopen (s, "r+");
+
+    fprintf (f, "%s HTTP/1.1\r\n", req);
+    fprintf (f, "Host: %s\r\n", host);
+    fputs ("User-Agent: SFLphone\r\n", f);
+    fputs ("\r\n", f);
+
+    while (strncmp (fgets (buf, sizeof (buf), f), "\r\n", 2)) {
+        const char *len_h = "content-length";
+        const char *status_h = "HTTP/1.1";
+
+        if (strncasecmp (buf, len_h, strlen (len_h)) == 0)
+            length = atoi (buf + strlen (len_h) + 1);
+
+        if (strncasecmp (buf, status_h, strlen (status_h)) == 0)
+            status = atoi (buf + strlen (status_h) + 1);
+    }
+
+    for (i = 0; i < length; i++)
+        ret[i] = fgetc (f);
+
+    if (status != 200) {
+        sprintf (ret, "http error: %ld", status);
+        return -1;
+    }
+
+    fclose (f);
+    shutdown (s, 2);
+    close (s);
+    return 0;
 }
 
-rest_account get_rest_account(char *host,char *email) {
-  char ret[4096];
-  rest_account ra;
-  bzero(ret, sizeof(ret));
-	DEBUG("HOST: %s", host);
-	strcpy(ret,"GET /rest/accountcreator?email=");
-	strcat(ret, email);
-  if (req(host, 80, ret, ret) != -1) {
-    strcpy(ra.user, strtok(ret, "\n"));
-    strcpy(ra.passwd, strtok(NULL, "\n"));\
-    ra.success = 1;
-  } else {
-    ra.success = 0;
-    strcpy(ra.reason, ret);
-  }
-  puts(ret);
-  return ra;
+rest_account get_rest_account (char *host,char *email)
+{
+    char ret[4096];
+    rest_account ra;
+    bzero (ret, sizeof (ret));
+    DEBUG ("HOST: %s", host);
+    strcpy (ret,"GET /rest/accountcreator?email=");
+    strcat (ret, email);
+
+    if (req (host, 80, ret, ret) != -1) {
+        strcpy (ra.user, strtok (ret, "\n"));
+        strcpy (ra.passwd, strtok (NULL, "\n"));
+        \
+        ra.success = 1;
+    } else {
+        ra.success = 0;
+        strcpy (ra.reason, ret);
+    }
+
+    puts (ret);
+    return ra;
 }
 
 
 #ifdef BUILD_EXAMPLE
 
-int main (void) {
-  rest_account acc = get_rest_account("sip.sflphone.org","email@email.com");
-  if (acc.success) {
-    puts(acc.user);
-    puts(acc.passwd);
-  } else {
-    ERROR("FAILED: %s", acc.reason);
-  }
+int main (void)
+{
+    rest_account acc = get_rest_account ("sip.sflphone.org","email@email.com");
+
+    if (acc.success) {
+        puts (acc.user);
+        puts (acc.passwd);
+    } else {
+        ERROR ("FAILED: %s", acc.reason);
+    }
 }
 #endif
diff --git a/sflphone-client-gnome/src/reqaccount.h b/sflphone-client-gnome/src/reqaccount.h
index 3a17154a4b07c7885f268dc56bf88604e39f4c0c..4bd9366eabb1d886ddd3025218ef464eda4fb363 100644
--- a/sflphone-client-gnome/src/reqaccount.h
+++ b/sflphone-client-gnome/src/reqaccount.h
@@ -29,10 +29,10 @@
  */
 
 typedef struct {
-  char success;
-  char reason[200];
-  char user[200];
-  char passwd[200];
+    char success;
+    char reason[200];
+    char user[200];
+    char passwd[200];
 } rest_account;
 
-rest_account get_rest_account(char *host, char *email);
+rest_account get_rest_account (char *host, char *email);
diff --git a/sflphone-client-gnome/src/sflnotify.c b/sflphone-client-gnome/src/sflnotify.c
index 5ac960e0035e7a08de0eddfed880998281e3b8b7..b90586c280f17d010a8448c7c296057b120cfce8 100644
--- a/sflphone-client-gnome/src/sflnotify.c
+++ b/sflphone-client-gnome/src/sflnotify.c
@@ -28,7 +28,8 @@
  *  as that of the covered work.
  */
 
-#include <sflnotify.h>
+#include "sflnotify.h"
+#include <eel-gconf-extensions.h>
 
 GnomeNotification *_gnome_notification;
 
@@ -36,7 +37,7 @@ void create_new_gnome_notification (gchar *title, gchar *body, NotifyUrgency urg
 {
     GnomeNotification *_notif;
 
-    if( dbus_get_notify()){
+    if (eel_gconf_get_integer (NOTIFY_ALL)) {
 
         _notif = g_new0 (GnomeNotification, 1);
 
@@ -47,11 +48,11 @@ void create_new_gnome_notification (gchar *title, gchar *body, NotifyUrgency urg
         //_notif->icon = gdk_pixbuf_new_from_file_at_size (LOGO, 120, 120, NULL);
         _notif->icon = gdk_pixbuf_new_from_file (LOGO_SMALL, NULL);
 #if GTK_CHECK_VERSION(2,10,0)
-        notify_notification_attach_to_status_icon (_notif->notification , get_status_icon() );
+        notify_notification_attach_to_status_icon (_notif->notification , get_status_icon());
 #endif
 
         notify_notification_set_urgency (_notif->notification, urgency);
-        
+
         if (_notif->icon != NULL)
             notify_notification_set_icon_from_pixbuf (_notif->notification, _notif->icon);
         else
@@ -60,113 +61,129 @@ void create_new_gnome_notification (gchar *title, gchar *body, NotifyUrgency urg
         notify_notification_set_timeout (_notif->notification, timeout);
 
         if (!notify_notification_show (_notif->notification, NULL)) {
-            ERROR("notify(), failed to send notification");
+            ERROR ("notify(), failed to send notification");
         }
 
         *notif = _notif;
     }
 }
 
+void
+notify_incoming_message (const gchar *callID, const gchar *msg)
+{
+
+    gchar* title;
+
+    title = g_markup_printf_escaped (_ ("%s says:"), callID);
+
+    create_new_gnome_notification (title,
+                                   msg,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   (g_strcasecmp (__TIMEOUT_MODE, "default") == 0) ? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
+                                   &_gnome_notification);
+}
+
+
 
-    void
+void
 notify_incoming_call (callable_obj_t* c)
 {
 
-        gchar* callerid;
-        gchar* title;
+    gchar* callerid;
+    gchar* title;
 
-        if (g_strcasecmp (c->_accountID,"") == 0) {
-            title = g_markup_printf_escaped ("IP-to-IP call");
-        }
-        else {
-            title = g_markup_printf_escaped(_("%s account : %s") ,
-                    (gchar*)g_hash_table_lookup(account_list_get_by_id(c->_accountID)->properties , ACCOUNT_TYPE) ,
-                    (gchar*)g_hash_table_lookup(account_list_get_by_id(c->_accountID)->properties , ACCOUNT_ALIAS) ) ;
-        }
-        callerid = g_markup_printf_escaped(_("<i>From</i> %s"), c->_peer_number);
+    if (g_strcasecmp (c->_accountID,"") == 0) {
+        title = g_markup_printf_escaped ("IP-to-IP call");
+    } else {
+        title = g_markup_printf_escaped (_ ("%s account : %s") ,
+                                         (gchar*) g_hash_table_lookup (account_list_get_by_id (c->_accountID)->properties , ACCOUNT_TYPE) ,
+                                         (gchar*) g_hash_table_lookup (account_list_get_by_id (c->_accountID)->properties , ACCOUNT_ALIAS)) ;
+    }
 
-        create_new_gnome_notification (title,
-                                        callerid, 
-                                        NOTIFY_URGENCY_CRITICAL, 
-                                        (g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
-                                        &_gnome_notification); 
+    callerid = g_markup_printf_escaped (_ ("<i>From</i> %s"), c->_peer_number);
+
+    create_new_gnome_notification (title,
+                                   callerid,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   (g_strcasecmp (__TIMEOUT_MODE, "default") == 0) ? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
+                                   &_gnome_notification);
 }
 
-    void
+void
 notify_voice_mails (guint count, account_t* acc)
 {
-        // the account is different from NULL
-        gchar* title;
-        gchar* body;
-
-        title = g_markup_printf_escaped(_("%s account : %s") ,
-                (gchar*)g_hash_table_lookup(acc->properties , ACCOUNT_TYPE) ,
-                (gchar*) g_hash_table_lookup(acc->properties , ACCOUNT_ALIAS) ) ;
-        body = g_markup_printf_escaped(n_("%d voice mail", "%d voice mails", count), count);
-
-        create_new_gnome_notification (title,
-                                        body, 
-                                        NOTIFY_URGENCY_LOW, 
-                                        NOTIFY_EXPIRES_DEFAULT,
-                                        &_gnome_notification); 
+    // the account is different from NULL
+    gchar* title;
+    gchar* body;
+
+    title = g_markup_printf_escaped (_ ("%s account : %s") ,
+                                     (gchar*) g_hash_table_lookup (acc->properties , ACCOUNT_TYPE) ,
+                                     (gchar*) g_hash_table_lookup (acc->properties , ACCOUNT_ALIAS)) ;
+    body = g_markup_printf_escaped (n_ ("%d voice mail", "%d voice mails", count), count);
+
+    create_new_gnome_notification (title,
+                                   body,
+                                   NOTIFY_URGENCY_LOW,
+                                   NOTIFY_EXPIRES_DEFAULT,
+                                   &_gnome_notification);
 }
 
-    void
+void
 notify_current_account (account_t* acc)
 {
 
-        // the account is different from NULL
-        gchar* title;
-        gchar* body="";
+    // the account is different from NULL
+    gchar* title;
+    gchar* body="";
 
-        body = g_markup_printf_escaped(_("Calling with %s account <i>%s</i>") ,
-                (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_TYPE) ,
-                (gchar*)g_hash_table_lookup( acc->properties , ACCOUNT_ALIAS));
+    body = g_markup_printf_escaped (_ ("Calling with %s account <i>%s</i>") ,
+                                    (gchar*) g_hash_table_lookup (acc->properties , ACCOUNT_TYPE) ,
+                                    (gchar*) g_hash_table_lookup (acc->properties , ACCOUNT_ALIAS));
 
-        title = g_markup_printf_escaped(_("Current account"));
+    title = g_markup_printf_escaped (_ ("Current account"));
 
-        create_new_gnome_notification (title,
-                                        body, 
-                                        NOTIFY_URGENCY_NORMAL, 
-                                        NOTIFY_EXPIRES_DEFAULT,
-                                        &_gnome_notification); 
+    create_new_gnome_notification (title,
+                                   body,
+                                   NOTIFY_URGENCY_NORMAL,
+                                   NOTIFY_EXPIRES_DEFAULT,
+                                   &_gnome_notification);
 }
 
-    void
+void
 notify_no_accounts ()
 {
     gchar* title;
     gchar* body="";
 
-    body = g_markup_printf_escaped(_("You have no accounts set up"));
-    title = g_markup_printf_escaped(_("Error"));
+    body = g_markup_printf_escaped (_ ("You have no accounts set up"));
+    title = g_markup_printf_escaped (_ ("Error"));
 
     create_new_gnome_notification (title,
-                                    body, 
-                                    NOTIFY_URGENCY_CRITICAL, 
-                                    NOTIFY_EXPIRES_DEFAULT,
-                                    &_gnome_notification); 
+                                   body,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   NOTIFY_EXPIRES_DEFAULT,
+                                   &_gnome_notification);
 }
 
 
-    void
+void
 notify_no_registered_accounts ()
 {
     gchar* title;
     gchar* body="";
 
-    body = g_markup_printf_escaped(_("You have no registered accounts"));
-    title = g_markup_printf_escaped(_("Error"));
+    body = g_markup_printf_escaped (_ ("You have no registered accounts"));
+    title = g_markup_printf_escaped (_ ("Error"));
 
     create_new_gnome_notification (title,
-                                    body, 
-                                    NOTIFY_URGENCY_CRITICAL, 
-                                    NOTIFY_EXPIRES_DEFAULT,
-                                    &_gnome_notification); 
+                                   body,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   NOTIFY_EXPIRES_DEFAULT,
+                                   &_gnome_notification);
 }
 
-    void
-stop_notification( void )
+void
+stop_notification (void)
 {
     /*
     if( _gnome_notification != NULL )
@@ -186,67 +203,67 @@ stop_notification( void )
  */
 void free_notification (GnomeNotification *g)
 {
-  g_free(g->title);
-  g_free(g->body);
-  g_free(g);
+    g_free (g->title);
+    g_free (g->body);
+    g_free (g);
 }
 
-    void
+void
 notify_secure_on (callable_obj_t* c)
 {
 
-        gchar* callerid;
-        gchar* title;
-        title = g_markup_printf_escaped ("Secure mode on.");
-        callerid = g_markup_printf_escaped(_("<i>With:</i> %s \nusing %s") , c->_peer_number, c->_srtp_cipher);
-        create_new_gnome_notification (title,
-                                        callerid, 
-                                        NOTIFY_URGENCY_CRITICAL, 
-                                        (g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
-                                        &_gnome_notification); 
+    gchar* callerid;
+    gchar* title;
+    title = g_markup_printf_escaped ("Secure mode on.");
+    callerid = g_markup_printf_escaped (_ ("<i>With:</i> %s \nusing %s") , c->_peer_number, c->_srtp_cipher);
+    create_new_gnome_notification (title,
+                                   callerid,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   (g_strcasecmp (__TIMEOUT_MODE, "default") == 0) ? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
+                                   &_gnome_notification);
 }
 
-    void
+void
 notify_zrtp_not_supported (callable_obj_t* c)
 {
 
-        gchar* callerid;
-        gchar* title;
-        title = g_markup_printf_escaped ("ZRTP Error.");
-        callerid = g_markup_printf_escaped(_("%s does not support ZRTP.") , c->_peer_number);
-        create_new_gnome_notification (title,
-                                        callerid, 
-                                        NOTIFY_URGENCY_CRITICAL, 
-                                        (g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
-                                        &_gnome_notification); 
+    gchar* callerid;
+    gchar* title;
+    title = g_markup_printf_escaped ("ZRTP Error.");
+    callerid = g_markup_printf_escaped (_ ("%s does not support ZRTP.") , c->_peer_number);
+    create_new_gnome_notification (title,
+                                   callerid,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   (g_strcasecmp (__TIMEOUT_MODE, "default") == 0) ? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
+                                   &_gnome_notification);
 }
 
-    void
+void
 notify_zrtp_negotiation_failed (callable_obj_t* c)
 {
 
-        gchar* callerid;
-        gchar* title;
-        title = g_markup_printf_escaped ("ZRTP Error.");
-        callerid = g_markup_printf_escaped(_("ZRTP negotiation failed with %s") , c->_peer_number);
-        create_new_gnome_notification (title,
-                                        callerid, 
-                                        NOTIFY_URGENCY_CRITICAL, 
-                                        (g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
-                                        &_gnome_notification); 
+    gchar* callerid;
+    gchar* title;
+    title = g_markup_printf_escaped ("ZRTP Error.");
+    callerid = g_markup_printf_escaped (_ ("ZRTP negotiation failed with %s") , c->_peer_number);
+    create_new_gnome_notification (title,
+                                   callerid,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   (g_strcasecmp (__TIMEOUT_MODE, "default") == 0) ? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
+                                   &_gnome_notification);
 }
 
-    void
+void
 notify_secure_off (callable_obj_t* c)
 {
 
-        gchar* callerid;
-        gchar* title;
-        title = g_markup_printf_escaped ("Secure mode is off.");
-        callerid = g_markup_printf_escaped(_("<i>With:</i> %s") , c->_peer_number);
-        create_new_gnome_notification (title,
-                                        callerid, 
-                                        NOTIFY_URGENCY_CRITICAL, 
-                                        (g_strcasecmp(__TIMEOUT_MODE, "default") == 0 )? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
-                                        &_gnome_notification); 
+    gchar* callerid;
+    gchar* title;
+    title = g_markup_printf_escaped ("Secure mode is off.");
+    callerid = g_markup_printf_escaped (_ ("<i>With:</i> %s") , c->_peer_number);
+    create_new_gnome_notification (title,
+                                   callerid,
+                                   NOTIFY_URGENCY_CRITICAL,
+                                   (g_strcasecmp (__TIMEOUT_MODE, "default") == 0) ? __TIMEOUT_TIME : NOTIFY_EXPIRES_NEVER,
+                                   &_gnome_notification);
 }
diff --git a/sflphone-client-gnome/src/sflnotify.h b/sflphone-client-gnome/src/sflnotify.h
index 71cfc916658ef94a196d8c9f5d2d2e2a9181e732..41fd603b50f14cb8f4a9e2b319dfbe7e96d83637 100644
--- a/sflphone-client-gnome/src/sflnotify.h
+++ b/sflphone-client-gnome/src/sflnotify.h
@@ -60,7 +60,14 @@ void free_notification (GnomeNotification *g);
  * A dialog box is attached to the status icon
  * @param c The incoming call
  */
-void notify_incoming_call( callable_obj_t* c);
+void notify_incoming_call (callable_obj_t* c);
+
+/**
+ * Notify an incoming text message
+ * A dialog box is attached to the status icon
+ * @param c The incoming message
+ */
+void notify_incoming_message (const gchar *callID, const gchar *msg);
 
 /**
  * Notify voice mails count
@@ -68,28 +75,28 @@ void notify_incoming_call( callable_obj_t* c);
  * @param count The number of voice mails
  * @param acc The account that received the notification
  */
-void notify_voice_mails( guint count , account_t* acc );
+void notify_voice_mails (guint count , account_t* acc);
 
 /**
  * Notify the current account used to make calls with
  * @param acc The current account
  */
-void notify_current_account( account_t* acc );
+void notify_current_account (account_t* acc);
 
 /**
  * Notify that no accounts have been setup
  */
-void notify_no_accounts( );
+void notify_no_accounts();
 
 /**
  * Notify that there is no registered account
  */
-void notify_no_registered_accounts(  );
+void notify_no_registered_accounts();
 
 /**
  * Stop and close the current notification if an action occured before the timeout
  */
-void stop_notification( void );
+void stop_notification (void);
 
 /**
  * Notify that the RTP session is secured
@@ -104,7 +111,7 @@ void notify_secure_off (callable_obj_t* c);
 /**
  * Notify that the ZRTP negotiation failed
  */
- 
+
 void notify_zrtp_negotiation_failed (callable_obj_t* c);
 
 /**
diff --git a/sflphone-client-gnome/src/sflphone_const.h b/sflphone-client-gnome/src/sflphone_const.h
index 5a63a80bac069cfe6404b37824e3e8f21d96f91b..fb74d0219806158340bacdb909a109cbe5a9525f 100644
--- a/sflphone-client-gnome/src/sflphone_const.h
+++ b/sflphone-client-gnome/src/sflphone_const.h
@@ -32,8 +32,9 @@
 #define __SFLPHONE_CONST_H
 
 #include <libintl.h>
+#include "logger.h"
 #include "dbus.h"
-#include "log4c.h"
+#include <glib/gi18n.h>
 
 /* @file sflphone_const.h
  * @brief Contains the global variables for the client code
@@ -49,9 +50,9 @@
 #define CONTACTS            "contacts"
 
 /** Locale */
-#define _(STRING)             gettext( STRING )
-#define N_(STRING)			  (STRING)
-#define c_(COMMENT,STRING)    gettext(STRING) 
+//#define _(STRING)             gettext( STRING )
+//#define N_(STRING)			  (STRING)
+#define c_(COMMENT,STRING)    gettext(STRING)
 #define n_(SING,PLUR,COUNT)   ngettext(SING,PLUR,COUNT)
 
 #define IP2IP	"IP2IP"
@@ -87,9 +88,12 @@
 #define ACCOUNT_ZRTP_NOT_SUPP_WARNING      "ZRTP.notSuppWarning"
 #define ACCOUNT_ZRTP_HELLO_HASH            "ZRTP.helloHashEnable"
 #define ACCOUNT_DISPLAY_SAS_ONCE           "ZRTP.displaySasOnce"
-#define KEY_EXCHANGE_NONE                  "0"
-#define ZRTP                               "1"
-#define SDES                               "2"
+#define KEY_EXCHANGE_NONE                  "none"
+#define ZRTP                               "zrtp"
+#define SDES                               "sdes"
+
+#define CONFIG_RINGTONE_PATH                "Account.ringtonePath"
+#define CONFIG_RINGTONE_ENABLED             "Account.ringtoneEnabled"
 
 #define TLS_LISTENER_PORT                   "TLS.listenerPort"
 #define TLS_ENABLE                          "TLS.enable"
@@ -103,7 +107,7 @@
 #define TLS_SERVER_NAME                     "TLS.serverName"
 #define TLS_VERIFY_SERVER                   "TLS.verifyServer"
 #define TLS_VERIFY_CLIENT                   "TLS.verifyClient"
-#define TLS_REQUIRE_CLIENT_CERTIFICATE      "TLS.requireClientCertificate"  
+#define TLS_REQUIRE_CLIENT_CERTIFICATE      "TLS.requireClientCertificate"
 #define TLS_NEGOTIATION_TIMEOUT_SEC         "TLS.negotiationTimeoutSec"
 #define TLS_NEGOTIATION_TIMEOUT_MSEC        "TLS.negotiationTimemoutMsec"
 
@@ -114,13 +118,14 @@
 #define PUBLISHED_ADDRESS                   "Account.publishedAddress"
 
 #define REGISTRATION_STATUS                 "Status"
-#define REGISTRATION_STATE_CODE             "Registration.code" 
+#define REGISTRATION_STATE_CODE             "Registration.code"
 #define REGISTRATION_STATE_DESCRIPTION      "Registration.description"
 
-/**
- * Global logger
- */
-log4c_category_t* log4c_sfl_gtk_category;
+#define SHORTCUT_PICKUP                     "pickUp"
+#define SHORTCUT_HANGUP                     "hangUp"
+#define SHORTCUT_POPUP                      "popupWindow"
+#define SHORTCUT_TOGGLEPICKUPHANGUP         "togglePickupHangup"
+#define SHORTCUT_TOGGLEHOLD                 "toggleHold"
 
 /** Error while opening capture device */
 #define ALSA_CAPTURE_DEVICE	      0x0001
@@ -136,19 +141,17 @@ log4c_category_t* log4c_sfl_gtk_category;
 /** Tells if the main window is reduced to the system tray or not */
 #define MINIMIZED	      TRUE
 /** Behaviour of the main window on incoming calls */
-#define __POPUP_WINDOW  ( dbus_popup_mode() )
-/** Show/Hide the dialpad */
-#define SHOW_DIALPAD	( dbus_get_dialpad() )
+#define __POPUP_WINDOW  (eel_gconf_get_integer (POPUP_ON_CALL))
 /** Show/Hide the alsa configuration panel */
 #define SHOW_ALSA_CONF  ( dbus_get_audio_manager() == ALSA )
 /** Show/Hide the volume controls */
-#define SHOW_VOLUME	(dbus_get_volume_controls() && SHOW_ALSA_CONF)
+#define SHOW_VOLUME	(eel_gconf_get_integer (SHOW_VOLUME_CONTROLS) && SHOW_ALSA_CONF)
 
 /** Audio Managers */
 #define ALSA	      0
 #define PULSEAUDIO    1
 
- /** DTMF type */
+/** DTMF type */
 #define OVERRTP "overrtp"
 #define SIPINFO "sipinfo"
 
@@ -172,11 +175,25 @@ log4c_category_t* log4c_sfl_gtk_category;
 #define __TIMEOUT_TIME      18000       // 30 secondes
 
 /**
- * Macros for logging
+ * Gconf
  */
-#define DEBUG(...) log4c_category_log(log4c_sfl_gtk_category, LOG4C_PRIORITY_DEBUG, __VA_ARGS__);
-#define WARN(...) log4c_category_log(log4c_sfl_gtk_category, LOG4C_PRIORITY_WARN, __VA_ARGS__);
-#define ERROR(...) log4c_category_log(log4c_sfl_gtk_category, LOG4C_PRIORITY_ERROR, __VA_ARGS__);
-#define FATAL(...) log4c_category_log(log4c_sfl_gtk_category, LOG4C_PRIORITY_FATAL, __VA_ARGS__);
+#define CONF_PREFIX		"/apps/sflphone-client-gnome"
+#define CONF_MAIN_WINDOW_WIDTH		CONF_PREFIX "/state/window_width"
+#define CONF_MAIN_WINDOW_HEIGHT		CONF_PREFIX "/state/window_height"
+#define CONF_MAIN_WINDOW_POSITION_X		CONF_PREFIX "/state/window_position_x"
+#define CONF_MAIN_WINDOW_POSITION_Y		CONF_PREFIX "/state/window_position_y"
+#define CONF_IM_WINDOW_WIDTH		CONF_PREFIX "/state/im_width"
+#define CONF_IM_WINDOW_HEIGHT		CONF_PREFIX "/state/im_height"
+#define CONF_IM_WINDOW_POSITION_X		CONF_PREFIX "/state/im_position_x"
+#define CONF_IM_WINDOW_POSITION_Y		CONF_PREFIX "/state/im_position_y"
+/** Show/Hide the dialpad */
+#define CONF_SHOW_DIALPAD			CONF_PREFIX "/state/dialpad"
+#define SHOW_VOLUME_CONTROLS		CONF_PREFIX "/state/volume_controls"
+#define SHOW_STATUSICON				CONF_PREFIX "/state/statusicon"
+#define NOTIFY_ALL					CONF_PREFIX "/state/notify_all"
+#define START_HIDDEN				CONF_PREFIX "/state/start_hidden"
+#define POPUP_ON_CALL				CONF_PREFIX "/state/popup"
+#define HISTORY_ENABLED				CONF_PREFIX "/state/history"
+#define INSTANT_MESSAGING_ENABLED               CONF_PREFIX "/state/instant_messaging"
 
 #endif
diff --git a/sflphone-client-gnome/src/shortcuts.c b/sflphone-client-gnome/src/shortcuts.c
index 4ecb7cd47bde7bb23f2f793d999e7f2eea9a04c2..217254687d89b2e8ff9052f0f756fedc2cfe2bda 100644
--- a/sflphone-client-gnome/src/shortcuts.c
+++ b/sflphone-client-gnome/src/shortcuts.c
@@ -29,19 +29,28 @@
  */
 
 #include <string.h>
-#include <stdlib.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <X11/Xlib.h>
 #include <X11/XF86keysym.h>
 #include <gdk/gdkx.h>
 #include <dbus/dbus-glib.h>
+#include <stdlib.h>
+#include <stdio.h>
 
 #include "shortcuts.h"
 #include "mainwindow.h"
 #include "callable_obj.h"
 #include "sflphone_const.h"
 #include "dbus.h"
+#include "actions.h"
+
+static void
+ungrab_key (guint key, GdkModifierType mask, const GdkWindow *root);
+
+static void
+grab_key (guint key, GdkModifierType mask, const GdkWindow *root);
+
 
 // used to store accelerator config
 static Accelerator* accelerators_list;
@@ -49,95 +58,136 @@ static Accelerator* accelerators_list;
 // used to store config (for dbus calls)
 static GHashTable* shortcutsMap;
 
+
 /*
- * Callbacks
+ * XLib functions
  */
 
-static void
-toggle_pick_up_hang_up_callback ()
+/*
+ * filter used when an event is catched
+ */
+static GdkFilterReturn
+filter_keys (const GdkXEvent *xevent, const GdkEvent *event UNUSED, gpointer data UNUSED)
 {
-  callable_obj_t * selectedCall = calltab_get_selected_call (active_calltree);
-  conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+    XEvent *xev = NULL;
+    XKeyEvent *key = NULL;
+    GdkModifierType keystate = 0;
+    int i = 0;
 
-  g_print("toggle_pick_up_hang_up_callback\n");
+    xev = (XEvent *) xevent;
 
-  if (selectedCall)
-    {
-      switch (selectedCall->_state)
-        {
-      case CALL_STATE_INCOMING:
-      case CALL_STATE_TRANSFERT:
-        sflphone_pick_up ();
-        break;
-      case CALL_STATE_DIALING:
-      case CALL_STATE_HOLD:
-      case CALL_STATE_CURRENT:
-      case CALL_STATE_RECORD:
-      case CALL_STATE_RINGING:
-        sflphone_hang_up ();
-        break;
-        }
+    if (xev->type != KeyPress) {
+        return GDK_FILTER_CONTINUE;
     }
-  else if (selectedConf)
-    {
-      dbus_hang_up_conference (selectedConf);
+
+    key = (XKeyEvent *) xevent;
+    keystate = key->state & ~ (Mod2Mask | Mod5Mask | LockMask);
+
+    // try to find corresponding action
+    while (accelerators_list[i].action != NULL) {
+        if (accelerators_list[i].key == key->keycode && accelerators_list[i].mask
+                == keystate) {
+            DEBUG ("catched key for action: %s", accelerators_list[i].action,
+                   accelerators_list[i].key);
+
+            // call associated callback function
+            accelerators_list[i].callback ();
+
+            return GDK_FILTER_REMOVE;
+        }
+
+        i++;
     }
-  else
-    sflphone_pick_up ();
+
+    DEBUG ("Should not be reached");
+
+    return GDK_FILTER_CONTINUE;
+}
+
+/*
+ * Callbacks
+ */
+static void
+toggle_pick_up_hang_up_callback ()
+{
+    callable_obj_t * selectedCall = calltab_get_selected_call (active_calltree);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+    g_print ("toggle_pick_up_hang_up_callback\n");
+
+    if (selectedCall) {
+        switch (selectedCall->_state) {
+            case CALL_STATE_INCOMING:
+            case CALL_STATE_TRANSFERT:
+                sflphone_pick_up ();
+                break;
+            case CALL_STATE_DIALING:
+            case CALL_STATE_HOLD:
+            case CALL_STATE_CURRENT:
+            case CALL_STATE_RECORD:
+            case CALL_STATE_RINGING:
+                sflphone_hang_up ();
+                break;
+            default:
+                break;
+        }
+    } else if (selectedConf) {
+        dbus_hang_up_conference (selectedConf);
+    } else
+        sflphone_pick_up ();
 }
 
 static void
 pick_up_callback ()
 {
-  sflphone_pick_up ();
+    sflphone_pick_up ();
 }
 
 static void
 hang_up_callback ()
 {
-  sflphone_hang_up ();
+    sflphone_hang_up ();
 }
 
 static void
 toggle_hold_callback ()
 {
-  callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
-  conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
-
-  if (selectedCall)
-    {
-      switch (selectedCall->_state)
-        {
-      case CALL_STATE_CURRENT:
-      case CALL_STATE_RECORD:
-        g_print("on hold\n");
-        sflphone_on_hold();
-        break;
-      case CALL_STATE_HOLD:
-        g_print("off hold\n");
-        sflphone_off_hold();
-        break;
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+    if (selectedCall) {
+        switch (selectedCall->_state) {
+            case CALL_STATE_CURRENT:
+            case CALL_STATE_RECORD:
+                g_print ("on hold\n");
+                sflphone_on_hold ();
+                break;
+            case CALL_STATE_HOLD:
+                g_print ("off hold\n");
+                sflphone_off_hold ();
+                break;
+            default:
+                break;
         }
-    }
-  else if (selectedConf)
-    dbus_hold_conference (selectedConf);
-  else
-    ERROR("Should not happen");
+    } else if (selectedConf)
+        dbus_hold_conference (selectedConf);
+    else
+        ERROR ("Should not happen");
 }
 
 static void
 popup_window_callback ()
 {
-  gtk_widget_hide (GTK_WIDGET(get_main_window()));
-  gtk_widget_show (GTK_WIDGET(get_main_window()));
-  gtk_window_move (GTK_WINDOW (get_main_window ()),
-      dbus_get_window_position_x (), dbus_get_window_position_y ());
+    gtk_widget_hide (GTK_WIDGET (get_main_window()));
+    gtk_widget_show (GTK_WIDGET (get_main_window()));
+    //gtk_window_move (GTK_WINDOW (get_main_window ()),
+    //    dbus_get_window_position_x (), dbus_get_window_position_y ());
 }
 
 static void
 default_callback ()
 {
-  ERROR("Missing shortcut callback");
+    ERROR ("Missing shortcut callback");
 }
 
 /*
@@ -146,22 +196,22 @@ default_callback ()
 static void*
 get_action_callback (const gchar* action)
 {
-  if (strcmp (action, "pick_up") == 0)
-    return pick_up_callback;
+    if (strcmp (action, SHORTCUT_PICKUP) == 0)
+        return pick_up_callback;
 
-  if (strcmp (action, "hang_up") == 0)
-    return hang_up_callback;
+    if (strcmp (action, SHORTCUT_HANGUP) == 0)
+        return hang_up_callback;
 
-  if (strcmp (action, "popup_window") == 0)
-    return popup_window_callback;
+    if (strcmp (action, SHORTCUT_POPUP) == 0)
+        return popup_window_callback;
 
-  if (strcmp (action, "toggle_pick_up_hang_up") == 0)
-    return toggle_pick_up_hang_up_callback;
+    if (strcmp (action, SHORTCUT_TOGGLEPICKUPHANGUP) == 0)
+        return toggle_pick_up_hang_up_callback;
 
-  if (strcmp (action, "toggle_hold") == 0)
-    return toggle_hold_callback;
+    if (strcmp (action, SHORTCUT_TOGGLEHOLD) == 0)
+        return toggle_hold_callback;
 
-  return default_callback;
+    return default_callback;
 }
 
 /*
@@ -174,32 +224,33 @@ get_action_callback (const gchar* action)
 static void
 remove_bindings ()
 {
-  GdkDisplay *display;
-  GdkScreen *screen;
-  GdkWindow *root;
-
-  display = gdk_display_get_default ();
-
-  int i = 0;
-  int j = 0;
-  while (accelerators_list[i].action != NULL)
-    {
-      if (accelerators_list[i].value != 0)
-        {
-          for (j = 0; j < gdk_display_get_n_screens (display); j++)
-            {
-              screen = gdk_display_get_screen (display, j);
-
-              if (screen != NULL)
-                {
-                  root = gdk_screen_get_root_window (screen);
-                  ungrab_key (accelerators_list[i].value, root);
-                  gdk_window_remove_filter (root, filter_keys, NULL);
+    GdkDisplay *display = NULL;
+    GdkScreen *screen = NULL;
+    GdkWindow *root = NULL;
+    int i, j = 0;
+
+    display = gdk_display_get_default ();
+
+    for (i = 0; i < gdk_display_get_n_screens (display); i++) {
+        screen = gdk_display_get_screen (display, i);
+
+        if (screen != NULL) {
+            j = 0;
+            root = gdk_screen_get_root_window (screen);
+
+            // remove filter
+            gdk_window_remove_filter (root, (GdkFilterFunc) filter_keys, NULL);
+
+            // unbind shortcuts
+            while (accelerators_list[j].action != NULL) {
+                if (accelerators_list[j].key != 0) {
+                    ungrab_key (accelerators_list[j].key,
+                                accelerators_list[j].mask, root);
                 }
+
+                j++;
             }
         }
-
-      i++;
     }
 }
 
@@ -209,33 +260,33 @@ remove_bindings ()
 static void
 create_bindings ()
 {
-  GdkDisplay *display;
-  GdkScreen *screen;
-  GdkWindow *root;
-
-  display = gdk_display_get_default ();
-
-  int i = 0;
-  int j = 0;
-  while (accelerators_list[i].action != NULL)
-    {
-      if (accelerators_list[i].value != 0)
-        {
-          // updated GDK bindings
-          for (j = 0; j < gdk_display_get_n_screens (display); j++)
-            {
-              screen = gdk_display_get_screen (display, j);
-
-              if (screen != NULL)
-                {
-                  root = gdk_screen_get_root_window (screen);
-                  grab_key (accelerators_list[i].value, root);
-                  gdk_window_add_filter (root, filter_keys, NULL);
+    GdkDisplay *display;
+    GdkScreen *screen;
+    GdkWindow *root;
+    int i, j = 0;
+
+    display = gdk_display_get_default ();
+
+    for (i = 0; i < gdk_display_get_n_screens (display); i++) {
+        screen = gdk_display_get_screen (display, i);
+
+        if (screen != NULL) {
+            j = 0;
+            root = gdk_screen_get_root_window (screen);
+
+            // add filter
+            gdk_window_add_filter (root, (GdkFilterFunc) filter_keys, NULL);
+
+            // bind shortcuts
+            while (accelerators_list[j].action != NULL) {
+                if (accelerators_list[j].key != 0) {
+                    grab_key (accelerators_list[j].key,
+                              accelerators_list[j].mask, root);
                 }
+
+                j++;
             }
         }
-
-      i++;
     }
 }
 
@@ -243,30 +294,29 @@ create_bindings ()
  * Initialize a specific binding
  */
 static void
-initialize_binding (const gchar* action, const guint code)
+initialize_binding (const gchar* action, guint key, GdkModifierType mask)
 {
-  //initialize_shortcuts_keys();
-  int index = 0;
-  while (accelerators_list[index].action != NULL)
-    {
-      if (strcmp (action, accelerators_list[index].action) == 0)
-        {
-          break;
+    int i = 0;
+
+    while (accelerators_list[i].action != NULL) {
+        if (strcmp (action, accelerators_list[i].action) == 0) {
+            break;
         }
-      index++;
+
+        i++;
     }
 
-  if (accelerators_list[index].action == NULL)
-    {
-      ERROR("Should not happen: cannot find corresponding action");
-      return;
+    if (accelerators_list[i].action == NULL) {
+        ERROR ("Should not happen: cannot find corresponding action");
+        return;
     }
 
-  // update config value
-  accelerators_list[index].value = code;
+    // update config value
+    accelerators_list[i].key = key;
+    accelerators_list[i].mask = mask;
 
-  // update bindings
-  create_bindings ();
+    // update bindings
+    create_bindings ();
 }
 
 /*
@@ -275,60 +325,74 @@ initialize_binding (const gchar* action, const guint code)
 static void
 initialize_accelerators_list ()
 {
-  GList* shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
+    GList* shortcutsKeysElement, *shortcutsKeys = NULL;
+    int i = 0;
 
-  accelerators_list = (Accelerator*) malloc (
-      (g_list_length (shortcutsKeys) + 1) * sizeof(Accelerator));
+    shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
 
-  GList* shortcutsKeysElement;
-  int index = 0;
-  for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
-      = shortcutsKeysElement->next)
-    {
-      gchar* action = shortcutsKeysElement->data;
+    accelerators_list = (Accelerator*) malloc (
+                            (g_list_length (shortcutsKeys) + 1) * sizeof (Accelerator));
 
-      accelerators_list[index].action = g_strdup (action);
-      accelerators_list[index].callback = get_action_callback (action);
-      accelerators_list[index].mask = 0;
-      accelerators_list[index].value = 0;
+    for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
+            = shortcutsKeysElement->next) {
+        gchar* action = shortcutsKeysElement->data;
 
-      index++;
+        accelerators_list[i].action = g_strdup (action);
+        accelerators_list[i].callback = get_action_callback (action);
+        accelerators_list[i].mask = 0;
+        accelerators_list[i].key = 0;
+
+        i++;
     }
 
-  // last element must be null
-  accelerators_list[index].action = 0;
-  accelerators_list[index].callback = 0;
-  accelerators_list[index].mask = 0;
-  accelerators_list[index].value = 0;
+    // last element must be null
+    accelerators_list[i].action = 0;
+    accelerators_list[i].callback = 0;
+    accelerators_list[i].mask = 0;
+    accelerators_list[i].key = 0;
 }
 
 static void
-update_bindings_data (const guint index, const guint code)
+update_shortcuts_map (const gchar* action, guint key, GdkModifierType mask)
 {
-  // we need to be sure this code is not already affected
-  // to another action
-  int i = 0;
-  while (accelerators_list[i].action != NULL)
-    {
-      if (accelerators_list[i].value == code)
-        {
-          // disable old binding
-          accelerators_list[i].value = 0;
-
-          // update config table
-          g_hash_table_replace (shortcutsMap, g_strdup (
-              accelerators_list[i].action), GINT_TO_POINTER (0));
+    gchar buffer[7];
+
+    // Bindings: MASKxCODE
+    sprintf (buffer, "%dx%d", mask, key);
+
+    g_hash_table_replace (shortcutsMap, g_strdup (action), g_strdup (buffer));
+}
+
+static void
+update_bindings_data (guint index, guint key, GdkModifierType mask)
+{
+    int i = 0;
+
+    // we need to be sure this code is not already affected
+    // to another action
+    while (accelerators_list[i].action != NULL) {
+        if (accelerators_list[i].key == key && accelerators_list[i].mask == mask
+                && accelerators_list[i].key != 0) {
+            DEBUG ("Existing mapping found %d+%d", mask, key);
+
+            // disable old binding
+            accelerators_list[i].key = 0;
+            accelerators_list[i].mask = 0;
+
+            // update config table
+            update_shortcuts_map (accelerators_list[i].action, 0, 0);
         }
-      i++;
+
+        i++;
     }
 
-  // store new value
-  accelerators_list[index].value = code;
+    // store new key
+    accelerators_list[index].key = key;
+    accelerators_list[index].mask = mask;
 
-  // update value in hashtable (used for dbus calls)
-  g_hash_table_replace (shortcutsMap,
-      g_strdup (accelerators_list[index].action), GINT_TO_POINTER (
-          accelerators_list[index].value));
+    // update value in hashtable (used for dbus calls)
+    update_shortcuts_map (accelerators_list[index].action,
+                          accelerators_list[index].key, accelerators_list[index].mask);
 }
 
 /*
@@ -339,19 +403,19 @@ update_bindings_data (const guint index, const guint code)
  * Update current bindings with a new value
  */
 void
-shortcuts_update_bindings (const guint index, const guint code)
+shortcuts_update_bindings (guint index, guint key, GdkModifierType mask)
 {
-  // first remove all existing bindings
-  remove_bindings ();
+    // first remove all existing bindings
+    remove_bindings ();
 
-  // update data
-  update_bindings_data (index, code);
+    // update data
+    update_bindings_data (index, key, mask);
 
-  // recreate all bindings
-  create_bindings ();
+    // recreate all bindings
+    create_bindings ();
 
-  // update configuration
-  dbus_set_shortcuts (shortcutsMap);
+    // update configuration
+    dbus_set_shortcuts (shortcutsMap);
 }
 
 /*
@@ -360,22 +424,42 @@ shortcuts_update_bindings (const guint index, const guint code)
 void
 shortcuts_initialize_bindings ()
 {
-  // get shortcuts stored in config through dbus
-  shortcutsMap = dbus_get_shortcuts ();
-
-  // initialize list of keys
-  initialize_accelerators_list ();
-
-  // iterate through keys to initialize bindings
-  GList* shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
-  GList* shortcutsKeysElement;
-  for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
-      = shortcutsKeysElement->next)
-    {
-      gchar* key = shortcutsKeysElement->data;
-      int shortcut = (size_t) g_hash_table_lookup (shortcutsMap, key);
-      if (shortcut != 0)
-        initialize_binding (key, shortcut);
+    GList* shortcutsKeys, *shortcutsKeysElement = NULL;
+    gchar* action, *maskAndKey, *token1, *token2 = NULL;
+    guint mask, key = 0;
+
+    DEBUG ("Shortcuts: Initialize bindings");
+
+    // get shortcuts stored in config through dbus
+    shortcutsMap = dbus_get_shortcuts ();
+
+    // initialize list of keys
+    initialize_accelerators_list ();
+
+    // iterate through keys to initialize bindings
+    shortcutsKeys = g_hash_table_get_keys (shortcutsMap);
+
+    for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement
+            = shortcutsKeysElement->next) {
+        action = shortcutsKeysElement->data;
+        maskAndKey = g_strdup (g_hash_table_lookup (shortcutsMap, action));
+
+        token1 = strtok (maskAndKey, "x");
+        token2 = strtok (NULL, "x");
+
+        mask = 0;
+        key = 0;
+
+        // Value not setted
+        if (token1 && token2) {
+            DEBUG ("Ahortcuts: token1 %s, token2 %s", token1, token2);
+
+            mask = atoi (token1);
+            key = atoi (token2);
+        }
+
+        if (key != 0)
+            initialize_binding (action, key, mask);
     }
 }
 
@@ -385,92 +469,53 @@ shortcuts_initialize_bindings ()
 void
 shortcuts_destroy_bindings ()
 {
-  // remove bindings
-  remove_bindings ();
-
-  // free pointers
-  int index = 0;
-  while (accelerators_list[index].action != NULL)
-    {
-      g_free (accelerators_list[index].action);
-      index++;
+    int i = 0;
+
+    // remove bindings
+    remove_bindings ();
+
+    // free pointers
+    while (accelerators_list[i].action != NULL) {
+        g_free (accelerators_list[i].action);
+        i++;
     }
-  free (accelerators_list);
+
+    free (accelerators_list);
 }
 
 Accelerator*
 shortcuts_get_list ()
 {
-  return accelerators_list;
-}
-
-/*
- * XLib functions
- */
-
-/*
- * filter used when an event is catched
- */
-static GdkFilterReturn
-filter_keys (GdkXEvent *xevent, GdkEvent *event, gpointer data)
-{
-  XEvent *xev;
-  XKeyEvent *key;
-
-  xev = (XEvent *) xevent;
-  if (xev->type != KeyPress)
-    {
-      return GDK_FILTER_CONTINUE;
-    }
-
-  key = (XKeyEvent *) xevent;
-
-  // try to find corresponding action
-  int i = 0;
-  while (accelerators_list[i].action != NULL)
-    {
-      if (accelerators_list[i].value == key->keycode)
-        {
-          DEBUG("catched key for action: %s (%d)", accelerators_list[i].action,
-              accelerators_list[i].value);
-
-          // call associated callback function
-          accelerators_list[i].callback ();
-
-          return GDK_FILTER_REMOVE;
-        }
-      i++;
-    }
-
-  DEBUG("Should not be reached :(\n");
-  return GDK_FILTER_CONTINUE;
+    return accelerators_list;
 }
 
 /*
  * Remove key "catcher" from GDK layer
  */
 static void
-ungrab_key (int key_code, GdkWindow *root)
+ungrab_key (guint key, GdkModifierType mask, const GdkWindow *root)
 {
-  gdk_error_trap_push ();
-
-  XUngrabKey (GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask,
-      GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | LockMask,
-      GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, Mod5Mask | LockMask,
-      GDK_WINDOW_XID(root));
-  XUngrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
-      GDK_WINDOW_XID(root));
-
-  gdk_flush ();
-  if (gdk_error_trap_pop ())
-    {
-      ERROR("Error ungrabbing key");
+    DEBUG ("Ungrabbing key %d+%d", mask, key);
+
+    gdk_error_trap_push ();
+
+    XUngrabKey (GDK_DISPLAY (), key, mask, GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, Mod2Mask | mask, GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, Mod5Mask | mask, GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, LockMask | mask, GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, Mod2Mask | Mod5Mask | mask,
+                GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, Mod2Mask | LockMask | mask,
+                GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, Mod5Mask | LockMask | mask,
+                GDK_WINDOW_XID ( (GdkDrawable*) root));
+    XUngrabKey (GDK_DISPLAY (), key, Mod2Mask | Mod5Mask | LockMask | mask,
+                GDK_WINDOW_XID ( (GdkDrawable*) root));
+
+    gdk_flush ();
+
+    if (gdk_error_trap_pop ()) {
+        DEBUG ("Error ungrabbing key %d+%d", mask, key);
     }
 }
 
@@ -478,31 +523,32 @@ ungrab_key (int key_code, GdkWindow *root)
  * Add key "catcher" to GDK layer
  */
 static void
-grab_key (int key_code, GdkWindow *root)
+grab_key (guint key, GdkModifierType mask, const GdkWindow *root)
 {
-
-  gdk_error_trap_push ();
-
-  XGrabKey (GDK_DISPLAY(), key_code, 0, GDK_WINDOW_XID(root), True,
-      GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask, GDK_WINDOW_XID(root), True,
-      GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, Mod5Mask, GDK_WINDOW_XID(root), True,
-      GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, LockMask, GDK_WINDOW_XID(root), True,
-      GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask, GDK_WINDOW_XID(root),
-      True, GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | LockMask, GDK_WINDOW_XID(root),
-      True, GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, Mod5Mask | LockMask, GDK_WINDOW_XID(root),
-      True, GrabModeAsync, GrabModeAsync);
-  XGrabKey (GDK_DISPLAY(), key_code, Mod2Mask | Mod5Mask | LockMask,
-      GDK_WINDOW_XID(root), True, GrabModeAsync, GrabModeAsync);
-
-  gdk_flush ();
-  if (gdk_error_trap_pop ())
-    {
-      ERROR("Error grabbing key");
+    gdk_error_trap_push ();
+
+    DEBUG ("Grabbing key %d+%d", mask, key);
+
+    XGrabKey (GDK_DISPLAY(), key, mask, GDK_WINDOW_XID ( (GdkDrawable*) root), True,
+              GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, Mod2Mask | mask, GDK_WINDOW_XID ( (GdkDrawable*) root), True,
+              GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, Mod5Mask | mask, GDK_WINDOW_XID ( (GdkDrawable*) root), True,
+              GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, LockMask | mask, GDK_WINDOW_XID ( (GdkDrawable*) root), True,
+              GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, Mod2Mask | Mod5Mask | mask,
+              GDK_WINDOW_XID ( (GdkDrawable*) root), True, GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, Mod2Mask | LockMask | mask,
+              GDK_WINDOW_XID ( (GdkDrawable*) root), True, GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, Mod5Mask | LockMask | mask,
+              GDK_WINDOW_XID ( (GdkDrawable*) root), True, GrabModeAsync, GrabModeAsync);
+    XGrabKey (GDK_DISPLAY (), key, Mod2Mask | Mod5Mask | LockMask | mask,
+              GDK_WINDOW_XID ( (GdkDrawable*) root), True, GrabModeAsync, GrabModeAsync);
+
+    gdk_flush ();
+
+    if (gdk_error_trap_pop ()) {
+        DEBUG ("Error grabbing key %d+%d", mask, key);
     }
 }
diff --git a/sflphone-client-gnome/src/shortcuts.h b/sflphone-client-gnome/src/shortcuts.h
index 47f8fec550dc48ba8ad083994b1e17c78f9810a2..20703ce8ada5cb94e6d15c3afd709528cf9119f7 100644
--- a/sflphone-client-gnome/src/shortcuts.h
+++ b/sflphone-client-gnome/src/shortcuts.h
@@ -31,63 +31,19 @@
 #ifndef SHORTCUTS_H_
 #define SHORTCUTS_H_
 
-typedef struct
-{
-  gchar *action;
-  GdkModifierType mask;
-  guint value;
-  void
-  (*callback) (void);
+typedef struct {
+    gchar *action;
+    guint key;
+    GdkModifierType mask;
+    void
+    (*callback) (void);
 } Accelerator;
 
-static void
-grab_key (int key_code, GdkWindow *root);
-
-static void
-ungrab_key (int key_code, GdkWindow *root);
-
-static GdkFilterReturn
-filter_keys (GdkXEvent *xevent, GdkEvent *event, gpointer data);
-
-static void
-remove_bindings ();
-
-static void
-create_bindings ();
-
-static void
-pick_up_callback ();
-
-static void
-hang_up_callback ();
-
-static void
-toggle_pick_up_hang_up_callback ();
-
-static void
-toggle_hold_callback ();
-
-static void
-initialize_binding (const gchar* action, const guint code);
-
-static void
-initialize_shortcuts_keys ();
-
-static void*
-get_action_callback (const gchar* action);
-
-static void
-update_bindings_data (const guint index, const guint code);
-
-/*
- * "Public" functions
- */
-
 void
 shortcuts_initialize_bindings ();
 
 void
-shortcuts_update_bindings (const guint index, const guint code);
+shortcuts_update_bindings (guint index, guint key, GdkModifierType mask);
 
 void
 shortcuts_destroy_bindings ();
diff --git a/sflphone-client-gnome/src/sliders.c b/sflphone-client-gnome/src/sliders.c
index 65e393c8e787ed1ccb7a22d4377d41d9fd730da3..45ac5645790a7865587ad244b0203bfd6d0fdb75 100644
--- a/sflphone-client-gnome/src/sliders.c
+++ b/sflphone-client-gnome/src/sliders.c
@@ -40,16 +40,16 @@ GtkWidget * button[2];
 // icons
 GtkWidget * images[2][4];
 enum device_t {
-  SPEAKER = 0,
-  MIKE,
-  DEVICE_COUNT
+    SPEAKER = 0,
+    MIKE,
+    DEVICE_COUNT
 } ;
 
 enum volume_t {
-  MUTED = 0,
-  VOL25,
-  VOL50,
-  VOL75
+    MUTED = 0,
+    VOL25,
+    VOL50,
+    VOL75
 } ;
 
 guint toggledConnId[2]; // The button toggled signal connection ID
@@ -58,137 +58,139 @@ guint movedConnId[2];   // The slider_moved signal connection ID
 void
 update_icons (int dev)
 {
-  float val = gtk_range_get_value(GTK_RANGE(slider[dev]));
-  if(button[dev])
-  {
-    int icon = MUTED;
-    if(val == 0)
-      icon = MUTED;
-    else if( val < 0.33)
-      icon = VOL25;
-    else if( val < 0.66)
-      icon = VOL50;
-    else if( val <= 1)
-      icon = VOL75;
-    gtk_button_set_image(GTK_BUTTON(button[dev]), GTK_WIDGET(images[dev][icon]));
-  }
+    float val = gtk_range_get_value (GTK_RANGE (slider[dev]));
+
+    if (button[dev]) {
+        int icon = MUTED;
+
+        if (val == 0)
+            icon = MUTED;
+        else if (val < 0.33)
+            icon = VOL25;
+        else if (val < 0.66)
+            icon = VOL50;
+        else if (val <= 1)
+            icon = VOL75;
+
+        gtk_button_set_image (GTK_BUTTON (button[dev]), GTK_WIDGET (images[dev][icon]));
+    }
 }
 
 void
-slider_moved(GtkRange* range, gchar* device)
+slider_moved (GtkRange* range, gchar* device)
 {
-  gdouble value = gtk_range_get_value(range);
-  DEBUG("Volume changed for %s: %f ", device, value);
-  dbus_set_volume(device, value);
-  if(strcmp(device, "speaker") == 0)
-    update_icons(SPEAKER);
-  else
-    update_icons(MIKE);
+    gdouble value = gtk_range_get_value (range);
+    DEBUG ("Volume changed for %s: %f ", device, value);
+    dbus_set_volume (device, value);
+
+    if (strcmp (device, "speaker") == 0)
+        update_icons (SPEAKER);
+    else
+        update_icons (MIKE);
 }
 
 static void
-mute_cb( GtkWidget *widget, gchar*  device )
+mute_cb (GtkWidget *widget, gchar*  device)
 {
-  int dev;
-  if(strcmp(device, "speaker") == 0)
-    dev = SPEAKER;
-  else
-    dev = MIKE;
-
-  if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
-  { // Save value
-    DEBUG("Save");
-    value[dev] = gtk_range_get_value(GTK_RANGE(slider[dev]));
-    dbus_set_volume(device, 0);
-  }
-  else
-  { //Restore value
-    DEBUG("Restore");
-    dbus_set_volume(device, value[dev]);
-  }
-  update_icons (dev);
+    int dev;
+
+    if (strcmp (device, "speaker") == 0)
+        dev = SPEAKER;
+    else
+        dev = MIKE;
+
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) { // Save value
+        DEBUG ("Save");
+        value[dev] = gtk_range_get_value (GTK_RANGE (slider[dev]));
+        dbus_set_volume (device, 0);
+    } else { //Restore value
+        DEBUG ("Restore");
+        dbus_set_volume (device, value[dev]);
+    }
+
+    update_icons (dev);
 }
 
 void
-set_slider(const gchar * device, gdouble newval)
+set_slider (const gchar * device, gdouble newval)
 {
-  int dev;
-  if(strcmp(device, "speaker") == 0)
-    dev = SPEAKER;
-  else
-    dev = MIKE;
+    int dev;
 
-  gtk_signal_handler_block(GTK_OBJECT(slider[dev]), movedConnId[dev]);
-  gtk_range_set_value(GTK_RANGE(slider[dev]), newval);
-  gtk_signal_handler_unblock(slider[dev], movedConnId[dev]);
+    if (strcmp (device, "speaker") == 0)
+        dev = SPEAKER;
+    else
+        dev = MIKE;
 
-  gtk_signal_handler_block(GTK_OBJECT(button[dev]),toggledConnId[dev]);
-  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button[dev]), (newval == 0 ? TRUE: FALSE));
-  gtk_signal_handler_unblock(button[dev], toggledConnId[dev]);
+    gtk_signal_handler_block (GTK_OBJECT (slider[dev]), movedConnId[dev]);
+    gtk_range_set_value (GTK_RANGE (slider[dev]), newval);
+    gtk_signal_handler_unblock (slider[dev], movedConnId[dev]);
 
-  update_icons (dev);
+    gtk_signal_handler_block (GTK_OBJECT (button[dev]),toggledConnId[dev]);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button[dev]), (newval == 0 ? TRUE: FALSE));
+    gtk_signal_handler_unblock (button[dev], toggledConnId[dev]);
+
+    update_icons (dev);
 }
 
 /** Generates the speaker slider and mute button */
 GtkWidget *
-create_slider(const gchar * device)
+create_slider (const gchar * device)
 {
-  // Increment the references count for the images
-  // When the image is removed from a button, if the ref count = 0, then it is destroyed
-  // which we don't want ;)
-
-  GtkWidget * ret;
-  int dev=0;
-
-  if(strcmp(device, "speaker") == 0)
-  {
-    dev = SPEAKER;
-    images[SPEAKER][MUTED] = gtk_image_new_from_file( ICONS_DIR "/speaker.svg");
-    images[SPEAKER][VOL25] = gtk_image_new_from_file( ICONS_DIR "/speaker_25.svg");
-    images[SPEAKER][VOL50] = gtk_image_new_from_file( ICONS_DIR "/speaker_50.svg");
-    images[SPEAKER][VOL75] = gtk_image_new_from_file( ICONS_DIR "/speaker_75.svg");
-	  g_object_ref(images[SPEAKER][MUTED]);
-	  g_object_ref(images[SPEAKER][VOL25]);
-	  g_object_ref(images[SPEAKER][VOL50]);
-	  g_object_ref(images[SPEAKER][VOL75]);
-  }
-  else if (strcmp(device, "mic") == 0)
-  {
-    dev = MIKE;
-    images[MIKE][MUTED] = gtk_image_new_from_file( ICONS_DIR "/mic.svg");
-    images[MIKE][VOL25] = gtk_image_new_from_file( ICONS_DIR "/mic_25.svg");
-    images[MIKE][VOL50] = gtk_image_new_from_file( ICONS_DIR "/mic_50.svg");
-    images[MIKE][VOL75] = gtk_image_new_from_file( ICONS_DIR "/mic_75.svg");
-	  g_object_ref(images[MIKE][MUTED]);
-	  g_object_ref(images[MIKE][VOL25]);
-	  g_object_ref(images[MIKE][VOL50]);
-	  g_object_ref(images[MIKE][VOL75]);
-  }
-
-  ret = gtk_hbox_new ( FALSE /*homogeneous*/, 5 /*spacing*/);
-  gtk_container_set_border_width (GTK_CONTAINER(ret), 5);
-  
+    // Increment the references count for the images
+    // When the image is removed from a button, if the ref count = 0, then it is destroyed
+    // which we don't want ;)
+
+    GtkWidget * ret;
+    int dev=0;
+
+    if (strcmp (device, "speaker") == 0) {
+        dev = SPEAKER;
+        images[SPEAKER][MUTED] = gtk_image_new_from_file (ICONS_DIR "/speaker.svg");
+        images[SPEAKER][VOL25] = gtk_image_new_from_file (ICONS_DIR "/speaker_25.svg");
+        images[SPEAKER][VOL50] = gtk_image_new_from_file (ICONS_DIR "/speaker_50.svg");
+        images[SPEAKER][VOL75] = gtk_image_new_from_file (ICONS_DIR "/speaker_75.svg");
+        g_object_ref (images[SPEAKER][MUTED]);
+        g_object_ref (images[SPEAKER][VOL25]);
+        g_object_ref (images[SPEAKER][VOL50]);
+        g_object_ref (images[SPEAKER][VOL75]);
+    } else if (strcmp (device, "mic") == 0) {
+        dev = MIKE;
+        images[MIKE][MUTED] = gtk_image_new_from_file (ICONS_DIR "/mic.svg");
+        images[MIKE][VOL25] = gtk_image_new_from_file (ICONS_DIR "/mic_25.svg");
+        images[MIKE][VOL50] = gtk_image_new_from_file (ICONS_DIR "/mic_50.svg");
+        images[MIKE][VOL75] = gtk_image_new_from_file (ICONS_DIR "/mic_75.svg");
+        g_object_ref (images[MIKE][MUTED]);
+        g_object_ref (images[MIKE][VOL25]);
+        g_object_ref (images[MIKE][VOL50]);
+        g_object_ref (images[MIKE][VOL75]);
+    }
+
+    ret = gtk_hbox_new (FALSE /*homogeneous*/, 5 /*spacing*/);
+    gtk_container_set_border_width (GTK_CONTAINER (ret), 5);
+
 #if GTK_CHECK_VERSION(2,12,0)
-  if( strcmp( device , "speaker") == 0 )
-    gtk_widget_set_tooltip_text( GTK_WIDGET( ret ), _("Speakers volume"));
-  else
-    gtk_widget_set_tooltip_text( GTK_WIDGET( ret ), _("Mic volume"));
+
+    if (strcmp (device , "speaker") == 0)
+        gtk_widget_set_tooltip_text (GTK_WIDGET (ret), _ ("Speakers volume"));
+    else
+        gtk_widget_set_tooltip_text (GTK_WIDGET (ret), _ ("Mic volume"));
+
 #endif
 
-  button[dev] = gtk_toggle_button_new();
-  gtk_box_pack_start (GTK_BOX (ret), button[dev], FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
-  toggledConnId[dev] = g_signal_connect (G_OBJECT (button[dev]), "toggled",
-                    G_CALLBACK (mute_cb), (gpointer)device);
+    button[dev] = gtk_toggle_button_new();
+    gtk_box_pack_start (GTK_BOX (ret), button[dev], FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
+    toggledConnId[dev] = g_signal_connect (G_OBJECT (button[dev]), "toggled",
+                                           G_CALLBACK (mute_cb), (gpointer) device);
 
-  slider[dev] = gtk_hscale_new_with_range(0, 1, 0.05);
-  gtk_scale_set_draw_value(GTK_SCALE(slider[dev]), FALSE);
-  //gtk_range_set_update_policy(GTK_RANGE(slider), GTK_UPDATE_DELAYED);
-  movedConnId[dev] = g_signal_connect (G_OBJECT (slider[dev]), "value_changed",
-                    G_CALLBACK (slider_moved), (gpointer)device);
-  gtk_box_pack_start (GTK_BOX (ret), slider[dev], TRUE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
+    slider[dev] = gtk_hscale_new_with_range (0, 1, 0.05);
+    gtk_scale_set_draw_value (GTK_SCALE (slider[dev]), FALSE);
+    //gtk_range_set_update_policy(GTK_RANGE(slider), GTK_UPDATE_DELAYED);
+    movedConnId[dev] = g_signal_connect (G_OBJECT (slider[dev]), "value_changed",
+                                         G_CALLBACK (slider_moved), (gpointer) device);
+    gtk_box_pack_start (GTK_BOX (ret), slider[dev], TRUE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
 
-  set_slider(device, dbus_get_volume(device));
+    set_slider (device, dbus_get_volume (device));
 
-  return ret;
+    return ret;
 }
 
diff --git a/sflphone-client-gnome/src/sliders.h b/sflphone-client-gnome/src/sliders.h
index 531a1b22bd9a435e967c270efb39704fd02c7c15..574af9104d14befe50634bc620c39a0aff3fff31 100644
--- a/sflphone-client-gnome/src/sliders.h
+++ b/sflphone-client-gnome/src/sliders.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __SLIDERS_H__
 #define __SLIDERS_H__
 
@@ -41,16 +41,16 @@
  * @param device  Mic or speaker
  * @return GtkWidget* The slider
  */
-GtkWidget * create_slider(const gchar * device);
+GtkWidget * create_slider (const gchar * device);
 
 
-/** 
+/**
  * This function updates the sliders without sending the value to the server.
  * This behavior prevents an infinite loop when receiving an updated volume from
  * the server.
  * @param device The device slider to update {speaker, mic}
  * @param value The value to set [0, 1.0]
  */
-void set_slider(const gchar * device, gdouble value);
+void set_slider (const gchar * device, gdouble value);
 
-#endif 
+#endif
diff --git a/sflphone-client-gnome/src/statusicon.c b/sflphone-client-gnome/src/statusicon.c
index 6ad61747705578cb9e360a4496bafe27b7a8e0b7..134dfbeeca42a38f59cb0f52e6476bc9708003d4 100644
--- a/sflphone-client-gnome/src/statusicon.c
+++ b/sflphone-client-gnome/src/statusicon.c
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -34,6 +34,7 @@
 #include <mainwindow.h>
 #include <accountlist.h>
 #include <statusicon.h>
+#include <eel-gconf-extensions.h>
 
 #if GTK_CHECK_VERSION(2,10,0)
 GtkStatusIcon *status;
@@ -41,146 +42,143 @@ GtkWidget *show_menu_item, *hangup_menu_item;
 gboolean __minimized = MINIMIZED;
 
 void
-popup_main_window(void)
-{
-  if (__POPUP_WINDOW)
-    {
-      gtk_widget_show(get_main_window());
-      gtk_window_move(GTK_WINDOW (get_main_window ()),
-          dbus_get_window_position_x(), dbus_get_window_position_y());
-      set_minimized(FALSE);
+popup_main_window (void)
+{
+    if (__POPUP_WINDOW) {
+        gtk_widget_show (get_main_window());
+        //gtk_window_move(GTK_WINDOW (get_main_window ()),
+        //    dbus_get_window_position_x(), dbus_get_window_position_y());
+        set_minimized (FALSE);
     }
 }
 
 void
 show_status_hangup_icon()
 {
-  if (status) {
-    DEBUG("Show Hangup in Systray");
-    gtk_widget_show(GTK_WIDGET(hangup_menu_item));
-  }
+    if (__POPUP_WINDOW) {
+        gtk_widget_show (get_main_window ());
+        gtk_window_move (GTK_WINDOW (get_main_window ()), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_X), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_Y));
+        set_minimized (FALSE);
+    }
 }
 
 void
 hide_status_hangup_icon()
 {
-  if (status) {
-    DEBUG("Hide Hangup in Systray");
-    gtk_widget_hide(GTK_WIDGET(hangup_menu_item));
-  }
+    if (status) {
+        DEBUG ("Hide Hangup in Systray");
+        gtk_widget_hide (GTK_WIDGET (hangup_menu_item));
+    }
 }
 
 void
-status_quit(void * foo UNUSED)
+status_quit (void * foo UNUSED)
 {
-  sflphone_quit();
+    sflphone_quit();
 }
 
 void
 status_hangup()
 {
-  sflphone_hang_up();
+    sflphone_hang_up();
 }
 
 void
 status_icon_unminimize()
 {
-  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE);
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_menu_item), TRUE);
 }
 
 gboolean
 main_widget_minimized()
 {
-  return __minimized;
+    return __minimized;
 }
 
 void
-show_hide(void)
-{
-  if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item)))
-    {
-      gtk_widget_show(GTK_WIDGET(get_main_window()));
-      gtk_window_move(GTK_WINDOW (get_main_window ()),
-          dbus_get_window_position_x(), dbus_get_window_position_y());
-      set_minimized(!MINIMIZED);
-    }
-  else
-    {
-      gtk_widget_hide(GTK_WIDGET(get_main_window()));
-      set_minimized(MINIMIZED);
+show_hide (void)
+{
+    if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (show_menu_item))) {
+        gtk_widget_show (GTK_WIDGET (get_main_window()));
+        gtk_window_move (GTK_WINDOW (get_main_window ()), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_X), eel_gconf_get_integer (CONF_MAIN_WINDOW_POSITION_Y));
+        set_minimized (!MINIMIZED);
+    } else {
+        gtk_widget_hide (GTK_WIDGET (get_main_window()));
+        set_minimized (MINIMIZED);
     }
 }
 
 void
-status_click(GtkStatusIcon *status_icon UNUSED, void * foo UNUSED)
+status_click (GtkStatusIcon *status_icon UNUSED, void * foo UNUSED)
 {
-  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item),
-      !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(show_menu_item)));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_menu_item),
+                                    !gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (show_menu_item)));
 }
 
 void
-menu(GtkStatusIcon *status_icon, guint button, guint activate_time,
-    GtkWidget * menu)
+menu (GtkStatusIcon *status_icon, guint button, guint activate_time,
+      GtkWidget * menu)
 {
-  gtk_menu_popup(GTK_MENU(menu), NULL, NULL, gtk_status_icon_position_menu,
-      status_icon, button, activate_time);
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, gtk_status_icon_position_menu,
+                    status_icon, button, activate_time);
 }
 
 GtkWidget*
 create_menu()
 {
-  GtkWidget * menu;
-  GtkWidget * menu_items;
-  GtkWidget * image;
+    GtkWidget * menu;
+    GtkWidget * menu_items;
+    GtkWidget * image;
 
-  menu = gtk_menu_new();
+    menu = gtk_menu_new();
 
-  show_menu_item
-      = gtk_check_menu_item_new_with_mnemonic(_("_Show main window"));
-  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), TRUE);
-  gtk_menu_shell_append(GTK_MENU_SHELL (menu), show_menu_item);
-  g_signal_connect(G_OBJECT (show_menu_item), "toggled",
-      G_CALLBACK (show_hide),
-      NULL);
+    show_menu_item
+    = gtk_check_menu_item_new_with_mnemonic (_ ("_Show main window"));
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_menu_item), TRUE);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), show_menu_item);
+    g_signal_connect (G_OBJECT (show_menu_item), "toggled",
+                      G_CALLBACK (show_hide),
+                      NULL);
 
-  hangup_menu_item = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-  image = gtk_image_new_from_file(ICONS_DIR "/icon_hangup.svg");
-  gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(hangup_menu_item), image);
-  gtk_menu_shell_append(GTK_MENU_SHELL(menu), hangup_menu_item);
-  g_signal_connect(G_OBJECT (hangup_menu_item), "activate",
-      G_CALLBACK (status_hangup),
-      NULL);
+    hangup_menu_item = gtk_image_menu_item_new_with_mnemonic (_ ("_Hang up"));
+    image = gtk_image_new_from_file (ICONS_DIR "/icon_hangup.svg");
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (hangup_menu_item), image);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), hangup_menu_item);
+    g_signal_connect (G_OBJECT (hangup_menu_item), "activate",
+                      G_CALLBACK (status_hangup),
+                      NULL);
 
-  menu_items = gtk_separator_menu_item_new();
-  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+    menu_items = gtk_separator_menu_item_new();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
 
-  menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT,
-      get_accel_group());
-  g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
-      G_CALLBACK (status_quit),
-      NULL);
-  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
+    menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT,
+                 get_accel_group());
+    g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (status_quit),
+                              NULL);
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
 
-  gtk_widget_show_all(menu);
+    gtk_widget_show_all (menu);
 
-  return menu;
+    return menu;
 }
 
 void
 show_status_icon()
 {
-  status = gtk_status_icon_new_from_file(LOGO);
-  g_signal_connect (G_OBJECT (status), "activate",
-      G_CALLBACK (status_click),
-      NULL);
-  g_signal_connect (G_OBJECT (status), "popup-menu",
-      G_CALLBACK (menu),
-      create_menu());
+    status = gtk_status_icon_new_from_file (LOGO);
+    g_signal_connect (G_OBJECT (status), "activate",
+                      G_CALLBACK (status_click),
+                      NULL);
+    g_signal_connect (G_OBJECT (status), "popup-menu",
+                      G_CALLBACK (menu),
+                      create_menu());
 
-  statusicon_set_tooltip();
+    statusicon_set_tooltip();
 }
 
-void hide_status_icon (void) {
+void hide_status_icon (void)
+{
 
     g_object_unref (status);
     status = NULL;
@@ -190,53 +188,52 @@ void hide_status_icon (void) {
 void
 statusicon_set_tooltip()
 {
-  int count;
-  gchar *tip;
-
-  if(status) {
+    int count;
+    gchar *tip;
 
-    // Add a tooltip to the system tray icon
-    count = account_list_get_registered_accounts();
-    tip = g_markup_printf_escaped("%s - %s", _("SFLphone"),
-        g_markup_printf_escaped(n_("%i active account", "%i active accounts", count), count));
-    gtk_status_icon_set_tooltip(status, tip);
-    g_free(tip);
+    if (status) {
 
-  }
+        // Add a tooltip to the system tray icon
+        count = account_list_get_registered_accounts();
+        tip = g_markup_printf_escaped ("%s - %s", _ ("SFLphone"),
+                                       g_markup_printf_escaped (n_ ("%i active account", "%i active accounts", count), count));
+        gtk_status_icon_set_tooltip (status, tip);
+        g_free (tip);
 
+    }
 }
 
 void
-status_tray_icon_blink(gboolean active)
+status_tray_icon_blink (gboolean active)
 {
-  if (status) {
-  // Set a different icon to notify of an event
-  active ? gtk_status_icon_set_from_file(status, LOGO_NOTIF)
-      : gtk_status_icon_set_from_file(status, LOGO);
-  }
+    if (status) {
+        // Set a different icon to notify of an event
+        active ? gtk_status_icon_set_from_file (status, LOGO_NOTIF)
+        : gtk_status_icon_set_from_file (status, LOGO);
+    }
 }
 
 void
-status_tray_icon_online(gboolean online)
+status_tray_icon_online (gboolean online)
 {
-  if (status) {
-  // Set a different icon to notify of an event
-  online ? gtk_status_icon_set_from_file(status, LOGO)
-      : gtk_status_icon_set_from_file(status, LOGO_OFFLINE);
-  }
+    if (status) {
+        // Set a different icon to notify of an event
+        online ? gtk_status_icon_set_from_file (status, LOGO)
+        : gtk_status_icon_set_from_file (status, LOGO_OFFLINE);
+    }
 }
 
 GtkStatusIcon*
-get_status_icon(void)
+get_status_icon (void)
 {
-  return status;
+    return status;
 }
 
 void
-set_minimized(gboolean state)
+set_minimized (gboolean state)
 {
-  __minimized = state;
-  gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(show_menu_item), !state);
+    __minimized = state;
+    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_menu_item), !state);
 }
 
 #endif
diff --git a/sflphone-client-gnome/src/statusicon.h b/sflphone-client-gnome/src/statusicon.h
index ad9303d360ade39150b5b4dcbccc34ecdcb2c714..951276cfeaef4f739f7ccbfce2637cb24018e9b2 100644
--- a/sflphone-client-gnome/src/statusicon.h
+++ b/sflphone-client-gnome/src/statusicon.h
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -28,7 +28,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __STATUSICON_H__
 #define __STATUSICON_H__
 
@@ -36,7 +36,7 @@
 
 #include <gtk/gtk.h>
 #include <sflphone_const.h>
-/** 
+/**
  * @file statusicon.h
  * @brief The status icon in the system tray.
  */
@@ -58,18 +58,18 @@ void show_status_icon ();
 void hide_status_icon ();
 
 /**
- * Set the menu active 
- */  
+ * Set the menu active
+ */
 void status_icon_unminimize();
 
 /**
- * Show hangup icon 
+ * Show hangup icon
  */
 void show_status_hangup_icon();
 
 
 /**
- * Show hangup icon 
+ * Show hangup icon
  */
 void hide_status_hangup_icon();
 
@@ -87,26 +87,28 @@ gboolean main_widget_minimized();
  * @param state	TRUE if the  main window is minimized
  *               FALSE otherwise
  */
-void set_minimized( gboolean state );
+void set_minimized (gboolean state);
 
 /**
  * Make the system tray icon blink on incoming call
  * @return active TRUE to make it blink
  *		  FALSE to make it stop
  */
-void status_tray_icon_blink( gboolean active );
+void status_tray_icon_blink (gboolean active);
 
 /**
  * Accessor
  * @return GtkStatusIcon* The status icon
  */
-GtkStatusIcon* get_status_icon( void );
+GtkStatusIcon* get_status_icon (void);
 
 /**
  * Attach a tooltip to the status icon
  */
 void statusicon_set_tooltip (void);
 
+void status_tray_icon_online (gboolean online);
+
 #endif // GTK_CHECK_VERSION
 
 #endif
diff --git a/sflphone-client-gnome/src/toolbar.c b/sflphone-client-gnome/src/toolbar.c
index 1a26642eb7e44af5eda079ce1503252462b36c89..95713da293b7ea4c4a6f85556f40cd4fdae37a62 100644
--- a/sflphone-client-gnome/src/toolbar.c
+++ b/sflphone-client-gnome/src/toolbar.c
@@ -32,64 +32,59 @@
 #include <contacts/addressbook.h>
 
 
-    static void
-call_mailbox( GtkWidget* widget UNUSED, gpointer data UNUSED)
+static void
+call_mailbox (GtkWidget* widget UNUSED, gpointer data UNUSED)
 {
     account_t* current;
     callable_obj_t *mailbox_call;
     gchar *to, *from, *account_id;
 
     current = account_list_get_current ();
-    if( current == NULL ) // Should not happens
+
+    if (current == NULL)  // Should not happens
         return;
 
-    to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX));
+    to = g_strdup (g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX));
     account_id = g_strdup (current->accountID);
 
-    create_new_call (CALL, CALL_STATE_DIALING, "", account_id, _("Voicemail"), to, &mailbox_call);
-    DEBUG("TO : %s" , mailbox_call->_peer_number);
-    calllist_add( current_calls , mailbox_call );
-    calltree_add_call( current_calls, mailbox_call, NULL);
+    create_new_call (CALL, CALL_STATE_DIALING, "", account_id, _ ("Voicemail"), to, &mailbox_call);
+    DEBUG ("Call: TO : %s" , mailbox_call->_peer_number);
+    calllist_add (current_calls , mailbox_call);
+    calltree_add_call (current_calls, mailbox_call, NULL);
     update_actions();
-    sflphone_place_call( mailbox_call );
-    calltree_display(current_calls);
+    sflphone_place_call (mailbox_call);
+    calltree_display (current_calls);
 }
 
 /**
  * Make a call
  */
-    static void
-call_button( GtkWidget *widget UNUSED, gpointer   data UNUSED)
+static void
+call_button (GtkWidget *widget UNUSED, gpointer   data UNUSED)
 {
-    DEBUG("------ call_button -----");
     callable_obj_t * selectedCall;
     callable_obj_t* new_call;
 
-    selectedCall = calltab_get_selected_call(active_calltree);
+    selectedCall = calltab_get_selected_call (active_calltree);
 
-    if(calllist_get_size(current_calls)>0)
+    if (calllist_get_size (current_calls) >0)
         sflphone_pick_up();
 
-    else if(calllist_get_size(active_calltree) > 0){
-        if( selectedCall)
-        {
+    else if (calllist_get_size (active_calltree) > 0) {
+        if (selectedCall) {
             create_new_call (CALL, CALL_STATE_DIALING, "", "", "", selectedCall->_peer_number, &new_call);
 
-            calllist_add(current_calls, new_call);
-            calltree_add_call(current_calls, new_call, NULL);
-            sflphone_place_call(new_call);
+            calllist_add (current_calls, new_call);
+            calltree_add_call (current_calls, new_call, NULL);
+            sflphone_place_call (new_call);
             calltree_display (current_calls);
-        }
-        else
-        {
+        } else {
             sflphone_new_call();
-            calltree_display(current_calls);
+            calltree_display (current_calls);
         }
-    }
-    else
-    {
+    } else {
         sflphone_new_call();
-        calltree_display(current_calls);
+        calltree_display (current_calls);
     }
 }
 
diff --git a/sflphone-client-gnome/src/ui.xml b/sflphone-client-gnome/src/ui.xml
index 449e67b0bfff5d38e0b613656444a15b717f975a..3cbd801fe6e18f4eb1d0c38d0f0a17cdd5503b8b 100644
--- a/sflphone-client-gnome/src/ui.xml
+++ b/sflphone-client-gnome/src/ui.xml
@@ -7,6 +7,7 @@
       <menuitem action="PickUp"/>
       <menuitem action="HangUp"/>
       <menuitem name="OnHoldMenu" action="OnHold"/>
+      <menuitem action="InstantMessaging"/>
       <menuitem action="Record"/>
       <separator/>
       <menuitem action="AccountAssistant"/>
@@ -50,6 +51,7 @@
     <toolitem name="OnHoldToolbar" action="OnHold"/>
     <toolitem name="OffHoldToolbar" action="OffHold"/>
     <toolitem name="TransferToolbar" action="Transfer"/>
+    <toolitem name="InstantMessagingToolbar" action="InstantMessaging"/>
     <toolitem name="RecordToolbar" action="Record"/>
     <separator/>
     <toolitem name="VoicemailToolbar" action="Voicemail"/>
diff --git a/sflphone-client-gnome/src/uimanager.c b/sflphone-client-gnome/src/uimanager.c
index 46def19d3dfd989a233936dede77091f7a298a79..d896db30dd2c3b638df1d7054ffa3349b15140c2 100644
--- a/sflphone-client-gnome/src/uimanager.c
+++ b/sflphone-client-gnome/src/uimanager.c
@@ -37,8 +37,18 @@
 #include <string.h>
 #include <glib/gprintf.h>
 #include <libgnome/gnome-help.h>
+
 #include <uimanager.h>
 #include <statusicon.h>
+#include <widget/imwidget.h>
+#include <eel-gconf-extensions.h>
+#include "uimanager.h"
+#include "statusicon.h"
+#include "contacts/addressbook.h"
+#include "accountlist.h"
+#include "config/accountlistconfigdialog.h"
+
+void show_edit_number (callable_obj_t *call);
 
 static GtkWidget *toolbar;
 static GtkWidget *toolbarWindows;
@@ -62,700 +72,782 @@ GtkAction * recordAction;
 GtkWidget * recordWidget;
 GtkAction * voicemailAction;
 GtkWidget * voicemailToolbar;
+GtkWidget * imToolbar;
+GtkAction * imAction;
 
 GtkWidget * editable_num;
 GtkDialog * edit_dialog;
 
-enum
-{
-  CALLTREE_CALLS, CALLTREE_HISTORY, CALLTREE_CONTACTS
+enum {
+    CALLTREE_CALLS, CALLTREE_HISTORY, CALLTREE_CONTACTS
 };
 
 static gboolean
-is_inserted(GtkWidget* button, GtkWidget *current_toolbar)
+is_inserted (GtkWidget* button, GtkWidget *current_toolbar)
 {
-  return (GTK_WIDGET (button)->parent == GTK_WIDGET (current_toolbar));
+    return (GTK_WIDGET (button)->parent == GTK_WIDGET (current_toolbar));
 }
 
 void
 update_actions()
 {
 
-  DEBUG("Update action");
-
-  gtk_action_set_sensitive(GTK_ACTION (newCallAction), TRUE);
-  gtk_action_set_sensitive(GTK_ACTION (pickUpAction), FALSE);
-  gtk_action_set_sensitive(GTK_ACTION (hangUpAction), FALSE);
-
-  g_object_ref(hangUpWidget);
-  g_object_ref(recordWidget);
-  g_object_ref(holdToolbar);
-  g_object_ref(offHoldToolbar);
-  g_object_ref(contactButton);
-  g_object_ref(transferToolbar);
-  g_object_ref(voicemailToolbar);
+    DEBUG ("UIManager: Update action");
+
+    gtk_action_set_sensitive (GTK_ACTION (newCallAction), TRUE);
+    gtk_action_set_sensitive (GTK_ACTION (pickUpAction), FALSE);
+    gtk_action_set_sensitive (GTK_ACTION (hangUpAction), FALSE);
+    gtk_action_set_sensitive (GTK_ACTION (imAction), FALSE);
+
+    g_object_ref (hangUpWidget);
+    g_object_ref (recordWidget);
+    g_object_ref (holdToolbar);
+    g_object_ref (offHoldToolbar);
+    g_object_ref (contactButton);
+    g_object_ref (historyButton);
+    g_object_ref (transferToolbar);
+    g_object_ref (voicemailToolbar);
+    g_object_ref (imToolbar);
+
+    if (is_inserted (GTK_WIDGET (hangUpWidget), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (hangUpWidget));
+    }
 
-  if (is_inserted(GTK_WIDGET(hangUpWidget), GTK_WIDGET (toolbar)))
-    {
-      gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (hangUpWidget));
+    if (is_inserted (GTK_WIDGET (recordWidget), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (recordWidget));
     }
 
-  if (is_inserted(GTK_WIDGET(recordWidget), GTK_WIDGET (toolbar)))
-    {
-      gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (recordWidget));
+    if (is_inserted (GTK_WIDGET (transferToolbar), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar),
+                              GTK_WIDGET (transferToolbar));
     }
 
-  if (is_inserted(GTK_WIDGET(transferToolbar), GTK_WIDGET (toolbar)))
-    {
-      gtk_container_remove(GTK_CONTAINER (toolbar),
-          GTK_WIDGET (transferToolbar));
+    if (is_inserted (GTK_WIDGET (historyButton), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (historyButton));
     }
 
-  if (is_inserted(GTK_WIDGET(contactButton), GTK_WIDGET (toolbar)))
-    {
-      gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton));
+    if (is_inserted (GTK_WIDGET (contactButton), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (contactButton));
     }
 
-  if (is_inserted(GTK_WIDGET (voicemailToolbar), GTK_WIDGET (toolbar)))
-    {
-      gtk_container_remove(GTK_CONTAINER (toolbar),
-          GTK_WIDGET (voicemailToolbar));
+    if (is_inserted (GTK_WIDGET (voicemailToolbar), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar),
+                              GTK_WIDGET (voicemailToolbar));
     }
 
-  gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), FALSE);
-  gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), FALSE);
-  gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), FALSE);
-  gtk_action_set_sensitive(GTK_ACTION (recordAction), FALSE);
-  gtk_widget_set_sensitive(GTK_WIDGET (recordWidget), FALSE);
-  gtk_action_set_sensitive(GTK_ACTION (copyAction), FALSE);
-  gtk_widget_set_sensitive(GTK_WIDGET(contactButton), FALSE);
-  gtk_widget_set_tooltip_text(GTK_WIDGET (contactButton),
-      _("No address book selected"));
-
-  if (is_inserted(GTK_WIDGET (holdToolbar), GTK_WIDGET (toolbar)))
-    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (holdToolbar));
-  if (is_inserted(GTK_WIDGET (offHoldToolbar), GTK_WIDGET (toolbar)))
-    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (offHoldToolbar));
-
-  if (is_inserted(GTK_WIDGET (newCallWidget), GTK_WIDGET (toolbar)))
-    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget));
-  if (is_inserted(GTK_WIDGET (pickUpWidget), GTK_WIDGET (toolbar)))
-    gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET (pickUpWidget));
-  gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (newCallWidget), 0);
-
-  // If addressbook support has been enabled and all addressbooks are loaded, display the icon
-  if (addressbook_is_enabled() && addressbook_is_ready())
-    {
-      gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (contactButton),
-          -1);
-      // Make the icon clickable only if at least one address book is active
-      if (addressbook_is_active())
-        {
-          gtk_widget_set_sensitive(GTK_WIDGET(contactButton), TRUE);
-          gtk_widget_set_tooltip_text(GTK_WIDGET (contactButton),
-              _("Address book"));
-        }
+    if (is_inserted (GTK_WIDGET (imToolbar), GTK_WIDGET (toolbar))) {
+        gtk_container_remove (GTK_CONTAINER (toolbar),
+                              GTK_WIDGET (imToolbar));
     }
 
-  // g_signal_handler_block (GTK_OBJECT (recordWidget), recordButtonConnId);
-  // gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
-  // g_signal_handler_unblock ( GTK_OBJECT (recordWidget), recordButtonConnId);
-
-  callable_obj_t * selectedCall = calltab_get_selected_call(active_calltree);
-  conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree);
-
-  if (selectedCall)
-    {
-      // update icon in systray
-      show_status_hangup_icon();
-
-      gtk_action_set_sensitive(GTK_ACTION (copyAction), TRUE);
-
-      switch (selectedCall->_state)
-        {
-      case CALL_STATE_INCOMING:
-        // Make the button toolbar clickable
-        gtk_action_set_sensitive(GTK_ACTION (pickUpAction), TRUE);
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        // Replace the dial button with the hangup button
-        g_object_ref(newCallWidget);
-        gtk_container_remove(GTK_CONTAINER (toolbar), GTK_WIDGET(newCallWidget));
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (pickUpWidget),
-            0);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        break;
-      case CALL_STATE_HOLD:
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (newCallWidget), TRUE);
-        // Replace the hold button with the off-hold button
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_toolbar_insert(GTK_TOOLBAR(toolbar),
-            GTK_TOOL_ITEM (offHoldToolbar), 2);
-        break;
-      case CALL_STATE_RINGING:
-        gtk_action_set_sensitive(GTK_ACTION (pickUpAction), TRUE);
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        break;
-      case CALL_STATE_DIALING:
-        gtk_action_set_sensitive(GTK_ACTION(pickUpAction), TRUE);
-        if (active_calltree == current_calls)
-          gtk_action_set_sensitive(GTK_ACTION(hangUpAction), TRUE);
-        //gtk_action_set_sensitive( GTK_ACTION(newCallMenu),TRUE);
-        g_object_ref(newCallWidget);
-        gtk_container_remove(GTK_CONTAINER (toolbar),
-            GTK_WIDGET (newCallWidget));
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (pickUpWidget),
-            0);
-        if (active_calltree == current_calls)
-          gtk_toolbar_insert(GTK_TOOLBAR (toolbar),
-              GTK_TOOL_ITEM (hangUpWidget), 1);
-        break;
-      case CALL_STATE_CURRENT:
-      case CALL_STATE_RECORD:
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE);
-        gtk_action_set_sensitive(GTK_ACTION (recordAction), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar),
-            2);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar),
-            GTK_TOOL_ITEM (transferToolbar), 3);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget),
-            4);
-        gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
-        gtk_toggle_tool_button_set_active(
-            GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE);
-        gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId);
+    gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (offHoldToolbar), FALSE);
+    gtk_action_set_sensitive (GTK_ACTION (recordAction), FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (recordWidget), FALSE);
+    gtk_action_set_sensitive (GTK_ACTION (copyAction), FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (contactButton), FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (historyButton), FALSE);
+    gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton),
+                                 _ ("No address book selected"));
 
-        break;
-      case CALL_STATE_BUSY:
-      case CALL_STATE_FAILURE:
-        gtk_action_set_sensitive(GTK_ACTION(hangUpAction), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        break;
-      case CALL_STATE_TRANSFERT:
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar),
-            GTK_TOOL_ITEM (transferToolbar), 2);
-        gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
-        gtk_toggle_tool_button_set_active(
-            GTK_TOGGLE_TOOL_BUTTON (transferToolbar), TRUE);
-        gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId);
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdMenu), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (transferToolbar), TRUE);
-        break;
-      default:
-        WARN("Should not happen in update_actions()!")
-        ;
-        break;
-        }
-    }
-  else if (selectedConf)
-    {
-
-      // update icon in systray
-      show_status_hangup_icon();
-
-      switch (selectedConf->_state)
-        {
-
-      case CONFERENCE_STATE_ACTIVE_ATACHED:
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar),
-            2);
-        break;
+    if (is_inserted (GTK_WIDGET (holdToolbar), GTK_WIDGET (toolbar)))
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (holdToolbar));
 
-      case CONFERENCE_STATE_ACTIVE_DETACHED:
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar),
-            2);
-        break;
+    if (is_inserted (GTK_WIDGET (offHoldToolbar), GTK_WIDGET (toolbar)))
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (offHoldToolbar));
 
-      case CONFERENCE_STATE_RECORD:
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (holdToolbar), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar),
-            2);
-        break;
+    if (is_inserted (GTK_WIDGET (newCallWidget), GTK_WIDGET (toolbar)))
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget));
 
-      case CONFERENCE_STATE_HOLD:
-        gtk_action_set_sensitive(GTK_ACTION (hangUpAction), TRUE);
-        gtk_widget_set_sensitive(GTK_WIDGET (offHoldToolbar), TRUE);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
-            1);
-        gtk_toolbar_insert(GTK_TOOLBAR (toolbar),
-            GTK_TOOL_ITEM (offHoldToolbar), 2);
-        break;
+    if (is_inserted (GTK_WIDGET (pickUpWidget), GTK_WIDGET (toolbar)))
+        gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (pickUpWidget));
+
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (newCallWidget), 0);
 
-      default:
-        WARN("Should not happen in update_action()!")
-        ;
-        break;
+
+    if (eel_gconf_get_integer (HISTORY_ENABLED)) {
+        gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (historyButton), -1);
+        gtk_widget_set_sensitive (GTK_WIDGET (historyButton), TRUE);
+    }
+
+    // If addressbook support has been enabled and all addressbooks are loaded, display the icon
+    if (addressbook_is_enabled() && addressbook_is_ready()) {
+        gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (contactButton),
+                            -1);
+
+        // Make the icon clickable only if at least one address book is active
+        if (addressbook_is_active()) {
+            gtk_widget_set_sensitive (GTK_WIDGET (contactButton), TRUE);
+            gtk_widget_set_tooltip_text (GTK_WIDGET (contactButton),
+                                         _ ("Address book"));
+        }
+    }
+
+    // g_signal_handler_block (GTK_OBJECT (recordWidget), recordButtonConnId);
+    // gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
+    // g_signal_handler_unblock (GTK_OBJECT (recordWidget), recordButtonConnId);
+
+    callable_obj_t * selectedCall = calltab_get_selected_call (active_calltree);
+    conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree);
+
+    gboolean instant_messaging_enabled = TRUE;
+
+    if (eel_gconf_key_exists (INSTANT_MESSAGING_ENABLED))
+        instant_messaging_enabled = eel_gconf_get_integer (INSTANT_MESSAGING_ENABLED);
+
+    if (selectedCall) {
+        // update icon in systray
+        show_status_hangup_icon();
+
+        gtk_action_set_sensitive (GTK_ACTION (copyAction), TRUE);
+
+        switch (selectedCall->_state) {
+            case CALL_STATE_INCOMING:
+                // Make the button toolbar clickable
+                gtk_action_set_sensitive (GTK_ACTION (pickUpAction), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                // Replace the dial button with the hangup button
+                g_object_ref (newCallWidget);
+                gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget));
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (pickUpWidget),
+                                    0);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
+                                    1);
+                break;
+            case CALL_STATE_HOLD:
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (offHoldToolbar), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (newCallWidget), TRUE);
+
+                // Replace the hold button with the off-hold button
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (offHoldToolbar), 2);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 3);
+                }
+
+                break;
+            case CALL_STATE_RINGING:
+                gtk_action_set_sensitive (GTK_ACTION (pickUpAction), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget),
+                                    1);
+                break;
+            case CALL_STATE_DIALING:
+                gtk_action_set_sensitive (GTK_ACTION (pickUpAction), TRUE);
+
+                if (active_calltree == current_calls)
+                    gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+
+                //gtk_action_set_sensitive( GTK_ACTION(newCallMenu),TRUE);
+                g_object_ref (newCallWidget);
+                gtk_container_remove (GTK_CONTAINER (toolbar), GTK_WIDGET (newCallWidget));
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (pickUpWidget), 0);
+
+                if (active_calltree == current_calls)
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+
+                break;
+            case CALL_STATE_CURRENT:
+                DEBUG ("UIManager: Call State Current");
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (transferToolbar), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (transferToolbar), 3);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 4);
+                gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
+                gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE);
+                gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId);
+                g_signal_handler_block (GTK_OBJECT (recordWidget), recordButtonConnId);
+                gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
+                g_signal_handler_unblock (GTK_OBJECT (recordWidget), recordButtonConnId);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 5);
+                }
+
+                break;
+
+            case CALL_STATE_RECORD:
+                DEBUG ("UIManager: Call State Record");
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (transferToolbar), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (transferToolbar), 3);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 4);
+                gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
+                gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar), FALSE);
+                gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId);
+                g_signal_handler_block (GTK_OBJECT (recordWidget), recordButtonConnId);
+                gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), TRUE);
+                g_signal_handler_unblock (GTK_OBJECT (recordWidget), recordButtonConnId);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 5);
+                }
+
+                break;
+            case CALL_STATE_BUSY:
+            case CALL_STATE_FAILURE:
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                break;
+            case CALL_STATE_TRANSFERT:
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (transferToolbar), 2);
+                gtk_signal_handler_block (GTK_OBJECT (transferToolbar), transfertButtonConnId);
+                gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (transferToolbar), TRUE);
+                gtk_signal_handler_unblock (transferToolbar, transfertButtonConnId);
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdMenu), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (transferToolbar), TRUE);
+                break;
+            default:
+                WARN ("Should not happen in update_actions()!");
+                break;
+        }
+    } else if (selectedConf) {
+
+        // update icon in systray
+        show_status_hangup_icon();
+
+        switch (selectedConf->_state) {
+
+            case CONFERENCE_STATE_ACTIVE_ATACHED:
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 4);
+                }
+
+                break;
+
+            case CONFERENCE_STATE_ACTIVE_DETACHED:
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 4);
+                }
+
+                break;
+
+            case CONFERENCE_STATE_RECORD:
+                DEBUG ("UIManager: Conference state record");
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (holdToolbar), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (holdToolbar), 2);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 4);
+                }
+
+                break;
+
+            case CONFERENCE_STATE_HOLD:
+                gtk_action_set_sensitive (GTK_ACTION (hangUpAction), TRUE);
+                gtk_widget_set_sensitive (GTK_WIDGET (offHoldToolbar), TRUE);
+                gtk_action_set_sensitive (GTK_ACTION (recordAction), TRUE);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (hangUpWidget), 1);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (offHoldToolbar), 2);
+                gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (recordWidget), 3);
+
+                if (instant_messaging_enabled) {
+                    gtk_action_set_sensitive (GTK_ACTION (imAction), TRUE);
+                    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), GTK_TOOL_ITEM (imToolbar), 4);
+                }
+
+                break;
+
+            default:
+                WARN ("Should not happen in update_action()!");
+                break;
 
         }
     }
 
-  else
-    {
+    else {
 
-      // update icon in systray
-      hide_status_hangup_icon();
+        // update icon in systray
+        hide_status_hangup_icon();
 
-      if (account_list_get_size() > 0 && current_account_has_mailbox())
-        {
-          gtk_toolbar_insert(GTK_TOOLBAR (toolbar),
-              GTK_TOOL_ITEM (voicemailToolbar), -2);
-          update_voicemail_status();
+        if (account_list_get_size() > 0 && current_account_has_mailbox()) {
+            gtk_toolbar_insert (GTK_TOOLBAR (toolbar),
+                                GTK_TOOL_ITEM (voicemailToolbar), -2);
+            update_voicemail_status();
         }
     }
 }
 
 void
-update_voicemail_status(void)
+update_voicemail_status (void)
 {
-  gchar *messages = "";
-  messages = g_markup_printf_escaped(_("Voicemail (%i)"),
-      current_account_get_message_number());
-  (current_account_has_new_message()) ? gtk_tool_button_set_icon_name(
-      GTK_TOOL_BUTTON (voicemailToolbar), "mail-message-new")
-      : gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON (voicemailToolbar),
-          "mail-read");
-  gtk_tool_button_set_label(GTK_TOOL_BUTTON (voicemailToolbar), messages);
-  g_free(messages);
+    gchar *messages = "";
+    messages = g_markup_printf_escaped (_ ("Voicemail (%i)"),
+                                        current_account_get_message_number());
+    (current_account_has_new_message()) ? gtk_tool_button_set_icon_name (
+        GTK_TOOL_BUTTON (voicemailToolbar), "mail-message-new")
+    : gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (voicemailToolbar),
+                                     "mail-read");
+    gtk_tool_button_set_label (GTK_TOOL_BUTTON (voicemailToolbar), messages);
+    g_free (messages);
 }
 
 static void
-volume_bar_cb(GtkToggleAction *togglemenuitem, gpointer user_data)
+volume_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data UNUSED)
 {
-  gboolean toggled = gtk_toggle_action_get_active(togglemenuitem);
-  if (toggled == SHOW_VOLUME)
-    return;
-  main_window_volume_controls(toggled);
-  if (toggled || SHOW_VOLUME)
-    dbus_set_volume_controls(toggled);
+    gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
+
+    if (toggled == SHOW_VOLUME)
+        return;
+
+    main_window_volume_controls (toggled);
+
+    if (toggled || SHOW_VOLUME)
+        eel_gconf_set_integer (SHOW_VOLUME_CONTROLS, toggled);
 }
 
 static void
-dialpad_bar_cb(GtkToggleAction *togglemenuitem, gpointer user_data)
+dialpad_bar_cb (GtkToggleAction *togglemenuitem, gpointer user_data UNUSED)
 {
-  gboolean toggled = gtk_toggle_action_get_active(togglemenuitem);
-  if (toggled == SHOW_DIALPAD)
-    return;
-  main_window_dialpad(toggled);
-  if (toggled || SHOW_DIALPAD)
-    dbus_set_dialpad(toggled);
+    gboolean toggled = gtk_toggle_action_get_active (togglemenuitem);
+    gboolean conf_dialpad = eel_gconf_get_boolean (CONF_SHOW_DIALPAD);
+
+    if (toggled == conf_dialpad)
+        return;
+
+    main_window_dialpad (toggled);
+
+    if (toggled || conf_dialpad)
+        eel_gconf_set_boolean (CONF_SHOW_DIALPAD, toggled); //dbus_set_dialpad (toggled);
+
 }
 
 static void
-help_contents_cb(GtkAction *action)
+help_contents_cb (GtkAction *action UNUSED)
 {
-  GError *error = NULL;
+    GError *error = NULL;
 
-  gnome_help_display("sflphone.xml", NULL, &error);
-  if (error != NULL) {
-      g_warning("%s", error->message);
-      g_error_free(error);
-  }
+    gnome_help_display ("sflphone.xml", NULL, &error);
+
+    if (error != NULL) {
+        g_warning ("%s", error->message);
+        g_error_free (error);
+    }
 }
 
 static void
-help_about(void * foo UNUSED)
+help_about (void * foo UNUSED)
 {
-  gchar
-      *authors[] =
-        {
-            "Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com>",
-            "Jean-Philippe Barrette-LaPierre",
-            "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
-            "Julien Bonjean <julien.bonjean@savoirfairelinux.com>",
-            "Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>",
-            "Laurielle Lea",
-            "Yun Liu <yun.liu@savoirfairelinux.com>",
-            "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>",
-            "Yan Morin <yan.morin@savoirfairelinux.com>",
-            "Jérôme Oufella <jerome.oufella@savoirfairelinux.com>",
-            "Julien Plissonneau Duquene <julien.plissonneau.duquene@savoirfairelinux.com>",
-            "Alexandre Savard <alexandre.savard@savoirfairelinux.com>", NULL };
-  gchar *artists[] =
-    { "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
-        "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>", NULL };
-
-  gtk_show_about_dialog(GTK_WINDOW(get_main_window()), "artists", artists,
-      "authors", authors, "comments",
-      _("SFLphone is a VoIP client compatible with SIP and IAX2 protocols."),
-      "copyright", "Copyright © 2004-2009 Savoir-faire Linux Inc.", "name",
-      PACKAGE, "title", _("About SFLphone"), "version", VERSION, "website",
-      "http://www.sflphone.org", NULL);
+    gchar
+    *authors[] = {
+        "Pierre-Luc Bacon <pierre-luc.bacon@savoirfairelinux.com>",
+        "Jean-Philippe Barrette-LaPierre",
+        "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
+        "Julien Bonjean <julien.bonjean@savoirfairelinux.com>",
+        "Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>",
+        "Laurielle Lea",
+        "Yun Liu <yun.liu@savoirfairelinux.com>",
+        "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>",
+        "Yan Morin <yan.morin@savoirfairelinux.com>",
+        "Jérôme Oufella <jerome.oufella@savoirfairelinux.com>",
+        "Julien Plissonneau Duquene <julien.plissonneau.duquene@savoirfairelinux.com>",
+        "Alexandre Savard <alexandre.savard@savoirfairelinux.com>", NULL
+    };
+    gchar *artists[] = { "Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>",
+                         "Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>", NULL
+                       };
+
+    gtk_show_about_dialog (GTK_WINDOW (get_main_window()), "artists", artists,
+                           "authors", authors, "comments",
+                           _ ("SFLphone is a VoIP client compatible with SIP and IAX2 protocols."),
+                           "copyright", "Copyright © 2004-2009 Savoir-faire Linux Inc.", "name",
+                           PACKAGE, "title", _ ("About SFLphone"), "version", VERSION, "website",
+                           "http://www.sflphone.org", NULL);
 
 }
 
 /* ----------------------------------------------------------------- */
 
 static void
-call_new_call(void * foo UNUSED)
+call_new_call (void * foo UNUSED)
 {
-  sflphone_new_call();
+    DEBUG ("UIManager: New call button pressed");
+
+    sflphone_new_call();
 }
 
 static void
-call_quit(void * foo UNUSED)
+call_quit (void * foo UNUSED)
 {
-  sflphone_quit();
+    sflphone_quit();
 }
 
 static void
-call_minimize(void * foo UNUSED)
+call_minimize (void * foo UNUSED)
 {
 
-    if (g_strcasecmp (dbus_is_status_icon_enabled (), "true") == 0) {
-        gtk_widget_hide(GTK_WIDGET( get_main_window() ));
-        set_minimized(TRUE);
-    }
-    else {
-          sflphone_quit ();
+    if (eel_gconf_get_integer (SHOW_STATUSICON)) {
+        gtk_widget_hide (GTK_WIDGET (get_main_window()));
+        set_minimized (TRUE);
+    } else {
+        sflphone_quit ();
     }
 }
 
 static void
-switch_account(GtkWidget* item, gpointer data UNUSED)
+switch_account (GtkWidget* item, gpointer data UNUSED)
 {
-  account_t* acc = g_object_get_data(G_OBJECT(item), "account");
-  DEBUG("%s" , acc->accountID);
-  account_list_set_current(acc);
-  status_bar_display_account();
+    account_t* acc = g_object_get_data (G_OBJECT (item), "account");
+    DEBUG ("%s" , acc->accountID);
+    account_list_set_current (acc);
+    status_bar_display_account();
 }
 
 static void
-call_hold(void* foo UNUSED)
+call_hold (void* foo UNUSED)
 {
-  callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-  conference_obj_t * selectedConf = calltab_get_selected_conf();
-
-  if (selectedCall)
-    {
-      if (selectedCall->_state == CALL_STATE_HOLD)
-        {
-          sflphone_off_hold();
-        }
-      else
-        {
-          sflphone_on_hold();
-        }
-    }
-  else if (selectedConf)
-    {
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf();
 
-      switch (selectedConf->_state)
-        {
+    DEBUG ("UIManager: Hold button pressed (call)");
 
-      case CONFERENCE_STATE_HOLD:
-        {
-          selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-          sflphone_conference_off_hold(selectedConf);
+    if (selectedCall) {
+        if (selectedCall->_state == CALL_STATE_HOLD) {
+            sflphone_off_hold();
+        } else {
+            sflphone_on_hold();
         }
-        break;
+    } else if (selectedConf) {
 
-      case CONFERENCE_STATE_ACTIVE_ATACHED:
-      case CONFERENCE_STATE_ACTIVE_DETACHED:
-        {
-          selectedConf->_state = CONFERENCE_STATE_HOLD;
-          sflphone_conference_on_hold(selectedConf);
-        }
-        break;
-      default:
-        break;
+        switch (selectedConf->_state) {
+
+            case CONFERENCE_STATE_HOLD: {
+                selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+                sflphone_conference_off_hold (selectedConf);
+            }
+            break;
+
+            case CONFERENCE_STATE_ACTIVE_ATACHED:
+            case CONFERENCE_STATE_ACTIVE_DETACHED: {
+                selectedConf->_state = CONFERENCE_STATE_HOLD;
+                sflphone_conference_on_hold (selectedConf);
+            }
+            break;
+            default:
+                break;
         }
 
     }
 }
 
 static void
-conference_hold(void* foo UNUSED)
+call_im (void* foo UNUSED)
 {
-  conference_obj_t * selectedConf = calltab_get_selected_conf();
-
-  switch (selectedConf->_state)
-    {
-  case CONFERENCE_STATE_HOLD:
-    {
-      selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
-      sflphone_conference_off_hold(selectedConf);
-    }
-    break;
+    callable_obj_t *selectedCall = calltab_get_selected_call (current_calls);
+    conference_obj_t *selectedConf = calltab_get_selected_conf();
 
-  case CONFERENCE_STATE_ACTIVE_ATACHED:
-  case CONFERENCE_STATE_ACTIVE_DETACHED:
-    {
-      selectedConf->_state = CONFERENCE_STATE_HOLD;
-      sflphone_conference_on_hold(selectedConf);
-    }
-    break;
-  default:
-    break;
+    if (calltab_get_selected_type (current_calls) == A_CALL) {
+
+        if (selectedCall) {
+            im_widget_display ( (IMWidget **) (&selectedCall->_im_widget), NULL, selectedCall->_callID, NULL);
+        } else {
+            WARN ("Sorry. Instant messaging is not allowed outside a call\n");
+        }
+    } else {
+        if (selectedConf) {
+            im_widget_display ( (IMWidget **) (&selectedConf->_im_widget), NULL, selectedConf->_confID, NULL);
+        } else {
+            WARN ("Sorry. Instant messaging is not allowed outside a call\n");
+        }
     }
 }
 
 static void
-call_pick_up(void * foo UNUSED)
+conference_hold (void* foo UNUSED)
 {
-  DEBUG("------ call_button -----");
-  callable_obj_t * selectedCall;
-  callable_obj_t* new_call;
-
-  selectedCall = calltab_get_selected_call(active_calltree);
-
-  if (calllist_get_size(current_calls) > 0)
-    sflphone_pick_up();
-
-  else if (calllist_get_size(active_calltree) > 0)
-    {
-      if (selectedCall)
-        {
-          create_new_call(CALL, CALL_STATE_DIALING, "", "", "",
-              selectedCall->_peer_number, &new_call);
-
-          calllist_add(current_calls, new_call);
-          calltree_add_call(current_calls, new_call, NULL);
-          sflphone_place_call(new_call);
-          calltree_display(current_calls);
+    conference_obj_t * selectedConf = calltab_get_selected_conf();
+
+    DEBUG ("UIManager: Hold button pressed (conference)");
+
+    switch (selectedConf->_state) {
+        case CONFERENCE_STATE_HOLD: {
+            selectedConf->_state = CONFERENCE_STATE_ACTIVE_ATACHED;
+            sflphone_conference_off_hold (selectedConf);
         }
-      else
-        {
-          sflphone_new_call();
-          calltree_display(current_calls);
+        break;
+
+        case CONFERENCE_STATE_ACTIVE_ATACHED:
+        case CONFERENCE_STATE_ACTIVE_DETACHED: {
+            selectedConf->_state = CONFERENCE_STATE_HOLD;
+            sflphone_conference_on_hold (selectedConf);
         }
+        break;
+        default:
+            break;
     }
-  else
-    {
-      sflphone_new_call();
-      calltree_display(current_calls);
+}
+
+static void
+call_pick_up (void * foo UNUSED)
+{
+    DEBUG ("------ call_button -----");
+    callable_obj_t * selectedCall;
+    callable_obj_t* new_call;
+
+    selectedCall = calltab_get_selected_call (active_calltree);
+
+    if (calllist_get_size (current_calls) > 0)
+        sflphone_pick_up();
+
+    else if (calllist_get_size (active_calltree) > 0) {
+        if (selectedCall) {
+            create_new_call (CALL, CALL_STATE_DIALING, "", "", "",
+                             selectedCall->_peer_number, &new_call);
+
+            calllist_add (current_calls, new_call);
+            calltree_add_call (current_calls, new_call, NULL);
+            sflphone_place_call (new_call);
+            calltree_display (current_calls);
+        } else {
+            sflphone_new_call();
+            calltree_display (current_calls);
+        }
+    } else {
+        sflphone_new_call();
+        calltree_display (current_calls);
     }
 }
 
 static void
-call_hang_up(void)
+call_hang_up (void)
 {
-	/* 
-	 * [#3020]	Restore the record toggle button 
-	 *			We set it to FALSE, as when we hang up a call, the recording is stopped.
-	 */
-	gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
-  
-	sflphone_hang_up();
+
+    DEBUG ("UIManager: Hang up button pressed (call)");
+    /*
+     * [#3020]	Restore the record toggle button
+     *			We set it to FALSE, as when we hang up a call, the recording is stopped.
+     */
+    gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (recordWidget), FALSE);
+
+    sflphone_hang_up();
 
 }
 
 static void
-conference_hang_up(void)
+conference_hang_up (void)
 {
-  sflphone_conference_hang_up();
+    DEBUG ("UIManager: Hang up button pressed (conference)");
+
+    sflphone_conference_hang_up();
 }
 
 static void
-call_record(void)
+call_record (void)
 {
-  sflphone_rec_call();
+    DEBUG ("UIManager: Record button pressed");
+
+    sflphone_rec_call();
 }
 
 static void
-call_configuration_assistant(void * foo UNUSED)
+call_configuration_assistant (void * foo UNUSED)
 {
 #if GTK_CHECK_VERSION(2,10,0)
-  build_wizard();
+    build_wizard();
 #endif
 }
 
 static void
-remove_from_history(void * foo UNUSED)
+remove_from_history (void * foo UNUSED)
 {
-  callable_obj_t* c = calltab_get_selected_call(history);
-  if (c)
-    {
-      DEBUG("Remove the call from the history");
-      calllist_remove_from_history(c);
+    callable_obj_t* c = calltab_get_selected_call (history);
+
+    if (c) {
+        DEBUG ("UIManager: Remove the call from the history");
+        calllist_remove_from_history (c);
     }
 }
 
 static void
-call_back(void * foo UNUSED)
+call_back (void * foo UNUSED)
 {
-  callable_obj_t *selected_call, *new_call;
+    callable_obj_t *selected_call, *new_call;
 
-  selected_call = calltab_get_selected_call(active_calltree);
+    selected_call = calltab_get_selected_call (active_calltree);
 
-  if (selected_call)
-    {
-      create_new_call(CALL, CALL_STATE_DIALING, "", "",
-          selected_call->_peer_name, selected_call->_peer_number, &new_call);
+    if (selected_call) {
+        create_new_call (CALL, CALL_STATE_DIALING, "", "",
+                         selected_call->_peer_name, selected_call->_peer_number, &new_call);
 
-      calllist_add(current_calls, new_call);
-      calltree_add_call(current_calls, new_call, NULL);
-      sflphone_place_call(new_call);
-      calltree_display(current_calls);
+        calllist_add (current_calls, new_call);
+        calltree_add_call (current_calls, new_call, NULL);
+        sflphone_place_call (new_call);
+        calltree_display (current_calls);
     }
 }
 
 static void
-edit_preferences(void * foo UNUSED)
+edit_preferences (void * foo UNUSED)
 {
-  show_preferences_dialog();
+    show_preferences_dialog();
 }
 
 static void
-edit_accounts(void * foo UNUSED)
+edit_accounts (void * foo UNUSED)
 {
-  show_account_list_config_dialog();
+    show_account_list_config_dialog();
 }
 
 // The menu Edit/Copy should copy the current selected call's number
 static void
-edit_copy(void * foo UNUSED)
+edit_copy (void * foo UNUSED)
 {
-  GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
-  callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-  gchar * no = NULL;
-
-  if (selectedCall)
-    {
-      switch (selectedCall->_state)
-        {
-      case CALL_STATE_TRANSFERT:
-      case CALL_STATE_DIALING:
-      case CALL_STATE_RINGING:
-        no = selectedCall->_peer_number;
-        break;
-      case CALL_STATE_CURRENT:
-      case CALL_STATE_HOLD:
-      case CALL_STATE_BUSY:
-      case CALL_STATE_FAILURE:
-      case CALL_STATE_INCOMING:
-      default:
-        no = selectedCall->_peer_number;
-        break;
+    GtkClipboard* clip = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    gchar * no = NULL;
+
+    if (selectedCall) {
+        switch (selectedCall->_state) {
+            case CALL_STATE_TRANSFERT:
+            case CALL_STATE_DIALING:
+            case CALL_STATE_RINGING:
+                no = selectedCall->_peer_number;
+                break;
+            case CALL_STATE_CURRENT:
+            case CALL_STATE_HOLD:
+            case CALL_STATE_BUSY:
+            case CALL_STATE_FAILURE:
+            case CALL_STATE_INCOMING:
+            default:
+                no = selectedCall->_peer_number;
+                break;
         }
-      DEBUG("Clipboard number: %s\n", no);
-      gtk_clipboard_set_text(clip, no, strlen(no));
+
+        DEBUG ("UIManager: Clipboard number: %s\n", no);
+        gtk_clipboard_set_text (clip, no, strlen (no));
     }
 
 }
 
 // The menu Edit/Paste should paste the clipboard into the current selected call
 static void
-edit_paste(void * foo UNUSED)
+edit_paste (void * foo UNUSED)
 {
 
-  GtkClipboard* clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
-  callable_obj_t * selectedCall = calltab_get_selected_call(current_calls);
-  gchar * no = gtk_clipboard_wait_for_text(clip);
-
-  if (no && selectedCall)
-    {
-      switch (selectedCall->_state)
-        {
-      case CALL_STATE_TRANSFERT:
-      case CALL_STATE_DIALING:
-        // Add the text to the number
-        {
-          gchar * before;
-          before = selectedCall->_peer_number;
-          DEBUG("TO: %s\n", before);
-          selectedCall->_peer_number = g_strconcat(before, no, NULL);
-
-          if (selectedCall->_state == CALL_STATE_DIALING)
+    GtkClipboard* clip = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+    callable_obj_t * selectedCall = calltab_get_selected_call (current_calls);
+    gchar * no = gtk_clipboard_wait_for_text (clip);
+
+    if (no && selectedCall) {
+        switch (selectedCall->_state) {
+            case CALL_STATE_TRANSFERT:
+            case CALL_STATE_DIALING:
+                // Add the text to the number
             {
-              selectedCall->_peer_info = g_strconcat("\"\" <",
-                  selectedCall->_peer_number, ">", NULL);
+                gchar * before;
+                before = selectedCall->_peer_number;
+                DEBUG ("TO: %s\n", before);
+                selectedCall->_peer_number = g_strconcat (before, no, NULL);
+
+                if (selectedCall->_state == CALL_STATE_DIALING) {
+                    selectedCall->_peer_info = g_strconcat ("\"\" <",
+                                                            selectedCall->_peer_number, ">", NULL);
+                }
+
+                calltree_update_call (current_calls, selectedCall, NULL);
             }
-          calltree_update_call(current_calls, selectedCall, NULL);
-        }
-        break;
-      case CALL_STATE_RINGING:
-      case CALL_STATE_INCOMING:
-      case CALL_STATE_BUSY:
-      case CALL_STATE_FAILURE:
-      case CALL_STATE_HOLD:
-        { // Create a new call to hold the new text
-          selectedCall = sflphone_new_call();
-
-          gchar * before = selectedCall->_peer_number;
-          selectedCall->_peer_number = g_strconcat(selectedCall->_peer_number,
-              no, NULL);
-          DEBUG("TO: %s", selectedCall->_peer_number);
-
-          selectedCall->_peer_info = g_strconcat("\"\" <",
-              selectedCall->_peer_number, ">", NULL);
-
-          calltree_update_call(current_calls, selectedCall, NULL);
-        }
-        break;
-      case CALL_STATE_CURRENT:
-      default:
-        {
-          unsigned int i;
-          for (i = 0; i < strlen(no); i++)
-            {
-              gchar * oneNo = g_strndup(&no[i], 1);
-              DEBUG("<%s>", oneNo);
-              dbus_play_dtmf(oneNo);
+            break;
+            case CALL_STATE_RINGING:
+            case CALL_STATE_INCOMING:
+            case CALL_STATE_BUSY:
+            case CALL_STATE_FAILURE:
+            case CALL_STATE_HOLD: { // Create a new call to hold the new text
+                selectedCall = sflphone_new_call();
+
+                selectedCall->_peer_number = g_strconcat (selectedCall->_peer_number,
+                                             no, NULL);
+                DEBUG ("TO: %s", selectedCall->_peer_number);
 
-              gchar * temp = g_strconcat(selectedCall->_peer_number, oneNo,
-                  NULL);
-              selectedCall->_peer_info = get_peer_info(temp,
-                  selectedCall->_peer_name);
-              // g_free(temp);
-              calltree_update_call(current_calls, selectedCall, NULL);
+                selectedCall->_peer_info = g_strconcat ("\"\" <",
+                                                        selectedCall->_peer_number, ">", NULL);
 
+                calltree_update_call (current_calls, selectedCall, NULL);
             }
-        }
-        break;
+            break;
+            case CALL_STATE_CURRENT:
+            default: {
+                unsigned int i;
+
+                for (i = 0; i < strlen (no); i++) {
+                    gchar * oneNo = g_strndup (&no[i], 1);
+                    DEBUG ("<%s>", oneNo);
+                    dbus_play_dtmf (oneNo);
+
+                    gchar * temp = g_strconcat (selectedCall->_peer_number, oneNo,
+                                                NULL);
+                    selectedCall->_peer_info = get_peer_info (temp,
+                                               selectedCall->_peer_name);
+                    // g_free(temp);
+                    calltree_update_call (current_calls, selectedCall, NULL);
+
+                }
+            }
+            break;
         }
 
-    }
-  else // There is no current call, create one
-    {
-      selectedCall = sflphone_new_call();
-
-      gchar * before = selectedCall->_peer_number;
-      selectedCall->_peer_number = g_strconcat(selectedCall->_peer_number, no,
-          NULL);
-      g_free(before);
-      DEBUG("TO: %s", selectedCall->_peer_number);
-
-      g_free(selectedCall->_peer_info);
-      selectedCall->_peer_info = g_strconcat("\"\" <",
-          selectedCall->_peer_number, ">", NULL);
-      calltree_update_call(current_calls, selectedCall, NULL);
+    } else { // There is no current call, create one
+        selectedCall = sflphone_new_call();
+
+        gchar * before = selectedCall->_peer_number;
+        selectedCall->_peer_number = g_strconcat (selectedCall->_peer_number, no,
+                                     NULL);
+        g_free (before);
+        DEBUG ("UIManager: TO: %s", selectedCall->_peer_number);
+
+        g_free (selectedCall->_peer_info);
+        selectedCall->_peer_info = g_strconcat ("\"\" <",
+                                                selectedCall->_peer_number, ">", NULL);
+        calltree_update_call (current_calls, selectedCall, NULL);
     }
 
 }
 
 static void
-clear_history(void)
+clear_history (void)
 {
-  if (calllist_get_size(history) != 0)
-    {
-      calllist_clean_history();
+    if (calllist_get_size (history) != 0) {
+        calllist_clean_history();
     }
 }
 
@@ -765,771 +857,819 @@ clear_history(void)
 static void
 call_transfer_cb()
 {
-  gboolean active = gtk_toggle_tool_button_get_active(
-      GTK_TOGGLE_TOOL_BUTTON (transferToolbar));
-  active ? sflphone_set_transfert() : sflphone_unset_transfert();
+    gboolean active = gtk_toggle_tool_button_get_active (
+                          GTK_TOGGLE_TOOL_BUTTON (transferToolbar));
+    active ? sflphone_set_transfert() : sflphone_unset_transfert();
 }
 
 static void
-call_mailbox_cb(void)
+call_mailbox_cb (void)
 {
-  account_t* current;
-  callable_obj_t *mailbox_call;
-  gchar *to, *from, *account_id;
-
-  current = account_list_get_current();
-  if (current == NULL) // Should not happens
-    return;
-
-  to = g_strdup(g_hash_table_lookup(current->properties, ACCOUNT_MAILBOX));
-  account_id = g_strdup(current->accountID);
-
-  create_new_call(CALL, CALL_STATE_DIALING, "", account_id, _("Voicemail"), to,
-      &mailbox_call);
-  DEBUG("TO : %s" , mailbox_call->_peer_number);
-  calllist_add(current_calls, mailbox_call);
-  calltree_add_call(current_calls, mailbox_call, NULL);
-  update_actions();
-  sflphone_place_call(mailbox_call);
-  calltree_display(current_calls);
+    account_t* current;
+    callable_obj_t *mailbox_call;
+    gchar *to, *account_id;
+
+    current = account_list_get_current();
+
+    if (current == NULL) // Should not happens
+        return;
+
+    to = g_strdup (g_hash_table_lookup (current->properties, ACCOUNT_MAILBOX));
+    account_id = g_strdup (current->accountID);
+
+    create_new_call (CALL, CALL_STATE_DIALING, "", account_id, _ ("Voicemail"), to,
+                     &mailbox_call);
+    DEBUG ("TO : %s" , mailbox_call->_peer_number);
+    calllist_add (current_calls, mailbox_call);
+    calltree_add_call (current_calls, mailbox_call, NULL);
+    update_actions();
+    sflphone_place_call (mailbox_call);
+    calltree_display (current_calls);
 }
 
 static void
-toggle_history_cb(GtkToggleAction *action, gpointer user_data)
+toggle_history_cb (GtkToggleAction *action, gpointer user_data UNUSED)
 {
-  gboolean toggle;
-  toggle = gtk_toggle_action_get_active(action);
-  (toggle) ? calltree_display(history) : calltree_display(current_calls);
+    gboolean toggle;
+    toggle = gtk_toggle_action_get_active (action);
+    (toggle) ? calltree_display (history) : calltree_display (current_calls);
 }
 
 static void
-toggle_addressbook_cb(GtkToggleAction *action, gpointer user_data)
+toggle_addressbook_cb (GtkToggleAction *action, gpointer user_data UNUSED)
 {
-  gboolean toggle;
-  toggle = gtk_toggle_action_get_active(action);
-  (toggle) ? calltree_display(contacts) : calltree_display(current_calls);
+    gboolean toggle;
+    toggle = gtk_toggle_action_get_active (action);
+    (toggle) ? calltree_display (contacts) : calltree_display (current_calls);
 }
 
-static const GtkActionEntry menu_entries[] =
-  {
-
-  // Call Menu
-        { "Call", NULL, N_("Call") },
-        { "NewCall", GTK_STOCK_DIAL, N_("_New call"), "<control>N",
-            N_("Place a new call"), G_CALLBACK (call_new_call) },
-        { "PickUp", GTK_STOCK_PICKUP, N_("_Pick up"), NULL,
-            N_("Answer the call"), G_CALLBACK (call_pick_up) },
-        { "HangUp", GTK_STOCK_HANGUP, N_("_Hang up"), "<control>S",
-            N_("Finish the call"), G_CALLBACK (call_hang_up) },
-        { "OnHold", GTK_STOCK_ONHOLD, N_("O_n hold"), "<control>P",
-            N_("Place the call on hold"), G_CALLBACK (call_hold) },
-        { "OffHold", GTK_STOCK_OFFHOLD, N_("O_ff hold"), "<control>P",
-            N_("Place the call off hold"), G_CALLBACK (call_hold) },
-        { "AccountAssistant", NULL, N_("Configuration _Assistant"), NULL,
-            N_("Run the configuration assistant"),
-            G_CALLBACK (call_configuration_assistant) },
-        { "Voicemail", "mail-read", N_("Voicemail"), NULL,
-            N_("Call your voicemail"), G_CALLBACK (call_mailbox_cb) },
-        { "Close", GTK_STOCK_CLOSE, N_("_Close"), "<control>W",
-            N_("Minimize to system tray"), G_CALLBACK (call_minimize) },
-        { "Quit", GTK_STOCK_CLOSE, N_("_Quit"), "<control>Q",
-            N_("Quit the program"), G_CALLBACK (call_quit) },
-
-      // Edit Menu
-        { "Edit", NULL, N_("_Edit") },
-        { "Copy", GTK_STOCK_COPY, N_("_Copy"), "<control>C",
-            N_("Copy the selection"), G_CALLBACK (edit_copy) },
-        { "Paste", GTK_STOCK_PASTE, N_("_Paste"), "<control>V",
-            N_("Paste the clipboard"), G_CALLBACK (edit_paste) },
-        { "ClearHistory", GTK_STOCK_CLEAR, N_("Clear _history"), NULL,
-            N_("Clear the call history"), G_CALLBACK (clear_history) },
-        { "Accounts", NULL, N_("_Accounts"), NULL, N_("Edit your accounts"),
-            G_CALLBACK (edit_accounts) },
-        { "Preferences", GTK_STOCK_PREFERENCES, N_("_Preferences"), NULL,
-            N_("Change your preferences"), G_CALLBACK (edit_preferences) },
-
-      // View Menu
-        { "View", NULL, N_("_View") },
-
-      // Help menu
-        { "Help", NULL, N_("_Help") },
-        { "HelpContents", GTK_STOCK_HELP, N_("Contents"), "F1",
-            N_("Open the manual"), G_CALLBACK (help_contents_cb) },
-        { "About", GTK_STOCK_ABOUT, NULL, NULL, N_("About this application"),
-            G_CALLBACK (help_about) }
-
-  };
-
-static const GtkToggleActionEntry toggle_menu_entries[] =
-  {
-
-    { "Transfer", GTK_STOCK_TRANSFER, N_("_Transfer"), "<control>T",
-        N_("Transfer the call"), NULL }, //G_CALLBACK (call_transfer_cb) },
-        { "Record", GTK_STOCK_MEDIA_RECORD, N_("_Record"), "<control>R",
-            N_("Record the current conversation"), NULL }, // G_CALLBACK (call_record) },
-        { "Toolbar", NULL, N_("_Show toolbar"), "<control>T",
-            N_("Show the toolbar"), NULL },
-        { "Dialpad", NULL, N_("_Dialpad"), "<control>D",
-            N_("Show the dialpad"), G_CALLBACK (dialpad_bar_cb) },
-        { "VolumeControls", NULL, N_("_Volume controls"), "<control>V",
-            N_("Show the volume controls"), G_CALLBACK (volume_bar_cb) },
-        { "History", "appointment-soon", N_("_History"), NULL,
-            N_("Calls history"), G_CALLBACK (toggle_history_cb), FALSE },
-        { "Addressbook", GTK_STOCK_ADDRESSBOOK, N_("_Address book"), NULL,
-            N_("Address book"), G_CALLBACK (toggle_addressbook_cb), FALSE }
-
-  };
+static const GtkActionEntry menu_entries[] = {
+
+    // Call Menu
+    { "Call", NULL, N_ ("Call") },
+    { "NewCall", GTK_STOCK_DIAL, N_ ("_New call"), "<control>N",
+      N_ ("Place a new call"), G_CALLBACK (call_new_call) },
+    { "PickUp", GTK_STOCK_PICKUP, N_ ("_Pick up"), NULL,
+      N_ ("Answer the call"), G_CALLBACK (call_pick_up) },
+    { "HangUp", GTK_STOCK_HANGUP, N_ ("_Hang up"), "<control>S",
+      N_ ("Finish the call"), G_CALLBACK (call_hang_up) },
+    { "OnHold", GTK_STOCK_ONHOLD, N_ ("O_n hold"), "<control>P",
+      N_ ("Place the call on hold"), G_CALLBACK (call_hold) },
+    { "OffHold", GTK_STOCK_OFFHOLD, N_ ("O_ff hold"), "<control>P",
+      N_ ("Place the call off hold"), G_CALLBACK (call_hold) },
+    { "InstantMessaging", GTK_STOCK_IM, N_ ("Send _message"), "<control>M",
+      N_ ("Send message"), G_CALLBACK (call_im) },
+    { "AccountAssistant", NULL, N_ ("Configuration _Assistant"), NULL,
+      N_ ("Run the configuration assistant"),
+      G_CALLBACK (call_configuration_assistant) },
+    { "Voicemail", "mail-read", N_ ("Voicemail"), NULL,
+      N_ ("Call your voicemail"), G_CALLBACK (call_mailbox_cb) },
+    { "Close", GTK_STOCK_CLOSE, N_ ("_Close"), "<control>W",
+      N_ ("Minimize to system tray"), G_CALLBACK (call_minimize) },
+    { "Quit", GTK_STOCK_CLOSE, N_ ("_Quit"), "<control>Q",
+      N_ ("Quit the program"), G_CALLBACK (call_quit) },
+
+    // Edit Menu
+    { "Edit", NULL, N_ ("_Edit") },
+    { "Copy", GTK_STOCK_COPY, N_ ("_Copy"), "<control>C",
+      N_ ("Copy the selection"), G_CALLBACK (edit_copy) },
+    { "Paste", GTK_STOCK_PASTE, N_ ("_Paste"), "<control>V",
+      N_ ("Paste the clipboard"), G_CALLBACK (edit_paste) },
+    { "ClearHistory", GTK_STOCK_CLEAR, N_ ("Clear _history"), NULL,
+      N_ ("Clear the call history"), G_CALLBACK (clear_history) },
+    { "Accounts", NULL, N_ ("_Accounts"), NULL, N_ ("Edit your accounts"),
+      G_CALLBACK (edit_accounts) },
+    { "Preferences", GTK_STOCK_PREFERENCES, N_ ("_Preferences"), NULL,
+      N_ ("Change your preferences"), G_CALLBACK (edit_preferences) },
+
+    // View Menu
+    { "View", NULL, N_ ("_View") },
+
+    // Help menu
+    { "Help", NULL, N_ ("_Help") },
+    { "HelpContents", GTK_STOCK_HELP, N_ ("Contents"), "F1",
+      N_ ("Open the manual"), G_CALLBACK (help_contents_cb) },
+    { "About", GTK_STOCK_ABOUT, NULL, NULL, N_ ("About this application"),
+      G_CALLBACK (help_about) }
+
+};
+
+static const GtkToggleActionEntry toggle_menu_entries[] = {
+
+    { "Transfer", GTK_STOCK_TRANSFER, N_ ("_Transfer"), "<control>T", N_ ("Transfer the call"), NULL, TRUE },
+    { "Record", GTK_STOCK_MEDIA_RECORD, N_ ("_Record"), "<control>R", N_ ("Record the current conversation"), NULL, TRUE },
+    { "Toolbar", NULL, N_ ("_Show toolbar"), "<control>T", N_ ("Show the toolbar"), NULL, TRUE },
+    { "Dialpad", NULL, N_ ("_Dialpad"), "<control>D", N_ ("Show the dialpad"), G_CALLBACK (dialpad_bar_cb), TRUE },
+    { "VolumeControls", NULL, N_ ("_Volume controls"), "<control>V", N_ ("Show the volume controls"), G_CALLBACK (volume_bar_cb), TRUE },
+    { "History", "appointment-soon", N_ ("_History"), NULL, N_ ("Calls history"), G_CALLBACK (toggle_history_cb), FALSE },
+    { "Addressbook", GTK_STOCK_ADDRESSBOOK, N_ ("_Address book"), NULL, N_ ("Address book"), G_CALLBACK (toggle_addressbook_cb), FALSE }
+};
 
 gboolean
-uimanager_new(GtkUIManager **_ui_manager)
+uimanager_new (GtkUIManager **_ui_manager)
 {
 
-  GtkUIManager *ui_manager;
-  GtkActionGroup *action_group;
-  GtkWidget *window;
-  gchar *path;
-  GError *error = NULL;
-
-  window = get_main_window();
-  ui_manager = gtk_ui_manager_new();
-
-  /* Create an accel group for window's shortcuts */
-  path = g_build_filename(SFLPHONE_UIDIR_UNINSTALLED, "./ui.xml", NULL);
-  if (g_file_test(path, G_FILE_TEST_EXISTS))
-    {
-      gtk_ui_manager_add_ui_from_file(ui_manager, path, &error);
-
-      if (error != NULL)
-        {
-          g_error_free(error);
-          return FALSE;
+    GtkUIManager *ui_manager;
+    GtkActionGroup *action_group;
+    GtkWidget *window;
+    gchar *path;
+    GError *error = NULL;
+
+    window = get_main_window();
+    ui_manager = gtk_ui_manager_new();
+
+    /* Create an accel group for window's shortcuts */
+    path = g_build_filename (SFLPHONE_UIDIR_UNINSTALLED, "./ui.xml", NULL);
+
+    if (g_file_test (path, G_FILE_TEST_EXISTS)) {
+        gtk_ui_manager_add_ui_from_file (ui_manager, path, &error);
+
+        if (error != NULL) {
+            g_error_free (error);
+            return FALSE;
         }
-      g_free(path);
-    }
-  else
-    {
-      path = g_build_filename(SFLPHONE_UIDIR, "./ui.xml", NULL);
-      if (g_file_test(path, G_FILE_TEST_EXISTS))
-        {
-          gtk_ui_manager_add_ui_from_file(ui_manager, path, &error);
-
-          if (error != NULL)
-            {
-              g_error_free(error);
-              return FALSE;
+
+        g_free (path);
+    } else {
+        path = g_build_filename (SFLPHONE_UIDIR, "./ui.xml", NULL);
+
+        if (g_file_test (path, G_FILE_TEST_EXISTS)) {
+            gtk_ui_manager_add_ui_from_file (ui_manager, path, &error);
+
+            if (error != NULL) {
+                g_error_free (error);
+                return FALSE;
             }
-          g_free(path);
-        }
-      else
-        return FALSE;
+
+            g_free (path);
+        } else
+            return FALSE;
     }
-  action_group = gtk_action_group_new("SFLphoneWindowActions");
-  // To translate label and tooltip entries
-  gtk_action_group_set_translation_domain(action_group, "sflphone-client-gnome");
-  gtk_action_group_add_actions(action_group, menu_entries,
-      G_N_ELEMENTS (menu_entries), window);
-  gtk_action_group_add_toggle_actions(action_group, toggle_menu_entries,
-      G_N_ELEMENTS (toggle_menu_entries), window);
-  //gtk_action_group_add_radio_actions (action_group, radio_menu_entries, G_N_ELEMENTS (radio_menu_entries), CALLTREE_CALLS, G_CALLBACK (calltree_switch_cb), window);
-  gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
-
-  *_ui_manager = ui_manager;
-
-  return TRUE;
+
+    action_group = gtk_action_group_new ("SFLphoneWindowActions");
+    // To translate label and tooltip entries
+    gtk_action_group_set_translation_domain (action_group, "sflphone-client-gnome");
+    gtk_action_group_add_actions (action_group, menu_entries,
+                                  G_N_ELEMENTS (menu_entries), window);
+    gtk_action_group_add_toggle_actions (action_group, toggle_menu_entries,
+                                         G_N_ELEMENTS (toggle_menu_entries), window);
+    //gtk_action_group_add_radio_actions (action_group, radio_menu_entries, G_N_ELEMENTS (radio_menu_entries), CALLTREE_CALLS, G_CALLBACK (calltree_switch_cb), window);
+    gtk_ui_manager_insert_action_group (ui_manager, action_group, 0);
+
+    *_ui_manager = ui_manager;
+
+    return TRUE;
 }
 
 static void
-edit_number_cb(GtkWidget *widget UNUSED, gpointer user_data)
+edit_number_cb (GtkWidget *widget UNUSED, gpointer user_data)
 {
 
-  show_edit_number((callable_obj_t*) user_data);
+    show_edit_number ( (callable_obj_t*) user_data);
 }
 
 void
-add_registered_accounts_to_menu(GtkWidget *menu)
+add_registered_accounts_to_menu (GtkWidget *menu)
 {
 
-  GtkWidget *menu_items;
-  unsigned int i;
-  account_t* acc, *current;
-  gchar* alias;
-
-  menu_items = gtk_separator_menu_item_new();
-  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-  gtk_widget_show(menu_items);
-
-  for (i = 0; i < account_list_get_size(); i++)
-    {
-      acc = account_list_get_nth(i);
-      // Display only the registered accounts
-      if (g_strcasecmp(account_state_name(acc->state), account_state_name(
-          ACCOUNT_STATE_REGISTERED)) == 0)
-        {
-          alias = g_strconcat(g_hash_table_lookup(acc->properties,
-              ACCOUNT_ALIAS), " - ", g_hash_table_lookup(acc->properties,
-              ACCOUNT_TYPE), NULL);
-          menu_items = gtk_check_menu_item_new_with_mnemonic(alias);
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          g_object_set_data(G_OBJECT( menu_items ), "account", acc);
-          g_free(alias);
-          current = account_list_get_current();
-          if (current)
-            {
-              gtk_check_menu_item_set_active(
-                  GTK_CHECK_MENU_ITEM(menu_items),
-                  (g_strcasecmp(acc->accountID, current->accountID) == 0) ? TRUE
-                      : FALSE);
+    GtkWidget *menu_items;
+    unsigned int i;
+    account_t* acc, *current;
+    gchar* alias;
+
+    menu_items = gtk_separator_menu_item_new();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+    gtk_widget_show (menu_items);
+
+    for (i = 0; i < account_list_get_size(); i++) {
+        acc = account_list_get_nth (i);
+
+        // Display only the registered accounts
+        if (g_strcasecmp (account_state_name (acc->state), account_state_name (
+                              ACCOUNT_STATE_REGISTERED)) == 0) {
+            alias = g_strconcat (g_hash_table_lookup (acc->properties,
+                                 ACCOUNT_ALIAS), " - ", g_hash_table_lookup (acc->properties,
+                                         ACCOUNT_TYPE), NULL);
+            menu_items = gtk_check_menu_item_new_with_mnemonic (alias);
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            g_object_set_data (G_OBJECT (menu_items), "account", acc);
+            g_free (alias);
+            current = account_list_get_current();
+
+            if (current) {
+                gtk_check_menu_item_set_active (
+                    GTK_CHECK_MENU_ITEM (menu_items),
+                    (g_strcasecmp (acc->accountID, current->accountID) == 0) ? TRUE
+                    : FALSE);
             }
-          g_signal_connect (G_OBJECT (menu_items), "activate",
-              G_CALLBACK (switch_account),
-              NULL);
-          gtk_widget_show(menu_items);
+
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (switch_account),
+                              NULL);
+            gtk_widget_show (menu_items);
         } // fi
     }
 
 }
 
 void
-show_popup_menu(GtkWidget *my_widget, GdkEventButton *event)
+show_popup_menu (GtkWidget *my_widget, GdkEventButton *event)
 {
-  // TODO update the selection to make sure the call under the mouse is the call selected
-
-  // call type boolean
-  gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record =
-      FALSE, detach = FALSE;
-  gboolean accounts = FALSE;
-
-  // conference type boolean
-  gboolean hangup_conf = FALSE, hold_conf = FALSE;
-
-  callable_obj_t * selectedCall;
-  conference_obj_t * selectedConf;
-
-  if (calltab_get_selected_type(current_calls) == A_CALL)
-    {
-      DEBUG("MENUS: SELECTED A CALL");
-      selectedCall = calltab_get_selected_call(current_calls);
-
-      if (selectedCall)
-        {
-          copy = TRUE;
-          switch (selectedCall->_state)
-            {
-          case CALL_STATE_INCOMING:
-            pickup = TRUE;
-            hangup = TRUE;
-            detach = TRUE;
-            break;
-          case CALL_STATE_HOLD:
-            hangup = TRUE;
-            hold = TRUE;
-            detach = TRUE;
-            break;
-          case CALL_STATE_RINGING:
-            hangup = TRUE;
-            detach = TRUE;
-            break;
-          case CALL_STATE_DIALING:
-            pickup = TRUE;
-            hangup = TRUE;
-            accounts = TRUE;
-            break;
-          case CALL_STATE_RECORD:
-          case CALL_STATE_CURRENT:
-            hangup = TRUE;
-            hold = TRUE;
-            record = TRUE;
-            detach = TRUE;
-            break;
-          case CALL_STATE_BUSY:
-          case CALL_STATE_FAILURE:
-            hangup = TRUE;
-            break;
-          default:
-            WARN("Should not happen in show_popup_menu for calls!")
-            ;
-            break;
+    // TODO update the selection to make sure the call under the mouse is the call selected
+
+    // call type boolean
+    gboolean pickup = FALSE, hangup = FALSE, hold = FALSE, copy = FALSE, record =
+                                          FALSE, detach = FALSE, im = FALSE;
+    gboolean accounts = FALSE;
+
+    // conference type boolean
+    gboolean hangup_conf = FALSE, hold_conf = FALSE;
+
+    callable_obj_t * selectedCall = NULL;
+    conference_obj_t * selectedConf;
+
+    if (calltab_get_selected_type (current_calls) == A_CALL) {
+        DEBUG ("UIManager: Menus: Selected a call");
+        selectedCall = calltab_get_selected_call (current_calls);
+
+        if (selectedCall) {
+            copy = TRUE;
+
+            switch (selectedCall->_state) {
+                case CALL_STATE_INCOMING:
+                    pickup = TRUE;
+                    hangup = TRUE;
+                    detach = TRUE;
+                    break;
+                case CALL_STATE_HOLD:
+                    hangup = TRUE;
+                    hold = TRUE;
+                    detach = TRUE;
+                    break;
+                case CALL_STATE_RINGING:
+                    hangup = TRUE;
+                    detach = TRUE;
+                    break;
+                case CALL_STATE_DIALING:
+                    pickup = TRUE;
+                    hangup = TRUE;
+                    accounts = TRUE;
+                    break;
+                case CALL_STATE_RECORD:
+                case CALL_STATE_CURRENT:
+                    hangup = TRUE;
+                    hold = TRUE;
+                    record = TRUE;
+                    detach = TRUE;
+                    im = TRUE;
+                    break;
+                case CALL_STATE_BUSY:
+                case CALL_STATE_FAILURE:
+                    hangup = TRUE;
+                    break;
+                default:
+                    WARN ("UIManager: Should not happen in show_popup_menu for calls!")
+                    ;
+                    break;
             }
         }
-    }
-  else
-    {
-      DEBUG("MENUS: SELECTED A CONF");
-      selectedConf = calltab_get_selected_conf();
-
-      if (selectedConf)
-        {
-          switch (selectedConf->_state)
-            {
-          case CONFERENCE_STATE_ACTIVE_ATACHED:
-            hangup_conf = TRUE;
-            hold_conf = TRUE;
-            break;
-          case CONFERENCE_STATE_ACTIVE_DETACHED:
-            break;
-          case CONFERENCE_STATE_HOLD:
-            hangup_conf = TRUE;
-            hold_conf = TRUE;
-            break;
-          default:
-            WARN("Should not happen in show_popup_menu for conferences!")
-            ;
-            break;
+    } else {
+        DEBUG ("UIManager: Menus: selected a conf");
+        selectedConf = calltab_get_selected_conf();
+
+        if (selectedConf) {
+            switch (selectedConf->_state) {
+                case CONFERENCE_STATE_ACTIVE_ATACHED:
+                    hangup_conf = TRUE;
+                    hold_conf = TRUE;
+                    break;
+                case CONFERENCE_STATE_ACTIVE_DETACHED:
+                    break;
+                case CONFERENCE_STATE_HOLD:
+                    hangup_conf = TRUE;
+                    hold_conf = TRUE;
+                    break;
+                default:
+                    WARN ("UIManager: Should not happen in show_popup_menu for conferences!")
+                    ;
+                    break;
             }
         }
 
     }
 
-  GtkWidget *menu;
-  GtkWidget *image;
-  int button, event_time;
-  GtkWidget * menu_items;
-
-  menu = gtk_menu_new();
-  //g_signal_connect (menu, "deactivate",
-  //       G_CALLBACK (gtk_widget_destroy), NULL);
-  if (calltab_get_selected_type(current_calls) == A_CALL)
-    {
-      DEBUG("BUILD CALL MENU");
-
-      if (copy)
-        {
-          menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY,
-              get_accel_group());
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          g_signal_connect (G_OBJECT (menu_items), "activate",
-              G_CALLBACK (edit_copy),
-              NULL);
-          gtk_widget_show(menu_items);
+    GtkWidget *menu;
+    GtkWidget *image;
+    int button, event_time;
+    GtkWidget * menu_items;
+
+    menu = gtk_menu_new();
+
+    //g_signal_connect (menu, "deactivate",
+    //       G_CALLBACK (gtk_widget_destroy), NULL);
+    if (calltab_get_selected_type (current_calls) == A_CALL) {
+        DEBUG ("UIManager: Build call menu");
+
+        if (copy) {
+            menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY,
+                         get_accel_group());
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (edit_copy),
+                              NULL);
+            gtk_widget_show (menu_items);
         }
 
-      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_PASTE,
-          get_accel_group());
-      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-      g_signal_connect (G_OBJECT (menu_items), "activate",
-          G_CALLBACK (edit_paste),
-          NULL);
-      gtk_widget_show(menu_items);
-
-      if (pickup || hangup || hold)
-        {
-          menu_items = gtk_separator_menu_item_new();
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          gtk_widget_show(menu_items);
+        menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_PASTE,
+                     get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",
+                          G_CALLBACK (edit_paste),
+                          NULL);
+        gtk_widget_show (menu_items);
+
+        if (pickup || hangup || hold) {
+            menu_items = gtk_separator_menu_item_new();
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            gtk_widget_show (menu_items);
         }
 
-      if (pickup)
-        {
-
-          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Pick up"));
-          image = gtk_image_new_from_file(ICONS_DIR "/icon_accept.svg");
-          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          g_signal_connect (G_OBJECT (menu_items), "activate",
-              G_CALLBACK (call_pick_up),
-              NULL);
-          gtk_widget_show(menu_items);
+        if (pickup) {
+
+            menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_Pick up"));
+            image = gtk_image_new_from_file (ICONS_DIR "/icon_accept.svg");
+            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (call_pick_up),
+                              NULL);
+            gtk_widget_show (menu_items);
         }
 
-      if (hangup)
-        {
-          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-          image = gtk_image_new_from_file(ICONS_DIR "/icon_hangup.svg");
-          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          g_signal_connect (G_OBJECT (menu_items), "activate",
-              G_CALLBACK (call_hang_up),
-              NULL);
-          gtk_widget_show(menu_items);
+        if (hangup) {
+            menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_Hang up"));
+            image = gtk_image_new_from_file (ICONS_DIR "/icon_hangup.svg");
+            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (call_hang_up),
+                              NULL);
+            gtk_widget_show (menu_items);
         }
 
-      if (hold)
-        {
-          menu_items = gtk_check_menu_item_new_with_mnemonic(_("On _Hold"));
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
-              (selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
-          g_signal_connect(G_OBJECT (menu_items), "activate",
-              G_CALLBACK (call_hold),
-              NULL);
-          gtk_widget_show(menu_items);
+        if (hold) {
+            menu_items = gtk_check_menu_item_new_with_mnemonic (_ ("On _Hold"));
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_items),
+                                            (selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (call_hold),
+                              NULL);
+            gtk_widget_show (menu_items);
         }
 
-      if (record)
-        {
-          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Record"));
-          image = gtk_image_new_from_stock(GTK_STOCK_MEDIA_RECORD,
-              GTK_ICON_SIZE_MENU);
-          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          g_signal_connect (G_OBJECT (menu_items), "activate",
-              G_CALLBACK (call_record),
-              NULL);
-          gtk_widget_show(menu_items);
+        if (record) {
+            menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_Record"));
+            image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_RECORD,
+                                              GTK_ICON_SIZE_MENU);
+            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (call_record),
+                              NULL);
+            gtk_widget_show (menu_items);
         }
 
-    }
-  else
-    {
-      DEBUG("BUILD CONFERENCE MENU");
-
-      if (hangup_conf)
-        {
-          menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Hang up"));
-          image = gtk_image_new_from_file(ICONS_DIR "/icon_hangup.svg");
-          gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_items), image);
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          g_signal_connect (G_OBJECT (menu_items), "activate",
-              G_CALLBACK (conference_hang_up),
-              NULL);
-          gtk_widget_show(menu_items);
+        if (im) {
+
+            // do not display message if instant messaging is disabled
+            gboolean instant_messaging_enabled = TRUE;
+
+            if (eel_gconf_key_exists (INSTANT_MESSAGING_ENABLED))
+                instant_messaging_enabled = eel_gconf_get_integer (INSTANT_MESSAGING_ENABLED);
+
+            if (instant_messaging_enabled) {
+
+                menu_items = gtk_separator_menu_item_new();
+                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+                gtk_widget_show (menu_items);
+
+                menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("Send _message"));
+                image = gtk_image_new_from_stock (GTK_STOCK_IM, GTK_ICON_SIZE_MENU);
+                gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+                g_signal_connect (G_OBJECT (menu_items), "activate",
+                                  G_CALLBACK (call_im),
+                                  NULL);
+                gtk_widget_show (menu_items);
+            }
         }
 
-      if (hold_conf)
-        {
-          menu_items = gtk_check_menu_item_new_with_mnemonic(_("On _Hold"));
-          gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-          gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_items),
-              (selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
-          g_signal_connect(G_OBJECT (menu_items), "activate",
-              G_CALLBACK (conference_hold),
-              NULL);
-          gtk_widget_show(menu_items);
+    } else {
+        DEBUG ("UIManager: Build call menus");
+
+        if (hangup_conf) {
+            menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_Hang up"));
+            image = gtk_image_new_from_file (ICONS_DIR "/icon_hangup.svg");
+            gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (conference_hang_up),
+                              NULL);
+            gtk_widget_show (menu_items);
         }
-    }
 
-  if (accounts)
-    {
-      add_registered_accounts_to_menu(menu);
+        if (hold_conf) {
+            menu_items = gtk_check_menu_item_new_with_mnemonic (_ ("On _Hold"));
+            gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+            gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_items),
+                                            (selectedCall->_state == CALL_STATE_HOLD ? TRUE : FALSE));
+            g_signal_connect (G_OBJECT (menu_items), "activate",
+                              G_CALLBACK (conference_hold),
+                              NULL);
+            gtk_widget_show (menu_items);
+        }
     }
 
-  if (event)
-    {
-      button = event->button;
-      event_time = event->time;
+    if (accounts) {
+        add_registered_accounts_to_menu (menu);
     }
-  else
-    {
-      button = 0;
-      event_time = gtk_get_current_event_time();
+
+    if (event) {
+        button = event->button;
+        event_time = event->time;
+    } else {
+        button = 0;
+        event_time = gtk_get_current_event_time();
     }
 
-  gtk_menu_attach_to_widget(GTK_MENU (menu), my_widget, NULL);
-  gtk_menu_popup(GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
+    gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 }
 
 void
-show_popup_menu_history(GtkWidget *my_widget, GdkEventButton *event)
+show_popup_menu_history (GtkWidget *my_widget, GdkEventButton *event)
 {
 
-  gboolean pickup = FALSE;
-  gboolean remove = FALSE;
-  gboolean edit = FALSE;
-  gboolean accounts = FALSE;
-
-  callable_obj_t * selectedCall = calltab_get_selected_call(history);
-  if (selectedCall)
-    {
-      remove = TRUE;
-      pickup = TRUE;
-      edit = TRUE;
-      accounts = TRUE;
+    DEBUG ("UIManager: Show popup menu history");
+
+    gboolean pickup = FALSE;
+    gboolean remove = FALSE;
+    gboolean edit = FALSE;
+    gboolean accounts = FALSE;
+
+    callable_obj_t * selectedCall = calltab_get_selected_call (history);
+
+    if (selectedCall) {
+        remove = TRUE;
+        pickup = TRUE;
+        edit = TRUE;
+        accounts = TRUE;
     }
 
-  GtkWidget *menu;
-  GtkWidget *image;
-  int button, event_time;
-  GtkWidget * menu_items;
+    GtkWidget *menu;
+    GtkWidget *image;
+    int button, event_time;
+    GtkWidget * menu_items;
 
-  menu = gtk_menu_new();
-  //g_signal_connect (menu, "deactivate",
-  //       G_CALLBACK (gtk_widget_destroy), NULL);
+    menu = gtk_menu_new();
+    //g_signal_connect (menu, "deactivate",
+    //       G_CALLBACK (gtk_widget_destroy), NULL);
 
-  if (pickup)
-    {
+    if (pickup) {
 
-      menu_items = gtk_image_menu_item_new_with_mnemonic(_("_Call back"));
-      image = gtk_image_new_from_file(ICONS_DIR "/icon_accept.svg");
-      gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM ( menu_items ), image);
-      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
-      gtk_widget_show(menu_items);
+        menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_Call back"));
+        image = gtk_image_new_from_file (ICONS_DIR "/icon_accept.svg");
+        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
+        gtk_widget_show (menu_items);
     }
 
-  menu_items = gtk_separator_menu_item_new();
-  gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-  gtk_widget_show(menu_items);
-
-  if (edit)
-    {
-      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT,
-          get_accel_group());
-      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
-      gtk_widget_show(menu_items);
-    }
+    menu_items = gtk_separator_menu_item_new();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+    gtk_widget_show (menu_items);
 
-  if (remove)
-    {
-      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_DELETE,
-          get_accel_group());
-      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-      g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history), NULL);
-      gtk_widget_show(menu_items);
+    if (edit) {
+        menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_EDIT,
+                     get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
+        gtk_widget_show (menu_items);
     }
 
-  if (accounts)
-    {
-      add_registered_accounts_to_menu(menu);
+    if (remove) {
+        menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE,
+                     get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history), NULL);
+        gtk_widget_show (menu_items);
     }
 
-  if (event)
-    {
-      button = event->button;
-      event_time = event->time;
+    if (accounts) {
+        add_registered_accounts_to_menu (menu);
     }
-  else
-    {
-      button = 0;
-      event_time = gtk_get_current_event_time();
+
+    if (event) {
+        button = event->button;
+        event_time = event->time;
+    } else {
+        button = 0;
+        event_time = gtk_get_current_event_time();
     }
 
-  gtk_menu_attach_to_widget(GTK_MENU (menu), my_widget, NULL);
-  gtk_menu_popup(GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
+    gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 }
+
+/*
 void
-show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event)
+show_popup_menu_addressbook (GtkWidget *my_widget, GdkEventButton *event)
 {
 
-  gboolean pickup = FALSE;
-  gboolean accounts = FALSE;
-  gboolean edit = FALSE;
+    if (selectedCall) {
+        remove = TRUE;
+        pickup = TRUE;
+        edit = TRUE;
+        accounts = TRUE;
+    }
+
+    GtkWidget *menu;
+    GtkWidget *image;
+    int button, event_time;
+    GtkWidget * menu_items;
+
+    menu = gtk_menu_new();
+    //g_signal_connect (menu, "deactivate",
+    //       G_CALLBACK (gtk_widget_destroy), NULL);
+
+    if (pickup) {
+
+        menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_Call back"));
+        image = gtk_image_new_from_file (ICONS_DIR "/icon_accept.svg");
+        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
+        gtk_widget_show (menu_items);
+    }
+
+    menu_items = gtk_separator_menu_item_new();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+    gtk_widget_show (menu_items);
+
+    if (edit) {
+        menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_EDIT,
+                     get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
+        gtk_widget_show (menu_items);
+    }
+
+    if (remove) {
+        menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE,
+                     get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate", G_CALLBACK (remove_from_history), NULL);
+        gtk_widget_show (menu_items);
+    }
 
-  callable_obj_t * selectedCall = calltab_get_selected_call(contacts);
-  if (selectedCall)
-    {
-      pickup = TRUE;
-      accounts = TRUE;
-      edit = TRUE;
+    if (accounts) {
+        add_registered_accounts_to_menu (menu);
     }
 
-  GtkWidget *menu;
-  GtkWidget *image;
-  int button, event_time;
-  GtkWidget * menu_items;
+    if (event) {
+        button = event->button;
+        event_time = event->time;
+    } else {
+        button = 0;
+        event_time = gtk_get_current_event_time();
+    }
+
+    gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
+}
+*/
+
+void
+show_popup_menu_contacts (GtkWidget *my_widget, GdkEventButton *event)
+{
 
-  menu = gtk_menu_new();
-  //g_signal_connect (menu, "deactivate",
-  //       G_CALLBACK (gtk_widget_destroy), NULL);
+    gboolean pickup = FALSE;
+    gboolean accounts = FALSE;
+    gboolean edit = FALSE;
 
-  if (pickup)
-    {
+    callable_obj_t * selectedCall = calltab_get_selected_call (contacts);
 
-      menu_items = gtk_image_menu_item_new_with_mnemonic(_("_New call"));
-      image = gtk_image_new_from_file(ICONS_DIR "/icon_accept.svg");
-      gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM ( menu_items ), image);
-      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
-      gtk_widget_show(menu_items);
+    if (selectedCall) {
+        pickup = TRUE;
+        accounts = TRUE;
+        edit = TRUE;
     }
 
-  if (edit)
-    {
-      menu_items = gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT,
-          get_accel_group());
-      gtk_menu_shell_append(GTK_MENU_SHELL (menu), menu_items);
-      g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
-      gtk_widget_show(menu_items);
+    GtkWidget *menu;
+    GtkWidget *image;
+    int button, event_time;
+    GtkWidget * menu_items;
+
+    menu = gtk_menu_new();
+    //g_signal_connect (menu, "deactivate",
+    //       G_CALLBACK (gtk_widget_destroy), NULL);
+
+    if (pickup) {
+
+        menu_items = gtk_image_menu_item_new_with_mnemonic (_ ("_New call"));
+        image = gtk_image_new_from_file (ICONS_DIR "/icon_accept.svg");
+        gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_items), image);
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (call_back), NULL);
+        gtk_widget_show (menu_items);
     }
 
-  if (accounts)
-    {
-      add_registered_accounts_to_menu(menu);
+    if (edit) {
+        menu_items = gtk_image_menu_item_new_from_stock (GTK_STOCK_EDIT,
+                     get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
+        gtk_widget_show (menu_items);
     }
 
-  if (event)
-    {
-      button = event->button;
-      event_time = event->time;
+    if (accounts) {
+        add_registered_accounts_to_menu (menu);
     }
-  else
-    {
-      button = 0;
-      event_time = gtk_get_current_event_time();
+
+    if (event) {
+        button = event->button;
+        event_time = event->time;
+    } else {
+        button = 0;
+        event_time = gtk_get_current_event_time();
     }
 
-  gtk_menu_attach_to_widget(GTK_MENU (menu), my_widget, NULL);
-  gtk_menu_popup(GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
+    gtk_menu_attach_to_widget (GTK_MENU (menu), my_widget, NULL);
+    gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
 }
 
 static void
-ok_cb(GtkWidget *widget UNUSED, gpointer userdata)
+ok_cb (GtkWidget *widget UNUSED, gpointer userdata)
 {
 
-  gchar *new_number;
-  callable_obj_t *modified_call, *original;
+    gchar *new_number;
+    callable_obj_t *modified_call, *original;
 
-  // Change the number of the selected call before calling
-  new_number = (gchar*) gtk_entry_get_text(GTK_ENTRY (editable_num));
-  original = (callable_obj_t*) userdata;
+    // Change the number of the selected call before calling
+    new_number = (gchar*) gtk_entry_get_text (GTK_ENTRY (editable_num));
+    original = (callable_obj_t*) userdata;
 
-  // Create the new call
-  create_new_call(CALL, CALL_STATE_DIALING, "", g_strdup(original->_accountID),
-      original->_peer_name, g_strdup(new_number), &modified_call);
+    // Create the new call
+    create_new_call (CALL, CALL_STATE_DIALING, "", g_strdup (original->_accountID),
+                     original->_peer_name, g_strdup (new_number), &modified_call);
 
-  // Update the internal data structure and the GUI
-  calllist_add(current_calls, modified_call);
-  calltree_add_call(current_calls, modified_call, NULL);
-  sflphone_place_call(modified_call);
-  calltree_display(current_calls);
+    // Update the internal data structure and the GUI
+    calllist_add (current_calls, modified_call);
+    calltree_add_call (current_calls, modified_call, NULL);
+    sflphone_place_call (modified_call);
+    calltree_display (current_calls);
 
-  // Close the contextual menu
-  gtk_widget_destroy(GTK_WIDGET (edit_dialog));
+    // Close the contextual menu
+    gtk_widget_destroy (GTK_WIDGET (edit_dialog));
 }
 
 static void
-on_delete(GtkWidget * widget)
+on_delete (GtkWidget * widget)
 {
-  gtk_widget_destroy(widget);
+    gtk_widget_destroy (widget);
 }
 
 void
-show_edit_number(callable_obj_t *call)
+show_edit_number (callable_obj_t *call)
 {
 
-  GtkWidget *ok, *hbox, *image;
-  GdkPixbuf *pixbuf;
+    GtkWidget *ok, *hbox, *image;
+    GdkPixbuf *pixbuf;
 
-  edit_dialog = GTK_DIALOG (gtk_dialog_new());
+    edit_dialog = GTK_DIALOG (gtk_dialog_new());
 
-  // Set window properties
-  gtk_window_set_default_size(GTK_WINDOW(edit_dialog), 300, 20);
-  gtk_window_set_title(GTK_WINDOW(edit_dialog), _("Edit phone number"));
-  gtk_window_set_resizable(GTK_WINDOW (edit_dialog), FALSE);
+    // Set window properties
+    gtk_window_set_default_size (GTK_WINDOW (edit_dialog), 300, 20);
+    gtk_window_set_title (GTK_WINDOW (edit_dialog), _ ("Edit phone number"));
+    gtk_window_set_resizable (GTK_WINDOW (edit_dialog), FALSE);
 
-  g_signal_connect (G_OBJECT (edit_dialog), "delete-event", G_CALLBACK (on_delete), NULL);
+    g_signal_connect (G_OBJECT (edit_dialog), "delete-event", G_CALLBACK (on_delete), NULL);
 
-  hbox = gtk_hbox_new(FALSE, 0);
-  gtk_box_pack_start(GTK_BOX (edit_dialog->vbox), hbox, TRUE, TRUE, 0);
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (edit_dialog->vbox), hbox, TRUE, TRUE, 0);
 
-  // Set the number to be edited
-  editable_num = gtk_entry_new();
+    // Set the number to be edited
+    editable_num = gtk_entry_new();
 #if GTK_CHECK_VERSION(2,12,0)
-  gtk_widget_set_tooltip_text(GTK_WIDGET(editable_num),
-      _("Edit the phone number before making a call"));
+    gtk_widget_set_tooltip_text (GTK_WIDGET (editable_num),
+                                 _ ("Edit the phone number before making a call"));
 #endif
-  if (call)
-    gtk_entry_set_text(GTK_ENTRY(editable_num), g_strdup(call->_peer_number));
-  else
-    ERROR ("This a bug, the call should be defined. menus.c line 1051");
 
-  gtk_box_pack_start(GTK_BOX (hbox), editable_num, TRUE, TRUE, 0);
+    if (call)
+        gtk_entry_set_text (GTK_ENTRY (editable_num), g_strdup (call->_peer_number));
+    else
+        ERROR ("This a bug, the call should be defined. menus.c line 1051");
+
+    gtk_box_pack_start (GTK_BOX (hbox), editable_num, TRUE, TRUE, 0);
 
-  // Set a custom image for the button
-  pixbuf = gdk_pixbuf_new_from_file_at_scale(ICONS_DIR "/outgoing.svg", 32, 32,
-      TRUE, NULL);
-  image = gtk_image_new_from_pixbuf(pixbuf);
-  ok = gtk_button_new();
-  gtk_button_set_image(GTK_BUTTON (ok), image);
-  gtk_box_pack_start(GTK_BOX (hbox), ok, TRUE, TRUE, 0);
-  g_signal_connect(G_OBJECT (ok), "clicked", G_CALLBACK (ok_cb), call);
+    // Set a custom image for the button
+    pixbuf = gdk_pixbuf_new_from_file_at_scale (ICONS_DIR "/outgoing.svg", 32, 32,
+             TRUE, NULL);
+    image = gtk_image_new_from_pixbuf (pixbuf);
+    ok = gtk_button_new();
+    gtk_button_set_image (GTK_BUTTON (ok), image);
+    gtk_box_pack_start (GTK_BOX (hbox), ok, TRUE, TRUE, 0);
+    g_signal_connect (G_OBJECT (ok), "clicked", G_CALLBACK (ok_cb), call);
 
-  gtk_widget_show_all(edit_dialog->vbox);
+    gtk_widget_show_all (edit_dialog->vbox);
 
-  gtk_dialog_run(edit_dialog);
+    gtk_dialog_run (edit_dialog);
 
 }
 
 GtkWidget*
 create_waiting_icon()
 {
-  GtkWidget * waiting_icon;
-  waiting_icon = gtk_image_menu_item_new_with_label("");
-  gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(waiting_icon),
-      gtk_image_new_from_animation(gdk_pixbuf_animation_new_from_file(
-          ICONS_DIR "/wait-on.gif", NULL)));
-  gtk_menu_item_set_right_justified(GTK_MENU_ITEM(waiting_icon), TRUE);
-
-  return waiting_icon;
+    GtkWidget * waiting_icon;
+    waiting_icon = gtk_image_menu_item_new_with_label ("");
+    gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (waiting_icon),
+                                   gtk_image_new_from_animation (gdk_pixbuf_animation_new_from_file (
+                                                                     ICONS_DIR "/wait-on.gif", NULL)));
+    gtk_menu_item_set_right_justified (GTK_MENU_ITEM (waiting_icon), TRUE);
+
+    return waiting_icon;
 }
 
 void
-create_menus(GtkUIManager *ui_manager, GtkWidget **widget)
+create_menus (GtkUIManager *ui_manager, GtkWidget **widget)
 {
 
-  GtkWidget * menu_bar;
-
-  menu_bar = gtk_ui_manager_get_widget(ui_manager, "/MenuBar");
-  pickUpAction = gtk_ui_manager_get_action(ui_manager,
-      "/MenuBar/CallMenu/PickUp");
-  newCallAction = gtk_ui_manager_get_action(ui_manager,
-      "/MenuBar/CallMenu/NewCall");
-  hangUpAction = gtk_ui_manager_get_action(ui_manager,
-      "/MenuBar/CallMenu/HangUp");
-  holdMenu = gtk_ui_manager_get_widget(ui_manager,
-      "/MenuBar/CallMenu/OnHoldMenu");
-  recordAction = gtk_ui_manager_get_action(ui_manager,
-      "/MenuBar/CallMenu/Record");
-  copyAction = gtk_ui_manager_get_action(ui_manager, "/MenuBar/EditMenu/Copy");
-  pasteAction
-      = gtk_ui_manager_get_action(ui_manager, "/MenuBar/EditMenu/Paste");
-  volumeToggle = gtk_ui_manager_get_action(ui_manager,
-      "/MenuBar/ViewMenu/VolumeControls");
-
-  // Set the toggle buttons
-  gtk_toggle_action_set_active(
-      GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/Dialpad")),
-      (gboolean) SHOW_DIALPAD);
-  gtk_toggle_action_set_active(GTK_TOGGLE_ACTION (volumeToggle),
-      (gboolean) SHOW_VOLUME);
-
-  gtk_action_set_sensitive(GTK_ACTION (volumeToggle), SHOW_ALSA_CONF);
-
-  // Disable it right now
-  gtk_action_set_sensitive(
-      GTK_ACTION (gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/Toolbar")),
-      FALSE);
-
-  waitingLayer = create_waiting_icon();
-  gtk_menu_shell_append(GTK_MENU_SHELL (menu_bar), waitingLayer);
-
-  *widget = menu_bar;
+    GtkWidget * menu_bar;
+
+    menu_bar = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
+    pickUpAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/PickUp");
+    newCallAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/NewCall");
+    hangUpAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/HangUp");
+    holdMenu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar/CallMenu/OnHoldMenu");
+    recordAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/Record");
+    imAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/CallMenu/InstantMessaging");
+    copyAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/EditMenu/Copy");
+    pasteAction = gtk_ui_manager_get_action (ui_manager, "/MenuBar/EditMenu/Paste");
+    volumeToggle = gtk_ui_manager_get_action (ui_manager, "/MenuBar/ViewMenu/VolumeControls");
+
+    // Set the toggle buttons
+    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 (GTK_ACTION (volumeToggle), SHOW_ALSA_CONF);
+
+    // Disable it right now
+    gtk_action_set_sensitive (GTK_ACTION (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. */
+    waitingLayer = create_waiting_icon ();
+    gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), waitingLayer);
+
+    *widget = menu_bar;
 }
 
 void
-create_toolbar_actions(GtkUIManager *ui_manager, GtkWidget **widget)
+create_toolbar_actions (GtkUIManager *ui_manager, GtkWidget **widget)
 {
-  toolbar = gtk_ui_manager_get_widget(ui_manager, "/ToolbarActions");
-
-  holdToolbar = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/OnHoldToolbar");
-  offHoldToolbar = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/OffHoldToolbar");
-  transferToolbar = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/TransferToolbar");
-  voicemailAction = gtk_ui_manager_get_action(ui_manager,
-      "/ToolbarActions/Voicemail");
-  voicemailToolbar = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/VoicemailToolbar");
-  newCallWidget = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/NewCallToolbar");
-  pickUpWidget = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/PickUpToolbar");
-  hangUpWidget = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/HangUpToolbar");
-  recordWidget = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/RecordToolbar");
-  historyButton = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/HistoryToolbar");
-  contactButton = gtk_ui_manager_get_widget(ui_manager,
-      "/ToolbarActions/AddressbookToolbar");
-
-  // Set the handler ID for the transfer
-  transfertButtonConnId
-      = g_signal_connect (G_OBJECT (transferToolbar), "toggled", G_CALLBACK (call_transfer_cb), NULL);
-  recordButtonConnId
-      = g_signal_connect (G_OBJECT (recordWidget), "toggled", G_CALLBACK (call_record), NULL);
-  active_calltree = current_calls;
-
-  *widget = toolbar;
+    toolbar = gtk_ui_manager_get_widget (ui_manager, "/ToolbarActions");
+
+    holdToolbar = gtk_ui_manager_get_widget (ui_manager,
+                  "/ToolbarActions/OnHoldToolbar");
+    offHoldToolbar = gtk_ui_manager_get_widget (ui_manager,
+                     "/ToolbarActions/OffHoldToolbar");
+    transferToolbar = gtk_ui_manager_get_widget (ui_manager,
+                      "/ToolbarActions/TransferToolbar");
+    voicemailAction = gtk_ui_manager_get_action (ui_manager,
+                      "/ToolbarActions/Voicemail");
+    voicemailToolbar = gtk_ui_manager_get_widget (ui_manager,
+                       "/ToolbarActions/VoicemailToolbar");
+    newCallWidget = gtk_ui_manager_get_widget (ui_manager,
+                    "/ToolbarActions/NewCallToolbar");
+    pickUpWidget = gtk_ui_manager_get_widget (ui_manager,
+                   "/ToolbarActions/PickUpToolbar");
+    hangUpWidget = gtk_ui_manager_get_widget (ui_manager,
+                   "/ToolbarActions/HangUpToolbar");
+    recordWidget = gtk_ui_manager_get_widget (ui_manager,
+                   "/ToolbarActions/RecordToolbar");
+    imToolbar = gtk_ui_manager_get_widget (ui_manager,
+                                           "/ToolbarActions/InstantMessagingToolbar");
+    historyButton = gtk_ui_manager_get_widget (ui_manager,
+                    "/ToolbarActions/HistoryToolbar");
+    contactButton = gtk_ui_manager_get_widget (ui_manager,
+                    "/ToolbarActions/AddressbookToolbar");
+
+    // Set the handler ID for the transfer
+    transfertButtonConnId
+    = g_signal_connect (G_OBJECT (transferToolbar), "toggled", G_CALLBACK (call_transfer_cb), NULL);
+    recordButtonConnId
+    = g_signal_connect (G_OBJECT (recordWidget), "toggled", G_CALLBACK (call_record), NULL);
+    active_calltree = current_calls;
+
+    *widget = toolbar;
 }
diff --git a/sflphone-client-gnome/src/uimanager.h b/sflphone-client-gnome/src/uimanager.h
index 23bebef995e10ce8406c2fa82853faf2dbc62b8d..33bd0279393641c2cb4122c15e75fdcfc77b45f8 100644
--- a/sflphone-client-gnome/src/uimanager.h
+++ b/sflphone-client-gnome/src/uimanager.h
@@ -44,10 +44,20 @@ GtkAction *volumeToggle;
 
 gboolean uimanager_new (GtkUIManager**);
 
-static void show_edit_number ();
-
 void update_voicemail_status (void);
 
+void update_actions (void);
+
+void show_popup_menu (GtkWidget *my_widget, GdkEventButton *event);
+
+void show_popup_menu_history (GtkWidget *my_widget, GdkEventButton *event);
+
+void show_popup_menu_contacts (GtkWidget *my_widget, GdkEventButton *event);
+
+void create_menus (GtkUIManager *ui_manager, GtkWidget **widget);
+
+void create_toolbar_actions (GtkUIManager *ui_manager, GtkWidget **widget);
+
 G_END_DECLS
 
 #endif
diff --git a/sflphone-client-gnome/src/widget/Makefile.am b/sflphone-client-gnome/src/widget/Makefile.am
index da7632ae94c0be702236235bf8b7d8c9b41cf4c5..487e4d7355fcdbbcef0440bf7b7455efa555d940 100644
--- a/sflphone-client-gnome/src/widget/Makefile.am
+++ b/sflphone-client-gnome/src/widget/Makefile.am
@@ -4,7 +4,8 @@ noinst_LTLIBRARIES = libwidget.la
 
 libwidget_la_SOURCES = \
 		gtkscrollbook.c \
-		minidialog.c
+		minidialog.c \
+		imwidget.c
 
 libwidget_la_LDFLAGS = @DEPS_LDFLAGS@
 					  
diff --git a/sflphone-client-gnome/src/widget/gtkscrollbook.c b/sflphone-client-gnome/src/widget/gtkscrollbook.c
index 9e9a9f12fd814720012728bed3a0730cb10e8c6f..0b481a5ef179b9577d67d83863dbaa5d9ee1e414 100644
--- a/sflphone-client-gnome/src/widget/gtkscrollbook.c
+++ b/sflphone-client-gnome/src/widget/gtkscrollbook.c
@@ -25,292 +25,298 @@
  */
 
 #include "gtkscrollbook.h"
-
+#include "sflphone_const.h"
 
 static void pidgin_scroll_book_init (PidginScrollBook *scroll_book);
 static void pidgin_scroll_book_class_init (PidginScrollBookClass *klass);
 static void pidgin_scroll_book_forall (GtkContainer *c,
-					 gboolean include_internals,
-					 GtkCallback callback,
-					 gpointer user_data);
+                                       gboolean include_internals,
+                                       GtkCallback callback,
+                                       gpointer user_data);
 
 GType
 pidgin_scroll_book_get_type (void)
 {
-	static GType scroll_book_type = 0;
-
-	if (!scroll_book_type)
-	{
-		static const GTypeInfo scroll_book_info =
-		{
-			sizeof (PidginScrollBookClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc) pidgin_scroll_book_class_init,
-			NULL, /* class_finalize */
-			NULL, /* class_data */
-			sizeof (PidginScrollBook),
-			0,
-			(GInstanceInitFunc) pidgin_scroll_book_init,
-			NULL  /* value_table */
-		};
-
-		scroll_book_type = g_type_register_static(GTK_TYPE_VBOX,
-							 "PidginScrollBook",
-							 &scroll_book_info,
-							 0);
-	}
-
-	return scroll_book_type;
+    static GType scroll_book_type = 0;
+
+    if (!scroll_book_type) {
+        static const GTypeInfo scroll_book_info = {
+            sizeof (PidginScrollBookClass),
+            NULL, /* base_init */
+            NULL, /* base_finalize */
+            (GClassInitFunc) pidgin_scroll_book_class_init,
+            NULL, /* class_finalize */
+            NULL, /* class_data */
+            sizeof (PidginScrollBook),
+            0,
+            (GInstanceInitFunc) pidgin_scroll_book_init,
+            NULL  /* value_table */
+        };
+
+        scroll_book_type = g_type_register_static (GTK_TYPE_VBOX,
+                           "PidginScrollBook",
+                           &scroll_book_info,
+                           0);
+    }
+
+    return scroll_book_type;
 }
 
 static gboolean
-scroll_left_cb(PidginScrollBook *scroll_book)
+scroll_left_cb (PidginScrollBook *scroll_book)
 {
-	int index;
-	index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook));
+    int index;
+    index = gtk_notebook_get_current_page (GTK_NOTEBOOK (scroll_book->notebook));
+
+    if (index > 0)
+        gtk_notebook_set_current_page (GTK_NOTEBOOK (scroll_book->notebook), index - 1);
 
-	if (index > 0)
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(scroll_book->notebook), index - 1);
-	return TRUE;
+    return TRUE;
 }
 
 static gboolean
-scroll_right_cb(PidginScrollBook *scroll_book)
+scroll_right_cb (PidginScrollBook *scroll_book)
 {
-	int index, count;
-	index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook));
+    int index, count;
+    index = gtk_notebook_get_current_page (GTK_NOTEBOOK (scroll_book->notebook));
 #if GTK_CHECK_VERSION(2,2,0)
-	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook));
+    count = gtk_notebook_get_n_pages (GTK_NOTEBOOK (scroll_book->notebook));
 #else
-	count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children);
+    count = g_list_length (GTK_NOTEBOOK (scroll_book->notebook)->children);
 #endif
 
-	if (index + 1 < count)
-		gtk_notebook_set_current_page(GTK_NOTEBOOK(scroll_book->notebook), index + 1);
-	return TRUE;
+    if (index + 1 < count)
+        gtk_notebook_set_current_page (GTK_NOTEBOOK (scroll_book->notebook), index + 1);
+
+    return TRUE;
 }
 
 static void
-refresh_scroll_box(PidginScrollBook *scroll_book, int index, int count)
+refresh_scroll_box (PidginScrollBook *scroll_book, int index, int count)
 {
-	char *label;
-
-	gtk_widget_show_all(GTK_WIDGET(scroll_book));
-	if (count < 1)
-		gtk_widget_hide_all(scroll_book->hbox);
-	else {
-		gtk_widget_show_all(scroll_book->hbox);
-		if (count == 1) {
-			gtk_widget_hide(scroll_book->label);
-			gtk_widget_hide(scroll_book->left_arrow);
-			gtk_widget_hide(scroll_book->right_arrow);
-		}
-	}
-
-	label = g_strdup_printf("<span size='smaller' weight='bold'>(%d/%d)</span>", index+1, count);
-	gtk_label_set_markup(GTK_LABEL(scroll_book->label), label);
-	g_free(label);
-
-	if (index == 0)
-		gtk_widget_set_sensitive(scroll_book->left_arrow, FALSE);
-	else
-		gtk_widget_set_sensitive(scroll_book->left_arrow, TRUE);
-
-
-	if (index + 1 == count)
-		gtk_widget_set_sensitive(scroll_book->right_arrow, FALSE);
-	else
-		gtk_widget_set_sensitive(scroll_book->right_arrow, TRUE);
+    char *label;
+
+    gtk_widget_show_all (GTK_WIDGET (scroll_book));
+
+    if (count < 1)
+        gtk_widget_hide_all (scroll_book->hbox);
+    else {
+        gtk_widget_show_all (scroll_book->hbox);
+
+        if (count == 1) {
+            gtk_widget_hide (scroll_book->label);
+            gtk_widget_hide (scroll_book->left_arrow);
+            gtk_widget_hide (scroll_book->right_arrow);
+        }
+    }
+
+    label = g_strdup_printf ("<span size='smaller' weight='bold'>(%d/%d)</span>", index+1, count);
+    gtk_label_set_markup (GTK_LABEL (scroll_book->label), label);
+    g_free (label);
+
+    if (index == 0)
+        gtk_widget_set_sensitive (scroll_book->left_arrow, FALSE);
+    else
+        gtk_widget_set_sensitive (scroll_book->left_arrow, TRUE);
+
+
+    if (index + 1 == count)
+        gtk_widget_set_sensitive (scroll_book->right_arrow, FALSE);
+    else
+        gtk_widget_set_sensitive (scroll_book->right_arrow, TRUE);
 }
 
 
 static void
-page_count_change_cb(PidginScrollBook *scroll_book)
+page_count_change_cb (PidginScrollBook *scroll_book)
 {
-	int count;
-	int index = gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook));
+    int count;
+    int index = gtk_notebook_get_current_page (GTK_NOTEBOOK (scroll_book->notebook));
 #if GTK_CHECK_VERSION(2,2,0)
-	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook));
+    count = gtk_notebook_get_n_pages (GTK_NOTEBOOK (scroll_book->notebook));
 #else
-	count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children);
+    count = g_list_length (GTK_NOTEBOOK (scroll_book->notebook)->children);
 #endif
-	refresh_scroll_box(scroll_book, index, count);
+    refresh_scroll_box (scroll_book, index, count);
 }
 
 static gboolean
-scroll_close_cb(PidginScrollBook *scroll_book)
+scroll_close_cb (PidginScrollBook *scroll_book)
 {
-	gtk_widget_destroy(gtk_notebook_get_nth_page(GTK_NOTEBOOK(scroll_book->notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(scroll_book->notebook))));
-	return FALSE;
+    gtk_widget_destroy (gtk_notebook_get_nth_page (GTK_NOTEBOOK (scroll_book->notebook), gtk_notebook_get_current_page (GTK_NOTEBOOK (scroll_book->notebook))));
+    return FALSE;
 }
 
 static void
-switch_page_cb(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, PidginScrollBook *scroll_book)
+switch_page_cb (GtkNotebook *notebook UNUSED, GtkNotebookPage *page UNUSED, guint page_num, PidginScrollBook *scroll_book)
 {
-	int count;
+    int count;
 #if GTK_CHECK_VERSION(2,2,0)
-	count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(scroll_book->notebook));
+    count = gtk_notebook_get_n_pages (GTK_NOTEBOOK (scroll_book->notebook));
 #else
-	count = g_list_length(GTK_NOTEBOOK(scroll_book->notebook)->children);
+    count = g_list_length (GTK_NOTEBOOK (scroll_book->notebook)->children);
 #endif
-	refresh_scroll_box(scroll_book, page_num, count);
+    refresh_scroll_box (scroll_book, page_num, count);
 }
 
 static void
-pidgin_scroll_book_add(GtkContainer *container, GtkWidget *widget)
+pidgin_scroll_book_add (GtkContainer *container, GtkWidget *widget)
 {
-	PidginScrollBook *scroll_book;
+    PidginScrollBook *scroll_book;
 
-	g_return_if_fail(GTK_IS_WIDGET (widget));
-	g_return_if_fail (widget->parent == NULL);
+    g_return_if_fail (GTK_IS_WIDGET (widget));
+    g_return_if_fail (widget->parent == NULL);
 
-	scroll_book = PIDGIN_SCROLL_BOOK(container);
-	scroll_book->children = g_list_append(scroll_book->children, widget);
-	gtk_widget_show(widget);
-	gtk_notebook_append_page(GTK_NOTEBOOK(scroll_book->notebook), widget, NULL);
-	page_count_change_cb(PIDGIN_SCROLL_BOOK(container));
+    scroll_book = PIDGIN_SCROLL_BOOK (container);
+    scroll_book->children = g_list_append (scroll_book->children, widget);
+    gtk_widget_show (widget);
+    gtk_notebook_append_page (GTK_NOTEBOOK (scroll_book->notebook), widget, NULL);
+    page_count_change_cb (PIDGIN_SCROLL_BOOK (container));
 }
 
 static void
-pidgin_scroll_book_remove(GtkContainer *container, GtkWidget *widget)
+pidgin_scroll_book_remove (GtkContainer *container, GtkWidget *widget)
 {
-	int page;
-	PidginScrollBook *scroll_book;
-	g_return_if_fail(GTK_IS_WIDGET(widget));
-
-	scroll_book = PIDGIN_SCROLL_BOOK(container);
-	scroll_book->children = g_list_remove(scroll_book->children, widget);
-	/* gtk_widget_unparent(widget); */
-
-	page = gtk_notebook_page_num(GTK_NOTEBOOK(PIDGIN_SCROLL_BOOK(container)->notebook), widget);
-	if (page >= 0) {
-		gtk_notebook_remove_page(GTK_NOTEBOOK(PIDGIN_SCROLL_BOOK(container)->notebook), page);
-	}
+    int page;
+    PidginScrollBook *scroll_book;
+    g_return_if_fail (GTK_IS_WIDGET (widget));
+
+    scroll_book = PIDGIN_SCROLL_BOOK (container);
+    scroll_book->children = g_list_remove (scroll_book->children, widget);
+    /* gtk_widget_unparent(widget); */
+
+    page = gtk_notebook_page_num (GTK_NOTEBOOK (PIDGIN_SCROLL_BOOK (container)->notebook), widget);
+
+    if (page >= 0) {
+        gtk_notebook_remove_page (GTK_NOTEBOOK (PIDGIN_SCROLL_BOOK (container)->notebook), page);
+    }
 }
 
 static void
-pidgin_scroll_book_forall(GtkContainer *container,
-			   gboolean include_internals,
-			   GtkCallback callback,
-			   gpointer callback_data)
+pidgin_scroll_book_forall (GtkContainer *container,
+                           gboolean include_internals,
+                           GtkCallback callback,
+                           gpointer callback_data)
 {
 #if 0
-	GList *children;
+    GList *children;
 #endif
-	PidginScrollBook *scroll_book;
+    PidginScrollBook *scroll_book;
 
-	g_return_if_fail(GTK_IS_CONTAINER(container));
+    g_return_if_fail (GTK_IS_CONTAINER (container));
 
-	scroll_book = PIDGIN_SCROLL_BOOK(container);
+    scroll_book = PIDGIN_SCROLL_BOOK (container);
 
-	if (include_internals) {
-		(*callback)(scroll_book->hbox, callback_data);
-		(*callback)(scroll_book->notebook, callback_data);
-	}
+    if (include_internals) {
+        (*callback) (scroll_book->hbox, callback_data);
+        (*callback) (scroll_book->notebook, callback_data);
+    }
 
 #if 0
-	children = scroll_book->children;
-
-	while (children) {
-		GtkWidget *child;
-		child = children->data;
-		children = children->next;
-		(*callback)(child, callback_data);
-	}
+    children = scroll_book->children;
+
+    while (children) {
+        GtkWidget *child;
+        child = children->data;
+        children = children->next;
+        (*callback) (child, callback_data);
+    }
+
 #endif
 }
 
 static void
 pidgin_scroll_book_class_init (PidginScrollBookClass *klass)
 {
-	GtkContainerClass *container_class = (GtkContainerClass*)klass;
+    GtkContainerClass *container_class = (GtkContainerClass*) klass;
 
-	container_class->add = pidgin_scroll_book_add;
-	container_class->remove = pidgin_scroll_book_remove;
-	container_class->forall = pidgin_scroll_book_forall;
+    container_class->add = pidgin_scroll_book_add;
+    container_class->remove = pidgin_scroll_book_remove;
+    container_class->forall = pidgin_scroll_book_forall;
 }
 
 static gboolean
-close_button_left_cb(GtkWidget *widget, GdkEventCrossing *event, GtkLabel *label)
+close_button_left_cb (GtkWidget *widget UNUSED, GdkEventCrossing *event, GtkLabel *label)
 {
-	static GdkCursor *ptr = NULL;
-	if (ptr == NULL) {
-		ptr = gdk_cursor_new(GDK_LEFT_PTR);
-	}
-
-	gtk_label_set_markup(label, "×");
-	gdk_window_set_cursor(event->window, ptr);
-	return FALSE;
+    static GdkCursor *ptr = NULL;
+
+    if (ptr == NULL) {
+        ptr = gdk_cursor_new (GDK_LEFT_PTR);
+    }
+
+    gtk_label_set_markup (label, "×");
+    gdk_window_set_cursor (event->window, ptr);
+    return FALSE;
 }
 
 static gboolean
-close_button_entered_cb(GtkWidget *widget, GdkEventCrossing *event, GtkLabel *label)
+close_button_entered_cb (GtkWidget *widget UNUSED, GdkEventCrossing *event, GtkLabel *label)
 {
-	static GdkCursor *hand = NULL;
-	if (hand == NULL) {
-		hand = gdk_cursor_new(GDK_HAND2);
-	}
-
-	gtk_label_set_markup(label, "<u>×</u>");
-	gdk_window_set_cursor(event->window, hand);
-	return FALSE;
+    static GdkCursor *hand = NULL;
+
+    if (hand == NULL) {
+        hand = gdk_cursor_new (GDK_HAND2);
+    }
+
+    gtk_label_set_markup (label, "<u>×</u>");
+    gdk_window_set_cursor (event->window, hand);
+    return FALSE;
 }
 
 static void
 pidgin_scroll_book_init (PidginScrollBook *scroll_book)
 {
-	GtkWidget *eb;
-	GtkWidget *close_button;
+    GtkWidget *eb;
+    GtkWidget *close_button;
 
-	scroll_book->hbox = gtk_hbox_new(FALSE, 0);
+    scroll_book->hbox = gtk_hbox_new (FALSE, 0);
 
-	/* Close */
-	eb = gtk_event_box_new();
-	gtk_box_pack_end(GTK_BOX(scroll_book->hbox), eb, FALSE, FALSE, 0);
+    /* Close */
+    eb = gtk_event_box_new();
+    gtk_box_pack_end (GTK_BOX (scroll_book->hbox), eb, FALSE, FALSE, 0);
 #if GTK_CHECK_VERSION(2,4,0)
-	gtk_event_box_set_visible_window(GTK_EVENT_BOX(eb), FALSE);
+    gtk_event_box_set_visible_window (GTK_EVENT_BOX (eb), FALSE);
 #endif
-	gtk_widget_set_events(eb, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
-	close_button = gtk_label_new("×");
-	g_signal_connect(G_OBJECT(eb), "enter-notify-event", G_CALLBACK(close_button_entered_cb), close_button);
-	g_signal_connect(G_OBJECT(eb), "leave-notify-event", G_CALLBACK(close_button_left_cb), close_button);
-	gtk_container_add(GTK_CONTAINER(eb), close_button);
-	g_signal_connect_swapped(G_OBJECT(eb), "button-press-event", G_CALLBACK(scroll_close_cb), scroll_book);
-
-	/* Right arrow */
-	eb = gtk_event_box_new();
-	gtk_box_pack_end(GTK_BOX(scroll_book->hbox), eb, FALSE, FALSE, 0);
-	scroll_book->right_arrow = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
-	gtk_container_add(GTK_CONTAINER(eb), scroll_book->right_arrow);
-	g_signal_connect_swapped(G_OBJECT(eb), "button-press-event", G_CALLBACK(scroll_right_cb), scroll_book);
-
-	/* Count */
-	scroll_book->label = gtk_label_new(NULL);
-	gtk_box_pack_end(GTK_BOX(scroll_book->hbox), scroll_book->label, FALSE, FALSE, 0);
-
-	/* Left arrow */
-	eb = gtk_event_box_new();
-	gtk_box_pack_end(GTK_BOX(scroll_book->hbox), eb, FALSE, FALSE, 0);
-	scroll_book->left_arrow = gtk_arrow_new(GTK_ARROW_LEFT, GTK_SHADOW_NONE);
-	gtk_container_add(GTK_CONTAINER(eb), scroll_book->left_arrow);
-	g_signal_connect_swapped(G_OBJECT(eb), "button-press-event", G_CALLBACK(scroll_left_cb), scroll_book);
-
-	gtk_box_pack_start(GTK_BOX(scroll_book), scroll_book->hbox, FALSE, FALSE, 0);
-
-	scroll_book->notebook = gtk_notebook_new();
-	gtk_notebook_set_show_tabs(GTK_NOTEBOOK(scroll_book->notebook), FALSE);
-	gtk_notebook_set_show_border(GTK_NOTEBOOK(scroll_book->notebook), FALSE);
-
-	gtk_box_pack_start(GTK_BOX(scroll_book), scroll_book->notebook, TRUE, TRUE, 0);
-
-	g_signal_connect_swapped(G_OBJECT(scroll_book->notebook), "remove", G_CALLBACK(page_count_change_cb), scroll_book);
-	g_signal_connect(G_OBJECT(scroll_book->notebook), "switch-page", G_CALLBACK(switch_page_cb), scroll_book);
-	gtk_widget_show_all(scroll_book->notebook);
+    gtk_widget_set_events (eb, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);
+    close_button = gtk_label_new ("×");
+    g_signal_connect (G_OBJECT (eb), "enter-notify-event", G_CALLBACK (close_button_entered_cb), close_button);
+    g_signal_connect (G_OBJECT (eb), "leave-notify-event", G_CALLBACK (close_button_left_cb), close_button);
+    gtk_container_add (GTK_CONTAINER (eb), close_button);
+    g_signal_connect_swapped (G_OBJECT (eb), "button-press-event", G_CALLBACK (scroll_close_cb), scroll_book);
+
+    /* Right arrow */
+    eb = gtk_event_box_new();
+    gtk_box_pack_end (GTK_BOX (scroll_book->hbox), eb, FALSE, FALSE, 0);
+    scroll_book->right_arrow = gtk_arrow_new (GTK_ARROW_RIGHT, GTK_SHADOW_NONE);
+    gtk_container_add (GTK_CONTAINER (eb), scroll_book->right_arrow);
+    g_signal_connect_swapped (G_OBJECT (eb), "button-press-event", G_CALLBACK (scroll_right_cb), scroll_book);
+
+    /* Count */
+    scroll_book->label = gtk_label_new (NULL);
+    gtk_box_pack_end (GTK_BOX (scroll_book->hbox), scroll_book->label, FALSE, FALSE, 0);
+
+    /* Left arrow */
+    eb = gtk_event_box_new();
+    gtk_box_pack_end (GTK_BOX (scroll_book->hbox), eb, FALSE, FALSE, 0);
+    scroll_book->left_arrow = gtk_arrow_new (GTK_ARROW_LEFT, GTK_SHADOW_NONE);
+    gtk_container_add (GTK_CONTAINER (eb), scroll_book->left_arrow);
+    g_signal_connect_swapped (G_OBJECT (eb), "button-press-event", G_CALLBACK (scroll_left_cb), scroll_book);
+
+    gtk_box_pack_start (GTK_BOX (scroll_book), scroll_book->hbox, FALSE, FALSE, 0);
+
+    scroll_book->notebook = gtk_notebook_new();
+    gtk_notebook_set_show_tabs (GTK_NOTEBOOK (scroll_book->notebook), FALSE);
+    gtk_notebook_set_show_border (GTK_NOTEBOOK (scroll_book->notebook), FALSE);
+
+    gtk_box_pack_start (GTK_BOX (scroll_book), scroll_book->notebook, TRUE, TRUE, 0);
+
+    g_signal_connect_swapped (G_OBJECT (scroll_book->notebook), "remove", G_CALLBACK (page_count_change_cb), scroll_book);
+    g_signal_connect (G_OBJECT (scroll_book->notebook), "switch-page", G_CALLBACK (switch_page_cb), scroll_book);
+    gtk_widget_show_all (scroll_book->notebook);
 }
 
 GtkWidget *
 pidgin_scroll_book_new()
 {
-	return g_object_new(PIDGIN_TYPE_SCROLL_BOOK, NULL);
+    return g_object_new (PIDGIN_TYPE_SCROLL_BOOK, NULL);
 }
diff --git a/sflphone-client-gnome/src/widget/gtkscrollbook.h b/sflphone-client-gnome/src/widget/gtkscrollbook.h
index 859488c14510f4487fe64296ce5301b516cf9536..a012f7825923bb04a5ccf5a8e39eebfac2729627 100644
--- a/sflphone-client-gnome/src/widget/gtkscrollbook.h
+++ b/sflphone-client-gnome/src/widget/gtkscrollbook.h
@@ -41,39 +41,37 @@ G_BEGIN_DECLS
 typedef struct _PidginScrollBook      PidginScrollBook;
 typedef struct _PidginScrollBookClass PidginScrollBookClass;
 
-struct _PidginScrollBook
-{
-	GtkVBox parent_instance;
-
-	GtkWidget *notebook;
-	GtkWidget *hbox;
-	GtkWidget *label;
-	GtkWidget *left_arrow;
-	GtkWidget *right_arrow;
-	GList *children;
-	
-	/* Padding for future expansion */
-	void (*_gtk_reserved1) (void);
-	void (*_gtk_reserved2) (void);
-	void (*_gtk_reserved3) (void);
+struct _PidginScrollBook {
+    GtkVBox parent_instance;
+
+    GtkWidget *notebook;
+    GtkWidget *hbox;
+    GtkWidget *label;
+    GtkWidget *left_arrow;
+    GtkWidget *right_arrow;
+    GList *children;
+
+    /* Padding for future expansion */
+    void (*_gtk_reserved1) (void);
+    void (*_gtk_reserved2) (void);
+    void (*_gtk_reserved3) (void);
 
 };
 
 
-struct _PidginScrollBookClass
-{
-	GtkContainerClass parent_class;
+struct _PidginScrollBookClass {
+    GtkContainerClass parent_class;
 
-	/* Padding for future expansion */
-	void (*_gtk_reserved0) (void);
-	void (*_gtk_reserved1) (void);
-	void (*_gtk_reserved2) (void);
-	void (*_gtk_reserved3) (void);
+    /* Padding for future expansion */
+    void (*_gtk_reserved0) (void);
+    void (*_gtk_reserved1) (void);
+    void (*_gtk_reserved2) (void);
+    void (*_gtk_reserved3) (void);
 };
 
 
-GType         pidgin_scroll_book_get_type         (void) G_GNUC_CONST;
-GtkWidget    *pidgin_scroll_book_new              (void);
+GType         pidgin_scroll_book_get_type (void) G_GNUC_CONST;
+GtkWidget    *pidgin_scroll_book_new (void);
 
 G_END_DECLS
 
diff --git a/sflphone-client-gnome/src/widget/imwidget.c b/sflphone-client-gnome/src/widget/imwidget.c
new file mode 100644
index 0000000000000000000000000000000000000000..367a200b73a357bed69e63bed83bbb58ea1cf3db
--- /dev/null
+++ b/sflphone-client-gnome/src/widget/imwidget.c
@@ -0,0 +1,495 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux Inc.
+ *
+ *  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 <imwindow.h>
+#include "imwidget.h"
+#include <icons/icon_factory.h>
+#include <contacts/calltab.h>
+#include <contacts/conferencelist.h>
+#include <JavaScriptCore/JavaScript.h>
+#include <gdk/gdkkeysyms.h>
+
+#define WEBKIT_DIR "file://" DATA_DIR "/webkit/"
+
+static void
+on_frame_loading_done (GObject *gobject UNUSED, GParamSpec *pspec UNUSED, gpointer user_data)
+{
+    IMWidget *im = IM_WIDGET (user_data);
+    callable_obj_t *call;
+    conference_obj_t *conf;
+
+    if (im->first_message && im->first_message_from) {
+        switch (webkit_web_frame_get_load_status (WEBKIT_WEB_FRAME (im->web_frame))) {
+            case WEBKIT_LOAD_PROVISIONAL:
+            case WEBKIT_LOAD_COMMITTED:
+                break;
+            case WEBKIT_LOAD_FINISHED:
+                call = calllist_get (current_calls, im->call_id);
+                conf = conferencelist_get (im->call_id);
+
+                if (call)
+                    im_widget_add_message (im, im->first_message_from, im->first_message, 0);
+
+                if (conf)
+                    im_widget_add_message (im, im->first_message_from, im->first_message, 0);
+
+                g_free (im->first_message);
+                g_free (im->first_message_from);
+                im->first_message = NULL;
+                im->first_message_from = NULL;
+                DEBUG ("JavaScrip loading frame finished");
+                break;
+            case WEBKIT_LOAD_FIRST_VISUALLY_NON_EMPTY_LAYOUT:
+                // case WEBKIT_LOAD_FAILED: // only available in webkit-1.0-2
+                break;
+        }
+    }
+
+}
+
+gchar *
+escape_single_quotes (const gchar *message)
+{
+    gchar **ptr_token;
+    gchar *string = "";
+
+    DEBUG ("message: %s", message);
+
+    if ( (ptr_token = g_strsplit (message, "'", 0))) {
+        DEBUG ("SPLITTING");
+        string = g_strjoinv ("\\'", ptr_token);
+    }
+
+    return string;
+}
+
+void
+im_widget_add_message (IMWidget *im, const gchar *from, const gchar *message, gint level)
+{
+
+    if (im) {
+
+        /* Compute the date the message was sent */
+        gchar *msgtime = im_widget_add_message_time ();
+
+        /* Check for the message level */
+        gchar *css_class = (level == MESSAGE_LEVEL_ERROR) ? "error" : "";
+
+        gchar *message_escaped = escape_single_quotes (message);
+
+        /* Prepare and execute the Javascript code */
+        gchar *script = g_strdup_printf ("add_message('%s', '%s', '%s', '%s');", message_escaped, from, css_class, msgtime);
+        webkit_web_view_execute_script (WEBKIT_WEB_VIEW (im->web_view), script);
+
+        /* Mark it as used */
+        im->containText = TRUE;
+
+        /* Cleanup */
+        g_free (script);
+        g_free (message_escaped);
+
+    }
+}
+
+static gboolean
+web_view_nav_requested_cb (
+    WebKitWebView             *web_view UNUSED,
+    WebKitWebFrame            *frame UNUSED,
+    WebKitNetworkRequest      *request,
+    WebKitWebNavigationAction *navigation_action UNUSED,
+    WebKitWebPolicyDecision   *policy_decision,
+    gpointer                   user_data UNUSED)
+{
+    const gchar *uri = webkit_network_request_get_uri (request);
+
+    /* Always allow files we are serving ourselves. */
+    if (!strncmp (uri, WEBKIT_DIR, sizeof (WEBKIT_DIR) - 1)) {
+        webkit_web_policy_decision_use (policy_decision);
+    } else {
+        /* Running a system command to open the URL in the user's default browser */
+        gchar *cmd = g_strdup_printf ("x-www-browser %s", uri);
+
+        if (system (cmd) == -1)
+            ERROR ("Error executing command %s", cmd);
+
+        webkit_web_policy_decision_ignore (policy_decision);
+        g_free (cmd);
+    }
+
+    return TRUE;
+}
+
+static gboolean
+on_Textview_changed (GtkWidget *widget UNUSED, GdkEventKey *event, gpointer user_data)
+{
+
+    GtkTextIter start, end;
+    /* Get all the text in the buffer */
+    IMWidget *im =  user_data;
+
+    GtkTextBuffer *buffer =  gtk_text_view_get_buffer (GTK_TEXT_VIEW (im->textarea));
+
+    /* Catch the keyboard events */
+    if (event->type == GDK_KEY_PRESS) {
+
+        switch (event->keyval) {
+            case GDK_Return:
+            case GDK_KP_Enter:
+
+                /* We want to send the message on pressing ENTER */
+                if (gtk_text_buffer_get_char_count (buffer) != 0) {
+                    /* Fetch the string text */
+                    gtk_text_buffer_get_bounds (GTK_TEXT_BUFFER (buffer), &start, &end);
+                    gchar *message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+                    /* Display our own message in the chat window */
+                    im_widget_add_message (im, "Me", message, MESSAGE_LEVEL_NORMAL);
+
+                    /* Send the message to the peer */
+                    im_widget_send_message (im->call_id, message);
+
+                    /* Empty the buffer */
+                    gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start, &end);
+
+                }
+
+                return TRUE;
+        }
+    }
+
+    return FALSE;
+}
+
+gchar*
+im_widget_add_message_time ()
+{
+
+    time_t now;
+    unsigned char str[100];
+
+    /* Compute the current time */
+    (void) time (&now);
+    struct tm* ptr;
+    ptr = localtime (&now);
+
+    /* Get the time of the message. Format: HH:MM::SS */
+    strftime ( (char *) str, 100, "%R", (const struct tm *) ptr);
+    gchar *res = g_strdup ( (gchar *) str);
+
+    /* Return the new value */
+    return res;
+}
+
+void
+im_widget_send_message (gchar *id, const gchar *message)
+{
+
+    callable_obj_t *im_widget_call = calllist_get (current_calls, id);
+    conference_obj_t *im_widget_conf = conferencelist_get (id);
+
+    /* If the call has been hungup, it is not anymore in the current_calls calltab */
+    if (!im_widget_call) {
+        /* So try the history tab */
+        im_widget_call = calllist_get (history, id);
+    }
+
+    if (im_widget_conf) {
+        dbus_send_text_message (id, message);
+    }
+    /* First check if the call is in CURRENT state, otherwise it could not be sent */
+    else if (im_widget_call) {
+        if (im_widget_call->_type == CALL && (im_widget_call->_state == CALL_STATE_CURRENT ||
+                                              im_widget_call->_state == CALL_STATE_HOLD ||
+                                              im_widget_call->_state == CALL_STATE_RECORD)) {
+            /* Ship the message through D-Bus */
+            dbus_send_text_message (id, message);
+        } else {
+            /* Display an error message */
+            im_widget_add_message (IM_WIDGET (im_widget_call->_im_widget), "sflphoned", "Oups, something went wrong! Unable to send text messages outside a call.", MESSAGE_LEVEL_ERROR);
+        }
+    }
+}
+
+
+static void
+im_widget_class_init (IMWidgetClass *klass UNUSED)
+{
+}
+
+static void
+im_widget_init (IMWidget *im)
+{
+    /* A text view to enable users to enter text */
+    im->textarea = gtk_text_view_new ();
+
+    /* The webkit widget to display the message */
+    im->web_view = webkit_web_view_new();
+    GtkWidget *textscrollwin = gtk_scrolled_window_new (NULL, NULL);
+    GtkWidget *webscrollwin = gtk_scrolled_window_new (NULL, NULL);
+    im->info_bar = gtk_info_bar_new ();
+
+    /* A bar with the entry text and the button to send the message */
+    GtkWidget *hbox = gtk_hbox_new (FALSE, 10);
+    gtk_text_view_set_editable (GTK_TEXT_VIEW (im->textarea), TRUE);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (textscrollwin), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (webscrollwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+    gtk_widget_set_size_request (GTK_WIDGET (textscrollwin), -1, 20);
+    gtk_widget_set_size_request (GTK_WIDGET (im->textarea), -1, 20);
+    gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (im->textarea), GTK_WRAP_CHAR);
+    // gtk_container_set_resize_mode(GTK_CONTAINER(im->textarea), GTK_RESIZE_PARENT);
+
+    gtk_container_add (GTK_CONTAINER (textscrollwin), im->textarea);
+    gtk_container_add (GTK_CONTAINER (webscrollwin), im->web_view);
+    gtk_container_add (GTK_CONTAINER (hbox), textscrollwin);
+    gtk_box_pack_start (GTK_BOX (im), im->info_bar, FALSE, FALSE, 2);
+    gtk_box_pack_start (GTK_BOX (im), webscrollwin, TRUE, TRUE, 5);
+    gtk_box_pack_end (GTK_BOX (im), hbox, FALSE, FALSE, 2);
+    g_signal_connect (im->web_view, "navigation-policy-decision-requested", G_CALLBACK (web_view_nav_requested_cb), NULL);
+    g_signal_connect (im->textarea, "key-press-event", G_CALLBACK (on_Textview_changed), im);
+
+    im->web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (im->web_view));
+    im->js_context = webkit_web_frame_get_global_context (im->web_frame);
+    im->js_global = JSContextGetGlobalObject (im->js_context);
+    webkit_web_view_load_uri (WEBKIT_WEB_VIEW (im->web_view), "file://" DATA_DIR "/webkit/im/im.html");
+
+    im->containText = FALSE;
+
+    g_signal_connect (G_OBJECT (im->web_frame), "notify", G_CALLBACK (on_frame_loading_done), im);
+}
+
+GtkWidget *
+im_widget_new()
+{
+    return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, NULL));
+}
+
+GtkWidget *
+im_widget_new_with_first_message (const gchar *message UNUSED)
+{
+    return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, NULL));
+    // return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, "first_message", message, NULL));
+}
+
+
+GType
+im_widget_get_type (void)
+{
+    static GType im_widget_type = 0;
+
+    if (!im_widget_type) {
+        static const GTypeInfo im_widget_info = {
+            sizeof (IMWidgetClass),
+            NULL, /* base_init */
+            NULL, /* base_finalize */
+            (GClassInitFunc) im_widget_class_init,
+            NULL, /* class_finalize */
+            NULL, /* class_data */
+            sizeof (IMWidget),
+            0,
+            (GInstanceInitFunc) im_widget_init,
+            NULL  /* value_table */
+        };
+
+        im_widget_type = g_type_register_static (
+                             GTK_TYPE_VBOX,
+                             "IMWidget",
+                             &im_widget_info,
+                             0);
+    }
+
+    return im_widget_type;
+}
+
+gboolean
+im_widget_display (IMWidget **im, const gchar *message, const gchar *id, const gchar *from)
+{
+
+    /* Work with a copy of the object */
+    // callable_obj_t *tmp = *call;
+
+    /* Use the widget for this specific call, if exists */
+    // if (tmp) {
+    IMWidget *imwidget = *im;// = IM_WIDGET (tmp->_im_widget);
+
+    if (!imwidget) {
+        DEBUG ("creating the im widget for this call\n");
+
+        /* Create the im object, first message must be created asynchronously */
+        if (message)
+            imwidget = IM_WIDGET (im_widget_new ());
+        else
+            imwidget = IM_WIDGET (im_widget_new_with_first_message (message));
+
+        /* Keep a reference on this object in the call struct */
+        // tmp->_im_widget = im;
+        // *call = tmp;
+
+        /* Update the widget with some useful call information: ie the call ID */
+        imwidget->call_id = id;
+
+        /* Create the GtkInfoBar, used to display call information, and status of the IM widget */
+        im_widget_infobar (imwidget);
+
+        /* Add it to the main instant messaging window */
+        im_window_add (GTK_WIDGET (imwidget));
+
+        /* Update the first message to appears at widget creation*/
+        if (message)
+            imwidget->first_message = g_strdup (message);
+
+        if (from)
+            imwidget->first_message_from = g_strdup (from);
+
+        *im = imwidget;
+
+        return FALSE;
+    } else {
+        DEBUG ("im widget exists for this call\n");
+        im_window_show ();
+
+        return TRUE;
+    }
+
+    // }
+
+    // return FALSE;
+}
+
+void
+im_widget_infobar (IMWidget *im)
+{
+
+    /* Fetch the GTKInfoBar of this very IM Widget */
+    GtkWidget *infobar = im->info_bar;
+    GtkWidget *content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar));
+
+    /* Fetch call/conference information */
+    callable_obj_t *im_widget_call = calllist_get (current_calls, im->call_id);
+    conference_obj_t *im_widget_conf = conferencelist_get (im->call_id);
+
+    /* Create the label widgets with the call information saved in the IM Widget struct */
+    gchar *msg1;
+
+    if (im_widget_call)
+        msg1 = g_strdup_printf ("Calling %s  %s", im_widget_call->_peer_number, im_widget_call->_peer_name);
+    else if (im_widget_conf)
+        msg1 = g_strdup_printf ("Conferencing"); // im_widget_conf->_confID);
+    else
+        msg1 = g_strdup ("");
+
+    GtkWidget *call_label = gtk_label_new (msg1);
+
+    if (im_widget_call)
+        im->info_state = call_state_image_widget (im_widget_call->_state);
+
+    if (im_widget_conf)
+        im->info_state = conf_state_image_widget (im_widget_conf->_state);
+
+    /* Add a nice icon from our own icon factory */
+    GtkWidget *logoUser = gtk_image_new_from_stock (GTK_STOCK_USER, GTK_ICON_SIZE_LARGE_TOOLBAR);
+
+    /* Pack it all */
+    gtk_container_add (GTK_CONTAINER (content_area), logoUser);
+    gtk_container_add (GTK_CONTAINER (content_area), call_label);
+    gtk_container_add (GTK_CONTAINER (content_area), im->info_state);
+
+    /* Message level by default: INFO */
+    gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO);
+
+    /* Show the info bar */
+    gtk_widget_show (infobar);
+
+    /* Clean up */
+    free (msg1);
+}
+
+GtkWidget*
+call_state_image_widget (call_state_t state)
+{
+
+    GtkWidget *image;
+
+    switch (state) {
+        case CALL_STATE_CURRENT:
+        case CALL_STATE_HOLD:
+        case CALL_STATE_RECORD:
+            image = gtk_image_new_from_stock (GTK_STOCK_IM, GTK_ICON_SIZE_LARGE_TOOLBAR);
+            break;
+        default:
+            image = gtk_image_new_from_stock (GTK_STOCK_IM, GTK_ICON_SIZE_LARGE_TOOLBAR);
+            break;
+
+    }
+
+    return image;
+}
+
+GtkWidget*
+conf_state_image_widget (conference_state_t state)
+{
+
+    GtkWidget *image;
+
+    switch (state) {
+        case CONFERENCE_STATE_ACTIVE_ATACHED:
+        case CONFERENCE_STATE_ACTIVE_DETACHED:
+        case CONFERENCE_STATE_RECORD:
+        case CONFERENCE_STATE_HOLD:
+            image = gtk_image_new_from_stock (GTK_STOCK_IM, GTK_ICON_SIZE_LARGE_TOOLBAR);
+            break;
+        default:
+            image = gtk_image_new_from_stock (GTK_STOCK_FAIL, GTK_ICON_SIZE_LARGE_TOOLBAR);
+            break;
+    }
+
+    return image;
+}
+
+void
+im_widget_update_state (IMWidget *im, gboolean active)
+{
+    /* if active = true, it means that we are the call is in current state, so sflphone can send text messages */
+    if (active) {
+        gtk_widget_set_sensitive (im->info_state, TRUE);
+        gtk_info_bar_set_message_type (GTK_INFO_BAR (im->info_bar),
+                                       GTK_MESSAGE_INFO);
+    }
+    /* if active = false, the call is over, we can't send text messages anymore */
+    else {
+        if (im) {
+            gtk_widget_set_sensitive (im->info_state, FALSE);
+            gtk_info_bar_set_message_type (GTK_INFO_BAR (im->info_bar),
+                                           GTK_MESSAGE_WARNING);
+            gtk_widget_set_tooltip_text (im->info_state, "Call has terminated");
+        }
+    }
+}
+
+
+
diff --git a/sflphone-client-gnome/src/widget/imwidget.h b/sflphone-client-gnome/src/widget/imwidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..ea0909f2135701b43e2951cad68821cd836ad722
--- /dev/null
+++ b/sflphone-client-gnome/src/widget/imwidget.h
@@ -0,0 +1,128 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux Inc.
+ *
+ *  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 __IM_WIDGET_H__
+#define __IM_WIDGET_H__
+
+#include <gtk/gtk.h>
+#include <callable_obj.h>
+#include <webkit/webkit.h>
+#include <conference_obj.h>
+
+G_BEGIN_DECLS
+
+#define IM_WIDGET_TYPE             (im_widget_get_type())
+#define IM_WIDGET(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), IM_WIDGET_TYPE, IMWidget))
+#define IM_WIDGET_CLASS(vtable)    (G_TYPE_CHECK_CLASS_CAST((vtable), IM_WIDGET_TYPE, IMWidgetClass))
+#define IS_IM_WIDGET(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), IM_WIDGET_TYPE))
+#define IS_IM_WIDGET_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), IM_WIDGET_TYPE))
+#define IM_WIDGET_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS((inst), IM_WIDGET_TYPE, IMWidgetClass))
+
+#define MESSAGE_LEVEL_NORMAL		0
+#define MESSAGE_LEVEL_WARNING		1
+#define MESSAGE_LEVEL_ERROR			2
+
+typedef struct _IMWidget      IMWidget;
+typedef struct _IMWidgetClass IMWidgetClass;
+
+struct _IMWidget {
+    GtkVBox parent_instance;
+
+    /* Private */
+    GtkWidget *tab;
+    GtkWidget *textarea;
+    GtkWidget *web_view;
+    GtkWidget *info_bar;
+    GtkWidget *info_state;
+    gchar *call_id;
+    gchar *first_message;           // Message displayed at widget's creation time
+    gchar *first_message_from;      // Sender of the first message (usefull in case of a conference)
+    WebKitWebFrame *web_frame;      // Our web frame
+    JSGlobalContextRef js_context;  // The frame's global JS context
+    JSObjectRef js_global;          // The frame's global context JS object
+    gboolean containText;
+};
+
+struct _IMWidgetClass {
+    GtkContainerClass parent_class;
+};
+
+
+/*! @function
+@abstract	Display the instant messaging interface for this call. If it has not been created yet, create it and attached it to the imWindow.
+@param		A reference on the call attached to the current IM widget
+@param          The first message to be displayed, webkit's frames are loaded asynchronously
+@param 	        The call id to be associated with the IMWidget
+@param          The first message sender, could be different of call id for conferences
+@return         TRUE if window is already created, FALSE elsewhere
+ */
+gboolean im_widget_display (IMWidget**, const gchar*, const gchar*, const gchar*);
+
+GType im_widget_get_type (void) G_GNUC_CONST;
+
+/*! @function
+@abstract       Create a new widget with first_message
+*/
+GtkWidget *im_widget_new ();
+
+/*! @function
+@abstract 	Create a new widget with first_message
+*/
+GtkWidget *im_widget_new_with_first_message (const gchar *message);
+
+
+/*! @function
+@abstract	Add a new message in the webkit view
+@param		The IMWidget
+@param		The sender of the message
+@param		The message to be send
+@param		The level of the message: NORMAL or ERROR
+*/
+void im_widget_add_message (IMWidget *im, const gchar *from, const gchar *message, gint level);
+
+void im_widget_send_message (gchar *id, const gchar *message);
+
+gchar* im_widget_add_message_time ();
+
+/*! @function
+@abstract 	Build the GtkInfoBar used to display call information and IM Widget status
+@param		The IM Widget
+*/
+void im_widget_infobar (IMWidget *im);
+
+GtkWidget* call_state_image_widget (call_state_t state);
+
+GtkWidget* conf_state_image_widget (conference_state_t state);
+
+void im_widget_update_state (IMWidget *im, gboolean active);
+
+G_END_DECLS
+
+#endif  /* __IM_WIDGET_H__ */
diff --git a/sflphone-client-gnome/src/widget/minidialog.c b/sflphone-client-gnome/src/widget/minidialog.c
index 2d2a8d05600229319a74ef9a0421d426cdbe98d1..3867d19e7373031ab9e1f76bbd466e9fb1654eca 100644
--- a/sflphone-client-gnome/src/widget/minidialog.c
+++ b/sflphone-client-gnome/src/widget/minidialog.c
@@ -26,13 +26,13 @@
 #include <gtk/gtkhbox.h>
 #include <gtk/gtkbutton.h>
 #include <gtk/gtk.h>
-
+#include "sflphone_const.h"
 #include "minidialog.h"
 
 #define HIG_BOX_SPACE 6
 #define LABEL_WIDTH 200
 
-static void     pidgin_mini_dialog_init       (PidginMiniDialog      *self);
+static void     pidgin_mini_dialog_init (PidginMiniDialog      *self);
 static void     pidgin_mini_dialog_class_init (PidginMiniDialogClass *klass);
 
 static gpointer pidgin_mini_dialog_parent_class = NULL;
@@ -40,318 +40,313 @@ static gpointer pidgin_mini_dialog_parent_class = NULL;
 static void
 pidgin_mini_dialog_class_intern_init (gpointer klass)
 {
-	pidgin_mini_dialog_parent_class = g_type_class_peek_parent (klass);
-	pidgin_mini_dialog_class_init ((PidginMiniDialogClass*) klass);
+    pidgin_mini_dialog_parent_class = g_type_class_peek_parent (klass);
+    pidgin_mini_dialog_class_init ( (PidginMiniDialogClass*) klass);
 }
 
 GType
 pidgin_mini_dialog_get_type (void)
 {
-	static GType g_define_type_id = 0;
-	if (g_define_type_id == 0)
-	{
-		static const GTypeInfo g_define_type_info = {
-			sizeof (PidginMiniDialogClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) pidgin_mini_dialog_class_intern_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,   /* class_data */
-			sizeof (PidginMiniDialog),
-			0,      /* n_preallocs */
-			(GInstanceInitFunc) pidgin_mini_dialog_init,
-			NULL,
-		};
-		g_define_type_id = g_type_register_static (GTK_TYPE_VBOX,
-			"PidginMiniDialog", &g_define_type_info, 0);
-	}
-	return g_define_type_id;
+    static GType g_define_type_id = 0;
+
+    if (g_define_type_id == 0) {
+        static const GTypeInfo g_define_type_info = {
+            sizeof (PidginMiniDialogClass),
+            (GBaseInitFunc) NULL,
+            (GBaseFinalizeFunc) NULL,
+            (GClassInitFunc) pidgin_mini_dialog_class_intern_init,
+            (GClassFinalizeFunc) NULL,
+            NULL,   /* class_data */
+            sizeof (PidginMiniDialog),
+            0,      /* n_preallocs */
+            (GInstanceInitFunc) pidgin_mini_dialog_init,
+            NULL,
+        };
+        g_define_type_id = g_type_register_static (GTK_TYPE_VBOX,
+                           "PidginMiniDialog", &g_define_type_info, 0);
+    }
+
+    return g_define_type_id;
 }
 
-enum
-{
-	PROP_TITLE = 1,
-	PROP_DESCRIPTION,
-	PROP_ICON_NAME,
+enum {
+    PROP_TITLE = 1,
+    PROP_DESCRIPTION,
+    PROP_ICON_NAME,
 
-	LAST_PROPERTY
+    LAST_PROPERTY
 } HazeConnectionProperties;
 
-typedef struct _PidginMiniDialogPrivate
-{
-	GtkImage *icon;
-	GtkBox *title_box;
-	GtkLabel *title;
-	GtkLabel *desc;
-	GtkBox *buttons;
+typedef struct _PidginMiniDialogPrivate {
+    GtkImage *icon;
+    GtkBox *title_box;
+    GtkLabel *title;
+    GtkLabel *desc;
+    GtkBox *buttons;
 
-	guint idle_destroy_cb_id;
+    guint idle_destroy_cb_id;
 } PidginMiniDialogPrivate;
 
 #define PIDGIN_MINI_DIALOG_GET_PRIVATE(dialog) \
 	((PidginMiniDialogPrivate *) ((dialog)->priv))
 
 PidginMiniDialog *
-pidgin_mini_dialog_new(const gchar *title,
-                       const gchar *description,
-                       const gchar *icon_name)
+pidgin_mini_dialog_new (const gchar *title,
+                        const gchar *description,
+                        const gchar *icon_name)
 {
-	PidginMiniDialog *mini_dialog = g_object_new(PIDGIN_TYPE_MINI_DIALOG,
-		"title", title,
-		"description", description,
-		"icon-name", icon_name,
-		NULL);
+    PidginMiniDialog *mini_dialog = g_object_new (PIDGIN_TYPE_MINI_DIALOG,
+                                    "title", title,
+                                    "description", description,
+                                    "icon-name", icon_name,
+                                    NULL);
 
-	return mini_dialog;
+    return mini_dialog;
 }
 
 void
-pidgin_mini_dialog_set_title(PidginMiniDialog *mini_dialog,
-                             const char *title)
+pidgin_mini_dialog_set_title (PidginMiniDialog *mini_dialog,
+                              const char *title)
 {
-	g_object_set(G_OBJECT(mini_dialog), "title", title, NULL);
+    g_object_set (G_OBJECT (mini_dialog), "title", title, NULL);
 }
 
 void
-pidgin_mini_dialog_set_description(PidginMiniDialog *mini_dialog,
-                                   const char *description)
+pidgin_mini_dialog_set_description (PidginMiniDialog *mini_dialog,
+                                    const char *description)
 {
-	g_object_set(G_OBJECT(mini_dialog), "description", description, NULL);
+    g_object_set (G_OBJECT (mini_dialog), "description", description, NULL);
 }
 
 void
-pidgin_mini_dialog_set_icon_name(PidginMiniDialog *mini_dialog,
-                                 const char *icon_name)
+pidgin_mini_dialog_set_icon_name (PidginMiniDialog *mini_dialog,
+                                  const char *icon_name)
 {
-	g_object_set(G_OBJECT(mini_dialog), "icon_name", icon_name, NULL);
+    g_object_set (G_OBJECT (mini_dialog), "icon_name", icon_name, NULL);
 }
 
-struct _mini_dialog_button_clicked_cb_data
-{
-	PidginMiniDialog *mini_dialog;
-	PidginMiniDialogCallback callback;
-	gpointer user_data;
+struct _mini_dialog_button_clicked_cb_data {
+    PidginMiniDialog *mini_dialog;
+    PidginMiniDialogCallback callback;
+    gpointer user_data;
 };
 
 guint
-pidgin_mini_dialog_get_num_children(PidginMiniDialog *mini_dialog)
+pidgin_mini_dialog_get_num_children (PidginMiniDialog *mini_dialog)
 {
-	return g_list_length(mini_dialog->contents->children);
+    return g_list_length (mini_dialog->contents->children);
 }
 
 static gboolean
-idle_destroy_cb(GtkWidget *mini_dialog)
+idle_destroy_cb (GtkWidget *mini_dialog)
 {
-	gtk_widget_destroy(mini_dialog);
-	return FALSE;
+    gtk_widget_destroy (mini_dialog);
+    return FALSE;
 }
 
 static void
-mini_dialog_button_clicked_cb(GtkButton *button,
-                              gpointer user_data)
+mini_dialog_button_clicked_cb (GtkButton *button,
+                               gpointer user_data)
 {
-	struct _mini_dialog_button_clicked_cb_data *data = user_data;
-	PidginMiniDialogPrivate *priv =
-		PIDGIN_MINI_DIALOG_GET_PRIVATE(data->mini_dialog);
+    struct _mini_dialog_button_clicked_cb_data *data = user_data;
+    PidginMiniDialogPrivate *priv =
+        PIDGIN_MINI_DIALOG_GET_PRIVATE (data->mini_dialog);
 
-	/* Set up the destruction callback before calling the clicked callback,
-	 * so that if the mini-dialog gets destroyed during the clicked callback
-	 * the idle_destroy_cb is correctly removed by _finalize.
-	 */
-	priv->idle_destroy_cb_id =
-		g_idle_add((GSourceFunc) idle_destroy_cb, data->mini_dialog);
+    /* Set up the destruction callback before calling the clicked callback,
+     * so that if the mini-dialog gets destroyed during the clicked callback
+     * the idle_destroy_cb is correctly removed by _finalize.
+     */
+    priv->idle_destroy_cb_id =
+        g_idle_add ( (GSourceFunc) idle_destroy_cb, data->mini_dialog);
 
-	if (data->callback != NULL)
-		data->callback(data->mini_dialog, button, data->user_data);
+    if (data->callback != NULL)
+        data->callback (data->mini_dialog, button, data->user_data);
 
 }
 
 static void
-mini_dialog_button_destroy_cb(GtkButton *button,
-                              gpointer user_data)
+mini_dialog_button_destroy_cb (GtkButton *button UNUSED,
+                               gpointer user_data)
 {
-	struct _mini_dialog_button_clicked_cb_data *data = user_data;
-	g_free(data);
+    struct _mini_dialog_button_clicked_cb_data *data = user_data;
+    g_free (data);
 }
 
 void
-pidgin_mini_dialog_add_button(PidginMiniDialog *self,
-                              const char *text,
-                              PidginMiniDialogCallback clicked_cb,
-                              gpointer user_data)
+pidgin_mini_dialog_add_button (PidginMiniDialog *self,
+                               const char *text,
+                               PidginMiniDialogCallback clicked_cb,
+                               gpointer user_data)
 {
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
-	struct _mini_dialog_button_clicked_cb_data *callback_data
-		= g_new0(struct _mini_dialog_button_clicked_cb_data, 1);
-	GtkWidget *button = gtk_button_new();
-	GtkWidget *label = gtk_label_new(NULL);
-	char *button_text =
-		g_strdup_printf("<span size=\"smaller\">%s</span>", text);
-
-	gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), button_text);
-	g_free(button_text);
-
-	callback_data->mini_dialog = self;
-	callback_data->callback = clicked_cb;
-	callback_data->user_data = user_data;
-	g_signal_connect(G_OBJECT(button), "clicked",
-		(GCallback) mini_dialog_button_clicked_cb, callback_data);
-	g_signal_connect(G_OBJECT(button), "destroy",
-		(GCallback) mini_dialog_button_destroy_cb, callback_data);
-
-	gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
-	gtk_container_add(GTK_CONTAINER(button), label);
-
-	gtk_box_pack_end(GTK_BOX(priv->buttons), button, FALSE, FALSE,
-		0);
-	gtk_widget_show_all(GTK_WIDGET(button));
+    PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE (self);
+    struct _mini_dialog_button_clicked_cb_data *callback_data
+    = g_new0 (struct _mini_dialog_button_clicked_cb_data, 1);
+    GtkWidget *button = gtk_button_new();
+    GtkWidget *label = gtk_label_new (NULL);
+    char *button_text =
+        g_strdup_printf ("<span size=\"smaller\">%s</span>", text);
+
+    gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), button_text);
+    g_free (button_text);
+
+    callback_data->mini_dialog = self;
+    callback_data->callback = clicked_cb;
+    callback_data->user_data = user_data;
+    g_signal_connect (G_OBJECT (button), "clicked",
+                      (GCallback) mini_dialog_button_clicked_cb, callback_data);
+    g_signal_connect (G_OBJECT (button), "destroy",
+                      (GCallback) mini_dialog_button_destroy_cb, callback_data);
+
+    gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
+    gtk_container_add (GTK_CONTAINER (button), label);
+
+    gtk_box_pack_end (GTK_BOX (priv->buttons), button, FALSE, FALSE,
+                      0);
+    gtk_widget_show_all (GTK_WIDGET (button));
 }
 
 static void
-pidgin_mini_dialog_get_property(GObject *object,
-                                guint property_id,
-                                GValue *value,
-                                GParamSpec *pspec)
+pidgin_mini_dialog_get_property (GObject *object,
+                                 guint property_id,
+                                 GValue *value,
+                                 GParamSpec *pspec)
 {
-	PidginMiniDialog *self = PIDGIN_MINI_DIALOG(object);
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
-
-	switch (property_id) {
-		case PROP_TITLE:
-			g_value_set_string(value, gtk_label_get_text(priv->title));
-			break;
-		case PROP_DESCRIPTION:
-			g_value_set_string(value, gtk_label_get_text(priv->desc));
-			break;
-		case PROP_ICON_NAME:
-		{
-			gchar *icon_name = NULL;
-			GtkIconSize size;
-			gtk_image_get_stock(priv->icon, &icon_name, &size);
-			g_value_set_string(value, icon_name);
-			break;
-		}
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-	}
+    PidginMiniDialog *self = PIDGIN_MINI_DIALOG (object);
+    PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE (self);
+
+    switch (property_id) {
+        case PROP_TITLE:
+            g_value_set_string (value, gtk_label_get_text (priv->title));
+            break;
+        case PROP_DESCRIPTION:
+            g_value_set_string (value, gtk_label_get_text (priv->desc));
+            break;
+        case PROP_ICON_NAME: {
+            gchar *icon_name = NULL;
+            GtkIconSize size;
+            gtk_image_get_stock (priv->icon, &icon_name, &size);
+            g_value_set_string (value, icon_name);
+            break;
+        }
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
 }
 
 static void
-mini_dialog_set_title(PidginMiniDialog *self,
-                      const char *title)
+mini_dialog_set_title (PidginMiniDialog *self,
+                       const char *title)
 {
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
+    PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE (self);
 
-	char *title_esc = g_markup_escape_text(title, -1);
-	char *title_markup = g_strdup_printf(
-		"<span weight=\"bold\" size=\"smaller\">%s</span>",
-		title_esc ? title_esc : "");
+    char *title_esc = g_markup_escape_text (title, -1);
+    char *title_markup = g_strdup_printf (
+                             "<span weight=\"bold\" size=\"smaller\">%s</span>",
+                             title_esc ? title_esc : "");
 
-	gtk_label_set_markup(priv->title, title_markup);
+    gtk_label_set_markup (priv->title, title_markup);
 
-	g_free(title_esc);
-	g_free(title_markup);
+    g_free (title_esc);
+    g_free (title_markup);
 }
 
 static void
-mini_dialog_set_description(PidginMiniDialog *self,
-                            const char *description)
+mini_dialog_set_description (PidginMiniDialog *self,
+                             const char *description)
 {
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
-	if(description)
-	{
-		char *desc_esc = g_markup_escape_text(description, -1);
-		char *desc_markup = g_strdup_printf(
-			"<span size=\"smaller\">%s</span>", desc_esc);
-
-		gtk_label_set_markup(priv->desc, desc_markup);
-
-		g_free(desc_esc);
-		g_free(desc_markup);
-
-		gtk_widget_show(GTK_WIDGET(priv->desc));
-		g_object_set(G_OBJECT(priv->desc), "no-show-all", FALSE, NULL);
-	}
-	else
-	{
-		gtk_label_set_text(priv->desc, NULL);
-		gtk_widget_hide(GTK_WIDGET(priv->desc));
-		/* make calling show_all() on the minidialog not affect desc
-		 * even though it's packed inside it.
-	 	 */
-		g_object_set(G_OBJECT(priv->desc), "no-show-all", TRUE, NULL);
-	}
+    PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE (self);
+
+    if (description) {
+        char *desc_esc = g_markup_escape_text (description, -1);
+        char *desc_markup = g_strdup_printf (
+                                "<span size=\"smaller\">%s</span>", desc_esc);
+
+        gtk_label_set_markup (priv->desc, desc_markup);
+
+        g_free (desc_esc);
+        g_free (desc_markup);
+
+        gtk_widget_show (GTK_WIDGET (priv->desc));
+        g_object_set (G_OBJECT (priv->desc), "no-show-all", FALSE, NULL);
+    } else {
+        gtk_label_set_text (priv->desc, NULL);
+        gtk_widget_hide (GTK_WIDGET (priv->desc));
+        /* make calling show_all() on the minidialog not affect desc
+         * even though it's packed inside it.
+          */
+        g_object_set (G_OBJECT (priv->desc), "no-show-all", TRUE, NULL);
+    }
 }
 
 static void
-pidgin_mini_dialog_set_property(GObject *object,
-                                guint property_id,
-                                const GValue *value,
-                                GParamSpec *pspec)
+pidgin_mini_dialog_set_property (GObject *object,
+                                 guint property_id,
+                                 const GValue *value,
+                                 GParamSpec *pspec)
 {
-	PidginMiniDialog *self = PIDGIN_MINI_DIALOG(object);
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
-
-	switch (property_id) {
-		case PROP_TITLE:
-			mini_dialog_set_title(self, g_value_get_string(value));
-			break;
-		case PROP_DESCRIPTION:
-			mini_dialog_set_description(self, g_value_get_string(value));
-			break;
-		case PROP_ICON_NAME:
-			gtk_image_set_from_stock(priv->icon, g_value_get_string(value),
-				GTK_ICON_SIZE_BUTTON);
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-	}
+    PidginMiniDialog *self = PIDGIN_MINI_DIALOG (object);
+    PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE (self);
+
+    switch (property_id) {
+        case PROP_TITLE:
+            mini_dialog_set_title (self, g_value_get_string (value));
+            break;
+        case PROP_DESCRIPTION:
+            mini_dialog_set_description (self, g_value_get_string (value));
+            break;
+        case PROP_ICON_NAME:
+            gtk_image_set_from_stock (priv->icon, g_value_get_string (value),
+                                      GTK_ICON_SIZE_BUTTON);
+            break;
+        default:
+            G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+    }
 }
 
 static void
-pidgin_mini_dialog_finalize(GObject *object)
+pidgin_mini_dialog_finalize (GObject *object)
 {
-	PidginMiniDialog *self = PIDGIN_MINI_DIALOG(object);
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
+    PidginMiniDialog *self = PIDGIN_MINI_DIALOG (object);
+    PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE (self);
 
-	if (priv->idle_destroy_cb_id)
-		g_source_remove(priv->idle_destroy_cb_id);
+    if (priv->idle_destroy_cb_id)
+        g_source_remove (priv->idle_destroy_cb_id);
 
-	g_free(priv);
-	self->priv = NULL;
+    g_free (priv);
+    self->priv = NULL;
 
 
-	G_OBJECT_CLASS (pidgin_mini_dialog_parent_class)->finalize (object);
+    G_OBJECT_CLASS (pidgin_mini_dialog_parent_class)->finalize (object);
 }
 
 static void
-pidgin_mini_dialog_class_init(PidginMiniDialogClass *klass)
+pidgin_mini_dialog_class_init (PidginMiniDialogClass *klass)
 {
-	GObjectClass *object_class = G_OBJECT_CLASS(klass);
-	GParamSpec *param_spec;
-
-	object_class->get_property = pidgin_mini_dialog_get_property;
-	object_class->set_property = pidgin_mini_dialog_set_property;
-	object_class->finalize = pidgin_mini_dialog_finalize;
-
-	param_spec = g_param_spec_string("title", "title",
-		"String specifying the mini-dialog's title", NULL,
-		G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-		G_PARAM_READWRITE);
-	g_object_class_install_property (object_class, PROP_TITLE, param_spec);
-
-	param_spec = g_param_spec_string("description", "description",
-		"Description text for the mini-dialog, if desired", NULL,
-		G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-		G_PARAM_READWRITE);
-	g_object_class_install_property (object_class, PROP_DESCRIPTION, param_spec);
-
-	param_spec = g_param_spec_string("icon-name", "icon-name",
-		"String specifying the Gtk stock name of the dialog's icon",
-		NULL,
-		G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
-		G_PARAM_READWRITE);
-	g_object_class_install_property (object_class, PROP_ICON_NAME, param_spec);
+    GObjectClass *object_class = G_OBJECT_CLASS (klass);
+    GParamSpec *param_spec;
+
+    object_class->get_property = pidgin_mini_dialog_get_property;
+    object_class->set_property = pidgin_mini_dialog_set_property;
+    object_class->finalize = pidgin_mini_dialog_finalize;
+
+    param_spec = g_param_spec_string ("title", "title",
+                                      "String specifying the mini-dialog's title", NULL,
+                                      G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
+                                      G_PARAM_READWRITE);
+    g_object_class_install_property (object_class, PROP_TITLE, param_spec);
+
+    param_spec = g_param_spec_string ("description", "description",
+                                      "Description text for the mini-dialog, if desired", NULL,
+                                      G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
+                                      G_PARAM_READWRITE);
+    g_object_class_install_property (object_class, PROP_DESCRIPTION, param_spec);
+
+    param_spec = g_param_spec_string ("icon-name", "icon-name",
+                                      "String specifying the Gtk stock name of the dialog's icon",
+                                      NULL,
+                                      G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB |
+                                      G_PARAM_READWRITE);
+    g_object_class_install_property (object_class, PROP_ICON_NAME, param_spec);
 }
 
 /* 16 is the width of the icon, due to PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL */
@@ -362,62 +357,48 @@ pidgin_mini_dialog_class_init(PidginMiniDialogClass *klass)
 	(PIDGIN_PREFS_ROOT "/blist/width")
 
 static void
-blist_width_changed_cb(const char *name,
-                       gconstpointer val,
-                       gpointer data)
-{
-	PidginMiniDialog *self = PIDGIN_MINI_DIALOG(data);
-	PidginMiniDialogPrivate *priv = PIDGIN_MINI_DIALOG_GET_PRIVATE(self);
-	guint blist_width = GPOINTER_TO_INT(val);
-	guint label_width = LABEL_WIDTH;
-
-	gtk_widget_set_size_request(GTK_WIDGET(priv->title), label_width, -1);
-	gtk_widget_set_size_request(GTK_WIDGET(priv->desc), label_width, -1);
-}
-
-static void
-pidgin_mini_dialog_init(PidginMiniDialog *self)
+pidgin_mini_dialog_init (PidginMiniDialog *self)
 {
-	GtkBox *self_box = GTK_BOX(self);
-	guint label_width = LABEL_WIDTH;
+    GtkBox *self_box = GTK_BOX (self);
+    guint label_width = LABEL_WIDTH;
 
-	PidginMiniDialogPrivate *priv = g_new0(PidginMiniDialogPrivate, 1);
-	self->priv = priv;
+    PidginMiniDialogPrivate *priv = g_new0 (PidginMiniDialogPrivate, 1);
+    self->priv = priv;
 
-	gtk_container_set_border_width(GTK_CONTAINER(self), HIG_BOX_SPACE);
+    gtk_container_set_border_width (GTK_CONTAINER (self), HIG_BOX_SPACE);
 
-	priv->title_box = GTK_BOX(gtk_hbox_new(FALSE, HIG_BOX_SPACE));
+    priv->title_box = GTK_BOX (gtk_hbox_new (FALSE, HIG_BOX_SPACE));
 
-	priv->icon = GTK_IMAGE(gtk_image_new());
-	gtk_misc_set_alignment(GTK_MISC(priv->icon), 0, 0);
+    priv->icon = GTK_IMAGE (gtk_image_new());
+    gtk_misc_set_alignment (GTK_MISC (priv->icon), 0, 0);
 
-	priv->title = GTK_LABEL(gtk_label_new(NULL));
-	gtk_widget_set_size_request(GTK_WIDGET(priv->title), label_width, -1);
-	gtk_label_set_line_wrap(priv->title, TRUE);
-	gtk_label_set_selectable(priv->title, TRUE);
-	gtk_misc_set_alignment(GTK_MISC(priv->title), 0, 0);
+    priv->title = GTK_LABEL (gtk_label_new (NULL));
+    gtk_widget_set_size_request (GTK_WIDGET (priv->title), label_width, -1);
+    gtk_label_set_line_wrap (priv->title, TRUE);
+    gtk_label_set_selectable (priv->title, TRUE);
+    gtk_misc_set_alignment (GTK_MISC (priv->title), 0, 0);
 
-	gtk_box_pack_start(priv->title_box, GTK_WIDGET(priv->icon), FALSE, FALSE, 0);
-	gtk_box_pack_start(priv->title_box, GTK_WIDGET(priv->title), TRUE, TRUE, 0);
+    gtk_box_pack_start (priv->title_box, GTK_WIDGET (priv->icon), FALSE, FALSE, 0);
+    gtk_box_pack_start (priv->title_box, GTK_WIDGET (priv->title), TRUE, TRUE, 0);
 
-	priv->desc = GTK_LABEL(gtk_label_new(NULL));
-	gtk_widget_set_size_request(GTK_WIDGET(priv->desc), label_width, -1);
-	gtk_label_set_line_wrap(priv->desc, TRUE);
-	gtk_misc_set_alignment(GTK_MISC(priv->desc), 0, 0);
-	gtk_label_set_selectable(priv->desc, TRUE);
-	/* make calling show_all() on the minidialog not affect desc even though
-	 * it's packed inside it.
-	 */
-	g_object_set(G_OBJECT(priv->desc), "no-show-all", TRUE, NULL);
+    priv->desc = GTK_LABEL (gtk_label_new (NULL));
+    gtk_widget_set_size_request (GTK_WIDGET (priv->desc), label_width, -1);
+    gtk_label_set_line_wrap (priv->desc, TRUE);
+    gtk_misc_set_alignment (GTK_MISC (priv->desc), 0, 0);
+    gtk_label_set_selectable (priv->desc, TRUE);
+    /* make calling show_all() on the minidialog not affect desc even though
+     * it's packed inside it.
+     */
+    g_object_set (G_OBJECT (priv->desc), "no-show-all", TRUE, NULL);
 
-	self->contents = GTK_BOX(gtk_vbox_new(FALSE, 0));
+    self->contents = GTK_BOX (gtk_vbox_new (FALSE, 0));
 
-	priv->buttons = GTK_BOX(gtk_hbox_new(FALSE, 0));
+    priv->buttons = GTK_BOX (gtk_hbox_new (FALSE, 0));
 
-	gtk_box_pack_start(self_box, GTK_WIDGET(priv->title_box), FALSE, FALSE, 0);
-	gtk_box_pack_start(self_box, GTK_WIDGET(priv->desc), FALSE, FALSE, 0);
-	gtk_box_pack_start(self_box, GTK_WIDGET(self->contents), TRUE, TRUE, 0);
-	gtk_box_pack_start(self_box, GTK_WIDGET(priv->buttons), FALSE, FALSE, 0);
+    gtk_box_pack_start (self_box, GTK_WIDGET (priv->title_box), FALSE, FALSE, 0);
+    gtk_box_pack_start (self_box, GTK_WIDGET (priv->desc), FALSE, FALSE, 0);
+    gtk_box_pack_start (self_box, GTK_WIDGET (self->contents), TRUE, TRUE, 0);
+    gtk_box_pack_start (self_box, GTK_WIDGET (priv->buttons), FALSE, FALSE, 0);
 
-	gtk_widget_show_all(GTK_WIDGET(self));
+    gtk_widget_show_all (GTK_WIDGET (self));
 }
diff --git a/sflphone-client-gnome/src/widget/minidialog.h b/sflphone-client-gnome/src/widget/minidialog.h
index 2b5e6a4d1c57b53e7561bd9d00fa19ee8569e3bc..55d83d9c0c93547bd8349b07b1d73f36c7e96ce2 100644
--- a/sflphone-client-gnome/src/widget/minidialog.h
+++ b/sflphone-client-gnome/src/widget/minidialog.h
@@ -77,23 +77,23 @@ G_BEGIN_DECLS
  * </dl>
  */
 typedef struct {
-	GtkVBox parent;
+    GtkVBox parent;
 
-	/** A GtkVBox into which extra widgets for the dialog should be packed.
-	 */
-	GtkBox *contents;
+    /** A GtkVBox into which extra widgets for the dialog should be packed.
+     */
+    GtkBox *contents;
 
-	gpointer priv;
+    gpointer priv;
 } PidginMiniDialog;
 
 /** The class of #PidginMiniDialog objects. */
 typedef struct {
-	GtkBoxClass parent_class;
+    GtkBoxClass parent_class;
 
-	void (*_purple_reserved1) (void);
-	void (*_purple_reserved2) (void);
-	void (*_purple_reserved3) (void);
-	void (*_purple_reserved4) (void);
+    void (*_purple_reserved1) (void);
+    void (*_purple_reserved2) (void);
+    void (*_purple_reserved3) (void);
+    void (*_purple_reserved4) (void);
 } PidginMiniDialogClass;
 
 /** The type of a callback triggered by a button in a mini-dialog being pressed.
@@ -103,8 +103,8 @@ typedef struct {
  *                    pidgin_mini_dialog_add_button() when the button was
  *                    created.
  */
-typedef void (*PidginMiniDialogCallback)(PidginMiniDialog *mini_dialog,
-	GtkButton *button, gpointer user_data);
+typedef void (*PidginMiniDialogCallback) (PidginMiniDialog *mini_dialog,
+        GtkButton *button, gpointer user_data);
 
 /** Get the GType of #PidginMiniDialog. */
 GType pidgin_mini_dialog_get_type (void);
@@ -113,30 +113,30 @@ GType pidgin_mini_dialog_get_type (void);
  *  with @c g_object_new() then setting each property yourself.
  *  @return a new #PidginMiniDialog.
  */
-PidginMiniDialog *pidgin_mini_dialog_new(const gchar *title,
-	const gchar *description, const gchar *icon_name);
+PidginMiniDialog *pidgin_mini_dialog_new (const gchar *title,
+        const gchar *description, const gchar *icon_name);
 
 /** Shortcut for setting a mini-dialog's title via GObject properties.
  *  @param mini_dialog a mini-dialog
  *  @param title       the new title for @a mini_dialog
  */
-void pidgin_mini_dialog_set_title(PidginMiniDialog *mini_dialog,
-	const char *title);
+void pidgin_mini_dialog_set_title (PidginMiniDialog *mini_dialog,
+                                   const char *title);
 
 /** Shortcut for setting a mini-dialog's description via GObject properties.
  *  @param mini_dialog a mini-dialog
  *  @param description the new description for @a mini_dialog, or @c NULL to
  *                     hide the description widget.
  */
-void pidgin_mini_dialog_set_description(PidginMiniDialog *mini_dialog,
-	const char *description);
+void pidgin_mini_dialog_set_description (PidginMiniDialog *mini_dialog,
+        const char *description);
 
 /** Shortcut for setting a mini-dialog's icon via GObject properties.
  *  @param mini_dialog a mini-dialog
  *  @param icon_name   the Gtk stock ID of an icon, or @c NULL for no icon.
  */
-void pidgin_mini_dialog_set_icon_name(PidginMiniDialog *mini_dialog,
-	const char *icon_name);
+void pidgin_mini_dialog_set_icon_name (PidginMiniDialog *mini_dialog,
+                                       const char *icon_name);
 
 /** Adds a new button to a mini-dialog, and attaches the supplied callback to
  *  its <tt>clicked</tt> signal.  After a button is clicked, the dialog is
@@ -147,15 +147,15 @@ void pidgin_mini_dialog_set_icon_name(PidginMiniDialog *mini_dialog,
  *  @param user_data   arbitrary data to pass to @a clicked_cb when it is
  *                     called.
  */
-void pidgin_mini_dialog_add_button(PidginMiniDialog *mini_dialog,
-	const char *text, PidginMiniDialogCallback clicked_cb,
-	gpointer user_data);
+void pidgin_mini_dialog_add_button (PidginMiniDialog *mini_dialog,
+                                    const char *text, PidginMiniDialogCallback clicked_cb,
+                                    gpointer user_data);
 
 /** Gets the number of widgets packed into PidginMiniDialog.contents.
  *  @param mini_dialog a mini-dialog
  *  @return the number of widgets in @a mini_dialog->contents.
  */
-guint pidgin_mini_dialog_get_num_children(PidginMiniDialog *mini_dialog);
+guint pidgin_mini_dialog_get_num_children (PidginMiniDialog *mini_dialog);
 
 G_END_DECLS
 
diff --git a/sflphone-client-gnome/src/widget/webwidget.c b/sflphone-client-gnome/src/widget/webwidget.c
new file mode 100644
index 0000000000000000000000000000000000000000..e07d2b2f4a02f913c094861833329349ddae7846
--- /dev/null
+++ b/sflphone-client-gnome/src/widget/webwidget.c
@@ -0,0 +1,87 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux Inc.
+ *
+ *  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 "imwidget.h"
+#include <JavaScriptCore/JavaScript.h>
+
+
+static void im_widget_init (IMWidget *im);
+static void im_widget_class_init (IMWidgetClass *klass);
+
+GType
+im_widget_get_type (void)
+{
+    static GType im_widget_type = 0;
+
+    if (!im_widget_type) {
+        static const GTypeInfo im_widget_info = {
+            sizeof (IMWidgetClass),
+            NULL, /* base_init */
+            NULL, /* base_finalize */
+            (GClassInitFunc) im_widget_class_init,
+            NULL, /* class_finalize */
+            NULL, /* class_data */
+            sizeof (IMWidget),
+            0,
+            (GInstanceInitFunc) im_widget_init,
+            NULL  /* value_table */
+        };
+
+        im_widget_type = g_type_register_static (
+                             WEBKIT_TYPE_WEB_VIEW,
+                             "IMWidget",
+                             &im_widget_info,
+                             0);
+    }
+
+    return im_widget_type;
+}
+
+static void
+im_widget_class_init (IMWidgetClass *klass)
+{
+}
+
+static void
+im_widget_init (IMWidget *im)
+{
+    /* Load our initial webpage on startup */
+    webkit_web_view_open (WEBKIT_WEB_VIEW (im), "file://" DATA_DIR "/webkit/im.html");
+
+    /* Instantiate our local webkit related variables */
+    im->web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (im));
+    im->js_context = webkit_web_frame_get_global_context (im->web_frame);
+    im->js_global = JSContextGetGlobalObject (im->js_context);
+}
+
+GtkWidget *
+im_widget_new()
+{
+    return GTK_WIDGET (g_object_new (IM_WIDGET_TYPE, NULL));
+}
diff --git a/sflphone-client-gnome/src/widget/webwidget.h b/sflphone-client-gnome/src/widget/webwidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..88def03efda834e998b414a2249723f99646f298
--- /dev/null
+++ b/sflphone-client-gnome/src/widget/webwidget.h
@@ -0,0 +1,68 @@
+/*
+ *  Copyright (C) 2010 Savoir-Faire Linux Inc.
+ *
+ *  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 __WEB_WIDGET_H__
+#define __WEB_WIDGET_H__
+
+#include <gtk/gtk.h>
+#include <webkit/webkit.h>
+
+G_BEGIN_DECLS
+
+#define WEB_WIDGET_TYPE             (im_widget_get_type())
+#define WEB_WIDGET(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), WEB_WIDGET_TYPE, WebWidget))
+#define IM_WIDGET_CLASS(vtable)    (G_TYPE_CHECK_CLASS_CAST((vtable), IM_WIDGET_TYPE, WebWidgetClass))
+#define IS_IM_WIDGET(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), IM_WIDGET_TYPE))
+#define IS_IM_WIDGET_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), IM_WIDGET_TYPE))
+#define IM_WIDGET_GET_CLASS(inst)  (G_TYPE_INSTANCE_GET_CLASS((inst), IM_WIDGET_TYPE, WebWidgetClass))
+
+typedef struct _WebWidget      WebWidget;
+typedef struct _WebWidgetClass WebWidgetClass;
+
+struct _WebWidget {
+    WebKitWebView parent_instance;
+
+    /* Private */
+    WebKitWebFrame *web_frame;      // Our web frame
+    JSGlobalContextRef js_context;  // The frame's global JS context
+    JSObjectRef js_global;          // The frame's global context JS object
+};
+
+struct _WebWidgetClass {
+    WebKitWebViewClass parent_class;
+};
+
+
+GType         im_widget_get_type (void) G_GNUC_CONST;
+GtkWidget    *im_widget_new (void);
+
+G_END_DECLS
+
+#endif  /* __IM_WIDGET_H__ */
diff --git a/sflphone-client-gnome/tests/Makefile.am b/sflphone-client-gnome/tests/Makefile.am
index ba1161ae750bf07180fc71504a88bcf0e97dda49..3d3ffb8f4dfa7d8216f47ae495b5f310a1c76e29 100644
--- a/sflphone-client-gnome/tests/Makefile.am
+++ b/sflphone-client-gnome/tests/Makefile.am
@@ -27,24 +27,24 @@ SFLPHONE_OBJ = $(top_builddir)/src/accountlist.o \
 
 check_global_SOURCES =		check_global.c
 check_global_CFLAGS =		@CHECK_CFLAGS@ @DEPS_CFLAGS@
-check_global_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ $(DEPS_LIBS) @LIBSEXY_LIBS@ -llog4c
+check_global_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ $(DEPS_LIBS) @LIBSEXY_LIBS@
 
 ###########################################################
 
 check_contacts_SOURCES =	check_contacts.c
 check_contacts_CFLAGS =		@CHECK_CFLAGS@ @DEPS_CFLAGS@
-check_contacts_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ $(DEPS_LIBS) @LIBSEXY_LIBS@ -llog4c
+check_contacts_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ $(DEPS_LIBS) @LIBSEXY_LIBS@
 
 ###########################################################
 
 check_config_SOURCES =		check_config.c
 check_config_CFLAGS = 		@CHECK_CFLAGS@ @DEPS_CFLAGS@
-check_config_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ @DEPS_LIBS@ @LIBSEXY_LIBS@ -llog4c
+check_config_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ @DEPS_LIBS@ @LIBSEXY_LIBS@
 
 ###########################################################
 
 check_dbus_SOURCES =		check_dbus.c
 check_dbus_CFLAGS = 		@CHECK_CFLAGS@ @DEPS_CFLAGS@
-check_dbus_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ @DEPS_LIBS@ @LIBSEXY_LIBS@ -llog4c
+check_dbus_LDADD =		$(SFLPHONE_LIBS) $(SFLPHONE_OBJ) @CHECK_LIBS@ @DEPS_LIBS@ @LIBSEXY_LIBS@
 
 ###########################################################
diff --git a/sflphone-client-gnome/webkit/Makefile.am b/sflphone-client-gnome/webkit/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..80410916ca0e1e1f0f73c6c98d96d861a5006ddd
--- /dev/null
+++ b/sflphone-client-gnome/webkit/Makefile.am
@@ -0,0 +1,13 @@
+include ../globals.mak
+
+EXTRA_DIST = $(im_DATA)
+
+webkitdir = $(datadir)/sflphone/webkit
+
+imdir = $(webkitdir)/im
+im_DATA =	im/im.js \
+			im/im.html \
+			im/im.css \
+			im/sflphone.png \
+			im/chat_info.png \
+			im/error.png
diff --git a/sflphone-client-gnome/webkit/im/chat_info.png b/sflphone-client-gnome/webkit/im/chat_info.png
new file mode 100644
index 0000000000000000000000000000000000000000..07d3ac7940b2817de5f0497975c883a6c416dd55
Binary files /dev/null and b/sflphone-client-gnome/webkit/im/chat_info.png differ
diff --git a/sflphone-client-gnome/webkit/im/error.png b/sflphone-client-gnome/webkit/im/error.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7e60e5238ee0f613c73d556f69f7ff52be7a8bb
Binary files /dev/null and b/sflphone-client-gnome/webkit/im/error.png differ
diff --git a/sflphone-client-gnome/webkit/im/im.css b/sflphone-client-gnome/webkit/im/im.css
new file mode 100644
index 0000000000000000000000000000000000000000..9eb9f88e09c9fc2894cc89c49b959951ed00331e
--- /dev/null
+++ b/sflphone-client-gnome/webkit/im/im.css
@@ -0,0 +1,66 @@
+.message {
+	-webkit-border-radius: 5px;
+	background: rgba(242, 242, 242, 0.75);
+	color: #444;
+	padding: 1em;
+	-webkit-box-shadow: 2px 2px 5px #000;
+	margin: 20px;
+overflow: auto;
+clear: both;
+}
+
+* {
+	font-size: 12px;
+font-family: "Georgia","Verdana","Arial","Helvetica",sans-serif;
+}
+
+.page {
+
+}
+
+body {
+	background:  #fbfdfe;
+}
+
+#logo {
+	float: right;
+}
+
+.author {
+	color: #3578B1;
+	font-weight: bold;
+}
+
+#header {
+	display: none;
+	margin: 40px;
+}
+
+#call-info {
+	float: left;
+	font-size: 1.1em;
+height: 96px;
+	background: url(chat_info.png) no-repeat center left;
+	padding: 20px 20px 20px 100px;
+	border: 2px solid #dedede;
+	-webkit-border-radius: 25px;
+}
+
+.error .text {
+	color: #de7575;
+	font-size: 1.3em;
+}
+
+.error .author {
+	display: none;
+}
+
+.message-time {
+	color: #777;
+	float: right;
+}
+
+#messages {
+	clear: both;
+	padding-top: 20px;
+}
diff --git a/sflphone-client-gnome/webkit/im/im.html b/sflphone-client-gnome/webkit/im/im.html
new file mode 100644
index 0000000000000000000000000000000000000000..b1b13dc03c9d79afd1cf275954d309ca0e1256b7
--- /dev/null
+++ b/sflphone-client-gnome/webkit/im/im.html
@@ -0,0 +1,20 @@
+<html>
+	<head>
+		<script src="im.js"></script>
+		<link rel="stylesheet" type="text/css" href="im.css" />
+	</head>
+	<body>
+		<div class='page'>
+			<div id="header">
+				<div id="call-info">
+					<h2> Calling <span id='peer-number'></span></h2>
+					<p>Nom: <span id='peer-name'></span></p>
+				</div>
+				<div id="logo"><a href="http://www.sflphone.org" title="sflphone" alt="sflphone"><img src="sflphone.png"/></a></div>
+		</div>
+			<div id="messages">
+			</div>
+		</div>
+		<a id="bottom"></a>
+	</body>
+</html>
diff --git a/sflphone-client-gnome/webkit/im/im.js b/sflphone-client-gnome/webkit/im/im.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c2ebd1c4e513dc5217c3d0878cfffbb9465ea72
--- /dev/null
+++ b/sflphone-client-gnome/webkit/im/im.js
@@ -0,0 +1,39 @@
+function linkify(text){
+    if (text) {
+        text = text.replace(
+            /((https?\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi,
+            function(url){
+                var full_url = url;
+                if (!full_url.match('^https?:\/\/')) {
+                    full_url = 'http://' + full_url;
+                }
+                return '<a href="' + full_url + '">' + url + '</a>';
+            }
+        );
+    }
+    return text;
+}
+
+
+function add_message (message, peer_name, class_additionnal, time)
+{
+	var msgBody = document.getElementById ('messages');
+	msgBody.innerHTML = msgBody.innerHTML + '<div class="message ' + class_additionnal + '">' +  '<span class="author">[' + peer_name + '] </span><span class="message-time">' + time + '</span><p class="text">' + linkify (message) + '</p></div>' ;
+	document.getElementById("bottom").scrollIntoView(true);
+}
+
+function add_call_info_header (peer_name, peer_number)
+{
+	var peerNumber = document.getElementById ('peer-number');
+	var peerName = document.getElementById ('peer-name');
+	var peerInfo = document.getElementById ('peer-info');
+	peerNumber.innerHTML = peer_number;
+	peerName.innerHTML = peer_name;
+
+}
+
+function open_url (uri) {
+	window.open(''+self.location,'mywin',
+	'left=20,top=20,width=500,height=500,toolbar=1,resizable=0');
+
+}
diff --git a/sflphone-client-gnome/webkit/im/sflphone.png b/sflphone-client-gnome/webkit/im/sflphone.png
new file mode 100644
index 0000000000000000000000000000000000000000..03e40a0b35785c02ccc78f982e8fa10d2b5c1fb3
Binary files /dev/null and b/sflphone-client-gnome/webkit/im/sflphone.png differ
diff --git a/sflphone-client-kde/data/CMakeLists.txt b/sflphone-client-kde/data/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4155adb86eebd0a387569b2f2383e10180bea5d8
--- /dev/null
+++ b/sflphone-client-kde/data/CMakeLists.txt
@@ -0,0 +1,7 @@
+
+add_subdirectory(icons)
+
+INSTALL( FILES sflphone-client-kde.desktop  DESTINATION  ${XDG_APPS_INSTALL_DIR} )
+INSTALL( FILES sflphone-client-kdeui.rc  DESTINATION  ${DATA_INSTALL_DIR}/sflphone-client-kde )
+INSTALL( FILES sflphone-client-kde.notifyrc  DESTINATION ${DATA_INSTALL_DIR}/sflphone-client-kde)
+
diff --git a/sflphone-client-kde/data/icons/CMakeLists.txt b/sflphone-client-kde/data/icons/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..106884f432c1d1e0b0584959af854c79ede4ea6d
--- /dev/null
+++ b/sflphone-client-kde/data/icons/CMakeLists.txt
@@ -0,0 +1 @@
+kde4_install_icons( ${ICON_INSTALL_DIR} )
diff --git a/sflphone-client-kde/data/icons/hi128-apps-sflphone-client-kde.png b/sflphone-client-kde/data/icons/hi128-apps-sflphone-client-kde.png
new file mode 100644
index 0000000000000000000000000000000000000000..0766c5015c37940a5bbb5a98373dde11b6fd3684
Binary files /dev/null and b/sflphone-client-kde/data/icons/hi128-apps-sflphone-client-kde.png differ
diff --git a/sflphone-client-kde/data/icons/hi16-apps-sflphone-client-kde.png b/sflphone-client-kde/data/icons/hi16-apps-sflphone-client-kde.png
new file mode 100644
index 0000000000000000000000000000000000000000..a11d421fcee468f74620fab0855c9d0308be40e6
Binary files /dev/null and b/sflphone-client-kde/data/icons/hi16-apps-sflphone-client-kde.png differ
diff --git a/sflphone-client-kde/data/icons/hi22-apps-sflphone-client-kde.png b/sflphone-client-kde/data/icons/hi22-apps-sflphone-client-kde.png
new file mode 100644
index 0000000000000000000000000000000000000000..2000c5fe0e6eeac4fa1414ebf55ad6159e89f3a1
Binary files /dev/null and b/sflphone-client-kde/data/icons/hi22-apps-sflphone-client-kde.png differ
diff --git a/sflphone-client-kde/data/icons/hi32-apps-sflphone-client-kde.png b/sflphone-client-kde/data/icons/hi32-apps-sflphone-client-kde.png
new file mode 100644
index 0000000000000000000000000000000000000000..611b982155f5e83662fa5404d1473dbfa9cd8d4a
Binary files /dev/null and b/sflphone-client-kde/data/icons/hi32-apps-sflphone-client-kde.png differ
diff --git a/sflphone-client-kde/data/icons/hi48-apps-sflphone-client-kde.png b/sflphone-client-kde/data/icons/hi48-apps-sflphone-client-kde.png
new file mode 100644
index 0000000000000000000000000000000000000000..c643513125209fa828c79b9e8d30d34558aff8c0
Binary files /dev/null and b/sflphone-client-kde/data/icons/hi48-apps-sflphone-client-kde.png differ
diff --git a/sflphone-client-kde/data/icons/hi64-apps-sflphone-client-kde.png b/sflphone-client-kde/data/icons/hi64-apps-sflphone-client-kde.png
new file mode 100644
index 0000000000000000000000000000000000000000..9ffd3ca53c30493b08dc80fcfbd879ec7e4fa8f0
Binary files /dev/null and b/sflphone-client-kde/data/icons/hi64-apps-sflphone-client-kde.png differ
diff --git a/sflphone-client-kde/data/icons/hisc-apps-sflphone-client-kde.svgz b/sflphone-client-kde/data/icons/hisc-apps-sflphone-client-kde.svgz
new file mode 100644
index 0000000000000000000000000000000000000000..53105ea7c77c3ad52bd9f04e508febbd9f50a464
Binary files /dev/null and b/sflphone-client-kde/data/icons/hisc-apps-sflphone-client-kde.svgz differ
diff --git a/sflphone-client-kde/data/icons/small/hi16-apps-sflphone-client-kde.svgz b/sflphone-client-kde/data/icons/small/hi16-apps-sflphone-client-kde.svgz
new file mode 100644
index 0000000000000000000000000000000000000000..cb77652079d1223c0043b797d4ff391047f0c032
Binary files /dev/null and b/sflphone-client-kde/data/icons/small/hi16-apps-sflphone-client-kde.svgz differ
diff --git a/sflphone-client-kde/data/icons/small/hi32-apps-sflphone-client-kde.svg b/sflphone-client-kde/data/icons/small/hi32-apps-sflphone-client-kde.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6a20cae05ad29065321ee5c4727c027468f64c1b
--- /dev/null
+++ b/sflphone-client-kde/data/icons/small/hi32-apps-sflphone-client-kde.svg
@@ -0,0 +1,781 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docbase="/home/david/oxygen/trunk/scalable/apps/small/16x16"
+   sodipodi:docname="hi32-apps-sflphone-client-kde.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/home/david/graphics-document-viewer.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4999">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5001" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5003" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4999"
+       id="linearGradient5299"
+       gradientUnits="userSpaceOnUse"
+       x1="698.38525"
+       y1="245.5472"
+       x2="702.81964"
+       y2="977.78302" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4991">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4993" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop4995" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4991"
+       id="radialGradient5297"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.8097086,0,99.14184)"
+       cx="736.5"
+       cy="640.93073"
+       fx="736.5"
+       fy="640.93073"
+       r="91.964203" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4684">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop4686" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop4688" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4684"
+       id="linearGradient5308"
+       gradientUnits="userSpaceOnUse"
+       x1="52.987782"
+       y1="-84.148399"
+       x2="127.02813"
+       y2="99.500687"
+       gradientTransform="matrix(0.173669,0,0,0.174326,5.746764e-4,-16.089201)" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3803">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3805" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3807" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3803"
+       id="linearGradient3809"
+       x1="12.663443"
+       y1="8.5301828"
+       x2="41.858654"
+       y2="57.533279"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2705584,0,0,0.2715818,-0.2334952,-16.324153)" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 8 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="16 : 8 : 1"
+       inkscape:persp3d-origin="8 : 5.3333333 : 1"
+       id="perspective2966" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3491">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3493" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3495" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3491"
+       id="linearGradient3497"
+       x1="9.4819469"
+       y1="-13.32653"
+       x2="10.666382"
+       y2="-14.316705"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       y2="723.96979"
+       x2="-2309.3169"
+       y1="122.62138"
+       x1="-2325.3611"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7282"
+       xlink:href="#linearGradient3794"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="344.25839"
+       x2="-2305.0696"
+       y1="275.5253"
+       x1="-2282.2617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7280"
+       xlink:href="#linearGradient3794"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-39.337055"
+       x2="-2266.7681"
+       y1="568.77667"
+       x1="-2266.7681"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7278"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-39.337055"
+       x2="-2266.7681"
+       y1="568.77667"
+       x1="-2266.7681"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7276"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="428.47058"
+       x2="-2255.8958"
+       y1="169.81215"
+       x1="-2255.8958"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7274"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="323.11444"
+       x2="-2255.8958"
+       y1="169.81215"
+       x1="-2255.8958"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7272"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="723.96979"
+       x2="-2309.3169"
+       y1="122.62138"
+       x1="-2325.3611"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7270"
+       xlink:href="#linearGradient3794"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="344.25839"
+       x2="-2305.0696"
+       y1="275.5253"
+       x1="-2282.2617"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7268"
+       xlink:href="#linearGradient3794"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-39.337055"
+       x2="-2266.7681"
+       y1="568.77667"
+       x1="-2266.7681"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7266"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-39.337055"
+       x2="-2266.7681"
+       y1="568.77667"
+       x1="-2266.7681"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7264"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="428.47058"
+       x2="-2255.8958"
+       y1="169.81215"
+       x1="-2255.8958"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7262"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="323.11444"
+       x2="-2255.8958"
+       y1="169.81215"
+       x1="-2255.8958"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7260"
+       xlink:href="#linearGradient2948"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="924.16333"
+       x2="-4511.1455"
+       y1="890.18469"
+       x1="-1898.5033"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7258"
+       xlink:href="#linearGradient3091"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1340.8041"
+       x2="-2050.8284"
+       y1="515.37079"
+       x1="-3230.7649"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7256"
+       xlink:href="#linearGradient3091"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient5934">
+      <stop
+         style="stop-color:#18689a;stop-opacity:1;"
+         offset="0"
+         id="stop5936" />
+      <stop
+         style="stop-color:#3ba1e1;stop-opacity:1;"
+         offset="1"
+         id="stop5938" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2870">
+      <stop
+         id="stop2872"
+         offset="0"
+         style="stop-color:#e2e2e2;stop-opacity:1;" />
+      <stop
+         id="stop2874"
+         offset="1"
+         style="stop-color:#212121;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2886">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop2888" />
+      <stop
+         id="stop3000"
+         offset="0.69"
+         style="stop-color:#c0c0c0;stop-opacity:1;" />
+      <stop
+         style="stop-color:#d8d8d8;stop-opacity:1;"
+         offset="1"
+         id="stop2890" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2948"
+       inkscape:collect="always">
+      <stop
+         id="stop2950"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2952"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3091"
+       inkscape:collect="always">
+      <stop
+         id="stop3093"
+         offset="0"
+         style="stop-color:#fefefe;stop-opacity:1;" />
+      <stop
+         id="stop3095"
+         offset="1"
+         style="stop-color:#fefefe;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3137">
+      <stop
+         id="stop3139"
+         offset="0"
+         style="stop-color:#fefefe;stop-opacity:1;" />
+      <stop
+         id="stop3141"
+         offset="1"
+         style="stop-color:#a2a2a2;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3794"
+       inkscape:collect="always">
+      <stop
+         id="stop3796"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3798"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4162">
+      <stop
+         id="stop4164"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:0.28;" />
+      <stop
+         id="stop4166"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4534"
+       inkscape:collect="always">
+      <stop
+         id="stop4536"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4538"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4162"
+       id="linearGradient2814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0833333,0,0,1.2956349,1053.8042,-153.14233)"
+       x1="-2180.8767"
+       y1="-260.6424"
+       x2="-1234.0055"
+       y2="686.2287" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3091"
+       id="linearGradient2816"
+       gradientUnits="userSpaceOnUse"
+       x1="-3230.7649"
+       y1="515.37079"
+       x2="-2050.8284"
+       y2="1340.8041" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2886"
+       id="radialGradient2818"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,5.4112362e-7,-2.012705e-7,0.3719492,6.6810889e-5,208.48054)"
+       cx="-1732.9094"
+       cy="331.94702"
+       fx="-1732.9094"
+       fy="331.94702"
+       r="143.2121" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3137"
+       id="linearGradient2820"
+       gradientUnits="userSpaceOnUse"
+       x1="-1893.7939"
+       y1="331.26584"
+       x2="-1876.7727"
+       y2="350.78738" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3091"
+       id="linearGradient2822"
+       gradientUnits="userSpaceOnUse"
+       x1="-1898.5033"
+       y1="890.18469"
+       x2="-4511.1455"
+       y2="924.16333" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2886"
+       id="radialGradient2824"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.5862344,0,152.49099)"
+       spreadMethod="reflect"
+       cx="-1629.0024"
+       cy="98.046616"
+       fx="-1629.0024"
+       fy="98.046616"
+       r="341.55664" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2826"
+       gradientUnits="userSpaceOnUse"
+       x1="-2255.8958"
+       y1="169.81215"
+       x2="-2255.8958"
+       y2="323.11444" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2828"
+       gradientUnits="userSpaceOnUse"
+       x1="-2255.8958"
+       y1="169.81215"
+       x2="-2255.8958"
+       y2="428.47058" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2830"
+       gradientUnits="userSpaceOnUse"
+       x1="-2266.7681"
+       y1="568.77667"
+       x2="-2266.7681"
+       y2="-39.337055" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2832"
+       gradientUnits="userSpaceOnUse"
+       x1="-2266.7681"
+       y1="568.77667"
+       x2="-2266.7681"
+       y2="-39.337055" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2886"
+       id="radialGradient2834"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,2.6562553e-7,-2.2224032e-6,8.3666767,7.0294537e-4,-2330.077)"
+       cx="-1915.2924"
+       cy="316.29968"
+       fx="-1915.2924"
+       fy="316.29968"
+       r="43.099361" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3794"
+       id="linearGradient2836"
+       gradientUnits="userSpaceOnUse"
+       x1="-2282.2617"
+       y1="275.5253"
+       x2="-2305.0696"
+       y2="344.25839" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3794"
+       id="linearGradient2838"
+       gradientUnits="userSpaceOnUse"
+       x1="-2325.3611"
+       y1="122.62138"
+       x2="-2309.3169"
+       y2="723.96979" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2886"
+       id="radialGradient2840"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,5.4112362e-7,-2.012705e-7,0.3719492,6.6810889e-5,208.48054)"
+       cx="-1732.9094"
+       cy="331.94702"
+       fx="-1732.9094"
+       fy="331.94702"
+       r="143.2121" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3137"
+       id="linearGradient2842"
+       gradientUnits="userSpaceOnUse"
+       x1="-1893.7939"
+       y1="331.26584"
+       x2="-1876.7727"
+       y2="350.78738" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2886"
+       id="radialGradient2844"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,0.5862344,-2188.8406,152.49099)"
+       spreadMethod="reflect"
+       cx="-1629.0024"
+       cy="98.046616"
+       fx="-1629.0024"
+       fy="98.046616"
+       r="341.55664" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2846"
+       gradientUnits="userSpaceOnUse"
+       x1="-2255.8958"
+       y1="169.81215"
+       x2="-2255.8958"
+       y2="323.11444" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2848"
+       gradientUnits="userSpaceOnUse"
+       x1="-2255.8958"
+       y1="169.81215"
+       x2="-2255.8958"
+       y2="428.47058" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2850"
+       gradientUnits="userSpaceOnUse"
+       x1="-2266.7681"
+       y1="568.77667"
+       x2="-2266.7681"
+       y2="-39.337055" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2948"
+       id="linearGradient2852"
+       gradientUnits="userSpaceOnUse"
+       x1="-2266.7681"
+       y1="568.77667"
+       x2="-2266.7681"
+       y2="-39.337055" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2886"
+       id="radialGradient2854"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,2.6562553e-7,2.2224032e-6,8.3666767,-2188.8413,-2330.077)"
+       cx="-1915.2924"
+       cy="316.29968"
+       fx="-1915.2924"
+       fy="316.29968"
+       r="43.099361" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3794"
+       id="linearGradient2856"
+       gradientUnits="userSpaceOnUse"
+       x1="-2282.2617"
+       y1="275.5253"
+       x2="-2305.0696"
+       y2="344.25839" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3794"
+       id="linearGradient2858"
+       gradientUnits="userSpaceOnUse"
+       x1="-2325.3611"
+       y1="122.62138"
+       x2="-2309.3169"
+       y2="723.96979" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3137"
+       id="radialGradient2860"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,3.781366e-7,-3.2292777e-7,0.8539977,8.9288564e-5,37.369658)"
+       cx="-1092.8789"
+       cy="276.49725"
+       fx="-1092.8789"
+       fy="276.49725"
+       r="127.73754" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2870"
+       id="radialGradient2862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7746364,0.4472365,-0.4660621,0.8072432,-144.92805,587.20425)"
+       cx="-1093.5826"
+       cy="217.83733"
+       fx="-1093.5826"
+       fy="217.83733"
+       r="123.63598" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4162"
+       id="linearGradient2864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.7247709,2807.0235,194.64859)"
+       x1="-3887.8772"
+       y1="877.09351"
+       x2="-3887.8772"
+       y2="63.463501" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4162"
+       id="linearGradient2866"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.7247709,2807.0235,194.64859)"
+       x1="-3887.8772"
+       y1="746.12317"
+       x2="-3887.8772"
+       y2="587.34491" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4534"
+       id="linearGradient2868"
+       gradientUnits="userSpaceOnUse"
+       x1="-2180.8767"
+       y1="-260.6424"
+       x2="-1234.0055"
+       y2="686.2287" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4534"
+       id="linearGradient2871"
+       gradientUnits="userSpaceOnUse"
+       x1="-2160.2458"
+       y1="-240.01169"
+       x2="-1234.0055"
+       y2="686.2287" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4162"
+       id="linearGradient2873"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0833333,0,0,1.2956349,149.4705,-161.14233)"
+       x1="-2180.8767"
+       y1="-260.6424"
+       x2="-1234.0055"
+       y2="686.2287" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     gridtolerance="10000"
+     guidetolerance="10"
+     objecttolerance="10"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.4960938"
+     inkscape:cx="8"
+     inkscape:cy="8"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     width="16px"
+     height="16px"
+     showgrid="false"
+     showborder="false"
+     inkscape:grid-points="true"
+     inkscape:window-width="748"
+     inkscape:window-height="774"
+     inkscape:window-x="0"
+     inkscape:window-y="58"
+     inkscape:showpageshadow="false">
+    <inkscape:grid
+       id="GridFromPre046Settings"
+       type="xygrid"
+       originx="0px"
+       originy="0px"
+       spacingx="1px"
+       spacingy="1px"
+       color="#0000ff"
+       empcolor="#0000ff"
+       opacity="0.2"
+       empopacity="0.4"
+       empspacing="4" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       style="display:inline"
+       id="g5868"
+       transform="matrix(0.173669,0,0,0.174326,-72.419415,-92.051412)">
+      <path
+         transform="matrix(0.9959566,0,0,1.2202117,1.6861043,-136.53125)"
+         d="M 602,544.5 A 92.5,75.5 0 1 1 417,544.5 A 92.5,75.5 0 1 1 602,544.5 z"
+         sodipodi:ry="75.5"
+         sodipodi:rx="92.5"
+         sodipodi:cy="544.5"
+         sodipodi:cx="509.5"
+         id="path4987"
+         style="fill:#00252b;fill-opacity:1;fill-rule:evenodd"
+         sodipodi:type="arc" />
+      <path
+         transform="matrix(0.9200853,0,0,1.1406537,-168.51683,-66.406557)"
+         d="M 827,521 A 90.5,73 0 1 1 646,521 A 90.5,73 0 1 1 827,521 z"
+         sodipodi:ry="73"
+         sodipodi:rx="90.5"
+         sodipodi:cy="521"
+         sodipodi:cx="736.5"
+         id="path4989"
+         style="opacity:0.83064515;fill:url(#radialGradient5297);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5299);stroke-width:2.92839932;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="opacity:1;fill:#006f82;fill-opacity:0;fill-rule:evenodd;stroke:#006f82;stroke-width:0.28191236;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 2.6069946,0.54910198 L 2.6055771,-0.099666752 L 2.8164858,0.95425507 L 2.8141804,-0.099991964 L 3.1640995,0.9266844 L 3.1614423,-0.28975618 L 3.4429478,1.2506338 L 3.5073405,-1.1012556 L 3.72239,1.8449054 L 4.0622041,-1.7508906 L 4.1411304,2.5470893 L 4.4118271,-0.85937424 L 4.625631,1.5191149 L 4.7599147,-0.67069203 L 4.9741304,1.8970225 L 5.1048093,-1.9417329 L 5.5330088,3.0855654 L 5.3800527,-3.2667341 L 6.1615382,4.3280635 L 5.9364518,-3.2135349 L 6.5790389,4.4625735 L 6.2835316,-3.4843962 L 6.7141524,2.6512146 L 6.8446533,-1.2686398 L 7.0617062,2.5966102 L 7.3293879,-2.1884838 L 7.3382512,1.8663126 L 7.6747002,-3.2703033 L 7.6184571,2.8120031 L 7.9542564,-2.6219686 L 8.1085081,4.3250342 L 8.5077563,-3.8933365 L 8.5967296,5.0000787 L 8.9229558,-4.8130735 L 9.0847112,5.5669907 L 9.338687,-5.4895219 L 9.5028098,5.9718155 L 9.685593,-5.8414779 L 10.060561,6.6467546 L 10.036104,-4.5444835 L 10.336396,5.5920776 L 10.45609,-3.2746295 L 10.681472,4.4021287 L 10.806596,-1.9776351 L 11.166795,3.7526023 L 11.224395,-1.707965 L 11.444757,3.6710755 L 11.642254,-1.4112613 L 11.930022,2.9945221 L 11.781738,-1.222254 L 12.346758,2.777615 L 12.200187,-0.65522999 L 12.621295,1.1282304 L 12.726505,-7.1420034 L 13.107918,1.0734102 L 13.151581,-8.3581575 L 13.386175,1.1270414 L 13.779937,-7.1953276 L 13.824553,5.9976764 L 14.19602,-7.7102185 L 14.371253,6.4287067 L 14.488228,-8.4961904 L 14.990198,8.1010368 L 14.899761,-8.6860537 L 15.40361,8.7716012 L 15.439011,-9.2556758 L 15.768486,9.4188537 L 15.727256,-9.4461407 L 16.181738,10.015608 L 16.144465,-9.4467907 L 16.814173,10.636994 L 16.853223,-3.3116119 L 17.106022,9.6883621 L 17.063895,-2.3658164 L 17.712155,10.312643 L 17.412337,-2.0149402 L 17.679509,10.338299 L 17.257021,-9.4485207 L 18.352565,9.7676773 L 17.53587,-9.1245694 L 18.704673,9.3877306 L 18.18338,-8.827906 L 19.324689,9.1430032 L 19.205411,-8.8027822 C 19.205411,-8.8027822 19.664499,10.362247 19.803275,10.226868 C 19.942045,10.091493 20.109774,-8.614964 20.109774,-8.614964 L 20.148701,9.1961009 L 20.458454,-8.1559615 L 20.501159,8.9788209 L 20.80648,-7.9943089 L 20.848069,8.6286114 L 21.295173,-7.1030104 L 21.39787,8.0724425 L 21.852572,-6.5902698 L 21.886678,6.6078305 L 22.212483,-5.8059473 L 22.504428,2.9197299 L 22.7703,-5.1030285 L 22.990522,2.6208277 L 23.531987,-4.1572975 L 23.824944,5.0285534 L 23.956542,-3.2072384 L 24.321023,4.485083 L 24.433579,-2.8322256 L 24.805704,3.5383642 L 24.931729,-2.4278376 L 25.483376,2.6738694 L 25.425746,-1.5091968 L 25.917074,2.9964681 L 25.982971,-1.0772321 L 26.723408,2.1864728 L 26.748315,-0.86375092 L 27.305164,2.322313 L 27.326534,-0.45933052 L 27.794625,1.1558416 L 27.901769,-1.4107869 L 28.100138,1.643531 L 28.284214,0.05104591 C 28.284214,0.05104591 28.580257,1.0188261 28.579961,0.88366608 C 28.579663,0.74850806 28.985357,0.29229348 28.915281,0.049112065 C 28.845218,-0.1940655 29.210562,0.66832968 29.210562,0.66832968"
+       id="path4922"
+       sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccccccccccccccccccccccccccccccccccc" />
+    <path
+       style="opacity:0.07000002;fill:url(#linearGradient5308);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:12.29699993;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 15.685059,-14.171613 C 8.1008684,-13.978526 2.0086222,-7.7375854 2.0086222,-0.078445316 C 2.0086222,2.2206366 2.5597288,4.3882408 3.5336546,6.3062426 C 3.2949782,5.2768126 3.1700337,4.205026 3.1700337,3.1030039 C 3.1700337,-4.6777095 9.458699,-10.995611 17.21009,-10.995611 C 22.670274,-10.995611 27.40266,-7.8590901 29.725114,-3.2871341 C 28.27676,-9.5232827 22.700358,-14.171613 16.048678,-14.171613 C 15.927562,-14.171613 15.805442,-14.174678 15.685059,-14.171613 z"
+       id="path4679" />
+    <path
+       id="path3760"
+       d="M 23.691842,9.2006092 C 23.598484,9.4475433 22.631394,10.365494 22.180179,10.635462 L 21.681377,10.933903 L 19.629076,8.2492422 L 17.576776,5.5645855 L 17.930036,5.1970172 C 18.275752,4.8372965 19.313091,4.1385288 19.650303,4.0382177 C 19.796709,3.9946677 20.09174,4.342695 21.774869,6.5444334 C 22.849871,7.9506633 23.71251,9.1459453 23.691842,9.2006092 z M 13.419661,-4.1930503 C 13.342524,-3.9890191 12.122128,-2.9446885 11.724398,-2.7423592 L 11.363046,-2.5585401 L 9.3403065,-5.2522454 L 7.3175634,-7.9459547 L 8.0140105,-8.5225982 C 8.3970575,-8.8397544 8.8993669,-9.1775161 9.1302536,-9.2731827 L 9.5500496,-9.4471218 L 11.509157,-6.8843692 C 12.822708,-5.1660854 13.452253,-4.2792527 13.419661,-4.1930503 z M 21.318362,11.183854 C 21.305384,11.218124 21.079254,11.355997 20.815851,11.49024 C 18.745871,12.545229 15.418963,11.303354 12.286903,8.3065443 C 11.178311,7.245823 8.8914692,4.4043332 7.9880622,2.9650658 C 6.2446713,0.18757893 5.4248053,-2.1442783 5.44897,-4.2565999 C 5.4640515,-5.5748644 5.8950782,-6.6871677 6.6679963,-7.4024174 L 6.9330208,-7.6476703 L 8.9660248,-5.0279638 L 10.999033,-2.4082574 L 10.834604,-2.1223744 C 10.607486,-1.7275008 10.648568,-1.2096042 10.969518,-0.42161547 C 11.372323,0.5673418 14.568096,4.7456921 15.425468,5.4043706 C 16.099223,5.9219821 16.513712,6.0730931 17.011879,5.9827268 L 17.364643,5.9187361 L 19.3533,8.5201446 C 20.447064,9.9509184 21.331342,11.149586 21.318362,11.183854 z"
+       style="opacity:0.32000002;fill:#000000;fill-opacity:1;display:inline" />
+    <path
+       style="fill:#dfdfdf;fill-opacity:1;display:inline"
+       d="M 24.663582,8.2251927 C 24.570224,8.4721247 23.603134,9.390077 23.15192,9.6600453 L 22.653118,9.9584864 L 20.600817,7.2738257 L 18.548516,4.589169 L 18.901776,4.2216007 C 19.247492,3.8618796 20.284832,3.1631133 20.622045,3.0628036 C 20.768451,3.0192502 21.06348,3.3672797 22.746609,5.5690169 C 23.821611,6.9752489 24.68425,8.1705288 24.663582,8.2251927 z M 14.391401,-5.1684676 C 14.314264,-4.9644364 13.093866,-3.9201038 12.696138,-3.7177744 L 12.334786,-3.5339554 L 10.312045,-6.2276625 L 8.2893038,-8.92137 L 8.9857509,-9.4980155 C 9.368798,-9.8151695 9.8711073,-10.152931 10.101994,-10.2486 L 10.52179,-10.422539 L 12.480899,-7.8597847 C 13.794448,-6.1415027 14.423991,-5.254668 14.391401,-5.1684676 z M 22.290102,10.208438 C 22.277124,10.242707 22.050994,10.380579 21.787591,10.514826 C 19.717611,11.569813 16.390703,10.327935 13.258643,7.3311278 C 12.150052,6.2704065 9.8632076,3.4289175 8.9598007,1.9896506 C 7.2164098,-0.78783838 6.3965457,-3.1196934 6.4207105,-5.232015 C 6.4357919,-6.5502815 6.8668187,-7.6625832 7.6397367,-8.3778347 L 7.9047612,-8.6230856 L 9.9377653,-6.003379 L 11.970774,-3.3836725 L 11.806345,-3.0977895 C 11.579227,-2.7029182 11.620308,-2.1850215 11.941258,-1.3970328 C 12.344063,-0.40807349 15.539837,3.7702768 16.39721,4.4289541 C 17.070963,4.9465676 17.485453,5.0976766 17.983619,5.0073103 L 18.336384,4.9433196 L 20.325041,7.5447281 C 21.418804,8.9755039 22.303082,10.17417 22.290102,10.208438 z"
+       id="path3218" />
+    <g
+       transform="matrix(0.1619567,0,0,0.1625693,-28.880339,-84.45656)"
+       id="g3787"
+       style="fill:#ffffff;fill-opacity:0;display:inline">
+      <path
+         id="path3789"
+         d="M 324.6064,576.10592 C 324.02996,577.62486 318.05867,583.27138 315.27265,584.93202 L 312.1928,586.7678 L 299.5209,570.25386 L 286.84899,553.73994 L 289.03019,551.47895 C 291.16481,549.26622 297.56985,544.96795 299.65197,544.35092 C 300.55595,544.08302 302.37761,546.22382 312.77007,559.7672 C 319.40765,568.41724 324.73401,575.76967 324.6064,576.10592 z M 261.18093,493.71856 C 260.70464,494.9736 253.16932,501.39752 250.71354,502.64209 L 248.48238,503.7728 L 235.99299,487.20322 L 223.50359,470.63363 L 227.80379,467.08656 C 230.16891,465.13567 233.27042,463.05802 234.69603,462.46955 L 237.28805,461.39961 L 249.38455,477.16367 C 257.49505,487.73321 261.38216,493.18832 261.18093,493.71856 z M 309.95137,588.3053 C 309.87124,588.51609 308.475,589.36418 306.84862,590.18996 C 294.06756,596.67941 273.5256,589.04036 254.18672,570.60633 C 247.34174,564.0816 233.22165,546.60297 227.64357,537.74972 C 216.87902,520.66478 211.81677,506.32102 211.96598,493.32766 C 212.0591,485.21872 214.72047,478.3767 219.49284,473.97704 L 221.12923,472.46844 L 233.682,488.58283 L 246.23478,504.69722 L 245.21952,506.45575 C 243.81718,508.8847 244.07084,512.0704 246.05254,516.91749 C 248.53966,523.00079 268.27193,548.70275 273.56577,552.75442 C 277.72586,555.93837 280.28512,556.86788 283.36104,556.31202 L 285.53918,555.9184 L 297.81812,571.92023 C 304.57154,580.72124 310.03151,588.09451 309.95137,588.3053 z"
+         style="opacity:0.32000002;fill:#ffffff;fill-opacity:0" />
+      <path
+         style="fill:#ffffff;fill-opacity:0"
+         d="M 330.6064,570.10592 C 330.02996,571.62486 324.05867,577.27138 321.27265,578.93202 L 318.1928,580.7678 L 305.5209,564.25386 L 292.84899,547.73994 L 295.03019,545.47895 C 297.16481,543.26622 303.56985,538.96795 305.65197,538.35092 C 306.55595,538.08302 308.37761,540.22382 318.77007,553.7672 C 325.40765,562.41724 330.73401,569.76967 330.6064,570.10592 z M 267.18093,487.71856 C 266.70464,488.9736 259.16932,495.39752 256.71354,496.64209 L 254.48238,497.7728 L 241.99299,481.20322 L 229.50359,464.63363 L 233.80379,461.08656 C 236.16891,459.13567 239.27042,457.05802 240.69603,456.46955 L 243.28805,455.39961 L 255.38455,471.16367 C 263.49505,481.73321 267.38216,487.18832 267.18093,487.71856 z M 315.95137,582.3053 C 315.87124,582.51609 314.475,583.36418 312.84862,584.18996 C 300.06756,590.67941 279.5256,583.04036 260.18672,564.60633 C 253.34174,558.0816 239.22165,540.60297 233.64357,531.74972 C 222.87902,514.66478 217.81677,500.32102 217.96598,487.32766 C 218.0591,479.21872 220.72047,472.3767 225.49284,467.97704 L 227.12923,466.46844 L 239.682,482.58283 L 252.23478,498.69722 L 251.21952,500.45575 C 249.81718,502.8847 250.07084,506.0704 252.05254,510.91749 C 254.53966,517.00079 274.27193,542.70275 279.56577,546.75442 C 283.72586,549.93837 286.28512,550.86788 289.36104,550.31202 L 291.53918,549.9184 L 303.81812,565.92023 C 310.57154,574.72124 316.03151,582.09451 315.95137,582.3053 z"
+         id="path3791" />
+    </g>
+    <path
+       style="fill:url(#linearGradient3809);fill-opacity:1;stroke:none;display:inline"
+       d="M 10.521198,-10.425737 L 10.098451,-10.247512 C 9.8675644,-10.151843 9.365445,-9.8178162 8.9823979,-9.5006622 L 8.2890919,-8.9235502 L 10.309825,-6.224705 L 11.383604,-4.7989016 C 11.832076,-5.6704481 12.373307,-6.4725964 12.981588,-7.2007037 C 12.819168,-7.4158626 12.674145,-7.6123132 12.482746,-7.8626837 L 10.521198,-10.425737 z M 7.9086201,-8.6265075 L 7.6380613,-8.3803866 C 6.8651432,-7.6651369 6.4356299,-6.5499989 6.4205485,-5.2317344 C 6.3963837,-3.1194127 7.2136425,-0.78684309 8.9570336,1.9906438 C 9.1957939,2.3710265 9.5361637,2.8480184 9.9208964,3.3655274 C 9.8637975,2.8392407 9.8278923,2.3051816 9.8278923,1.761497 C 9.8278923,-0.46148867 10.314124,-2.5591336 11.180684,-4.3915277 L 9.9378073,-6.0040451 L 7.9086201,-8.6265075 z"
+       id="path3798" />
+  </g>
+</svg>
diff --git a/sflphone-client-kde/data/sflphone-client-kde.desktop b/sflphone-client-kde/data/sflphone-client-kde.desktop
new file mode 100644
index 0000000000000000000000000000000000000000..1b74b87e517b7317ea7712fc8ad400ec93b94beb
--- /dev/null
+++ b/sflphone-client-kde/data/sflphone-client-kde.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Type=Application
+X-DocPath=sflphone-client-kde/index.html
+Terminal=false
+
+Name=SFLphone VoIP KDE4 client
+GenericName=Telephone
+Comment=Call and receive calls with SIP or IAX protocols
+Exec=sflphone-client-kde
+Icon=sflphone.svg
+StartupNotify=true
+Categories=Network;Telephony;
diff --git a/sflphone-client-kde/data/sflphone-client-kde.notifyrc b/sflphone-client-kde/data/sflphone-client-kde.notifyrc
new file mode 100644
index 0000000000000000000000000000000000000000..48ceca1403d13d0a6fa8b020f146da02fc375ab7
--- /dev/null
+++ b/sflphone-client-kde/data/sflphone-client-kde.notifyrc
@@ -0,0 +1,25 @@
+[Global]
+Name=sflphone-client-kde
+IconName=sflphone-client-kde
+Comment=SFLphone VoIP KDE4 client
+
+[Event/contact online]
+Name=Contact Online
+Comment=A contact has come online
+Sound=
+Action=Sound|Popup
+
+
+[Event/test_notification]
+Name=test message
+Comment=Test message
+Contexts=call
+Action=Sound|Popup|Taskbar
+Persistant=true
+Sound=
+
+[Event/test_notification2]
+Name=test message2
+Comment=Test message2
+Sound=KDE-Im-New-Mail.ogg
+Action=None
diff --git a/sflphone-client-kde/data/sflphone-client-kdeui.rc b/sflphone-client-kde/data/sflphone-client-kdeui.rc
new file mode 100644
index 0000000000000000000000000000000000000000..9c1a57fe7130ae11d4bc1244ace0508e04ae33b1
--- /dev/null
+++ b/sflphone-client-kde/data/sflphone-client-kdeui.rc
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--<gui name="tutorial3"
+	  version="1"
+	  xmlns="http://www.kde.org/standards/kxmlgui/1.0"
+	  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	  xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0
+	  http://www.kde.org/standards/kxmlgui/1.0/kxmlgui.xsd" >
+	-->	
+<gui name="sflphone-client-kde" version="1">
+	<MenuBar>
+		<Menu name="Actions" >
+			<text>Actions</text>
+			<Action name="action_accept" />
+			<Action name="action_refuse" />
+			<Action name="action_hold" />
+			<Action name="action_transfer" />
+			<Action name="action_record" />
+			<Action name="action_mailBox" />
+			<Separator />
+			<Action name="action_main" />
+			<Action name="action_history" />
+			<Action name="action_addressBook" />
+			<Separator />
+			<Action name="action_close" />
+			<Separator />
+			<Action name="action_quit" />
+		</Menu>
+		<Menu name="Settings" >
+			<text>Settings</text>
+			<Action name="action_displayVolumeControls" />
+			<Action name="action_displayDialpad" />
+			<Separator />
+			<Action name="action_configureSflPhone" />
+			<Separator />
+			<Action name="action_accountCreationWizard" />
+		</Menu>
+	</MenuBar>
+	
+        <ToolBar name="mainToolBar" iconText="icononly" position="Top" noMerge="1" fullWidth="false" newline="true" >
+                <Action name="action_accept" />
+                <Action name="action_mailBox" />
+                <Action name="action_refuse" />
+                <Action name="action_hold" />
+                <Action name="action_transfer" />
+                <Action name="action_record" />
+		<Action name="action_main" />
+		<Action name="action_history" />
+		<Action name="action_addressBook" />
+	</ToolBar>	
+</gui>
diff --git a/sflphone-client-kde/doc/CMakeLists.txt b/sflphone-client-kde/doc/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..18fe46cc14b30bbdd39367623dbd6d53cc1de1a3
--- /dev/null
+++ b/sflphone-client-kde/doc/CMakeLists.txt
@@ -0,0 +1,5 @@
+########### install files ###############
+#
+#
+
+KDE4_CREATE_HANDBOOK(index.docbook INSTALL_DESTINATION ${HTML_INSTALL_DIR}/en SUBDIR sflphone-client-kde)
diff --git a/sflphone-client-kde/doc/advanced-use.docbook b/sflphone-client-kde/doc/advanced-use.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..770d78766d507486e50a4083af7ca822ca465aae
--- /dev/null
+++ b/sflphone-client-kde/doc/advanced-use.docbook
@@ -0,0 +1,55 @@
+<chapter id="advanced-use">
+
+	<chapterinfo>
+		<authorgroup>
+			<author>
+				<firstname>J&eacute;r&eacute;my</firstname>
+				<surname>Quentin</surname>
+			</author>
+			<!-- TRANS:ROLES_OF_TRANSLATORS -->
+		</authorgroup>
+	</chapterinfo>
+
+	<title>Advanced use of &sflphone-client-kde;</title>
+ 
+	<sect1 id="advanced-use-hooks">
+		<title>Hooks</title>
+
+		<para>
+			An interesting feature of &sflphone; is the hook handle. Hooks designate some actions you can choose to trigger on a particular signal, especially when receiving or sending a call. The two useful hooks that are implemented in &sflphone; are the URL argument, and the phone number formatting.
+		</para>
+
+		<sect2 id="advanced-use-hooks-url">
+			<title>URL argument</title>
+			<para>
+				This feature permits you to grab an URL sent in a particular header of the SIP or IAX message sent by Asterisk server, and execute it with the chosen browser command.
+			</para>
+			<para>
+				To configure it, go to the Hooks page of the configuration menu. Then check the SIP or/and IAX checkbox, if you want to enable hooks with SIP accounts or/and with IAX accounts. Then type the name of custom header that your Asterisk server inserts into the invite message for the SIP protocol (if you don't know the name of the custom header, ask the one who configured the Asterisk server). For IAX there is a common header for that, so you don't have to configure it . Then type the command of the browser you want to have the URL opened with, or leave x-www-browser for the default browser.
+			</para>
+		</sect2>
+
+		<sect2 id="advanced-use-hooks-formatting">
+			<title> Phone number formatting </title>
+			<para>
+				This feature permits you to add the chosen prefix at the beginning of the phone number you are calling.
+			</para> 
+		</sect2>
+
+	</sect1>
+
+	<sect1 id="advanced-use-codecs">
+		<title>Codecs</title>
+
+		<para>
+			To communicate voice information, &sflphone; uses some codecs. You can choose which codec to use in the audio configuration panel.
+		</para>
+		<para>
+			In this panel you will see the codecs available on your system with all their parameters. &sflphone; will use the first activated one in the list. So you can change the order of the list, and activate/deactivate some ones, to change which one will be used. To do that, select a codec and click on the up/down arrows, or just check/uncheck the corresponding checkbox. It's so simple I wonder why I'm writing that.
+		</para>
+
+	</sect1>
+
+		
+		
+</chapter>
\ No newline at end of file
diff --git a/sflphone-client-kde/doc/basic-use.docbook b/sflphone-client-kde/doc/basic-use.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..d089a2c123ab15ec744592a021f726121b9d49c5
--- /dev/null
+++ b/sflphone-client-kde/doc/basic-use.docbook
@@ -0,0 +1,116 @@
+<chapter id="basic-use">
+
+<chapterinfo>
+<authorgroup>
+<author><firstname>J&eacute;r&eacute;my</firstname><surname>Quentin</surname></author>
+<!-- TRANS:ROLES_OF_TRANSLATORS -->
+</authorgroup>
+</chapterinfo>
+
+<title>Basic use of &sflphone-client-kde;</title>
+
+<para>Although &sflphone; is enterprise oriented, its interface is very easy to use and you can use the basic features without any particular skills or knowings.</para>
+
+<sect1 id="basic-use-mainwindow">
+<title>Presentation of the main window</title>
+
+<para>The main window is composed of three main parts : the &actions-p;, the &screen-p; and the &dialpad-p; (although you can hide the two last ones in the Settings menu). The screen part has three positions.
+The &current-w; : it is the one you are by default, it shows the current, dialing and incoming calls.
+The &history-w; : it shows the past calls and enables you to call someone you called earlier or from whom you missed a call. 
+The &address-w; : it enables you to look in the address book of KDE and to call somebody if his number is available.
+
+To switch between those windows, click on the history and address book buttons. If none of these buttons is triggerred, you are currently in the &current-w;, if the history button is triggerred, you are in the &history-w;, and if the address book button is triggerred, you are in the &address-w;. 
+
+</para>
+
+</sect1>
+
+
+<sect1 id="basic-use-call">
+<title>Making a call</title>
+
+<sect2 id="basic-use-call-current">
+<title>Dialing one's number</title>
+
+
+<para> If you know the number of the people you want to call, you may just type it on the dialpad or on your keyboard while you are in the &current-w;, then click on the Accept button in the &actions-p;'s toolbar or in the "actions" menu, or type enter on your keyboard, or even double-click on the number to call once you have finished dialing it.</para>
+
+<para>Following behaviour, common part...</para>
+
+</sect2>
+
+<sect2 id="basic-use-call-history">
+<title>Calling from call history</title>
+
+
+<para> If you want to call somebody from whom you missed a call, or you already called earlier, you may go to the &history-w;. The detailed use of this window and its features (search...) is described in this section. Once you are in it, find the number or name of the person you want to call, then select it and click on the Accept button in the &actions-p;'s toolbar or in the "actions" menu, or type enter on your keyboard, or double-click on the number.</para>
+
+<para>The screen will come back to the &current-w; with a new ringing call with the number you chose in the &history-w;.</para>
+
+<para> Note that you can also right click and select Edit before call to modify the number in the history before calling it.</para>
+
+<para>Following behaviour, common part...</para>
+
+</sect2>
+
+<sect2 id="basic-use-call-address">
+<title>Calling from address book</title>
+
+
+<para> If you have your KAddressBook configured and filled with some phone numbers, you can go to the &address-w;. The detailed use of this window and its features (search...) is described in this section. Once you are in it, find the name of the person you want to call with the right phone number (&pt-home;, &pt-work; or &pt-cell;), then select it and click on the Accept button in the &actions-p;'s toolbar or in the "actions" menu, or type enter on your keyboard, or double-click on the number.</para>
+
+<para>The screen will come back to the &current-w; with a new ringing call with the number you chose in the &address-w;.</para> 
+
+<para> Note that you can also right click and select Edit before call to modify the number in the address book before calling it.</para>
+
+<para>Following behaviour, common part...</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="basic-use-becalled">
+<title>Receiving a call</title>
+
+
+<para> When one of the account registered in &sflphone; receives an incoming call, it will be displayed as a new item in the &current-w; with the "incoming" icon. You can either accept or refuse it. To accept it, select the item and click on the Accept button which replaced the Call button in toolbar and Actions menu, or double click the item, or type Enter. To refuse it, select it and click on the refuse button that replaced the Hang up button in toolbar and Actions menu or type Escape.</para>
+
+<para>Following behaviour, common part...</para>
+
+</sect1>
+
+
+<sect1 id="basic-use-ringing">
+<title>The call is ringing</title>
+
+
+<para> Once you called a number, the call is normally in ringing state. It will then pass to Current or Busy state, according to the decision of the called peer to accept or refuse the call. If it's in Busy state, you can just hang it up with the Hang up button or typing Escape.
+</para>
+
+<para>If the number doesn't exist or if any other error occured (see the list of common errors here), it is in failure state, then you can Hang it up with the Hang up button or typing Escape. </para>
+
+<para>Following behaviour, common part...</para>
+
+</sect1>
+
+<sect1 id="basic-use-current">
+<title>The call is current</title>
+
+
+<para> Once the call is in current state, you can now communicate with your peer. You have a bunch of useful features when in current state that are described in the common use chapter. To end the call, select it and click on Hang up button in toolbar or type Escape. </para>
+
+</sect1>
+
+
+
+<sect1 id="basic-use-config">
+<title>Configuration panel</title>
+
+<para>The configuration panel is built in accordance with KDE specifications. It is divided by options type. The panel at left shows the different option pages you can reach. Click on one of them to acceed to the corresponding page. The changes you make are not applied until you click OK or Apply. Clicking Cancel will cancel and forget every change you made since the last Apply or OK command. Be careful not to forget some changes you made in some other pages if you wanted to Cancel it. </para>
+
+<para>There is also a specific Apply button just for the account list which is useful to manage these accounts and valid your changes to see if the accounts are well registered. </para>
+
+</sect1>
+
+
+</chapter>
diff --git a/sflphone-client-kde/doc/common-use.docbook b/sflphone-client-kde/doc/common-use.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..06b4667fd0155a4070198edbf2a8f0937823d47f
--- /dev/null
+++ b/sflphone-client-kde/doc/common-use.docbook
@@ -0,0 +1,136 @@
+<chapter id="common-use">
+
+<chapterinfo>
+<authorgroup>
+<author>
+<firstname>J&eacute;r&eacute;my</firstname>
+<surname>Quentin</surname>
+</author>
+<!-- TRANS:ROLES_OF_TRANSLATORS -->
+</authorgroup>
+</chapterinfo>
+
+<title>Common use of &sflphone-client-kde;</title>
+ 
+<sect1 id="common-use-current">
+<title>Handling a call</title>
+
+<para>There are a bunch of features that you can apply on a current call with &sflphone;. Here are their descriptions.
+</para>
+
+<sect2 id="common-use-current-new">
+<title>Placing a new call</title>
+
+<para> You can have plenty of calls in parallel, even if only one is current (ie : you can talk through) and the others are on hold. To place a new call when you are on a current call, click on the Place new call button, it will create a new empty item and select it automatically, then type the phone number you want to call and click Call or type Enter to place the call. You can also go to the &history-w; or the &address-w; and valid a call, and it will be added ringing in the &current-w;. When a new call is placed, any other one is put on hold, so that you can't mix two calls. If you want to go back to one of the calls put on hold, just double-click on the corresponding item and it will go back to current state while the old one is put on hold.
+</para>
+
+</sect2>
+
+<sect2 id="common-use-current-hold">
+<title>Holding a call</title>
+
+<para> If you want to place the current call on hold, you just have to click on the Hold button. The icon of the call will then be changed and communication is paused with your peer. You can then place a new call, transfer the held one (see transf...)... To take the communication back, just double-click on the item or click on Unhold button.
+</para>
+
+</sect2>
+
+<sect2 id="common-use-current-transfer">
+<title>Transfering a call</title>
+
+<para> If you want to transfer the current call to another phone number, click on the transfer button, the item will change and enable you to type the number to which you want to transfer your peer. Once you've typed it, click on Valid transfer button or type Enter to effectively transfer the call. You can place the call on hold while typing the number (see hold).
+</para>
+
+</sect2>
+
+<sect2 id="common-use-current-record">
+<title>Recording a call</title>
+
+<para> If you want to record the current call, click on the record button, the button will become triggered and the light may come on. Since &sflphone; only records calls when they are current (ie : not on hold), the light will be on if the selected call is current and can be recorded, and off if it's not. But if the button is triggered, &sflphone; will record as soon as it's communicating.
+</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="common-use-mailbox">
+<title>Call mailbox</title>
+
+<para>You can call your mailbox typing your account's mailbox number. But if you have registered this number in account's settings, you can just click on Mailbox button. It will call the mailbox of the first registered account.</para>
+
+<para> In both case, you can then type your mailbox's password without worrying about people around, since &sflphone; will not display what you type if the called number is the registered mailbox number of the current call's account.
+</para>
+
+</sect1>
+
+<sect1 id="common-use-address">
+<title>Use the address book</title>
+
+<para>&sflphone-client-kde; communicates with the KDE Address Book and gathers all the phone numbers matching your request and the options chosen. Here we will explain how to configure and use it.</para>
+
+
+<sect2 id="common-use-address-kde">
+<title>Configuring KDE Address Book</title>
+
+<para> As it is fully designed for KDE, &sflphone-client-kde; looks for your contacts in KDE Address Book. So you first have to configure it. In the K Menu of your KDE, go to Applications,then Bureautique (??), then choose Address Book. You are now in the main window of the KDE address book. You can add contacts and handle them from here. Type F1 to see this application's help page if you have some problems with it.
+</para>
+
+<para> &sflphone-client-kde; looks into the standard address book, that means it will look into the contacts displayed in the contact list on the left of the window. The selected address books in the bottom left of the window will be searched. If you add some contacts, you may have to restart &sflphone-client-kde; before it can see them.
+</para>
+
+
+</sect2>
+
+
+<sect2 id="common-use-address-config">
+<title>Configuring &sflphone-client-kde;</title>
+
+<para> You can now go to the Configuration Dialog to choose how &sflphone; will handle your searches in the address book. This step is optionnal though, because the default settings enable you to use the feature without more setup. 
+</para>
+
+<para> The maximum results setting enables you to choose how many phone numbers can be displayed when you look for a contact. KDE address book can contain lots of contacts, especially if connected to LDAP directories, and you don't want to see thousands of contacts displayed as soon as you type a letter to search for.</para>
+
+<para> KDE address book can contain a photo for your contacts. &sflphone-client-kde; can display it in the result of your searches, but as it can take a little more time, you can choose to disable that feature.</para>
+
+<para> Each phone number in KDE address book is linked to a contact, and has a phone number type to differentiate work phones, home phones, and cell phones. You can choose to display only certain of those numbers. Check the types you are interested in and uncheck the other ones.</para>
+
+</sect2>
+
+<sect2 id="common-use-address-use">
+<title>Search in Address Book</title>
+
+<para> Now that everything is set up, you can go to the &address-w;, then type some letters of the name you want to phone. You will see all the phone numbers that match your request and their type. When the resulting list's size is greater than the maximum chosen in configuration, it will only display the beginning of the list with the max size, and will display a warning message to let you know that your wanted number may be in the rest of the list and so not displayed. In that case you should type some more letters to improve precision of the search. Once you found the right number, double click on the item to call it. 
+</para>
+
+</sect2>
+
+
+</sect1>
+
+
+
+<sect1 id="common-use-config">
+<title>Configuration Dialog</title>
+
+<para> There are a lot of options in &sflphone;. All of them are gathered and sorted in the Configuration Dialog. You can reach it clicking Configure SFLPhone in the Settings menu. Here are presented some commonly useful options</para>
+
+<sect2 id="common-use-config-address">
+<title>General settings</title>
+
+<para> Here you can choose the capacity of the call history. 
+</para>
+
+</sect2>
+
+</sect1>
+
+
+
+
+
+
+
+
+
+
+
+</chapter>
\ No newline at end of file
diff --git a/sflphone-client-kde/doc/credits.docbook b/sflphone-client-kde/doc/credits.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..c8ed6a2d52dca7842cc2ac84c87dd73d2a8d89c7
--- /dev/null
+++ b/sflphone-client-kde/doc/credits.docbook
@@ -0,0 +1,39 @@
+<chapter id="credits">
+  <title>Credits and License</title>
+
+  <!--<itemizedlist>
+    <title>Program Copyright:</title>
+    <listitem><para>Albert Astals Cid<email>aacid@kde.org</email> </para></listitem>
+    <listitem><para>Pino Toscano <email>pino@kde.org</email> Current maintainer</para></listitem>
+    <listitem><para>Enrico Ros<email>eros.kde@email.it</email> developer</para></listitem>
+  </itemizedlist>
+
+  <itemizedlist>
+    <title>Documentation Copyright:</title>
+    <listitem><para>Albert Astals Cid<email>aacid@kde.org</email> Author</para></listitem>
+    <listitem><para>Titus Laska<email>titus.laska@gmx.de</email> Some updates and additions</para></listitem>
+    <listitem><para>Pino Toscano <email>pino@kde.org</email></para></listitem>
+  </itemizedlist>-->
+  
+  <itemizedlist>
+    <title>Program:</title>
+    <listitem>
+      <para>The initial application were witten by Jérémy Quentin <email>jeremy.quentin@savoirfairelinux.com</email>.
+      </para>
+    </listitem>
+  </itemizedlist>
+  
+  <itemizedlist>
+    <title>Documentation:</title>
+    <listitem>
+      <para>The initial contents of this manual were witten by Jérémy Quentin <email>jeremy.quentin@savoirfairelinux.com</email>.
+      </para>
+    </listitem>
+  </itemizedlist>
+
+  <!-- TRANS:CREDIT_FOR_TRANSLATORS -->
+  &underFDL;
+  &underGPL;
+
+
+</chapter>
\ No newline at end of file
diff --git a/sflphone-client-kde/doc/getting-started.docbook b/sflphone-client-kde/doc/getting-started.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..fefcd99e0e0680877ee2fe30971263775e24f769
--- /dev/null
+++ b/sflphone-client-kde/doc/getting-started.docbook
@@ -0,0 +1,175 @@
+<chapter id="getting-started">
+
+<chapterinfo>
+<authorgroup>
+<author><firstname>J&eacute;r&eacute;my</firstname><surname>Quentin</surname></author>
+<!-- TRANS:ROLES_OF_TRANSLATORS -->
+</authorgroup>
+</chapterinfo>
+
+<title>Getting Started with &sflphone-client-kde;</title>
+
+<para>When you start &sflphone-client-kde; for the first time, you get an account configuration wizard. This wizard will help you setting up an account for &sflphone; to use. You should complete the wizard before going to the main window of &sflphone-client-kde; for it will not work without at least one account set up.
+You can still change all the settings of the account from the main window after the wizard is complete. You can also start the wizard from the main window at any time.
+We will now describe the different options of this wizard.</para>
+
+<simplelist>
+<member><link linkend="gettingstarted-wizard-welcome">The wizard introduction page.</link></member>
+<member><link linkend="gettingstarted-wizard-createorregister">The registering type page.</link></member>
+<member><link linkend="gettingstarted-wizard-create">Creating a new account.</link></member>
+<member><link linkend="gettingstarted-wizard-register">Register an existing account.</link></member>
+<member><link linkend="gettingstarted-wizard-stun">The STUN settings.</link></member>
+<member><link linkend="gettingstarted-wizard-finish">The conclusion page.</link></member>
+</simplelist>
+
+<sect1 id="gettingstarted-wizard-welcome">
+<title>Welcoming page</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-welcome.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The wizard introduction page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+
+<para>You can navigate in this wizard using the <guibutton>Next</guibutton>, <guibutton>Previous</guibutton> and <guibutton>Cancel</guibutton> buttons. If you click on the <guibutton>Cancel</guibutton> button, the wizard will shut down without adding the account. Click on the <guibutton>Next</guibutton> button to start configuring the account</para>
+
+</sect1>
+
+
+<sect1 id="gettingstarted-wizard-createorregister">
+<title>Create or register</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-createorregister.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The registering type page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+<para>You can now choose to create a new account hosted by sflphone.org or register an existing account that you own.
+If you use &sflphone; for the first time and want to make things work the simplest way possible, you should choose <guibutton>create a new account</guibutton>. It will create an account and add it to &sflphone;.
+If you already have a SIP or IAX account created with &sflphone; or by any other way, you can add it to &sflphone; by choosing <guibutton>register an existing account</guibutton>.
+</para>
+
+</sect1>
+
+<sect1 id="gettingstarted-wizard-create">
+<title>Creating a new account</title>
+
+<para>If you choose to create an account on sflphone.org, the wizard will need very few informations to create the account, create it automatically and add the informations of the new account in &sflphone;. It creates a SIP account, so you will then be able to use this new account from any other system, with any software handling SIP accounts, using the informations of the new account that are displayed at the end of the process or reachable from the main window.</para>
+
+<sect2 id="gettingstarted-wizard-create-email">
+<title>Email address</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-create-email.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The email address page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+<para>The first information it will ask for is your email address. This is non-obligatory, so you can just skip that step by clicking <guibutton>Next</guibutton> button. But it will enable you to receive some notifications about the voice or text messages you receive while you're away.</para>
+
+
+</sect2>
+
+</sect1>
+
+<sect1 id="gettingstarted-wizard-register">
+<title>Register an existing account</title>
+
+<para> If you have already created a SIP or IAX account with &sflphone; from another computer or with another software, or if you want to use an existing account, you can register it with this wizard to be able to use it with this instance of &sflphone;. The wizard will ask you for the basic informations of this account in order to find it back. These informations are described in this section.</para>
+
+
+
+<sect2 id="gettingstarted-wizard-register-siporiax">
+<title>SIP or IAX</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-register-siporiax.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The account type page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+<para> &sflphone; handles two protocols for calls, SIP and IAX2. The wizard will now ask you which of those is your account. If you already have an account created, just choose the right type. If you want to create one without &sflphone; and you wonder which type to choose, you can refer to <ulink url="http://www.voip-info.org/wiki/view/IAX+versus+SIP">this document</ulink> to know which one feets your needs best. </para>
+
+</sect2>
+
+<sect2 id="gettingstarted-wizard-register-settings">
+<title>Account settings</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-register-settings.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The settings page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+<para> The wizard needs a few informations to find your account. The alias is for convenience only, you can choose anyone. It will be applied only on &sflphone; on this system, not in the account. Server is the one that hosts your account. User is the username of the account. Unlike the alias, it has to be the username chosen while creating the account. Password is also the one chosen for the account. Mailbox number will be used by the mailbox button to keep you from having to type that number too often. Usually it is 888.</para>
+
+</sect2>
+
+</sect1>
+
+<sect1 id="gettingstarted-wizard-stun">
+<title>STUN settings</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-stun.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The STUN page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+<para>If you register a SIP account or create it on sflphone.org (that also means registering a SIP account after all), the wizard proposes you to enable STUN. You may want to do it if you are connected under a firewall. Actually, this is not an option of this account in particular, but of the &sflphone; configuration; it will be applied for any account. If you enable this option, you have to choose the STUN server you want to use (example : stunserver.org).</para>
+
+</sect1>
+
+
+<sect1 id="gettingstarted-wizard-finish">
+<title>The conclusion page</title>
+
+<screenshot>
+<mediaobject>
+<imageobject>
+<imagedata fileref="wizard-finish.png" format="PNG"/>
+</imageobject>
+<caption>
+<para>The final page</para>
+</caption>
+</mediaobject>
+</screenshot>
+
+<para> The conclusion page resumes the informations you have sent during the wizard process. It has not done anything yet so you can still give up clicking <guibutton>Cancel</guibutton> button. If you click on <guibutton>Finish</guibutton>, it will send all the information and create the account if you chose to create it or register it if you were registering an existing account. As it has not sent the informations at this step, it cannot know if the registration will succeed. To check this, once you are in the main window, go to the account settings page to see the state of your accounts. </para>
+
+</sect1>
+
+</chapter>
+
diff --git a/sflphone-client-kde/doc/index.docbook b/sflphone-client-kde/doc/index.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..5bf4cfa21d6bc2433964c81cd9dc02b11667ec93
--- /dev/null
+++ b/sflphone-client-kde/doc/index.docbook
@@ -0,0 +1,110 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+  <!ENTITY sflphone-client-kde "SFLPhone KDE Client">
+  <!ENTITY kappname "&sflphone-client-kde;">
+  <!ENTITY sflphonerelease "0.9.6">
+  <!ENTITY current-w "Current calls window">
+  <!ENTITY history-w "Call history window">
+  <!ENTITY address-w "Address book window">
+  <!ENTITY actions-p "tool part">
+  <!ENTITY screen-p "screen">
+  <!ENTITY dialpad-p "dialpad">
+  <!ENTITY pt-home "home phone">
+  <!ENTITY pt-cell "cell phone">
+  <!ENTITY pt-work "work phone">
+
+  <!ENTITY sflphone "SFLphone">
+  <!ENTITY % addindex "IGNORE">
+  <!ENTITY % English "INCLUDE" >
+  
+  <!-- chapters in separate docbook files -->
+  <!ENTITY introduction SYSTEM "introduction.docbook">
+  <!ENTITY getting-started SYSTEM "getting-started.docbook">
+  <!ENTITY basic-use SYSTEM "basic-use.docbook">
+  <!ENTITY common-use SYSTEM "common-use.docbook">
+  <!ENTITY advanced-use SYSTEM "advanced-use.docbook">
+  <!ENTITY credits SYSTEM "credits.docbook">
+]>
+
+<book lang="&language;">
+<bookinfo>
+  <title>&sflphone-client-kde; User Manual</title> 
+  <date>2009-05-10</date>
+  <releaseinfo>&sflphonerelease;</releaseinfo>
+  
+  <authorgroup>
+    <author>
+      <firstname>J&eacute;r&eacute;my</firstname>
+      <surname>Quentin</surname>
+      <affiliation>
+        <address><email>jeremy.quentin@savoirfairelinux.com</email></address>
+      </affiliation>
+    </author>
+  </authorgroup>
+
+  <copyright>
+    <year>2009</year>
+    <holder>Savoir faire linux</holder>
+  </copyright>
+  
+  <legalnotice>&FDLNotice;</legalnotice>
+
+  <abstract>
+    <para>&sflphone-client-kde; is a KDE client for &sflphone;, a robust enterprise-class desktop phone. </para>
+  </abstract>
+
+  <keywordset>
+    <keyword>KDE</keyword>
+    <keyword>SFLPhone</keyword>
+    <keyword>client</keyword>
+    <keyword>phone</keyword>
+    <keyword>enterprise</keyword>
+  </keywordset>
+  
+</bookinfo>
+
+
+&introduction;
+&getting-started; 
+&basic-use;
+&common-use;
+&advanced-use;
+&credits;
+
+<appendix id="app-bibliography">
+<title>Bibliography</title>
+
+<para>(... to be written ...)</para>
+
+<bibliography id="bibliography">
+
+<biblioentry>
+<title><ulink url="info://sflphone-client-kde/Top">&sflphone-client-kde; Manual</ulink></title>
+<authorgroup>
+<author><firstname>J&eacute;r&eacute;my</firstname><surname>Quentin</surname></author>
+</authorgroup>
+</biblioentry>
+
+<biblioentry>
+<title><ulink url="http://en.wikipedia.org/wiki/Session_Initiation_Protocol">SIP Wiki</ulink></title>
+</biblioentry>
+
+<biblioentry>
+<title><ulink url="http://en.wikipedia.org/wiki/IAX">IAX Wiki</ulink></title>
+</biblioentry>
+
+<biblioentry>
+<title><ulink url="http://www.asterisk.org/">Asterisk webpage</ulink></title>
+</biblioentry>
+
+<biblioentry>
+<title><ulink url="http://en.wikipedia.org/wiki/STUN">STUN wiki</ulink></title>
+</biblioentry>
+
+</bibliography>
+
+</appendix>
+
+<!-- &documentation.index; -->
+
+</book>
diff --git a/sflphone-client-kde/doc/introduction.docbook b/sflphone-client-kde/doc/introduction.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..cbf8c1a26337a5004504588972aa07b71cb215b5
--- /dev/null
+++ b/sflphone-client-kde/doc/introduction.docbook
@@ -0,0 +1,14 @@
+<chapter id="introduction">
+<title>Introduction</title>
+
+
+<para>
+This user manual is intended to describe the contents and use of the &sflphone-client-kde; &sflphonerelease; softphone.
+&sflphone-client-kde; is a KDE client for &sflphone;.It communicates with the core side through DBus.
+&sflphone; is meant to be a robust enterprise-class desktop phone.
+It provides functions like call transfer, call hold, multiple lines, multiple accounts support.
+It is SIP and IAX2 compatible.
+&sflphone; audio layer is build upon a native ALSA interface and and a native PulseAudio interface.
+</para>
+  
+</chapter>
diff --git a/sflphone-client-kde/doc/introduction/introduction.html b/sflphone-client-kde/doc/introduction/introduction.html
new file mode 100644
index 0000000000000000000000000000000000000000..f923dc5433bc534eb62400867b1a6c95ded7c29f
--- /dev/null
+++ b/sflphone-client-kde/doc/introduction/introduction.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
+<HTML
+><HEAD
+><TITLE
+>Introduction</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD
+><BODY
+CLASS="CHAPTER"
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="introduction"
+></A
+>Chapter 1. Introduction</H1
+>
+
+<P
+>This user manual is intended to describe the contents and use of the   softphone.
+ is a KDE client for .It communicates with the core side through DBus.
+ is meant to be a robust enterprise-class desktop phone.
+It provides functions like call transfer, call hold, multiple lines, multiple accounts support.
+It is SIP and IAX2 compatible.
+ audio layer is build upon a native ALSA interface and and a native PulseAudio interface.</P
+>
+  </DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/sflphone-client-kde/doc/wizard-create-email.png b/sflphone-client-kde/doc/wizard-create-email.png
new file mode 100644
index 0000000000000000000000000000000000000000..1fdbcb8cdcbe2577262c235c5dd7403f67ddf5ee
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-create-email.png differ
diff --git a/sflphone-client-kde/doc/wizard-createorregister.png b/sflphone-client-kde/doc/wizard-createorregister.png
new file mode 100644
index 0000000000000000000000000000000000000000..a10bd918ab3acb236f52d0ae630209d742956932
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-createorregister.png differ
diff --git a/sflphone-client-kde/doc/wizard-finish.png b/sflphone-client-kde/doc/wizard-finish.png
new file mode 100644
index 0000000000000000000000000000000000000000..3514b1ef0b4352f91c9909fcf77bb8136a9a8c80
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-finish.png differ
diff --git a/sflphone-client-kde/doc/wizard-register-settings.png b/sflphone-client-kde/doc/wizard-register-settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac8a70122a69a238d95b8e14fc434807b1db043f
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-register-settings.png differ
diff --git a/sflphone-client-kde/doc/wizard-register-siporiax.png b/sflphone-client-kde/doc/wizard-register-siporiax.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c49501267889d58cba5ad61465546f1f8a7b3b1
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-register-siporiax.png differ
diff --git a/sflphone-client-kde/doc/wizard-stun.png b/sflphone-client-kde/doc/wizard-stun.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a958554c19ea9e4d6c17898a4ef8945a8c0a59e
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-stun.png differ
diff --git a/sflphone-client-kde/doc/wizard-welcome.png b/sflphone-client-kde/doc/wizard-welcome.png
new file mode 100644
index 0000000000000000000000000000000000000000..d732be6eec55cee995448b7d22e25f072a18c6c0
Binary files /dev/null and b/sflphone-client-kde/doc/wizard-welcome.png differ
diff --git a/sflphone-client-kde/man/CMakeLists.txt b/sflphone-client-kde/man/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a31fcbfd97c4df4304a52285348523c1197054ee
--- /dev/null
+++ b/sflphone-client-kde/man/CMakeLists.txt
@@ -0,0 +1,6 @@
+########### install files ###############
+#
+#
+kde4_create_manpage(sflphone-client-kde.1.docbook 1 INSTALL_DESTINATION ${MAN_INSTALL_DIR})
+
+# kde4_create_manpage(sflphone.1.docbook 1 INSTALL_DESTINATION ${MAN_INSTALL_DIR})
\ No newline at end of file
diff --git a/sflphone-client-kde/man/README.manpages b/sflphone-client-kde/man/README.manpages
new file mode 100644
index 0000000000000000000000000000000000000000..f794a0d25710dcf35e30464afcd383a13832712a
--- /dev/null
+++ b/sflphone-client-kde/man/README.manpages
@@ -0,0 +1,13 @@
+CREATING MANPAGES
+
+Procedure:
+
+ - Creating the manual pages under POD format. A template is available in this directory.
+ - Convert the pdo file in a manpage file:
+     pod2man --section=1 --release=$(VERSION) --center "" myapp.pod > myapp.1
+ - You are done! You can read the manpage file with: 
+     groff -man -Tascii myapp.1
+
+
+
+     Ref: https://wiki.ubuntu.com/PackagingGuide/Complete#Man%20Pages
diff --git a/sflphone-client-kde/man/sflphone-client-kde.1.docbook b/sflphone-client-kde/man/sflphone-client-kde.1.docbook
new file mode 100644
index 0000000000000000000000000000000000000000..ff0fa5ca504436ae792babddfe2f12b0a30e3612
--- /dev/null
+++ b/sflphone-client-kde/man/sflphone-client-kde.1.docbook
@@ -0,0 +1,79 @@
+<?xml version="1.0" ?>
+<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+<!ENTITY % English "INCLUDE">
+]>
+
+<refentry lang="&language;">
+<refentryinfo>
+<title>KDE User's Manual</title>
+<author>
+  <firstname>J&eacute;r&eacute;my</firstname>
+  <surname>Quentin</surname>
+  <affiliation>
+    <address><email>jeremy.quentin@savoirfairelinux.com</email></address>
+  </affiliation>
+</author>
+<date>May 25, 2009</date>
+<productname>K Desktop Environment</productname>
+</refentryinfo>
+
+<refmeta>
+<refentrytitle><command>sflphone-client-kde</command></refentrytitle>
+<manvolnum>1</manvolnum>
+</refmeta>
+
+<refnamediv>
+<refname><command>sflphone-client-kde</command></refname>
+<refpurpose>SIP and IAX2 compatible voice over IP softphone client for KDE.</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+<cmdsynopsis>
+<command>sflphone-client-kde</command>
+</cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1>
+<title>Description</title>
+<para>SFLphone is meant to be a robust enterprise-class desktop phone. It provides functions like call transfer, call hold, multiple lines, multiple accounts support.
+SFLphone audio layer is build upon a native ALSA interface and and a native PulseAudio interface.
+sflphone-client-kde is a KDE client for SFLphone; it communicates with the core side through DBus.
+</para>
+</refsect1>
+
+
+<refsect1>
+<title>Bugs</title>
+<para>Please report bugs at https://projects.savoirfairelinux.com/projects/sflphone/issues/new.</para>
+</refsect1>
+
+
+<refsect1>
+<title>See Also</title>
+<para>sflphoned(1)</para>
+<para>More detailed user documentation is available from <ulink
+url="help:/sflphone-client-kde">help:/kate</ulink>
+(either enter this <acronym>URL</acronym> into Konqueror, or run <userinput><command>khelpcenter</command> <parameter>help:/sflphone-client-kde</parameter></userinput>).</para>
+<para>There is also further information available at <ulink
+url="http://sflphone.org/">the SFLPhone website</ulink>.</para>
+</refsect1>
+
+
+<refsect1>
+<title>Authors</title>
+<para>The maintainer of SFLPhone is Emmanuel Milou : emmanuel.milou@savoirfairelinux.com. The maintainer of SFLPhone KDE client is Jérémy Quentin : jeremy.quentin@savoirfairelinux.com. A comprehensive list of authors and contributors
+is available in the complete user manual mentioned above.</para>
+</refsect1>
+
+
+<refsect1>
+<title>Licence</title>
+<para>This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3 as published by the
+Free Software Foundation.</para>
+<para>On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.</para>
+</refsect1>
+
+
+</refentry>
diff --git a/sflphone-client-kde/man/sflphone-client-kde.pod b/sflphone-client-kde/man/sflphone-client-kde.pod
new file mode 100755
index 0000000000000000000000000000000000000000..559160f429bbabf2d079efdc27c29d90241de5cf
--- /dev/null
+++ b/sflphone-client-kde/man/sflphone-client-kde.pod
@@ -0,0 +1,39 @@
+=head1 NAME
+
+sflphone-client-kde - SIP and IAX2 compatible voice over IP softphone KDE client.
+
+=head1 SYNOPSIS
+
+sflphone-client-kde 
+
+=head1 DESCRIPTION
+
+SFLphone is meant to be a robust enterprise-class desktop phone. It provides functions like call transfer, call hold, multiple lines, multiple accounts support.
+SFLphone audio layer is build upon a native ALSA interface and and a native PulseAudio interface.
+B<sflphone-client-kde> is a KDE client for SFLphone; it communicates with the core side through DBus. SFLphone package comes with the core, B<sflphoned>.
+
+=head1 BUGS
+
+Please report bugs at https://projects.savoirfairelinux.com/projects/show/sflphone.
+
+=head1 AUTHORS
+
+B<sflphone-client-kde> is developed in Montreal by Savoir-Faire Linux Inc. The active developers are Jeremy Quentin <jeremy.quentin@savoirfairelinux.com> .
+
+This manual page was written by Jeremy Quentin <jeremy.quentin@savoirfairelinux.com>.
+
+=head1 SEE ALSO
+
+B<sflphoned>(1)
+
+=head1 COPYRIGHT
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3 as published by the
+Free Software Foundation.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+=cut
+
diff --git a/sflphone-client-kde/man/sflphone.pod b/sflphone-client-kde/man/sflphone.pod
new file mode 120000
index 0000000000000000000000000000000000000000..8e07076b0af8c55ad9025b3bc4cba3ab2e900e9c
--- /dev/null
+++ b/sflphone-client-kde/man/sflphone.pod
@@ -0,0 +1 @@
+sflphone-client-kde.pod
\ No newline at end of file
diff --git a/sflphone-client-kde/po/CMakeLists.txt b/sflphone-client-kde/po/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8618944166c9c62bc031ce4f7e2e32b873be2a90
--- /dev/null
+++ b/sflphone-client-kde/po/CMakeLists.txt
@@ -0,0 +1,15 @@
+find_package(Gettext REQUIRED)
+if (NOT GETTEXT_MSGMERGE_EXECUTABLE)
+MESSAGE(FATAL_ERROR "Please install msgmerge binary")
+endif (NOT GETTEXT_MSGMERGE_EXECUTABLE)
+if (NOT GETTEXT_MSGFMT_EXECUTABLE)
+MESSAGE(FATAL_ERROR "Please install msgmerge binary")
+endif (NOT GETTEXT_MSGFMT_EXECUTABLE)
+
+add_subdirectory(fr)
+add_subdirectory(es)
+add_subdirectory(de)
+add_subdirectory(ru)
+add_subdirectory(zh_CN)
+add_subdirectory(zh_HK)
+
diff --git a/sflphone-client-kde/po/README b/sflphone-client-kde/po/README
new file mode 100644
index 0000000000000000000000000000000000000000..163854cefa2388102ad20d7fdf8952f58cd45932
--- /dev/null
+++ b/sflphone-client-kde/po/README
@@ -0,0 +1,5 @@
+These are translation files for both Gnome and KDE clients.
+
+If you want to update the translations, refere to the lang folder at the root directory of git repository, where the po files to edit are gathered.
+
+DO NOT EDIT THESE PO FILES since they are to be replaced by the new ones from lang folder. All changes might be lost.
diff --git a/sflphone-client-kde/po/de/CMakeLists.txt b/sflphone-client-kde/po/de/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4a149a88288f30056f97c7b088b95fa735979025
--- /dev/null
+++ b/sflphone-client-kde/po/de/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB _po_files *.po)
+GETTEXT_PROCESS_PO_FILES(de ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
diff --git a/sflphone-client-kde/po/de/sflphone-client-kde.po b/sflphone-client-kde/po/de/sflphone-client-kde.po
new file mode 100644
index 0000000000000000000000000000000000000000..e99e5d3614452085f2bc57c436c98ca4f01abc74
--- /dev/null
+++ b/sflphone-client-kde/po/de/sflphone-client-kde.po
@@ -0,0 +1,1233 @@
+# German translation of SFLphone.
+# Copyright (C) 2008 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 3.
+#
+# Sven Werlen <sven.werlen@savoirfairelinux.com>, 2009.
+msgid ""
+msgstr ""
+"Project-Id-Version: sflphone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-15 15:25-0400\n"
+"PO-Revision-Date: 2009-01-08 10:46-0500\n"
+"Last-Translator: Sven Werlen <sven.werlen@savoirfairelinux.com>\n"
+"Language-Team: SavoirFaire Linux Inc <sflphoneteam@savoirfairelinux.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 0.2\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../sflphone-client-kde/src/Account.cpp:34
+#: ../sflphone-client-gnome/src/accountlist.c:175
+msgctxt "account state"
+msgid "Registered"
+msgstr "Registriert"
+
+#: ../sflphone-client-kde/src/Account.cpp:36
+#: ../sflphone-client-gnome/src/accountlist.c:178
+msgctxt "account state"
+msgid "Not Registered"
+msgstr "Nicht registriert"
+
+#: ../sflphone-client-kde/src/Account.cpp:38
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgctxt "account state"
+msgid "Trying..."
+msgstr "Am versuchen..."
+
+#: ../sflphone-client-kde/src/Account.cpp:40
+#: ../sflphone-client-gnome/src/accountlist.c:184
+msgctxt "account state"
+msgid "Error"
+msgstr "Fehler"
+
+#: ../sflphone-client-kde/src/Account.cpp:42
+#: ../sflphone-client-gnome/src/accountlist.c:187
+msgctxt "account state"
+msgid "Bad authentification"
+msgstr "Falsche Authentifizierung"
+
+#: ../sflphone-client-kde/src/Account.cpp:44
+#: ../sflphone-client-gnome/src/accountlist.c:190
+msgctxt "account state"
+msgid "Network unreachable"
+msgstr "Kein netzwerk"
+
+#: ../sflphone-client-kde/src/Account.cpp:46
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgctxt "account state"
+msgid "Host unreachable"
+msgstr "Host unerreichbar"
+
+#: ../sflphone-client-kde/src/Account.cpp:48
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgctxt "account state"
+msgid "Stun configuration error"
+msgstr "Stun: Konfigurationsfehler"
+
+#: ../sflphone-client-kde/src/Account.cpp:50
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgctxt "account state"
+msgid "Stun server invalid"
+msgstr "Ungültiger Stun server"
+
+#: ../sflphone-client-kde/src/Account.cpp:51
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgctxt "account state"
+msgid "Invalid"
+msgstr "Ungültig"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:163
+#: ../sflphone-client-kde/src/AccountWizard.cpp:278
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:393
+msgid "Account creation wizard"
+msgstr "SFLphone Konto (Konfigurationsassistent)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:199
+#: ../sflphone-client-kde/src/AccountWizard.cpp:217
+#: ../sflphone-client-kde/src/AccountWizard.cpp:561
+#: ../sflphone-client-gnome/src/assistant.c:68
+#, c-format
+msgid "This assistant is now finished."
+msgstr "Assistent beendet."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:211
+msgid "Creation of account has failed for the reason"
+msgstr "Konfigurationsassistent mit Fehler beendet"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:255
+#: ../sflphone-client-kde/src/AccountWizard.cpp:440
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:363
+#: ../sflphone-client-gnome/src/assistant.c:72
+msgid "Alias"
+msgstr "Alias"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:256
+#: ../sflphone-client-kde/src/AccountWizard.cpp:441
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:370
+#: ../sflphone-client-gnome/src/assistant.c:75
+msgid "Server"
+msgstr "Server"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:257
+#: ../sflphone-client-kde/src/AccountWizard.cpp:442
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:371
+msgid "User"
+msgstr "Benutzername"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:258
+#: ../sflphone-client-kde/src/AccountWizard.cpp:443
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:372
+msgid "Password"
+msgstr "Passwort"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:259
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:364
+#: ../sflphone-client-gnome/src/config/configwindow.c:418
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:260
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:373
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:279
+#: ../sflphone-client-gnome/src/assistant.c:216
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "Wilkommen zu SFLphone!"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:281
+#: ../sflphone-client-gnome/src/assistant.c:217
+msgid "This installation wizard will help you configure an account."
+msgstr "The Installationsassistent wird Ihnen helfen, ein Konto zu konfigurieren."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:309
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Account"
+msgstr "Konto"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:310
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Please select one of the following options"
+msgstr "Bitte eine Option auswählen"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:312
+#: ../sflphone-client-gnome/src/assistant.c:251
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "SIP/IAX2 Konto bei sflphone.org erstellen lassen"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:313
+#: ../sflphone-client-gnome/src/assistant.c:253
+msgid "Register an existing SIP or IAX2 account"
+msgstr "Existierendes SIP/IAX2 Konto registrieren"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:352
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "VoIP Protocols"
+msgstr "VoIP Protokoll"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:353
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "Select an account type"
+msgstr "Kontotyp auswählen"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:355
+#: ../sflphone-client-gnome/src/assistant.c:233
+msgid "SIP (Session Initiation Protocol)"
+msgstr "SIP (Session Initiation Protocol)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:356
+#: ../sflphone-client-gnome/src/assistant.c:235
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2 (InterAsterisk Exchange)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:395
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "Optional email address"
+msgstr "Fakultative E-mail-Adresse"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:396
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "This email address will be used to send your voicemail messages."
+msgstr "Diese E-mail-Adresse wird benutzt, um Ihnen voicemail Meldungen zu schicken."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:398
+msgid "Email address"
+msgstr "E-mail-Adresse"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:432
+#: ../sflphone-client-gnome/src/assistant.c:266
+msgid "SIP account settings"
+msgstr "Konfiguration des SIP Konto"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:436
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "IAX2 account settings"
+msgstr "Konfiguration des IAX2 Konto"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:438
+#: ../sflphone-client-gnome/src/assistant.c:266
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "Please fill the following information"
+msgstr "Folgende Informationen bitte ausfühlen"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:444
+msgid "Voicemail number"
+msgstr "Voicemail Nummer"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:523
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:856
+msgid "Network Address Translation (NAT)"
+msgstr "Network Address Translation (NAT)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:524
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:536
+msgid "You should probably enable this if you are behind a firewall."
+msgstr "Sie sollten dieses einschalten, falls Sie hinter einer Firewall sind."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:526
+msgid "Enable STUN"
+msgstr "STUN einschalten"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:527
+msgid "Stun Server"
+msgstr "Stun Server"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:562
+msgid ""
+"After checking the settings you chose, click \"Finish\" to create the "
+"account."
+msgstr "Einstellungen prüfen, dann \"Finish\" drücken."
+
+#: ../sflphone-client-kde/src/ActionSetAccountFirst.cpp:26
+msgid "Default account"
+msgstr "Default Konto"
+
+#: ../sflphone-client-kde/src/Call.cpp:116
+#: ../sflphone-client-gnome/src/contacts/calltree.c:322
+msgid "Transfer to : "
+msgstr "Weiterleiten zu : "
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:89
+#: ../sflphone-client-gnome/src/actions.c:816
+msgid "Codec"
+msgstr "Codec"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:93
+#: ../sflphone-client-gnome/src/config/audioconf.c:581
+msgid "Frequency"
+msgstr "Frequenz"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:97
+#: ../sflphone-client-gnome/src/config/audioconf.c:586
+msgid "Bitrate"
+msgstr "Bitrate"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:101
+#: ../sflphone-client-gnome/src/config/audioconf.c:591
+msgid "Bandwidth"
+msgstr "Bandbreite"
+
+#: ../sflphone-client-kde/src/main.cpp:39
+msgid "SFLphone KDE Client"
+msgstr "SFLphone KDE Client"
+
+#: ../sflphone-client-kde/src/main.cpp:43
+msgid "(C) 2009 Savoir-faire Linux"
+msgstr "(C) 2009 Savoir-faire Linux"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgid "Jérémy Quentin"
+msgstr "Jérémy Quentin"
+
+#: ../sflphone-client-kde/src/main.cpp:48
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Ihre Namen"
+
+#: ../sflphone-client-kde/src/main.cpp:48
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "Ihre E-Mail-Adressen"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:62
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1084
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1089
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1094
+#: ../sflphone-client-gnome/src/statusicon.c:126
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:209
+msgid "Incoming call"
+msgstr "Eingehende Anrufe"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:210
+msgid "You have an incoming call from"
+msgstr "Sie haben einen Anruf aus"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:210
+msgid "Click to accept or refuse it."
+msgstr "Klicken, um zu akzeptieren oder abzulehnen."
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:716
+msgid "Address book loading..."
+msgstr "Adressbuch Laden..."
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:901
+#: ../sflphone-client-gnome/src/actions.c:89
+msgid "No registered accounts"
+msgstr "Kein registriertes Konto"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:905
+#: ../sflphone-client-gnome/src/actions.c:83
+#: ../sflphone-client-gnome/src/actions.c:813
+msgid "Using account"
+msgstr "Mit Konto"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1084
+msgid "Main screen"
+msgstr "Hauptbildschirm"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1089
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:165
+msgid "Call history"
+msgstr "Liste der vorherigen Anrufen"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1094
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:394
+#: ../sflphone-client-gnome/src/toolbar.c:243
+#: ../sflphone-client-gnome/src/toolbar.c:245
+msgid "Address book"
+msgstr "Adressbuch"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1108
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1169
+msgid "Edit before call"
+msgstr "Vor Aufruf bearbeiten"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:56
+#: ../sflphone-client-gnome/src/toolbar.c:167
+#: ../sflphone-client-gnome/src/toolbar.c:169
+msgid "New call"
+msgstr "Neuer Anruf"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:57
+#: ../sflphone-client-kde/src/sflphone_const.h:62
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:381
+#: ../sflphone-client-gnome/src/toolbar.c:186
+#: ../sflphone-client-gnome/src/toolbar.c:188
+msgid "Hang up"
+msgstr "Auflegen"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:58
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:382
+#: ../sflphone-client-gnome/src/toolbar.c:207
+#: ../sflphone-client-gnome/src/toolbar.c:209
+msgid "Hold on"
+msgstr "In Warteschleife"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:59
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:383
+#: ../sflphone-client-gnome/src/toolbar.c:220
+#: ../sflphone-client-gnome/src/toolbar.c:222
+msgid "Transfer"
+msgstr "Weiterleiten"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:60
+#: ../sflphone-client-gnome/src/toolbar.c:263
+msgid "Record"
+msgstr "Gespräch aufzeichnen"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:61
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:380
+#: ../sflphone-client-gnome/src/toolbar.c:176
+#: ../sflphone-client-gnome/src/toolbar.c:178
+msgid "Pick up"
+msgstr "Abnehmen"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:63
+#: ../sflphone-client-gnome/src/toolbar.c:196
+#: ../sflphone-client-gnome/src/toolbar.c:198
+msgid "Hold off"
+msgstr "Aus Warteschleife"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:64
+msgid "Give up transfer"
+msgstr "Transfer aufgeben"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:65
+msgid "Call back"
+msgstr "Zurückrufen"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:48
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:91
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/configwindow.c:722
+#: ../sflphone-client-gnome/src/config/configwindow.c:791
+msgctxt "Config section"
+msgid "General"
+msgstr "Allgemein"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:49
+msgctxt "Config section"
+msgid "Display"
+msgstr "Display"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:50
+#: ../sflphone-client-gnome/src/config/configwindow.c:833
+msgctxt "Config section"
+msgid "Accounts"
+msgstr "Konten"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:51
+#: ../sflphone-client-gnome/src/config/configwindow.c:786
+msgctxt "Config section"
+msgid "Audio"
+msgstr "Audio"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:52
+#: ../sflphone-client-gnome/src/config/configwindow.c:801
+msgctxt "Config section"
+msgid "Address Book"
+msgstr "Adressbuch"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:53
+#: ../sflphone-client-gnome/src/config/configwindow.c:796
+msgctxt "Config section"
+msgid "Recordings"
+msgstr "Tonaufnahmen"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:54
+#: ../sflphone-client-gnome/src/config/configwindow.c:806
+msgctxt "Config section"
+msgid "Hooks"
+msgstr "Hooks"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:328
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking "
+"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" "
+"buttons. Edit the selected account with the form on the right."
+msgstr "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, "
+"wenn Sie anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos "
+"zu ändern. Mit \"Plus\" und \"Minus\" können Sie ein Konto anlegen bzgl. "
+"entfernen. Mit \"Editieren\" können Sie ein Konto bearbeiten. "
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:332
+msgid "Remove the selected account"
+msgstr "Entfernen Sie das ausgewählte Konto"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:335
+msgid ""
+"This button will remove the selected account in the list below. Be sure you "
+"really don't need it anymore. If you think you might use it again later, "
+"just uncheck it."
+msgstr ""
+"Diese Aktion entfernt das ausgewählte Konto aus der Liste. Stellen Sie "
+"sicher, dass Sie es wirklich nicht mehr brauchen."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:340
+msgid "Remove"
+msgstr "Entfernen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:342
+msgid "Add a new account"
+msgstr "Neues Konto anlegen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:345
+msgid ""
+"This button enables you to initialize a new account. You will then be able "
+"to edit it using the form on the right."
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:347
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:349
+msgid "Get this account down"
+msgstr "Konto nach unten"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:352
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:359
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows."
+msgstr "Sflphone verwendet das erste \"registrierte\" Konto in der Liste, "
+"wenn Sie anrufen. Benutzen Sie die Pfeile, um die Anordnung der Kontos "
+"zu ändern."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:354
+msgid "Down"
+msgstr "Unten"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:356
+msgid "Get this account up"
+msgstr "Nach oben"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:361
+msgid "Up"
+msgstr "Oben"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:362
+msgid "Apply"
+msgstr "übernehmen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:367
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:368
+msgid "IAX"
+msgstr "IAX"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:374
+#: ../sflphone-client-gnome/src/config/configwindow.c:425
+msgid "Status"
+msgstr "Status"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:377
+#: ../sflphone-client-gnome/src/config/configwindow.c:528
+msgid "Stun parameters will be applied on each SIP account created."
+msgstr "Alle SIP Kontos werden mit Stun Einstellungen angepasst."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:378
+msgid "Enable Stun"
+msgstr "Stun aktivieren"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:380
+#: ../sflphone-client-gnome/src/config/configwindow.c:544
+msgid "Format : name.server:port"
+msgstr "Format: Name.Server:Port"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:382
+msgid "choose Stun server (example : stunserver.org)"
+msgstr "Stun Server auswählen (Bsp: stunserver.org)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:154
+msgid "Enable address book"
+msgstr "Aktivieren Adressbuch"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:155
+msgid "Maximum results"
+msgstr "Maximale Anzahl Resultaten"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:156
+msgid "Display photo if available"
+msgstr "Foto anzeigen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:157
+msgid "Display phone numbers of these types :"
+msgstr "Nummer anzeigen für Typen :"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:158
+msgid "Work"
+msgstr "Arbeit"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:159
+msgid "Mobile"
+msgstr "Handy"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:160
+msgid "Home"
+msgstr "Heim"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:225
+msgid "Sound manager"
+msgstr "Sound Manager"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:228
+msgid "ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:229
+msgid "PulseAudio"
+msgstr "Pulseaudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:231
+msgid "Enable ringtones"
+msgstr "Klingeltöne aktivieren"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:232
+#: ../sflphone-client-gnome/src/config/audioconf.c:812
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:233
+#: ../sflphone-client-gnome/src/config/audioconf.c:795
+msgid "ALSA settings"
+msgstr "ALSA Konfiguration"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:234
+#: ../sflphone-client-gnome/src/config/audioconf.c:662
+msgid "ALSA plugin"
+msgstr "ALSA Plugin"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:235
+#: ../sflphone-client-gnome/src/config/audioconf.c:706
+msgid "Input"
+msgstr "Eingabe"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:236
+#: ../sflphone-client-gnome/src/config/audioconf.c:684
+msgid "Output"
+msgstr "Ausgabe"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:237
+msgid "PulseAudio settings"
+msgstr "Pulseaudio Einstellungen "
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:238
+msgid "Mute other applications during a call"
+msgstr "Während eines Anrufs andere Anwendungen stumm schalten"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:121
+msgid "Enable notifications"
+msgstr "Benachrichtungungen einschalten"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:122
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:126
+msgid "On incoming calls"
+msgstr "Auf eingehende Anrufe"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:123
+msgid "On messages"
+msgstr "Auf Nachrichten"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:124
+msgid "Show main window"
+msgstr "Hauptfenster anzeigen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:125
+msgid "On start"
+msgstr "Beim Start"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:166
+msgctxt "Beginning of 'Keep my history for at least n days.'"
+msgid "Keep my history for at least"
+msgstr "Vorherigen Anrufen behalten: mindestens "
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:167
+#: ../sflphone-client-gnome/src/config/configwindow.c:643
+msgctxt "End of 'Keep my history for at least n days.'"
+msgid "days"
+msgstr "Tage"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:168
+msgid "Clear history"
+msgstr "Vorherigen Anrufen leeren"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:169
+msgid "Connection"
+msgstr "Anbindung"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:170
+#: ../sflphone-client-gnome/src/config/configwindow.c:664
+msgid "SIP Port"
+msgstr "SIP Port"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:180
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "URL Argument"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:181
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "Spezielle Befehle bei eingehender Anrufen mit URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:182
+msgid "Trigger on specific SIP header"
+msgstr "Bewirkung beim spezifischen SIP Header"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:183
+msgid "Trigger on IAX2 URL"
+msgstr "Bewirkung bei IAX2 URL "
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:184
+msgid "Command to run"
+msgstr "Befehl auszuführen"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:185
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "%s wird mit gegebener URL ersetzt."
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:186
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "Telefonnummer umformen"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:187
+msgid "Prefix dialed numbers with"
+msgstr "Präfix vor Nummern einfügen"
+
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:92
+#: ../sflphone-client-gnome/src/config/configwindow.c:726
+msgid "Destination folder"
+msgstr "Zielverzeichnis"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:384
+#: ../sflphone-client-gnome/src/toolbar.c:232
+#: ../sflphone-client-gnome/src/toolbar.c:234
+msgid "History"
+msgstr "Vorherige Anrufe"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:385
+#: ../sflphone-client-gnome/src/toolbar.c:52
+#: ../sflphone-client-gnome/src/toolbar.c:251
+#: ../sflphone-client-gnome/src/toolbar.c:255
+msgid "Voicemail"
+msgstr "Voicemail"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:386
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:388
+msgid "Configure SFLphone"
+msgstr "Konfigurieren SFLphone"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:390
+msgid "Display volume controls"
+msgstr "Lautstärke-Regler anzeigen"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:391
+msgid "Display dialpad"
+msgstr "Wählscheibe anzeigen"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:392
+msgctxt "Action record a call"
+msgid "Record"
+msgstr "Gespräch aufzeichnen"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:396
+msgid "Attention:number of results exceeds max displayed."
+msgstr "Warnung: Anzahl Resultate überschreit definiertes Maximum"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:398
+#: ../sflphone-client-gnome/src/sliders.c:163
+msgid "Mic volume"
+msgstr "Mikro Lautstärke"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:402
+#: ../sflphone-client-gnome/src/sliders.c:161
+msgid "Speakers volume"
+msgstr "Lautsprecher Lautstärke"
+
+#: ../sflphone-client-gnome/src/actions.c:54
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d Voice Nachricht"
+msgstr[1] "%d Voice Nachricht"
+
+#: ../sflphone-client-gnome/src/actions.c:234
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"SFLphone Server kann nicht verbunden werden. Stellen Sie sicher, dass der "
+"Dämon läuft."
+
+#: ../sflphone-client-gnome/src/actions.c:809
+#, c-format
+msgid "IP call - %s"
+msgstr "IP Anruf - %s"
+
+#: ../sflphone-client-gnome/src/actions.c:908
+#, c-format
+msgid ""
+"<b>Error: No audio codecs found.\n"
+"\n"
+"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
+"b> directory in your home( <i>%s</i> )"
+msgstr ""
+"<b>Fehler: Kein Audio-Codec gefunden.\n"
+"\n"
+"</b> SFL Audio-Codecs müssen in <i>%s</i> oder <b>.sflphone</b> Ihres HOME-"
+"Verzeichniss ( <i>%s</i> ) gespeichert werden."
+
+#: ../sflphone-client-gnome/src/assistant.c:70
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr "Sie können jederzeit Ihres Registrierungsstatus überprüfen oder Ihre"
+"Kontoparameter ändern (Optionen/Konten)."
+
+#: ../sflphone-client-gnome/src/assistant.c:78
+msgid "Username"
+msgstr "Benutzername"
+
+#: ../sflphone-client-gnome/src/assistant.c:190
+msgid "SFLphone account creation wizard"
+msgstr "SFLphone Konto (Konfigurationsassistent)"
+
+#: ../sflphone-client-gnome/src/assistant.c:274
+#: ../sflphone-client-gnome/src/assistant.c:370
+#: ../sflphone-client-gnome/src/config/accountwindow.c:153
+msgid "_Alias"
+msgstr "_Alias"
+
+#: ../sflphone-client-gnome/src/assistant.c:282
+#: ../sflphone-client-gnome/src/assistant.c:378
+#: ../sflphone-client-gnome/src/config/accountwindow.c:189
+msgid "_Host name"
+msgstr "_Hostname"
+
+#: ../sflphone-client-gnome/src/assistant.c:290
+#: ../sflphone-client-gnome/src/assistant.c:386
+#: ../sflphone-client-gnome/src/config/accountwindow.c:197
+msgid "_User name"
+msgstr "_Benutzername"
+
+#: ../sflphone-client-gnome/src/assistant.c:306
+#: ../sflphone-client-gnome/src/assistant.c:401
+#: ../sflphone-client-gnome/src/config/accountwindow.c:212
+msgid "_Password"
+msgstr "_Passwort"
+
+#: ../sflphone-client-gnome/src/assistant.c:324
+#: ../sflphone-client-gnome/src/assistant.c:417
+#: ../sflphone-client-gnome/src/config/accountwindow.c:228
+msgid "_Voicemail number"
+msgstr "_Voicemail Nummer"
+
+#: ../sflphone-client-gnome/src/assistant.c:347
+msgid "_Email address"
+msgstr "_Email"
+
+#: ../sflphone-client-gnome/src/assistant.c:444
+#: ../sflphone-client-gnome/src/config/configwindow.c:532
+msgid "E_nable STUN"
+msgstr "STUN Ei_nschalten"
+
+#: ../sflphone-client-gnome/src/assistant.c:451
+msgid "_STUN server"
+msgstr "_STUN Server"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Account Registration"
+msgstr "Konto Registrierung"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Congratulations!"
+msgstr "Gratulation!"
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"ALSA Benachrichtigung\n"
+"\n"
+"Fehler während Öffnen des \"playback device\""
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"ALSA Benachrichtigung\n"
+"\n"
+"Fehler während Öffnen des \"capture device\""
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"Pulseaudio Benachrichtigung\n"
+"\n"
+"Pulseaudio nicht gestartet"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:70
+msgid "There is one call in progress."
+msgstr "Laufender Anruf."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:74
+msgid "There are calls in progress."
+msgstr "Laufende Anrufe."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:83
+msgid "Do you still want to quit?"
+msgstr "Bitte bestätigen, dass Sie die Anwendung beenden möchten"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:296
+msgid "SFLphone Error"
+msgstr "SFLphone Fehler"
+
+#: ../sflphone-client-gnome/src/menus.c:134
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr "SFLphone ist ein VoIP Client (kompatibel mit SIP und IAX2 Protokolle)"
+
+#: ../sflphone-client-gnome/src/menus.c:137
+msgid "About SFLphone"
+msgstr "Über SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:161
+msgid "_Help"
+msgstr "_Hilfe"
+
+#: ../sflphone-client-gnome/src/menus.c:296
+#: ../sflphone-client-gnome/src/menus.c:962
+msgid "_New call"
+msgstr "_Neuer Anruf"
+
+#: ../sflphone-client-gnome/src/menus.c:308
+#: ../sflphone-client-gnome/src/menus.c:794
+msgid "_Pick up"
+msgstr "_Abnehmen"
+
+#: ../sflphone-client-gnome/src/menus.c:318
+#: ../sflphone-client-gnome/src/menus.c:806
+msgid "_Hang up"
+msgstr "A_uflegen"
+
+#: ../sflphone-client-gnome/src/menus.c:328
+#: ../sflphone-client-gnome/src/menus.c:818
+msgid "On _Hold"
+msgstr "in _Warteschleife"
+
+#: ../sflphone-client-gnome/src/menus.c:340
+#: ../sflphone-client-gnome/src/menus.c:830
+msgid "_Record"
+msgstr "_Gespräch aufzeichnen"
+
+#: ../sflphone-client-gnome/src/menus.c:354
+msgid "_Account creation wizard"
+msgstr "SFLphone _Konto (Konfigurationsassistent)"
+
+#: ../sflphone-client-gnome/src/menus.c:384
+msgid "_Call"
+msgstr "_Anruf"
+
+#: ../sflphone-client-gnome/src/menus.c:552
+msgid "Clear _history"
+msgstr "Liste der vorherigen Anrufen _leeren"
+
+#: ../sflphone-client-gnome/src/menus.c:564
+msgid "_Accounts"
+msgstr "_Konten"
+
+#: ../sflphone-client-gnome/src/menus.c:579
+msgid "_Edit"
+msgstr "_Editieren"
+
+#: ../sflphone-client-gnome/src/menus.c:640
+msgid "_Dialpad"
+msgstr "_Wählscheibe"
+
+#: ../sflphone-client-gnome/src/menus.c:652
+msgid "_Volume controls"
+msgstr "Lautstärke Kontrollen"
+
+#: ../sflphone-client-gnome/src/menus.c:670
+msgid "_View"
+msgstr "_Anzeigen"
+
+#: ../sflphone-client-gnome/src/menus.c:890
+msgid "_Call back"
+msgstr "_Zurückrufen"
+
+#: ../sflphone-client-gnome/src/menus.c:1070
+msgid "Edit phone number"
+msgstr "Nummer editieren"
+
+#: ../sflphone-client-gnome/src/menus.c:1081
+msgid "Edit the phone number before making a call"
+msgstr "Nummer vor dem Anruf editieren"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "Konto %s : %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>Von</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "Mit %s Konto <i>%s</i> anrufen"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "Aktuelles Konto"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "Sie haben noch kein Konto eingestellt"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "Fehler"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "Sie haben noch kein registriertes Konto"
+
+#: ../sflphone-client-gnome/src/statusicon.c:91
+msgid "_Show main window"
+msgstr "_Hauptfenster anzeigen"
+
+#: ../sflphone-client-gnome/src/statusicon.c:125
+#, c-format
+msgid "%s - %s"
+msgstr "%s - %s"
+
+#: ../sflphone-client-gnome/src/statusicon.c:127
+#, c-format
+msgid "%i account configured"
+msgid_plural "%i accounts configured"
+msgstr[0] "%i Konto konfiguriert"
+msgstr[1] "%i Konten konfiguriert"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:113
+msgid "Account settings"
+msgstr "Kontoeinstellungen"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:147
+msgid "_Enable this account"
+msgstr "_Einschalten"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:161
+msgid "_Protocol"
+msgstr "_Protokoll"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:179
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "Addressbuch von Evolution verwenden"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "Herunterladen Grenze :"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "Karten"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "Wenn verfügbar, _Bild anzeigen"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "Felder vom Evolution Adressbuch"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "_Arbeit"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "_Heim"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "_Handy"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "Adressbücher"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "Select which Evolution address books to use"
+msgstr "Adressbücher von Evolution zum verwenden auswählen"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
+#: ../sflphone-client-gnome/src/config/audioconf.c:576
+msgid "Name"
+msgstr "Name"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:741
+msgid "_Voice Activity Detection"
+msgstr "\"Voice Activity\" Erkennung"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:751
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "_Geräuschreduzierung (Narrow-Band Companding)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:780
+msgid "Sound Manager"
+msgstr "Sound Manager"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:783
+msgid "_Pulseaudio"
+msgstr "Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:788
+msgid "_ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:835
+msgid "Ringtones"
+msgstr "Klingeltöne"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:841
+msgid "_Enable ringtones"
+msgstr "Klingeltöne _einschalten"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:847
+msgid "Choose a ringtone"
+msgstr "Klingelton auswählen"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Audio Files"
+msgstr "Audio Dateien"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:589
+msgid "Desktop Notifications"
+msgstr "Desktopbenachrichtigungen"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:593
+msgid "_Enable notifications"
+msgstr "Benachrichtigungen _einschalten"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:599
+msgid "Enable voicemail _notifications"
+msgstr "_Benachrichtigung für Voice Nachrichten"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:611
+msgid "System Tray Icon"
+msgstr "Benachrichtigungsfeld (\"System Tray\") Icon"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:614
+msgid "_Popup main window on incoming call"
+msgstr "Hauptfenster anzeigen wenn eingehendes Gespräch"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:619
+msgid "Ne_ver popup main window"
+msgstr "_Hauptfenster nie anzeigen"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:623
+msgid "Hide SFLphone window on _startup"
+msgstr "_Unsichtbar beim Start"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:629
+msgid "Calls History"
+msgstr "Liste der vorherigen Anrufen"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:632
+msgctxt "Beginning of 'Keep my history for at least n days.'"
+msgid "_Keep my history for at least"
+msgstr "_Vorherigen Anrufen behalten: mindestens"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:647
+msgid "PulseAudio sound server"
+msgstr "PulseAudio Sound Server"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:650
+msgid "_Mute other applications during a call"
+msgstr "_Während eines Anrufs andere Anwendungen stumm schalten"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:677
+msgid "Port"
+msgstr "Port"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:732
+msgid "Select a folder"
+msgstr "Verzeichnis auswählen"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:766
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:845
+msgid "Configured Accounts"
+msgstr "Konfigurierten Konten"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "Bewirkung beim spezifischen _SIP Header"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "Bewirkung bei _IAX2 URL"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "Befehl _auszuführen"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "_Präfix vor Nummern einfügen"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:56
+msgid "Search all"
+msgstr "Suche alle"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:57
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Click here to change the search type"
+msgstr "Klicken Sie hier, um Suchtyp zu wechseln"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search by missed call"
+msgstr "Suche nach Anruf in Abwesenheit"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:81
+msgid "Search by incoming call"
+msgstr "Suche nach eingehenden Anruf "
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:93
+msgid "Search by outgoing call"
+msgstr "Suche nach ausgehenden Anru"
diff --git a/sflphone-client-kde/po/es/CMakeLists.txt b/sflphone-client-kde/po/es/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..906dea91f03c04b48b3a8ee534cb8a75423d0bb2
--- /dev/null
+++ b/sflphone-client-kde/po/es/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB _po_files *.po)
+GETTEXT_PROCESS_PO_FILES(es ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
diff --git a/sflphone-client-kde/po/es/sflphone-client-kde.po b/sflphone-client-kde/po/es/sflphone-client-kde.po
new file mode 100644
index 0000000000000000000000000000000000000000..726433aa355511ab9880c62b611ac3d04a99a7ae
--- /dev/null
+++ b/sflphone-client-kde/po/es/sflphone-client-kde.po
@@ -0,0 +1,1494 @@
+# Spanish translation of SFLphone.
+# Copyright (C) 2008 2009 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 3.
+# 
+# Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>, 2008.
+# 
+# POT-Creation-Date: 2007-01-13 01:39+0100\n
+msgid ""
+msgstr ""
+"Project-Id-Version: SFLphone 0.9.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-23 10:14-0400\n"
+"PO-Revision-Date: 2008-08-11 11:53+0200\n"
+"Last-Translator: Carlos Galisteo <cgalisteo AT k-rolus.net>\n"
+"Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: ../sflphone-client-kde/src/Account.cpp:34
+#: ../sflphone-client-gnome/src/accountlist.c:175
+msgid "Registered"
+msgstr "Registrado"
+
+#: ../sflphone-client-kde/src/Account.cpp:36
+#: ../sflphone-client-gnome/src/accountlist.c:178
+msgid "Not Registered"
+msgstr "No registrado"
+
+#: ../sflphone-client-kde/src/Account.cpp:38
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgid "Trying..."
+msgstr "Intentando..."
+
+#: ../sflphone-client-kde/src/Account.cpp:40
+#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "Error"
+
+#: ../sflphone-client-kde/src/Account.cpp:42
+#: ../sflphone-client-gnome/src/accountlist.c:187
+#, fuzzy
+msgid "Authentication Failed"
+msgstr "Autenticación erronea"
+
+#: ../sflphone-client-kde/src/Account.cpp:44
+#: ../sflphone-client-gnome/src/accountlist.c:190
+msgid "Network unreachable"
+msgstr "Red Inaccesible"
+
+#: ../sflphone-client-kde/src/Account.cpp:46
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgid "Host unreachable"
+msgstr "_Parte del servidor"
+
+#: ../sflphone-client-kde/src/Account.cpp:48
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgid "Stun configuration error"
+msgstr "Error de configuración Stun"
+
+#: ../sflphone-client-kde/src/Account.cpp:50
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgid "Stun server invalid"
+msgstr "Servidor stun inválido"
+
+#: ../sflphone-client-kde/src/Account.cpp:51
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgid "Invalid"
+msgstr "Inválido"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:166
+#: ../sflphone-client-kde/src/AccountWizard.cpp:281
+#: ../sflphone-client-kde/src/SFLPhone.cpp:121
+msgid "Account creation wizard"
+msgstr "Asistente de configuración de cuentas"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:202
+#: ../sflphone-client-kde/src/AccountWizard.cpp:220
+#: ../sflphone-client-kde/src/AccountWizard.cpp:564
+#: ../sflphone-client-gnome/src/assistant.c:68
+#, c-format
+msgid "This assistant is now finished."
+msgstr "Ese asistante ha finalizado."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:214
+msgid "Creation of account has failed for the reason"
+msgstr "Creación de cuenta ha fallado por la razón"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:258
+#: ../sflphone-client-kde/src/AccountWizard.cpp:443
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:403
+#: ../sflphone-client-gnome/src/assistant.c:72
+msgid "Alias"
+msgstr "Alias"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:259
+#: ../sflphone-client-kde/src/AccountWizard.cpp:444
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:410
+#: ../sflphone-client-gnome/src/assistant.c:75
+msgid "Server"
+msgstr "Servidor"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:260
+#: ../sflphone-client-kde/src/AccountWizard.cpp:445
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:411
+#: ../sflphone-client-gnome/src/assistant.c:78
+msgid "Username"
+msgstr "Usuario"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:261
+#: ../sflphone-client-kde/src/AccountWizard.cpp:446
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:412
+msgid "Password"
+msgstr "Contraseña"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:262
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:404
+#: ../sflphone-client-gnome/src/config/configwindow.c:418
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:263
+#: ../sflphone-client-kde/src/AccountWizard.cpp:447
+msgid "Voicemail number"
+msgstr "Número de buzón de voz"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:282
+#: ../sflphone-client-gnome/src/assistant.c:216
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "¡Bienvenido al asistente de configuración de cuentas de SFLphone"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:284
+#: ../sflphone-client-gnome/src/assistant.c:217
+msgid "This installation wizard will help you configure an account."
+msgstr "Este asistente de instalación le ayudará a configurar una cuenta."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:312
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Account"
+msgstr "Cuenta"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:313
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Please select one of the following options"
+msgstr "Por favor, elija una de las siguientes opciones"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:315
+#: ../sflphone-client-gnome/src/assistant.c:251
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "Crear una cuenta SIP/IAX2 gratis en sflphone.org"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:316
+#: ../sflphone-client-gnome/src/assistant.c:253
+msgid "Register an existing SIP or IAX2 account"
+msgstr "Registrar una cuenta SIP o IAX2 existente"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:355
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "VoIP Protocols"
+msgstr "Protocolos VoIP"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:356
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "Select an account type"
+msgstr "Escoja un tipo de cuenta"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:358
+#: ../sflphone-client-gnome/src/assistant.c:233
+msgid "SIP (Session Initiation Protocol)"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:359
+#: ../sflphone-client-gnome/src/assistant.c:235
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:398
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "Optional email address"
+msgstr "Dirección de correo opcional"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:399
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "This email address will be used to send your voicemail messages."
+msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:401
+msgid "Email address"
+msgstr "Dirección de correo"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:435
+#: ../sflphone-client-gnome/src/assistant.c:266
+msgid "SIP account settings"
+msgstr "Configuración de cuenta SIP"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:439
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "IAX2 account settings"
+msgstr "Configuración de cuenta IAX2"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:441
+#: ../sflphone-client-gnome/src/assistant.c:266
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "Please fill the following information"
+msgstr "Por favor, rellene la siguiente información"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:526
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:856
+msgid "Network Address Translation (NAT)"
+msgstr "Conversión de Dirección de Red (NAT)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:527
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:536
+msgid "You should probably enable this if you are behind a firewall."
+msgstr "Probablemente tiene que activar esto si está detrás de un cortafuegos."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:529
+msgid "Enable STUN"
+msgstr "Activar STUN"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:530
+msgid "Stun Server"
+msgstr "Servidor STUN"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:565
+msgid ""
+"After checking the settings you chose, click \"Finish\" to create the "
+"account."
+msgstr ""
+"Después de comprobar los ajustes usted eligió, haz clic \"Terminar\"para "
+"crear la cuenta."
+
+#: ../sflphone-client-kde/src/ActionSetAccountFirst.cpp:26
+msgid "Default account"
+msgstr "Cuenta por defecto"
+
+#: ../sflphone-client-kde/src/Call.cpp:119
+#: ../sflphone-client-gnome/src/contacts/calltree.c:322
+msgid "Transfer to : "
+msgstr "Transferir a : "
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:89
+#: ../sflphone-client-gnome/src/actions.c:816
+msgid "Codec"
+msgstr "Códec"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:93
+#: ../sflphone-client-gnome/src/config/audioconf.c:581
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:97
+#: ../sflphone-client-gnome/src/config/audioconf.c:586
+msgid "Bitrate"
+msgstr "Tasa de transferencia"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:101
+#: ../sflphone-client-gnome/src/config/audioconf.c:591
+msgid "Bandwidth"
+msgstr "Ancho de banda"
+
+#: ../sflphone-client-kde/src/main.cpp:38
+msgid "SFLphone KDE Client"
+msgstr "Cliente KDE de SFLphone"
+
+#: ../sflphone-client-kde/src/main.cpp:42
+msgid "(C) 2009 Savoir-faire Linux"
+msgstr ""
+
+#: ../sflphone-client-kde/src/main.cpp:46
+msgid "Jérémy Quentin"
+msgstr ""
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Maxime Chambreuil"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "maxime.chambreuil@savoirfairelinux.com"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:53
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/statusicon.c:126
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:100
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+msgid "Main screen"
+msgstr "Pantalla principal"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:101
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:165
+msgid "Call history"
+msgstr "Historia de Llamada"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:102
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/toolbar.c:243
+#: ../sflphone-client-gnome/src/toolbar.c:245
+msgid "Address book"
+msgstr "Libreta de contactos"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:115
+msgid "Configure SFLphone"
+msgstr "Configurar SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:117
+msgid "Display volume controls"
+msgstr "Mostrar controles de volumen"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:118
+msgid "Display dialpad"
+msgstr "Mostrar dialpad"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:227
+msgid "Incoming call"
+msgstr "Llamada entrante"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "You have an incoming call from"
+msgstr "Tienes una llamada de"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "Click to accept or refuse it."
+msgstr "Haz clic para aceptar o rechazarlo"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:656
+msgid "Address book loading..."
+msgstr "Cargando el directorio..."
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:840
+#: ../sflphone-client-gnome/src/actions.c:89
+msgid "No registered accounts"
+msgstr "Ninguna cuenta registrada"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:844
+#: ../sflphone-client-gnome/src/actions.c:83
+#: ../sflphone-client-gnome/src/actions.c:813
+msgid "Using account"
+msgstr "Usando la cuenta"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1045
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1109
+msgid "Edit before call"
+msgstr "Editar antes de llamar"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:40
+#: ../sflphone-client-gnome/src/toolbar.c:167
+#: ../sflphone-client-gnome/src/toolbar.c:169
+msgid "New call"
+msgstr "Nueva llamada"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:41
+#: ../sflphone-client-kde/src/sflphone_const.h:46
+#: ../sflphone-client-gnome/src/toolbar.c:186
+#: ../sflphone-client-gnome/src/toolbar.c:188
+msgid "Hang up"
+msgstr "Colgar"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:42
+#: ../sflphone-client-gnome/src/toolbar.c:207
+#: ../sflphone-client-gnome/src/toolbar.c:209
+msgid "Hold on"
+msgstr "Retener"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:43
+#: ../sflphone-client-gnome/src/toolbar.c:220
+#: ../sflphone-client-gnome/src/toolbar.c:222
+msgid "Transfer"
+msgstr "Transferir"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:44
+#: ../sflphone-client-gnome/src/toolbar.c:263
+msgid "Record"
+msgstr "Recordar"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:45
+#: ../sflphone-client-gnome/src/toolbar.c:176
+#: ../sflphone-client-gnome/src/toolbar.c:178
+msgid "Pick up"
+msgstr "Descolgar"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:47
+#: ../sflphone-client-gnome/src/toolbar.c:196
+#: ../sflphone-client-gnome/src/toolbar.c:198
+msgid "Hold off"
+msgstr "Seguir"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:48
+msgid "Give up transfer"
+msgstr "Abandonar transferencia"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:49
+msgid "Call back"
+msgstr "Llamar"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:50
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:413
+#: ../sflphone-client-gnome/src/toolbar.c:52
+#: ../sflphone-client-gnome/src/toolbar.c:251
+#: ../sflphone-client-gnome/src/toolbar.c:255
+msgid "Voicemail"
+msgstr "Mensaje de voz"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:48
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:91
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/configwindow.c:722
+#: ../sflphone-client-gnome/src/config/configwindow.c:791
+msgid "General"
+msgstr "General"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:49
+#, fuzzy
+msgid "Display"
+msgstr "Mostrar"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:50
+#: ../sflphone-client-gnome/src/config/configwindow.c:833
+#, fuzzy
+msgid "Accounts"
+msgstr "Cuentas"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:51
+#: ../sflphone-client-gnome/src/config/configwindow.c:786
+#, fuzzy
+msgid "Audio"
+msgstr "Audio"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:52
+#: ../sflphone-client-gnome/src/config/configwindow.c:801
+#, fuzzy
+msgid "Address Book"
+msgstr "Libreta de direcciones"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:53
+#: ../sflphone-client-gnome/src/config/configwindow.c:796
+#, fuzzy
+msgid "Recordings"
+msgstr "Grabaciones"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:54
+#: ../sflphone-client-gnome/src/config/configwindow.c:806
+#, fuzzy
+msgid "Hooks"
+msgstr "Disparadores"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:368
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking "
+"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" "
+"buttons. Edit the selected account with the form on the right."
+msgstr ""
+"Por defecto, sflphone usa la primera cuenta registrada en esa listapara "
+"llamar. Cambiar el orden de las cuentas con las flechas \"Arriba\" y \"Abajo"
+"\". Activar/Desactivar las si las selecciona/deselecciona a la izquierda. "
+"Añadir ò Eliminar algunas con los botones \"Mas\" y \"Menos\" Editar la "
+"cuenta seleccionada con el formulario a la derecha."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:372
+msgid "Remove the selected account"
+msgstr "Eliminar la cuenta seleccionada"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:375
+msgid ""
+"This button will remove the selected account in the list below. Be sure you "
+"really don't need it anymore. If you think you might use it again later, "
+"just uncheck it."
+msgstr ""
+"Este botòn elimina la cuenta seleccionada en la siguiente lista. Esté "
+"seguroque usted no la necesita mas. Si usted piensa que, tal vez, lo va a "
+"necesitardespues, solo lo deselecciona."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:380
+msgid "Remove"
+msgstr "Eliminar"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:382
+msgid "Add a new account"
+msgstr "Añadir una nueva cuenta"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:385
+msgid ""
+"This button enables you to initialize a new account. You will then be able "
+"to edit it using the form on the right."
+msgstr ""
+"Este botón le permite inicializar una nueva cuenta. Usted podrá "
+"corregirlocon el formulario a la derecha."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:387
+msgid "Add"
+msgstr "Añadir"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:389
+msgid "Get this account down"
+msgstr "Bajar esta cuenta"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:392
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:399
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows."
+msgstr ""
+"Por defecto, sflphone usa la primera cuenta registrada en esa listapara "
+"llamar. Cambiar el orden de las cuentas con las flechas \"Arriba\" y \"Abajo"
+"\"."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:394
+msgid "Down"
+msgstr "Abajo"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:396
+msgid "Get this account up"
+msgstr "Subir esta cuenta"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:401
+msgid "Up"
+msgstr "Arriba"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:402
+msgid "Apply"
+msgstr "Aplicar"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:407
+msgid "SIP"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:408
+msgid "IAX"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:414
+#: ../sflphone-client-gnome/src/config/configwindow.c:425
+msgid "Status"
+msgstr "Estado"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:416
+msgid "Basic"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:417
+#, fuzzy
+msgid "Registration expire"
+msgstr "Registrado"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:418
+msgid "Conform to RFC 3263"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:419
+msgid "Advanced"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:421
+#: ../sflphone-client-gnome/src/config/configwindow.c:528
+msgid "Stun parameters will be applied on each SIP account created."
+msgstr "Parámetros de stun se aplicarán a cada cuenta SIP creada."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:422
+msgid "Enable Stun"
+msgstr "Activar STUN"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:424
+#: ../sflphone-client-gnome/src/config/configwindow.c:544
+msgid "Format : name.server:port"
+msgstr "Formato : nombre.servidor:puerto"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:426
+msgid "choose Stun server (example : stunserver.org)"
+msgstr "Elija un servidor Stun (ejemplo : stunserver.org)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:154
+msgid "Enable address book"
+msgstr "Activar la libreta de contactos"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:155
+msgid "Maximum results"
+msgstr "Resultados maximo"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:156
+msgid "Display photo if available"
+msgstr "Mostrar fotos de contactos, si está disponible"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:157
+msgid "Display phone numbers of these types :"
+msgstr "Mostrar números de este typo:"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:158
+msgid "Work"
+msgstr "Profesional"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:159
+msgid "Mobile"
+msgstr "Movil"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:160
+msgid "Home"
+msgstr "Personal"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:225
+msgid "Sound manager"
+msgstr "Gestor de audio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:228
+msgid "ALSA"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:229
+msgid "PulseAudio"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:231
+msgid "Enable ringtones"
+msgstr "Habilitar tonos de llamada"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:232
+#: ../sflphone-client-gnome/src/config/audioconf.c:812
+msgid "Codecs"
+msgstr "Códecs"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:233
+#: ../sflphone-client-gnome/src/config/audioconf.c:795
+msgid "ALSA settings"
+msgstr "Configuración de ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:234
+#: ../sflphone-client-gnome/src/config/audioconf.c:662
+msgid "ALSA plugin"
+msgstr "Plugin ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:235
+#: ../sflphone-client-gnome/src/config/audioconf.c:706
+msgid "Input"
+msgstr "Entrada"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:236
+#: ../sflphone-client-gnome/src/config/audioconf.c:684
+msgid "Output"
+msgstr "Salida"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:237
+msgid "PulseAudio settings"
+msgstr "Configuración de PulseAudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:238
+msgid "Mute other applications during a call"
+msgstr "Silenciar el resto de aplicaciones durante una llamada"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:121
+msgid "Enable notifications"
+msgstr "Habilitar notificaciones"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:122
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:126
+msgid "On incoming calls"
+msgstr "Al recibir llamadas"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:123
+msgid "On messages"
+msgstr "Al recibir mensajes"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:124
+msgid "Show main window"
+msgstr "Mostrar ventana principal"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:125
+msgid "On start"
+msgstr "En el arranque"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:166
+#, fuzzy
+msgid "Keep my history for at least"
+msgstr "Guardar mi historia por lo menos"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:167
+#: ../sflphone-client-gnome/src/config/configwindow.c:643
+#, fuzzy
+msgid "days"
+msgstr "días"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:168
+msgid "Clear history"
+msgstr "Limpiar historia"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:169
+msgid "Connection"
+msgstr "Connexión"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:170
+#: ../sflphone-client-gnome/src/config/configwindow.c:664
+msgid "SIP Port"
+msgstr "Puerto SIP"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:180
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "Argumento de URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:181
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "Comandos personalizados en llamada entrante con URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:182
+msgid "Trigger on specific SIP header"
+msgstr "Disparador en una cabecera SIP específica"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:183
+msgid "Trigger on IAX2 URL"
+msgstr "Disparador en una URL IAX2"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:184
+msgid "Command to run"
+msgstr "Comando de ejecutar"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:185
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "%s se remplazará por la URL."
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:186
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "Reescritura de número de teléfono"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:187
+msgid "Prefix dialed numbers with"
+msgstr "Prefijar los números marcados con"
+
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:92
+#: ../sflphone-client-gnome/src/config/configwindow.c:726
+msgid "Destination folder"
+msgstr "Carpeta de destino"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:307
+msgid "Attention:number of results exceeds max displayed."
+msgstr "Cuidado:número de resultatos excede el maximo a mostrar."
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:309
+#: ../sflphone-client-gnome/src/sliders.c:163
+msgid "Mic volume"
+msgstr "Volumen del micrófono"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:313
+#: ../sflphone-client-gnome/src/sliders.c:161
+msgid "Speakers volume"
+msgstr "Volumen de altavoces"
+
+#: ../sflphone-client-gnome/src/actions.c:54
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d mensaje de voz"
+msgstr[1] "%d mensajes de voz"
+
+#: ../sflphone-client-gnome/src/actions.c:234
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"Incapaz de conectar con el servidor SFLphone.\n"
+" Asegúrese que el demonio esté funcionando."
+
+#: ../sflphone-client-gnome/src/actions.c:809
+#, c-format
+msgid "IP call - %s"
+msgstr "Llamada IP - %s"
+
+#: ../sflphone-client-gnome/src/actions.c:908
+#, c-format
+msgid ""
+"<b>Error: No audio codecs found.\n"
+"\n"
+"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
+"b> directory in your home( <i>%s</i> )"
+msgstr ""
+"<b>Error: Codecs de audio no encontrados.\n"
+"\n"
+"</b> Los codecs de audio de SFLphone deben estar en <i>%s</i> o en el "
+"directorio <b>.sflphone</b> de su home( <i>%s</i> )"
+
+#: ../sflphone-client-gnome/src/assistant.c:70
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr ""
+"Puede comprobar en cualquier momento su estado de registro o modificar la "
+"configuración de sus cuentas en la ventana de Opciones/Cuentas."
+
+#: ../sflphone-client-gnome/src/assistant.c:190
+msgid "SFLphone account creation wizard"
+msgstr "Asistente de creación de cuentas"
+
+#: ../sflphone-client-gnome/src/assistant.c:274
+#: ../sflphone-client-gnome/src/assistant.c:370
+#: ../sflphone-client-gnome/src/config/accountwindow.c:156
+msgid "_Alias"
+msgstr "_Alias"
+
+#: ../sflphone-client-gnome/src/assistant.c:282
+#: ../sflphone-client-gnome/src/assistant.c:378
+#: ../sflphone-client-gnome/src/config/accountwindow.c:192
+msgid "_Host name"
+msgstr "_Nombre de equipo"
+
+#: ../sflphone-client-gnome/src/assistant.c:290
+#: ../sflphone-client-gnome/src/assistant.c:386
+#: ../sflphone-client-gnome/src/config/accountwindow.c:206
+msgid "_User name"
+msgstr "_Usuario"
+
+#: ../sflphone-client-gnome/src/assistant.c:306
+#: ../sflphone-client-gnome/src/assistant.c:401
+#: ../sflphone-client-gnome/src/config/accountwindow.c:221
+msgid "_Password"
+msgstr "_Contraseña"
+
+#: ../sflphone-client-gnome/src/assistant.c:324
+#: ../sflphone-client-gnome/src/assistant.c:417
+#: ../sflphone-client-gnome/src/config/accountwindow.c:237
+msgid "_Voicemail number"
+msgstr "_Número de buzón de voz"
+
+#: ../sflphone-client-gnome/src/assistant.c:347
+msgid "_Email address"
+msgstr "_Correo"
+
+#: ../sflphone-client-gnome/src/assistant.c:444
+#: ../sflphone-client-gnome/src/config/configwindow.c:532
+msgid "E_nable STUN"
+msgstr "A_ctivar STUN"
+
+#: ../sflphone-client-gnome/src/assistant.c:451
+msgid "_STUN server"
+msgstr "_Servidor STUN"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Account Registration"
+msgstr "Registro de cuenta"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Congratulations!"
+msgstr "¡Enhorabuena!"
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"<b>Notificación ALSA</b>\n"
+"\n"
+"Error al abrir el dispositivo de reproducción"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"<b>Notificación ALSA</b>\n"
+"\n"
+"Error al abrir el dispositivo de captura"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"<b>Notificación de Pulseaudio</b>\n"
+"\n"
+"Pulseaudio no está funcionando"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:70
+msgid "There is one call in progress."
+msgstr "No hay llamada en curso"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:74
+msgid "There are calls in progress."
+msgstr "Hay llamadas en curso."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:83
+msgid "Do you still want to quit?"
+msgstr "Sin embargo quiere parar ?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:282
+msgid "SFLphone Error"
+msgstr "SFLphone Error"
+
+#: ../sflphone-client-gnome/src/menus.c:134
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr ""
+"SFLphone es un telefono por Internet compatible con los protocolos SIP y IAX2"
+
+#: ../sflphone-client-gnome/src/menus.c:137
+msgid "About SFLphone"
+msgstr "Sobre SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:161
+msgid "_Help"
+msgstr "_Ayuda"
+
+#: ../sflphone-client-gnome/src/menus.c:296
+#: ../sflphone-client-gnome/src/menus.c:953
+msgid "_New call"
+msgstr "_Nueva llamada"
+
+#: ../sflphone-client-gnome/src/menus.c:308
+#: ../sflphone-client-gnome/src/menus.c:785
+msgid "_Pick up"
+msgstr "_Descolgar"
+
+#: ../sflphone-client-gnome/src/menus.c:318
+#: ../sflphone-client-gnome/src/menus.c:797
+msgid "_Hang up"
+msgstr "_Colgar"
+
+#: ../sflphone-client-gnome/src/menus.c:328
+#: ../sflphone-client-gnome/src/menus.c:809
+msgid "On _Hold"
+msgstr "En _Espera"
+
+#: ../sflphone-client-gnome/src/menus.c:340
+#: ../sflphone-client-gnome/src/menus.c:821
+msgid "_Record"
+msgstr "_Recordar"
+
+#: ../sflphone-client-gnome/src/menus.c:354
+msgid "_Account creation wizard"
+msgstr "Asistente de configuración de cuentas"
+
+#: ../sflphone-client-gnome/src/menus.c:384
+msgid "_Call"
+msgstr "_Llamar"
+
+#: ../sflphone-client-gnome/src/menus.c:552
+msgid "Clear _history"
+msgstr "_Limpiar historia"
+
+#: ../sflphone-client-gnome/src/menus.c:564
+msgid "_Accounts"
+msgstr "_Cuentas"
+
+#: ../sflphone-client-gnome/src/menus.c:579
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../sflphone-client-gnome/src/menus.c:631
+msgid "_Dialpad"
+msgstr "_Teclado numérico"
+
+#: ../sflphone-client-gnome/src/menus.c:643
+msgid "_Volume controls"
+msgstr "_Controles de volumen"
+
+#: ../sflphone-client-gnome/src/menus.c:661
+msgid "_View"
+msgstr "_Ver"
+
+#: ../sflphone-client-gnome/src/menus.c:881
+msgid "_Call back"
+msgstr "_Llamar"
+
+#: ../sflphone-client-gnome/src/menus.c:1061
+msgid "Edit phone number"
+msgstr "Editar número de teléfono"
+
+#: ../sflphone-client-gnome/src/menus.c:1072
+msgid "Edit the phone number before making a call"
+msgstr "Editar el número de teléfono antes de llamar"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s cuenta : %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>De</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "Llamando con la cuenta %s <i>%s</i>"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "Cuenta actual"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "Ninguna cuenta configurada"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "No tiene ninguna cuenta registrada"
+
+#: ../sflphone-client-gnome/src/statusicon.c:91
+msgid "_Show main window"
+msgstr "Mostrar ventana principal"
+
+#: ../sflphone-client-gnome/src/statusicon.c:127
+#, c-format
+msgid "%i account configured"
+msgid_plural "%i accounts configured"
+msgstr[0] "%i cuenta configurada"
+msgstr[1] "%i cuentas configuradas"
+
+#: ../sflphone-client-gnome/src/toolbar.c:232
+#: ../sflphone-client-gnome/src/toolbar.c:234
+msgid "History"
+msgstr "Historia de Llamada"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:116
+msgid "Account settings"
+msgstr "Configuración de cuentas"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:150
+msgid "_Enable this account"
+msgstr "_Habilitar esta cuenta"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:164
+msgid "_Protocol"
+msgstr "_Protocolo"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:182
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:200
+msgid "_Resolve host name only once for the session"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "_Usar libreta de contactos de Evolution"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "Limite de descargo :"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "tarjetas"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "_Mostrar fotos de contactos, si está disponible"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "Usar los siguientes campos de la libreta de direcciones de Evolution:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "P_rofesional"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "_Personal"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "_Movil"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "Directorios"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "Select which Evolution address books to use"
+msgstr "Seleccione el directorio de Evolution a usar"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
+#: ../sflphone-client-gnome/src/config/audioconf.c:576
+msgid "Name"
+msgstr "Nombre"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:741
+msgid "_Voice Activity Detection"
+msgstr "_Detección de actividad de voz"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:751
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "_Reducción de ruido"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:780
+msgid "Sound Manager"
+msgstr "Gestor de audio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:783
+msgid "_Pulseaudio"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:788
+msgid "_ALSA"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:835
+msgid "Ringtones"
+msgstr "Tonos de llamada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:841
+msgid "_Enable ringtones"
+msgstr "_Habilitar tonos de llamada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:847
+msgid "Choose a ringtone"
+msgstr "Elija un tono de llmada"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Audio Files"
+msgstr "Archivos de Audio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:589
+msgid "Desktop Notifications"
+msgstr "Notificación de escritorio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:593
+msgid "_Enable notifications"
+msgstr "_Activar notificaciones"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:599
+msgid "Enable voicemail _notifications"
+msgstr "Activar _notificaciones de mensajes de voz"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:611
+msgid "System Tray Icon"
+msgstr "Icono de bandeja del sistema"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:614
+msgid "_Popup main window on incoming call"
+msgstr "_Popup ventana principal al recibir llamadas"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:619
+msgid "Ne_ver popup main window"
+msgstr "_Nunca mostrar ventana principal"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:623
+msgid "Hide SFLphone window on _startup"
+msgstr "Esconder SFLphone al principio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:629
+msgid "Calls History"
+msgstr "Historia de llamadas"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:632
+#, fuzzy
+msgid "_Keep my history for at least"
+msgstr "_Guardar mi historia por lo menos"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:647
+msgid "PulseAudio sound server"
+msgstr "Servidor de sonido Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:650
+msgid "_Mute other applications during a call"
+msgstr "Silenciar otras aplicaciones durante una llamada"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:677
+msgid "Port"
+msgstr "Puerto"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:732
+msgid "Select a folder"
+msgstr "Seleccione una carpeta"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:766
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:845
+msgid "Configured Accounts"
+msgstr "Cuentas Configuradas"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "Disparador en una cabecera _SIP específica"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "Disparador con una URL _IAX2"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "_Comando a ejecutar"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "_Prefijar los números marcados con"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:56
+msgid "Search all"
+msgstr "Buscar todos"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:57
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Click here to change the search type"
+msgstr "Haz clic aqui para cambiar el type de busqueda"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search by missed call"
+msgstr "Buscar en llamadas faltadas"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:81
+msgid "Search by incoming call"
+msgstr "Buscar en llamadas entrantes"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:93
+msgid "Search by outgoing call"
+msgstr "Buscar en llamadas saliente"
+
+#~ msgctxt "Config section"
+#~ msgid "Accounts"
+#~ msgstr "Cuentas"
+
+#~ msgctxt "account state"
+#~ msgid "Registered"
+#~ msgstr "Registrado"
+
+#~ msgctxt "account state"
+#~ msgid "Not Registered"
+#~ msgstr "No registrado"
+
+#~ msgctxt "account state"
+#~ msgid "Trying..."
+#~ msgstr "Intentando..."
+
+#~ msgctxt "account state"
+#~ msgid "Error"
+#~ msgstr "Error"
+
+#~ msgctxt "account state"
+#~ msgid "Network unreachable"
+#~ msgstr "Red Inaccesible"
+
+#~ msgctxt "account state"
+#~ msgid "Host unreachable"
+#~ msgstr "Parte del servidor"
+
+#~ msgctxt "account state"
+#~ msgid "Stun configuration error"
+#~ msgstr "Error de configuración Stun"
+
+#~ msgctxt "account state"
+#~ msgid "Stun server invalid"
+#~ msgstr "Servidor stun inválido"
+
+#~ msgctxt "account state"
+#~ msgid "Invalid"
+#~ msgstr "Inválido"
+
+#~ msgid "User"
+#~ msgstr "Usuario"
+
+#~ msgid "Mailbox"
+#~ msgstr "Mensaje de voz"
+
+#~ msgid "State"
+#~ msgstr "Estado"
+
+#~ msgid "Stun settings will be applied on each account"
+#~ msgstr "Parámetros de stun se aplicarán a cada cuenta SIP creada."
+
+#~ msgid "Audio device"
+#~ msgstr "Archivos de Audio"
+
+#~ msgid "&Codecs"
+#~ msgstr "Códecs"
+
+#~ msgid "Out"
+#~ msgstr "Salida"
+
+#~ msgid "On &incoming calls"
+#~ msgstr "Al recibir llamadas"
+
+#~ msgid "Custom commands with URL %s will be replaced with the passed URL."
+#~ msgstr "%s se remplazará por la URL."
+
+#~ msgid "Phone number formatting"
+#~ msgstr "Reescritura de número de teléfono"
+
+#~ msgid "Add phone number prefix"
+#~ msgstr "Reescritura de número de teléfono"
+
+#~ msgid "Hold"
+#~ msgstr "Retener"
+
+#~ msgid "Configure accounts"
+#~ msgstr "Cuentas Configuradas"
+
+#~ msgid "Configure audio"
+#~ msgstr "Cuentas Configuradas"
+
+#~ msgid "accounr state"
+#~ msgstr "Configuración de cuentas"
+
+#~ msgid "%s - %s"
+#~ msgstr "%s - %s"
+
+#~ msgid "Bad authentification"
+#~ msgstr "Autenticación erronea"
+
+#~ msgid "%d voice mails"
+#~ msgstr "%d mensajes de voz"
+
+#~ msgid "No registered account"
+#~ msgstr "No tiene ninguna cuenta registrada"
+
+#~ msgid ""
+#~ "This assistant is now finished.\n"
+#~ "You can at any time check your registration state or modify your accounts "
+#~ "parameters in the Options/Accounts window.\n"
+#~ "\n"
+#~ "Alias :    %s\n"
+#~ "Server :   %s\n"
+#~ "Username : %s\n"
+#~ msgstr ""
+#~ "Ese asistante ha finalizado.\n"
+#~ "Puede comprobar en cualquier momento su estado de registro o modificar la "
+#~ "configuración de sus cuentas en la ventana de Opciones/Cuentas.\n"
+#~ "\n"
+#~ "Alias :    %s\n"
+#~ "Server :   %s\n"
+#~ "Username : %s\n"
+
+#~ msgid "SFLphone account configuration wizard"
+#~ msgstr "Asistente de configuración de cuentas de SFLphone"
+
+#~ msgid "Welcome to SFLphone!"
+#~ msgstr "¡Bienvenido a SFLphone!"
+
+#~ msgid "Select an account type:"
+#~ msgstr "Escoja un tipo de cuenta:"
+
+#~ msgid "Please select one of the following option:"
+#~ msgstr "Por favor, elija una de las siguientes opciones:"
+
+#~ msgid "SIP account configuration"
+#~ msgstr "Configuración de cuenta SIP"
+
+#~ msgid "Please fill the following information:"
+#~ msgstr "Por favor, rellene la siguiente información:"
+
+#~ msgid "Optional Email Address "
+#~ msgstr "Dirección de correo opcional "
+
+#~ msgid "This email address will be use to send your voicemail messages"
+#~ msgstr "Esta dirección de correo se usará para mandar sus mensajes de voz"
+
+#~ msgid "_Email"
+#~ msgstr "_Correo"
+
+#~ msgid "IAX2 account configuration"
+#~ msgstr "Configuración de cuenta IAX2"
+
+#~ msgid "Network Address Translation"
+#~ msgstr "Conversión de Dirección de Red (NAT)"
+
+#~ msgid "Edit phone"
+#~ msgstr "Editar teléfono"
+
+#~ msgid "%s account: %s"
+#~ msgstr "%s cuenta: %s"
+
+#~ msgid "<i>From:</i> %s"
+#~ msgstr "<i>De:</i> %s"
+
+#~ msgid "You haven't setup any accounts"
+#~ msgstr "No ha configurado cuentas"
+
+#~ msgid "SFLphone - %i accounts configured"
+#~ msgstr "SFLphone - %i cuentas configuradas"
+
+#~ msgid "\"Voicemail\" <%s>"
+#~ msgstr "\"Mensaje\" <%s>"
+
+#~ msgid "Place a call"
+#~ msgstr "Llamar"
+
+#~ msgid "Off Hold"
+#~ msgstr "Seguir"
+
+#~ msgid "Record a call"
+#~ msgstr "Grabar una llamada"
+
+#~ msgid "Account Parameters"
+#~ msgstr "Parámetros de cuenta"
+
+#~ msgid "Download limit:"
+#~ msgstr "Límite de descarga"
+
+#~ msgid "_Business phone"
+#~ msgstr "_Numero de teléfono profesional"
+
+#~ msgid "_Home phone"
+#~ msgstr "_Numero de teléfono personal"
+
+#~ msgid "_Mobile phone"
+#~ msgstr "_Número de movil"
+
+#~ msgid "Select which Evolution address books to use:"
+#~ msgstr "Seleccione las libretas de direcciones de Evolution a usar:"
+
+#~ msgid "audio device index for output = %d"
+#~ msgstr "índice del dispositivo de salida de audio = %d"
+
+#~ msgid "ALSA configuration"
+#~ msgstr "Configuración de ALSA"
+
+#~ msgid "Stun parameters will apply to each SIP account created."
+#~ msgstr "Parámetros de stun se aplicarán a cada cuenta SIP creada."
+
+#~ msgid "Enable it if you are behind a firewall"
+#~ msgstr "Actívelo si está detrás de un cortafuegos"
+
+#~ msgid "Format: name.server:port"
+#~ msgstr "Formato: nombre.servidor:puerto"
+
+#~ msgid "Port:"
+#~ msgstr "Puerto:"
+
+#~ msgid "Command to _run: "
+#~ msgstr "_Orden a ejecutar: "
+
+#~ msgid "Phone Number Rewriting"
+#~ msgstr "Reescritura de número de teléfono"
+
+#~ msgid "_Prefix dialed numbers with:"
+#~ msgstr "_prefijar los números marcados con:"
+
+#~ msgid "Accept"
+#~ msgstr "Aceptar"
+
+#~ msgid "Refuse"
+#~ msgstr "Rechazar"
+
+#~ msgid "Ignore"
+#~ msgstr "Ignorar"
+
+#~ msgid "<small>Missed call</small>"
+#~ msgstr "<small>Llamada fallida</small>"
+
+#~ msgid "<small>Duration:</small> %s"
+#~ msgstr "<small>Duración:</small> %s"
+
+#~ msgid "Fields"
+#~ msgstr "Campos"
+
+#~ msgid "_History size limit"
+#~ msgstr "Límite de tamaño de _historial"
+
+#~ msgid ""
+#~ "SFLphone can run custom commands if incoming calls come with an URL "
+#~ "attached.\n"
+#~ "In this case, %s will be replaced with the passed URL."
+#~ msgstr ""
+#~ "SFLphone puede ejecutar órdenes personalizadas si las llamadas entrantes "
+#~ "incluyen una URL.\n"
+#~ "En este caso, %s se remplazará por la URL."
+
+#~ msgid "Search history"
+#~ msgstr "Historial de búsquedas"
+
+#~ msgid "Search contact"
+#~ msgstr "_Buscar contacto"
+
+#~ msgid "Registered to %s (%s)"
+#~ msgstr "Registrado en %s (%s)"
+
+#~ msgid "%s account- %s             %s"
+#~ msgstr "%s cuenta- %s             %s"
diff --git a/sflphone-client-kde/po/fr/CMakeLists.txt b/sflphone-client-kde/po/fr/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5d2f6efcd1ca746b47bea7a3749fa0da18be472b
--- /dev/null
+++ b/sflphone-client-kde/po/fr/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB _po_files *.po)
+GETTEXT_PROCESS_PO_FILES(fr ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
diff --git a/sflphone-client-kde/po/fr/sflphone-client-kde.po b/sflphone-client-kde/po/fr/sflphone-client-kde.po
new file mode 100644
index 0000000000000000000000000000000000000000..5c5f5c97ffcdecd429297cd9d7c3463869d0838d
--- /dev/null
+++ b/sflphone-client-kde/po/fr/sflphone-client-kde.po
@@ -0,0 +1,1564 @@
+# French translation of SFLphone.
+# Copyright (C) 2008 2009 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 3.
+#
+# Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>, 2008.
+#
+# POT-Creation-Date: 2008-01-13 01:39+0100\n
+msgid ""
+msgstr ""
+"Project-Id-Version: SFLphone 0.9.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-23 10:14-0400\n"
+"PO-Revision-Date: 2008-03-31 14:15\n"
+"Last-Translator: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>\n"
+"Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: ../sflphone-client-kde/src/Account.cpp:34
+#: ../sflphone-client-gnome/src/accountlist.c:175
+msgid "Registered"
+msgstr "Enregistré"
+
+#: ../sflphone-client-kde/src/Account.cpp:36
+#: ../sflphone-client-gnome/src/accountlist.c:178
+msgid "Not Registered"
+msgstr "Non Enregistré"
+
+#: ../sflphone-client-kde/src/Account.cpp:38
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgid "Trying..."
+msgstr "En cours..."
+
+#: ../sflphone-client-kde/src/Account.cpp:40
+#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "Erreur"
+
+#: ../sflphone-client-kde/src/Account.cpp:42
+#: ../sflphone-client-gnome/src/accountlist.c:187
+msgid "Authentication Failed"
+msgstr "Erreur d'authentification"
+
+#: ../sflphone-client-kde/src/Account.cpp:44
+#: ../sflphone-client-gnome/src/accountlist.c:190
+msgid "Network unreachable"
+msgstr "Réseau non trouvé"
+
+#: ../sflphone-client-kde/src/Account.cpp:46
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgid "Host unreachable"
+msgstr "Serveur introuvable"
+
+#: ../sflphone-client-kde/src/Account.cpp:48
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgid "Stun configuration error"
+msgstr "Erreur de configuration Stun"
+
+#: ../sflphone-client-kde/src/Account.cpp:50
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgid "Stun server invalid"
+msgstr "Serveur Stun invalide"
+
+#: ../sflphone-client-kde/src/Account.cpp:51
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgid "Invalid"
+msgstr "Non valide"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:166
+#: ../sflphone-client-kde/src/AccountWizard.cpp:281
+#: ../sflphone-client-kde/src/SFLPhone.cpp:121
+msgid "Account creation wizard"
+msgstr "Assistant de création de compte"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:202
+#: ../sflphone-client-kde/src/AccountWizard.cpp:220
+#: ../sflphone-client-kde/src/AccountWizard.cpp:564
+#: ../sflphone-client-gnome/src/assistant.c:68
+#, c-format
+msgid "This assistant is now finished."
+msgstr "Cet assistant est maintenant terminé."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:214
+msgid "Creation of account has failed for the reason"
+msgstr "Échec de la création du compte pour les raisons suivantes"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:258
+#: ../sflphone-client-kde/src/AccountWizard.cpp:443
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:403
+#: ../sflphone-client-gnome/src/assistant.c:72
+msgid "Alias"
+msgstr "Alias"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:259
+#: ../sflphone-client-kde/src/AccountWizard.cpp:444
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:410
+#: ../sflphone-client-gnome/src/assistant.c:75
+msgid "Server"
+msgstr "Serveur"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:260
+#: ../sflphone-client-kde/src/AccountWizard.cpp:445
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:411
+#: ../sflphone-client-gnome/src/assistant.c:78
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:261
+#: ../sflphone-client-kde/src/AccountWizard.cpp:446
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:412
+msgid "Password"
+msgstr "Mot de passe"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:262
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:404
+#: ../sflphone-client-gnome/src/config/configwindow.c:418
+msgid "Protocol"
+msgstr "Protocole"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:263
+#: ../sflphone-client-kde/src/AccountWizard.cpp:447
+msgid "Voicemail number"
+msgstr "Numéro de boîte vocale"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:282
+#: ../sflphone-client-gnome/src/assistant.c:216
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "Bienvenue dans l'assistant de création de compte de SFLphone !"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:284
+#: ../sflphone-client-gnome/src/assistant.c:217
+msgid "This installation wizard will help you configure an account."
+msgstr "Cet assistant vous guidera dans la configuration d'un compte."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:312
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Account"
+msgstr "Compte"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:313
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Please select one of the following options"
+msgstr "Veuillez sélectionner une des options suivantes"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:315
+#: ../sflphone-client-gnome/src/assistant.c:251
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "Créer un compte SIP/IAX2 gratuit sur sflphone.org"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:316
+#: ../sflphone-client-gnome/src/assistant.c:253
+msgid "Register an existing SIP or IAX2 account"
+msgstr "Enregistrer un compte SIP ou IAX2 existant"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:355
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "VoIP Protocols"
+msgstr "Protocoles VoIP"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:356
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "Select an account type"
+msgstr "Sélectionnez un type de compte"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:358
+#: ../sflphone-client-gnome/src/assistant.c:233
+msgid "SIP (Session Initiation Protocol)"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:359
+#: ../sflphone-client-gnome/src/assistant.c:235
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:398
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "Optional email address"
+msgstr "Adresse courriel optionnelle"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:399
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "This email address will be used to send your voicemail messages."
+msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:401
+msgid "Email address"
+msgstr "Adresse courriel"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:435
+#: ../sflphone-client-gnome/src/assistant.c:266
+msgid "SIP account settings"
+msgstr "Paramètres de compte SIP"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:439
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "IAX2 account settings"
+msgstr "Paramètres de compte IAX2"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:441
+#: ../sflphone-client-gnome/src/assistant.c:266
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "Please fill the following information"
+msgstr "Veuillez remplir les champs suivants"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:526
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:856
+msgid "Network Address Translation (NAT)"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:527
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:536
+msgid "You should probably enable this if you are behind a firewall."
+msgstr ""
+"Vous devriez probablement activer cette option si vous vous trouvez derrière "
+"un pare-feu."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:529
+msgid "Enable STUN"
+msgstr "Activer STUN"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:530
+msgid "Stun Server"
+msgstr "Serveur STUN"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:565
+msgid ""
+"After checking the settings you chose, click \"Finish\" to create the "
+"account."
+msgstr ""
+"Après avoir vérifié les paramètres choisis, cliquez sur \"Terminer\" pour "
+"créer le compte."
+
+#: ../sflphone-client-kde/src/ActionSetAccountFirst.cpp:26
+msgid "Default account"
+msgstr "Compte par défaut"
+
+#: ../sflphone-client-kde/src/Call.cpp:119
+#: ../sflphone-client-gnome/src/contacts/calltree.c:322
+msgid "Transfer to : "
+msgstr "Transférer à : "
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:89
+#: ../sflphone-client-gnome/src/actions.c:816
+msgid "Codec"
+msgstr "Codec"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:93
+#: ../sflphone-client-gnome/src/config/audioconf.c:581
+msgid "Frequency"
+msgstr "Fréquence"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:97
+#: ../sflphone-client-gnome/src/config/audioconf.c:586
+msgid "Bitrate"
+msgstr "Bitrate"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:101
+#: ../sflphone-client-gnome/src/config/audioconf.c:591
+msgid "Bandwidth"
+msgstr "Bande passante"
+
+#: ../sflphone-client-kde/src/main.cpp:38
+msgid "SFLphone KDE Client"
+msgstr "SFLphone Client KDE"
+
+#: ../sflphone-client-kde/src/main.cpp:42
+msgid "(C) 2009 Savoir-faire Linux"
+msgstr ""
+
+#: ../sflphone-client-kde/src/main.cpp:46
+msgid "Jérémy Quentin"
+msgstr ""
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Jérémy Quentin"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "jeremy.quentin@savoirfairelinux.com"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:53
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/statusicon.c:126
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:100
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+msgid "Main screen"
+msgstr "Écran principal"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:101
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:165
+msgid "Call history"
+msgstr "Historique d'appels"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:102
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/toolbar.c:243
+#: ../sflphone-client-gnome/src/toolbar.c:245
+msgid "Address book"
+msgstr "Carnet d'adresses"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:115
+msgid "Configure SFLphone"
+msgstr "Configurer SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:117
+msgid "Display volume controls"
+msgstr "Afficher les controles du volume"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:118
+msgid "Display dialpad"
+msgstr "Afficher le clavier"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:227
+msgid "Incoming call"
+msgstr "Appel entrant"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "You have an incoming call from"
+msgstr "Vous avez un appel entrant de"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "Click to accept or refuse it."
+msgstr "Cliquez ici pour accepter ou refuser."
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:656
+msgid "Address book loading..."
+msgstr "Carnet d'adresse en cours de chargement..."
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:840
+#: ../sflphone-client-gnome/src/actions.c:89
+msgid "No registered accounts"
+msgstr "Pas de compte enregistré"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:844
+#: ../sflphone-client-gnome/src/actions.c:83
+#: ../sflphone-client-gnome/src/actions.c:813
+msgid "Using account"
+msgstr "Utilise le compte"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1045
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1109
+msgid "Edit before call"
+msgstr "Éditer avant d'appeler"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:40
+#: ../sflphone-client-gnome/src/toolbar.c:167
+#: ../sflphone-client-gnome/src/toolbar.c:169
+msgid "New call"
+msgstr "Nouvel appel"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:41
+#: ../sflphone-client-kde/src/sflphone_const.h:46
+#: ../sflphone-client-gnome/src/toolbar.c:186
+#: ../sflphone-client-gnome/src/toolbar.c:188
+msgid "Hang up"
+msgstr "Raccrocher"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:42
+#: ../sflphone-client-gnome/src/toolbar.c:207
+#: ../sflphone-client-gnome/src/toolbar.c:209
+msgid "Hold on"
+msgstr "Mettre en attente"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:43
+#: ../sflphone-client-gnome/src/toolbar.c:220
+#: ../sflphone-client-gnome/src/toolbar.c:222
+msgid "Transfer"
+msgstr "Transférer"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:44
+#: ../sflphone-client-gnome/src/toolbar.c:263
+msgid "Record"
+msgstr "Enregistrer"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:45
+#: ../sflphone-client-gnome/src/toolbar.c:176
+#: ../sflphone-client-gnome/src/toolbar.c:178
+msgid "Pick up"
+msgstr "Décrocher"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:47
+#: ../sflphone-client-gnome/src/toolbar.c:196
+#: ../sflphone-client-gnome/src/toolbar.c:198
+msgid "Hold off"
+msgstr "Reprendre"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:48
+msgid "Give up transfer"
+msgstr "Abandonner le transfert"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:49
+msgid "Call back"
+msgstr "Rappeler"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:50
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:413
+#: ../sflphone-client-gnome/src/toolbar.c:52
+#: ../sflphone-client-gnome/src/toolbar.c:251
+#: ../sflphone-client-gnome/src/toolbar.c:255
+msgid "Voicemail"
+msgstr "Boite vocale"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:48
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:91
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/configwindow.c:722
+#: ../sflphone-client-gnome/src/config/configwindow.c:791
+msgid "General"
+msgstr "Général"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:49
+msgid "Display"
+msgstr "Affichage"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:50
+#: ../sflphone-client-gnome/src/config/configwindow.c:833
+msgid "Accounts"
+msgstr "Comptes"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:51
+#: ../sflphone-client-gnome/src/config/configwindow.c:786
+msgid "Audio"
+msgstr "Audio"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:52
+#: ../sflphone-client-gnome/src/config/configwindow.c:801
+msgid "Address Book"
+msgstr "Carnet d'adresse"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:53
+#: ../sflphone-client-gnome/src/config/configwindow.c:796
+msgid "Recordings"
+msgstr "Enregistrements"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:54
+#: ../sflphone-client-gnome/src/config/configwindow.c:806
+msgid "Hooks"
+msgstr "Ancrage"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:368
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking "
+"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" "
+"buttons. Edit the selected account with the form on the right."
+msgstr ""
+"Par défaut, quand vous effectuez un appel, SFLphone utilise le premier "
+"compte dans cette liste en état \"Enregistré\". Utilisez les flèches vers le "
+"haut et vers le bas pour changer l'ordre des comptes. Activez/désactivez-les "
+"en les cochant/décochant. Ajoutez et supprimez-les avec les boutons \"+\" et "
+"\"-\". Éditez le compte sélectionné avec le formulaire de droite."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:372
+msgid "Remove the selected account"
+msgstr "Supprimer le compte sélectionné"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:375
+msgid ""
+"This button will remove the selected account in the list below. Be sure you "
+"really don't need it anymore. If you think you might use it again later, "
+"just uncheck it."
+msgstr ""
+"Ce bouton supprime le compte actuellement sélectionné dans la liste ci-"
+"dessus. Si vous comptez réutiliser ce compte plus tard, choisissez plutôt de "
+"le décocher."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:380
+msgid "Remove"
+msgstr "Supprimer"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:382
+msgid "Add a new account"
+msgstr "Ajouter un nouveau compte"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:385
+msgid ""
+"This button enables you to initialize a new account. You will then be able "
+"to edit it using the form on the right."
+msgstr ""
+"Ce bouton ajoute un nouveau compte à la liste. Vous pouvez ensuite l'éditer "
+"à partir du formulaire à droite de la liste."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:387
+msgid "Add"
+msgstr "Ajouter"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:389
+msgid "Get this account down"
+msgstr "Descendre ce compte dans la liste"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:392
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:399
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows."
+msgstr ""
+"Par défaut, quand vous effectuez un appel, SFLphone utilise le premier "
+"compte dans cette liste en état \"Enregistré\". Utilisez les flèches vers le "
+"haut et vers le bas pour changer l'ordre des comptes."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:394
+msgid "Down"
+msgstr "Descendre"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:396
+msgid "Get this account up"
+msgstr "Monter ce compte dans la liste"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:401
+msgid "Up"
+msgstr "Monter"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:402
+msgid "Apply"
+msgstr "Appliquer"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:407
+msgid "SIP"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:408
+msgid "IAX"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:414
+#: ../sflphone-client-gnome/src/config/configwindow.c:425
+msgid "Status"
+msgstr "Statut"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:416
+msgid "Basic"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:417
+msgid "Registration expire"
+msgstr "Expiration d'enregistrement"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:418
+msgid "Conform to RFC 3263"
+msgstr "Respecter RFC 3263"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:419
+msgid "Advanced"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:421
+#: ../sflphone-client-gnome/src/config/configwindow.c:528
+msgid "Stun parameters will be applied on each SIP account created."
+msgstr "Les paramètres de STUN seront appliqués à tous les comptes"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:422
+msgid "Enable Stun"
+msgstr "Activer STUN"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:424
+#: ../sflphone-client-gnome/src/config/configwindow.c:544
+msgid "Format : name.server:port"
+msgstr "Format : nom.serveur:port"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:426
+msgid "choose Stun server (example : stunserver.org)"
+msgstr "Choisissez un serveur STUN (exemple : stunserver.org)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:154
+msgid "Enable address book"
+msgstr "Activer le carnet d'adresses"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:155
+msgid "Maximum results"
+msgstr "Nombre de résultats maximum"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:156
+msgid "Display photo if available"
+msgstr "Afficher la photo si disponible"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:157
+msgid "Display phone numbers of these types :"
+msgstr "Afficher les numéros de téléphone"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:158
+msgid "Work"
+msgstr "Professionnels"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:159
+msgid "Mobile"
+msgstr "Mobiles"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:160
+msgid "Home"
+msgstr "Personnels"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:225
+msgid "Sound manager"
+msgstr "Interface audio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:228
+msgid "ALSA"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:229
+msgid "PulseAudio"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:231
+msgid "Enable ringtones"
+msgstr "Activer les sonneries"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:232
+#: ../sflphone-client-gnome/src/config/audioconf.c:812
+msgid "Codecs"
+msgstr "Codecs"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:233
+#: ../sflphone-client-gnome/src/config/audioconf.c:795
+msgid "ALSA settings"
+msgstr "Paramètres ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:234
+#: ../sflphone-client-gnome/src/config/audioconf.c:662
+msgid "ALSA plugin"
+msgstr "Greffon ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:235
+#: ../sflphone-client-gnome/src/config/audioconf.c:706
+msgid "Input"
+msgstr "Entrée"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:236
+#: ../sflphone-client-gnome/src/config/audioconf.c:684
+msgid "Output"
+msgstr "Sortie"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:237
+msgid "PulseAudio settings"
+msgstr "Paramètres PulseAudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:238
+msgid "Mute other applications during a call"
+msgstr "Couper le son des autres applications pendant un appel"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:121
+msgid "Enable notifications"
+msgstr "Activer les notifications"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:122
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:126
+msgid "On incoming calls"
+msgstr "Lors d'appels entrants"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:123
+msgid "On messages"
+msgstr "Lors de réception de messages"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:124
+msgid "Show main window"
+msgstr "Mettre la fenêtre principale au premier plan"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:125
+msgid "On start"
+msgstr "Au démarrage"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:166
+msgid "Keep my history for at least"
+msgstr "Garder mon historique au moins"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:167
+#: ../sflphone-client-gnome/src/config/configwindow.c:643
+msgid "days"
+msgstr "jours"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:168
+msgid "Clear history"
+msgstr "Effacer l'historique"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:169
+msgid "Connection"
+msgstr "Connexion"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:170
+#: ../sflphone-client-gnome/src/config/configwindow.c:664
+msgid "SIP Port"
+msgstr "Port SIP"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:180
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "Argument URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:181
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "Commandes personnalisées lors d'appels entrants avec une URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:182
+msgid "Trigger on specific SIP header"
+msgstr "Déclencher sur un entête SIP spécifique"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:183
+msgid "Trigger on IAX2 URL"
+msgstr "Déclencher en IAX2"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:184
+msgid "Command to run"
+msgstr "Commande à exécuter"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:185
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "%s sera remplacé par l'URL passé en argument."
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:186
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "Réécriture des numéros appelés"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:187
+msgid "Prefix dialed numbers with"
+msgstr "Ajouter le préfixe"
+
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:92
+#: ../sflphone-client-gnome/src/config/configwindow.c:726
+msgid "Destination folder"
+msgstr "Dossier de destination"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:307
+msgid "Attention:number of results exceeds max displayed."
+msgstr "Attention:tous les résultats ne sont pas affichés."
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:309
+#: ../sflphone-client-gnome/src/sliders.c:163
+msgid "Mic volume"
+msgstr "Volume du micro"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:313
+#: ../sflphone-client-gnome/src/sliders.c:161
+msgid "Speakers volume"
+msgstr "Volume des hauts-parleurs"
+
+#: ../sflphone-client-gnome/src/actions.c:54
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d message vocal"
+msgstr[1] "%d messages vocaux"
+
+#: ../sflphone-client-gnome/src/actions.c:234
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"Impossible de se connecter au serveur SFLphone.\n"
+" Assurez-vous que le démon est lancé."
+
+#: ../sflphone-client-gnome/src/actions.c:809
+#, c-format
+msgid "IP call - %s"
+msgstr "Appel IP - %s"
+
+#: ../sflphone-client-gnome/src/actions.c:908
+#, c-format
+msgid ""
+"<b>Error: No audio codecs found.\n"
+"\n"
+"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
+"b> directory in your home( <i>%s</i> )"
+msgstr ""
+"<b>Erreur: Aucun codec audio trouvé.\n"
+"\n"
+"</b> Les codecs audio SFL doivent être soit dans <i>%s</i> soit dans le "
+"répertoire <b>.sflphone</b> de votre répertoire racine( <i>%s</i> )"
+
+#: ../sflphone-client-gnome/src/assistant.c:70
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr ""
+"Vous pouvez à tout moment vérifier votre état d'enregistrement ou modifier "
+"les paramètres de vos comptes dans la fenêtre Options/Comptes."
+
+#: ../sflphone-client-gnome/src/assistant.c:190
+msgid "SFLphone account creation wizard"
+msgstr "Assistant de création de compte de SFLphone"
+
+#: ../sflphone-client-gnome/src/assistant.c:274
+#: ../sflphone-client-gnome/src/assistant.c:370
+#: ../sflphone-client-gnome/src/config/accountwindow.c:156
+msgid "_Alias"
+msgstr "A_lias"
+
+#: ../sflphone-client-gnome/src/assistant.c:282
+#: ../sflphone-client-gnome/src/assistant.c:378
+#: ../sflphone-client-gnome/src/config/accountwindow.c:192
+msgid "_Host name"
+msgstr "_Serveur"
+
+#: ../sflphone-client-gnome/src/assistant.c:290
+#: ../sflphone-client-gnome/src/assistant.c:386
+#: ../sflphone-client-gnome/src/config/accountwindow.c:206
+msgid "_User name"
+msgstr "Usa_ger"
+
+#: ../sflphone-client-gnome/src/assistant.c:306
+#: ../sflphone-client-gnome/src/assistant.c:401
+#: ../sflphone-client-gnome/src/config/accountwindow.c:221
+msgid "_Password"
+msgstr "_Mot de passe"
+
+#: ../sflphone-client-gnome/src/assistant.c:324
+#: ../sflphone-client-gnome/src/assistant.c:417
+#: ../sflphone-client-gnome/src/config/accountwindow.c:237
+msgid "_Voicemail number"
+msgstr "_Boite vocale #"
+
+#: ../sflphone-client-gnome/src/assistant.c:347
+msgid "_Email address"
+msgstr "A_dresse courriel"
+
+#: ../sflphone-client-gnome/src/assistant.c:444
+#: ../sflphone-client-gnome/src/config/configwindow.c:532
+msgid "E_nable STUN"
+msgstr "A_ctiver STUN"
+
+#: ../sflphone-client-gnome/src/assistant.c:451
+msgid "_STUN server"
+msgstr "S_erveur STUN"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Account Registration"
+msgstr "Enregistrement du compte"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Congratulations!"
+msgstr "Félicitations!"
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"Notification ALSA\n"
+"\n"
+"Erreur lors de l'ouverture du périphérique de sortie"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"Notification ALSA\n"
+"\n"
+"Erreur lors de l'ouverture du périphérique d'entrée"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"Notification Pulseaudio\n"
+"\n"
+"Pulseaudio n'est pas lancé"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:70
+msgid "There is one call in progress."
+msgstr "Vous avez un appel en cours."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:74
+msgid "There are calls in progress."
+msgstr "Vous avez des appels en cours."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:83
+msgid "Do you still want to quit?"
+msgstr "Voulez-vous quitter?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:282
+msgid "SFLphone Error"
+msgstr "Erreur SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:134
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr ""
+"SFLphone est un client VoIP compatible avec les protocoles SIP et IAX2."
+
+#: ../sflphone-client-gnome/src/menus.c:137
+msgid "About SFLphone"
+msgstr "A propos de SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:161
+msgid "_Help"
+msgstr "A_ide"
+
+#: ../sflphone-client-gnome/src/menus.c:296
+#: ../sflphone-client-gnome/src/menus.c:953
+msgid "_New call"
+msgstr "_Nouvel appel"
+
+#: ../sflphone-client-gnome/src/menus.c:308
+#: ../sflphone-client-gnome/src/menus.c:785
+msgid "_Pick up"
+msgstr "_Décrocher"
+
+#: ../sflphone-client-gnome/src/menus.c:318
+#: ../sflphone-client-gnome/src/menus.c:797
+msgid "_Hang up"
+msgstr "_Raccrocher"
+
+#: ../sflphone-client-gnome/src/menus.c:328
+#: ../sflphone-client-gnome/src/menus.c:809
+msgid "On _Hold"
+msgstr "_Mettre en attente"
+
+#: ../sflphone-client-gnome/src/menus.c:340
+#: ../sflphone-client-gnome/src/menus.c:821
+msgid "_Record"
+msgstr "Enregistrer"
+
+#: ../sflphone-client-gnome/src/menus.c:354
+msgid "_Account creation wizard"
+msgstr "_Assistant de création de compte"
+
+#: ../sflphone-client-gnome/src/menus.c:384
+msgid "_Call"
+msgstr "_Actions"
+
+#: ../sflphone-client-gnome/src/menus.c:552
+msgid "Clear _history"
+msgstr "Effacer l'_historique"
+
+#: ../sflphone-client-gnome/src/menus.c:564
+msgid "_Accounts"
+msgstr "Co_mptes"
+
+#: ../sflphone-client-gnome/src/menus.c:579
+msgid "_Edit"
+msgstr "_Editer"
+
+#: ../sflphone-client-gnome/src/menus.c:631
+msgid "_Dialpad"
+msgstr "_Clavier"
+
+#: ../sflphone-client-gnome/src/menus.c:643
+msgid "_Volume controls"
+msgstr "Contrôle du _volume"
+
+#: ../sflphone-client-gnome/src/menus.c:661
+msgid "_View"
+msgstr "A_ffichage"
+
+#: ../sflphone-client-gnome/src/menus.c:881
+msgid "_Call back"
+msgstr "_Rappeler"
+
+#: ../sflphone-client-gnome/src/menus.c:1061
+msgid "Edit phone number"
+msgstr "Éditer le numéro"
+
+#: ../sflphone-client-gnome/src/menus.c:1072
+msgid "Edit the phone number before making a call"
+msgstr "Éditer le numéro de téléphone avant d'appeler"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s account : %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>De</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "Appel avec le compte %s <i>%s</i>"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "Compte courant"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "Vous n'avez pas configuré de compte"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "Vous n'avez aucun compte enregistré"
+
+#: ../sflphone-client-gnome/src/statusicon.c:91
+msgid "_Show main window"
+msgstr "_Afficher la fenêtre principale"
+
+#: ../sflphone-client-gnome/src/statusicon.c:127
+#, c-format
+msgid "%i account configured"
+msgid_plural "%i accounts configured"
+msgstr[0] "%i compte configuré"
+msgstr[1] "%i comptes configurés"
+
+#: ../sflphone-client-gnome/src/toolbar.c:232
+#: ../sflphone-client-gnome/src/toolbar.c:234
+msgid "History"
+msgstr "Historique"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:116
+msgid "Account settings"
+msgstr "Paramètre des comptes"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:150
+msgid "_Enable this account"
+msgstr "Activer ce compte"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:164
+msgid "_Protocol"
+msgstr "P_rotocole"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:182
+msgid "Unknown"
+msgstr "Inconnu"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:200
+msgid "_Resolve host name only once for the session"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "_Utiliser les carnets d'adresse d'Évolution"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "Limite de téléchargement :"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "entrées"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "_Afficher la photo si disponible"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "Utiliser les champs suivants des carnets d'adresse d'Évolution"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "_Professionnels"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "P_ersonnels"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "_Mobiles"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "Carnets d'adresses"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "Select which Evolution address books to use"
+msgstr "Sélectionnez les carnets d'adresses d'Evolution à utiliser"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
+#: ../sflphone-client-gnome/src/config/audioconf.c:576
+msgid "Name"
+msgstr "Nom"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:741
+msgid "_Voice Activity Detection"
+msgstr "Détection de l'activité de la voix"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:751
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "Réduction du bruit (Compresseur extenseur LBR)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:780
+msgid "Sound Manager"
+msgstr "Interface Audio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:783
+msgid "_Pulseaudio"
+msgstr "_Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:788
+msgid "_ALSA"
+msgstr "_ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:835
+msgid "Ringtones"
+msgstr "Sonneries"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:841
+msgid "_Enable ringtones"
+msgstr "_Activer les sonneries"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:847
+msgid "Choose a ringtone"
+msgstr "Sélectionner une sonnerie"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Audio Files"
+msgstr "Fichier Audio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:589
+msgid "Desktop Notifications"
+msgstr "Notifications de Bureau"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:593
+msgid "_Enable notifications"
+msgstr "_Activer les notifications"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:599
+msgid "Enable voicemail _notifications"
+msgstr "Activer les notifications de boîte _vocale"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:611
+msgid "System Tray Icon"
+msgstr "Icône dans la barre des tâches"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:614
+msgid "_Popup main window on incoming call"
+msgstr "Faire apparaître la fenêtre _principale lors d'appel entrant"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:619
+msgid "Ne_ver popup main window"
+msgstr "Ne _jamais afficher la fenêtre principale"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:623
+msgid "Hide SFLphone window on _startup"
+msgstr "_Cacher la fenêtre de SFLphone au démarrage"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:629
+msgid "Calls History"
+msgstr "Historique des appels"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:632
+msgid "_Keep my history for at least"
+msgstr "Garder mon historique au moins"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:647
+msgid "PulseAudio sound server"
+msgstr "Serveur de son PulseAudio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:650
+msgid "_Mute other applications during a call"
+msgstr "Éteindre le _son des autres applications lors d'un appel"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:677
+msgid "Port"
+msgstr "Port"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:732
+msgid "Select a folder"
+msgstr "Choisissez un dossier"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:766
+msgid "Preferences"
+msgstr "Préférences"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:845
+msgid "Configured Accounts"
+msgstr "Comptes Configurés"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "Déclencher sur un entête _SIP spécifique"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "Déclencher en _IAX2"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "Commande à e_xécuter"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "_Préfixer les numéros composés par"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:56
+msgid "Search all"
+msgstr "Rechercher dans tous"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:57
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Click here to change the search type"
+msgstr "Cliquez ici pour changer le type de recherche"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search by missed call"
+msgstr "Rechercher dans les appels manqués"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:81
+msgid "Search by incoming call"
+msgstr "Rechercher dans les appels entrants"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:93
+msgid "Search by outgoing call"
+msgstr "Rechercher dans les appels sortants"
+
+#~ msgctxt "Config section"
+#~ msgid "Accounts"
+#~ msgstr "Comptes"
+
+#~ msgctxt "account state"
+#~ msgid "Registered"
+#~ msgstr "Enregistré"
+
+#~ msgctxt "account state"
+#~ msgid "Not Registered"
+#~ msgstr "Non Enregistré"
+
+#~ msgctxt "account state"
+#~ msgid "Trying..."
+#~ msgstr "En cours..."
+
+#~ msgctxt "account state"
+#~ msgid "Error"
+#~ msgstr "Erreur"
+
+#~ msgctxt "account state"
+#~ msgid "Network unreachable"
+#~ msgstr "Réseau introuvable"
+
+#~ msgctxt "account state"
+#~ msgid "Host unreachable"
+#~ msgstr "Serveur introuvable"
+
+#~ msgctxt "account state"
+#~ msgid "Stun configuration error"
+#~ msgstr "Erreur de configuration STUN"
+
+#~ msgctxt "account state"
+#~ msgid "Stun server invalid"
+#~ msgstr "Serveur STUN invalide"
+
+#~ msgctxt "account state"
+#~ msgid "Invalid"
+#~ msgstr "Non valide"
+
+#~ msgctxt "Config section"
+#~ msgid "General"
+#~ msgstr "General"
+
+#~ msgctxt "Config section"
+#~ msgid "Address Book"
+#~ msgstr "Carnet d'adresses"
+
+#~ msgctxt "Config section"
+#~ msgid "Recordings"
+#~ msgstr "Enregistrements"
+
+#~ msgctxt "Config section"
+#~ msgid "Hooks"
+#~ msgstr "Ancrage"
+
+#~ msgctxt "End of 'Keep my history for at least n days.'"
+#~ msgid "days"
+#~ msgstr "jours"
+
+#~ msgid "User"
+#~ msgstr "Nom d'utilisateur"
+
+#~ msgid "Mailbox"
+#~ msgstr "Boîte vocale"
+
+#~ msgid "State"
+#~ msgstr "Statut"
+
+#~ msgid "Stun settings will be applied on each account"
+#~ msgstr "Les paramètres de STUN seront appliqués à tous les comptes"
+
+#~ msgid "Audio device"
+#~ msgstr "Fichier Audio"
+
+#~ msgid "&Codecs"
+#~ msgstr "Codecs"
+
+#~ msgid "Out"
+#~ msgstr "Sortie"
+
+#~ msgid "On &incoming calls"
+#~ msgstr "Lors d'appels entrants"
+
+#~ msgid "Custom commands with URL %s will be replaced with the passed URL."
+#~ msgstr "%s sera remplacé par l'URL passé en argument."
+
+#~ msgid "Phone number formatting"
+#~ msgstr "Réécriture des numéros appelés"
+
+#~ msgid "Add phone number prefix"
+#~ msgstr "Ajouter un préfixe au numéro"
+
+#~ msgid "Hold"
+#~ msgstr "Mettre en attente"
+
+#~ msgid "Configure accounts"
+#~ msgstr "Comptes Configurés"
+
+#~ msgid "Configure audio"
+#~ msgstr "Configurer l'audio"
+
+#~ msgctxt "Action record a call"
+#~ msgid "Record"
+#~ msgstr "Enregistrer"
+
+#~ msgid "accounr state"
+#~ msgstr "Paramètre des comptes"
+
+#~ msgid "%s - %s"
+#~ msgstr "%s - %s"
+
+#~ msgid "Bad authentification"
+#~ msgstr "Erreur d'authentification"
+
+#~ msgid "%d voice mails"
+#~ msgstr "%d messages vocaux"
+
+#~ msgid "Using %s (%s)"
+#~ msgstr "Utilise %s (%s)"
+
+#~ msgid "No registered account"
+#~ msgstr "Aucun compte enregistré"
+
+#~ msgid "Using %s (%s) - Codec: %s"
+#~ msgstr "Utilise %s (%s) - Codec: %s"
+
+#~ msgid ""
+#~ "This assistant is now finished.\n"
+#~ "You can at any time check your registration state or modify your accounts "
+#~ "parameters in the Options/Accounts window.\n"
+#~ "\n"
+#~ "Alias :    %s\n"
+#~ "Server :   %s\n"
+#~ "Username : %s\n"
+#~ msgstr ""
+#~ "Cet assistant est maintenant terminé.\n"
+#~ " Vous pouvez à tout moment vérifier votre état d'enregistrement ou "
+#~ "modifier les paramètres de vos comptes dans la fenêtre Options/Comptes.\n"
+#~ "\n"
+#~ "Alias :    %s\n"
+#~ "Serveur :   %s\n"
+#~ "Nom d'usager : %s\n"
+
+#~ msgid "SFLphone account configuration wizard"
+#~ msgstr "Assistant de configuration de compte"
+
+#~ msgid "Welcome to SFLphone!"
+#~ msgstr "Bienvenue dans SFLphone"
+
+#~ msgid "Select an account type:"
+#~ msgstr "Choisissez un type de compte:"
+
+#~ msgid "Please select one of the following option:"
+#~ msgstr "Veuillez remplir les champs suivants:"
+
+#~ msgid "SIP account configuration"
+#~ msgstr "Configuration d'un compte SIP"
+
+#~ msgid "Please fill the following information:"
+#~ msgstr "Veuillez remplir les champs suivants:"
+
+#~ msgid "Optional Email Address "
+#~ msgstr "Courriel optionnel"
+
+#~ msgid "This email address will be use to send your voicemail messages"
+#~ msgstr "Vos messages vocaux seront envoyés par courriel à cette adresse "
+
+#~ msgid "_Email"
+#~ msgstr "_Email"
+
+#~ msgid "IAX2 account configuration"
+#~ msgstr "Configuration d'un compte IAX2"
+
+#~ msgid "Network Address Translation"
+#~ msgstr "Traduction d'adresse réseau (NAT)"
+
+#~ msgid "Edit phone"
+#~ msgstr "Éditer numéro"
+
+#~ msgid "%s account: %s"
+#~ msgstr "Compte %s: %s"
+
+#~ msgid "<i>From:</i> %s"
+#~ msgstr "<i>De:</i> %s"
+
+#~ msgid "You haven't setup any accounts"
+#~ msgstr "Vous n'avez aucun compte configuré"
+
+#~ msgid "SFLphone - %i accounts configured"
+#~ msgstr "SFLphone - %i comptes configurés"
+
+#~ msgid "\"Voicemail\" <%s>"
+#~ msgstr "\"Boite vocale\" <%s>"
+
+#~ msgid "Place a call"
+#~ msgstr "Appeler"
+
+#~ msgid "Off Hold"
+#~ msgstr "Reprendre"
+
+#~ msgid "On Hold"
+#~ msgstr "Mettre en attente"
+
+#~ msgid "Record a call"
+#~ msgstr "_Enregistrer un appel"
+
+#~ msgid "Account Parameters"
+#~ msgstr "Paramètres du Compte"
+
+#~ msgid "Download limit:"
+#~ msgstr "Limite de _téléchargement:"
+
+#~ msgid "_Business phone"
+#~ msgstr "Tél du _bureau"
+
+#~ msgid "_Home phone"
+#~ msgstr "Tél du _domicile"
+
+#~ msgid "_Mobile phone"
+#~ msgstr "Tél _portable"
+
+#~ msgid "Select which Evolution address books to use:"
+#~ msgstr "Sélectionner quels carnets d'adresse d'Évolution utiliser:"
+
+#~ msgid "audio device index for output = %d"
+#~ msgstr "index du device audio de sortie = %d"
+
+#~ msgid "ALSA configuration"
+#~ msgstr "Configuration ALSA"
+
+#~ msgid "Stun parameters will apply to each SIP account created."
+#~ msgstr "Les paramètres STUN sont appliqués à tous les comptes SIP créés"
+
+#~ msgid "Enable it if you are behind a firewall"
+#~ msgstr ""
+#~ "À activer si vous êtes derrière un pare-feu, puis redémarrez SFLphone"
+
+#~ msgid "Format: name.server:port"
+#~ msgstr "Format: nom.serveur:port"
+
+#~ msgid "Recordings folder"
+#~ msgstr "Dossier pour les enregistrements"
+
+#~ msgid "General Settings"
+#~ msgstr "Préférences"
+
+#~ msgid "Audio Settings"
+#~ msgstr "Paramètres Audio"
+
+#~ msgid "URL Passing"
+#~ msgstr "Passage d'URL"
+
+#~ msgid "Command to _run: "
+#~ msgstr "Commande à _exécuter: "
+
+#~ msgid "Phone Number Rewriting"
+#~ msgstr "Rééecriture du numéro"
+
+#~ msgid "_Prefix dialed numbers with:"
+#~ msgstr "_Préfixer les numéros composés par:"
+
+#~ msgid "Accept"
+#~ msgstr "Accepter"
+
+#~ msgid "Refuse"
+#~ msgstr "Refuser"
+
+#~ msgid "Ignore"
+#~ msgstr "Ignorer"
+
+#~ msgid "<small>Missed call</small>"
+#~ msgstr "<small>Appel manqué</small>"
+
+#~ msgid "<small>Duration:</small> %s"
+#~ msgstr "<small>Durée:</small> %s"
+
+#~ msgid "Fields"
+#~ msgstr "Champs"
+
+#~ msgid "_History size limit"
+#~ msgstr "_Taille limite de l'historique"
+
+#~ msgid ""
+#~ "SFLphone can run custom commands if incoming calls come with an URL "
+#~ "attached.\n"
+#~ "In this case, %s will be replaced with the passed URL."
+#~ msgstr ""
+#~ "SFLphone peut exécuter des commandes lors d'appels entrants qui ont un "
+#~ "URL associé.\n"
+#~ "Dans ce cas, %s sera remplacé par l'URL en question."
+
+#~ msgid "Search history"
+#~ msgstr "Rechercher"
+
+#~ msgid "Search contact"
+#~ msgstr "Rechercher un contact"
+
+#~ msgid "Registered to %s (%s)"
+#~ msgstr "Connecté avec %s (%s)"
+
+#~ msgid "%s account- %s             %s"
+#~ msgstr "compte %s- %s             %s"
+
+#~ msgid "Books"
+#~ msgstr "Carnets d'adresse"
+
+#~ msgid "_Enable"
+#~ msgstr "_Activer"
+
+#~ msgid "_Notify voice mails"
+#~ msgstr "_Notifier les messages vocaux"
+
+#~ msgid "_Start hidden"
+#~ msgstr "_Démarrer caché"
+
+#~ msgid "_Maximum number of calls"
+#~ msgstr "N_ombre maximum d'appels"
+
+#~ msgid "_Control running applications volume"
+#~ msgstr "_Autoriser à modifier le volume des autres applications"
+
+#~ msgid "Account previously setup"
+#~ msgstr "Liste des comptes existants"
+
+#~ msgid "URL argument"
+#~ msgstr "Argument URL"
+
+#~ msgid "_SIP protocol"
+#~ msgstr "_Protocole SIP"
+
+#~ msgid "_SIP Header: "
+#~ msgstr "En-tête SIP: "
+
+#~ msgid "_IAX2 protocol"
+#~ msgstr "_Protocole IAX2"
+
+#~ msgid "_Prepend: "
+#~ msgstr "Préfixe: "
diff --git a/sflphone-client-kde/po/ru/CMakeLists.txt b/sflphone-client-kde/po/ru/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..26b2f5e87830030c94b7cc31b832d4997f709f8a
--- /dev/null
+++ b/sflphone-client-kde/po/ru/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB _po_files *.po)
+GETTEXT_PROCESS_PO_FILES(ru ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
diff --git a/sflphone-client-kde/po/ru/sflphone-client-kde.po b/sflphone-client-kde/po/ru/sflphone-client-kde.po
new file mode 100644
index 0000000000000000000000000000000000000000..07c0961e76a51362d15de795ed5e4dbd53c55939
--- /dev/null
+++ b/sflphone-client-kde/po/ru/sflphone-client-kde.po
@@ -0,0 +1,1235 @@
+# Russian Translation.
+# Copyright (C) 2009 Savoir-Faire Linux Inc.
+# This file is distributed under the same license as the sflphone package.
+# Hussein Abdallah <hussein.abdallah@savoirfairelinux.com>.
+#
+
+msgid ""
+msgstr ""
+"Project-Id-Version: SFLphone 0.9.6\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-15 15:25-0400\n"
+"PO-Revision-Date: 2009-06-08 10:19 GMT-5\n"
+"Last-Translator: HUSSEIN ABDALLAH <hussein.abdallah@savoirfairelinux.com>\n"
+"Language-Team:  Savoir-Faire Linux Inc <sflphoneteam@savoirfairelinux.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../sflphone-client-kde/src/Account.cpp:34
+#: ../sflphone-client-gnome/src/accountlist.c:175
+msgctxt "account state"
+msgid "Registered"
+msgstr "Зарегистрирован"
+
+#: ../sflphone-client-kde/src/Account.cpp:36
+#: ../sflphone-client-gnome/src/accountlist.c:178
+msgctxt "account state"
+msgid "Not Registered"
+msgstr "Не зарегистрирован"
+
+#: ../sflphone-client-kde/src/Account.cpp:38
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgctxt "account state"
+msgid "Trying..."
+msgstr "Пробует подключиться..."
+
+#: ../sflphone-client-kde/src/Account.cpp:40
+#: ../sflphone-client-gnome/src/accountlist.c:184
+msgctxt "account state"
+msgid "Error"
+msgstr "Ошибка"
+
+#: ../sflphone-client-kde/src/Account.cpp:42
+#: ../sflphone-client-gnome/src/accountlist.c:187
+msgctxt "account state"
+msgid "Bad authentification"
+msgstr "Неправильная идентификация"
+
+#: ../sflphone-client-kde/src/Account.cpp:44
+#: ../sflphone-client-gnome/src/accountlist.c:190
+msgctxt "account state"
+msgid "Network unreachable"
+msgstr "Сеть недоступна"
+
+#: ../sflphone-client-kde/src/Account.cpp:46
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgctxt "account state"
+msgid "Host unreachable"
+msgstr "Хост недоступен"
+
+#: ../sflphone-client-kde/src/Account.cpp:48
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgctxt "account state"
+msgid "Stun configuration error"
+msgstr "Ошибка настройки Stun"
+
+#: ../sflphone-client-kde/src/Account.cpp:50
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgctxt "account state"
+msgid "Stun server invalid"
+msgstr "Недействительный Stun-сервер"
+
+#: ../sflphone-client-kde/src/Account.cpp:51
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgctxt "account state"
+msgid "Invalid"
+msgstr "Недействительный"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:163
+#: ../sflphone-client-kde/src/AccountWizard.cpp:278
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:393
+msgid "Account creation wizard"
+msgstr "Мастер настройки SFLphone"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:199
+#: ../sflphone-client-kde/src/AccountWizard.cpp:217
+#: ../sflphone-client-kde/src/AccountWizard.cpp:561
+#: ../sflphone-client-gnome/src/assistant.c:68
+#, c-format
+msgid "This assistant is now finished."
+msgstr "Мастер закончил настройку."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:211
+msgid "Creation of account has failed for the reason"
+msgstr "Создание аккаунта не удалось по этим причинам"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:255
+#: ../sflphone-client-kde/src/AccountWizard.cpp:440
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:363
+#: ../sflphone-client-gnome/src/assistant.c:72
+msgid "Alias"
+msgstr "Псевдоним"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:256
+#: ../sflphone-client-kde/src/AccountWizard.cpp:441
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:370
+#: ../sflphone-client-gnome/src/assistant.c:75
+msgid "Server"
+msgstr "Сервер"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:257
+#: ../sflphone-client-kde/src/AccountWizard.cpp:442
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:371
+msgid "User"
+msgstr "Пользователь"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:258
+#: ../sflphone-client-kde/src/AccountWizard.cpp:443
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:372
+msgid "Password"
+msgstr "Пароль"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:259
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:364
+#: ../sflphone-client-gnome/src/config/configwindow.c:418
+msgid "Protocol"
+msgstr "Протокол"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:260
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:373
+msgid "Mailbox"
+msgstr "Mailbox"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:279
+#: ../sflphone-client-gnome/src/assistant.c:216
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "Добро пожаловать в SFLphone!"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:281
+#: ../sflphone-client-gnome/src/assistant.c:217
+msgid "This installation wizard will help you configure an account."
+msgstr "Этот мастер установки поможет вам настроить ваш аккаунт."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:309
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Account"
+msgstr "Аккаунты"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:310
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Please select one of the following options"
+msgstr "Введите пожалуйста следующие данные"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:312
+#: ../sflphone-client-gnome/src/assistant.c:251
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "Создать бесплатный SIP/IAX2-аккаунт на sflphone.org"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:313
+#: ../sflphone-client-gnome/src/assistant.c:253
+msgid "Register an existing SIP or IAX2 account"
+msgstr "Зарегистрировать существующий SIP или IAX2 аккаунт"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:352
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "VoIP Protocols"
+msgstr "VoIP-протоколы"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:353
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "Select an account type"
+msgstr "Выберите тип аккаунта"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:355
+#: ../sflphone-client-gnome/src/assistant.c:233
+msgid "SIP (Session Initiation Protocol)"
+msgstr "SIP (Session Initiation Protocol)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:356
+#: ../sflphone-client-gnome/src/assistant.c:235
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2 (InterAsterix Exchange)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:395
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "Optional email address"
+msgstr "Электронный адрес (необязательный)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:396
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "This email address will be used to send your voicemail messages."
+msgstr "Этот электронный адрес будет использоваться для речевых сообщений"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:398
+msgid "Email address"
+msgstr "Адрес эл. почты"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:432
+#: ../sflphone-client-gnome/src/assistant.c:266
+msgid "SIP account settings"
+msgstr "Настройка SIP-аккаунта"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:436
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "IAX2 account settings"
+msgstr "Настройка IAX2-аккаунта"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:438
+#: ../sflphone-client-gnome/src/assistant.c:266
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "Please fill the following information"
+msgstr "Введите пожалуйста следующие данные"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:444
+msgid "Voicemail number"
+msgstr "Номер автоответчика #"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:523
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:856
+msgid "Network Address Translation (NAT)"
+msgstr "Network Address Translation (NAT)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:524
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:536
+msgid "You should probably enable this if you are behind a firewall."
+msgstr "Вы наверное должны это включить если вы находитесь за сетевым экраном."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:526
+msgid "Enable STUN"
+msgstr "Включить STUN"

+#: ../sflphone-client-kde/src/AccountWizard.cpp:527
+msgid "Stun Server"
+msgstr "сервер"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:562
+msgid ""
+"After checking the settings you chose, click \"Finish\" to create the "
+"account."
+msgstr "Проверьте выбранные настройки и нажмите на чтобы создать аккаунт."
+
+#: ../sflphone-client-kde/src/ActionSetAccountFirst.cpp:26
+msgid "Default account"
+msgstr "Аккаунт по умолчанию"
+
+#: ../sflphone-client-kde/src/Call.cpp:116
+#: ../sflphone-client-gnome/src/contacts/calltree.c:322
+msgid "Transfer to : "
+msgstr "Переслать "
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:89
+#: ../sflphone-client-gnome/src/actions.c:816
+msgid "Codec"
+msgstr "Codec"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:93
+#: ../sflphone-client-gnome/src/config/audioconf.c:581
+msgid "Frequency"
+msgstr "Частота"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:97
+#: ../sflphone-client-gnome/src/config/audioconf.c:586
+msgid "Bitrate"
+msgstr "Битрейт"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:101
+#: ../sflphone-client-gnome/src/config/audioconf.c:591
+msgid "Bandwidth"
+msgstr "Пропускная способность"
+
+#: ../sflphone-client-kde/src/main.cpp:39
+msgid "SFLphone KDE Client"
+msgstr "SFLphone KDE Client"
+
+#: ../sflphone-client-kde/src/main.cpp:43
+msgid "(C) 2009 Savoir-faire Linux"
+msgstr "(C) 2009 Savoir-faire Linux"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgid "Jérémy Quentin"
+msgstr "Jérémy Quentin"
+
+#: ../sflphone-client-kde/src/main.cpp:48
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Hussein Abdallah"
+
+#: ../sflphone-client-kde/src/main.cpp:48
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "hussein.abdallah@savoirfairelinux.com"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:62
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1084
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1089
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1094
+#: ../sflphone-client-gnome/src/statusicon.c:126
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:209
+msgid "Incoming call"
+msgstr "Входящий звонок"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:210
+msgid "You have an incoming call from"
+msgstr "Входящий звонок от"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:210
+msgid "Click to accept or refuse it."
+msgstr "Нажмите чтобы принять или отклонить его."
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:716
+msgid "Address book loading..."
+msgstr "Адресная книга загружается..."
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:901
+#: ../sflphone-client-gnome/src/actions.c:89
+msgid "No registered accounts"
+msgstr "У вас нет зарегистрированных аккаунтов"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:905
+#: ../sflphone-client-gnome/src/actions.c:83
+#: ../sflphone-client-gnome/src/actions.c:813
+msgid "Using account"
+msgstr "используется аккаунт"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1084
+msgid "Main screen"
+msgstr "Главное окно"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1089
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:165
+msgid "Call history"
+msgstr "Журнал звонков"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1094
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:394
+#: ../sflphone-client-gnome/src/toolbar.c:243
+#: ../sflphone-client-gnome/src/toolbar.c:245
+msgid "Address book"
+msgstr "Адресная книга"
+
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1108
+#: ../sflphone-client-kde/src/sflphone_kdeview.cpp:1169
+msgid "Edit before call"
+msgstr "Изменить перед звонком"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:56
+#: ../sflphone-client-gnome/src/toolbar.c:167
+#: ../sflphone-client-gnome/src/toolbar.c:169
+msgid "New call"
+msgstr "Новый звонок"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:57
+#: ../sflphone-client-kde/src/sflphone_const.h:62
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:381
+#: ../sflphone-client-gnome/src/toolbar.c:186
+#: ../sflphone-client-gnome/src/toolbar.c:188
+msgid "Hang up"
+msgstr "Положить трубку"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:58
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:382
+#: ../sflphone-client-gnome/src/toolbar.c:207
+#: ../sflphone-client-gnome/src/toolbar.c:209
+msgid "Hold on"
+msgstr "Удержать звонок"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:59
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:383
+#: ../sflphone-client-gnome/src/toolbar.c:220
+#: ../sflphone-client-gnome/src/toolbar.c:222
+msgid "Transfer"
+msgstr "Переслать звонок на другой номер"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:60
+#: ../sflphone-client-gnome/src/toolbar.c:263
+msgid "Record"
+msgstr "Записать переговор"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:61
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:380
+#: ../sflphone-client-gnome/src/toolbar.c:176
+#: ../sflphone-client-gnome/src/toolbar.c:178
+msgid "Pick up"
+msgstr "Взять трубку"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:63
+#: ../sflphone-client-gnome/src/toolbar.c:196
+#: ../sflphone-client-gnome/src/toolbar.c:198
+msgid "Hold off"
+msgstr "Снова взять"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:64
+msgid "Give up transfer"
+msgstr "Отменить трансфер"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:65
+msgid "Call back"
+msgstr "Перезвонить"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:48
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:91
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/configwindow.c:722
+#: ../sflphone-client-gnome/src/config/configwindow.c:791
+msgctxt "Config section"
+msgid "General"
+msgstr "Общие настройки"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:49
+msgctxt "Config section"
+msgid "Display"
+msgstr "Экран"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:50
+#: ../sflphone-client-gnome/src/config/configwindow.c:833
+msgctxt "Config section"
+msgid "Accounts"
+msgstr "Аккаунты"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:51
+#: ../sflphone-client-gnome/src/config/configwindow.c:786
+msgctxt "Config section"
+msgid "Audio"
+msgstr "звука"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:52
+#: ../sflphone-client-gnome/src/config/configwindow.c:801
+msgctxt "Config section"
+msgid "Address Book"
+msgstr "Адресная книга"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:53
+#: ../sflphone-client-gnome/src/config/configwindow.c:796
+msgctxt "Config section"
+msgid "Recordings"
+msgstr "Запись"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:54
+#: ../sflphone-client-gnome/src/config/configwindow.c:806
+msgctxt "Config section"
+msgid "Hooks"
+msgstr "перехватчики (hooks)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:328
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking "
+"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" "
+"buttons. Edit the selected account with the form on the right."
+msgstr ""
+"По умолчанию, SFLPhone будет использовать первый аккаунт в списке "
+"зарегистрированных аккаунтов. Последовательность использования "
+"аккаунтов можно изменить при помощи стрелок \"Вверх\" и \"Вниз\"."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:332
+msgid "Remove the selected account"
+msgstr "Убрать выбранный аккаунт"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:335
+msgid ""
+"This button will remove the selected account in the list below. Be sure you "
+"really don't need it anymore. If you think you might use it again later, "
+"just uncheck it."
+msgstr ""
+"Это кнопка уберëт аккаунт. Если вы думаете его использовать позже, "
+"то достаточно его отменить "
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:340
+msgid "Remove"
+msgstr "Убрать"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:342
+msgid "Add a new account"
+msgstr "Добавить новый аккаунт"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:345
+msgid ""
+"This button enables you to initialize a new account. You will then be able "
+"to edit it using the form on the right."
+msgstr ""
+"Это кнопка позволит вам добавить новый аккаунт. После этого вы сможете "
+"его изменить при помощи экрана справа." 
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:347
+msgid "Add"
+msgstr "Добавить"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:349
+msgid "Get this account down"
+msgstr "Опустить этот аккаунт"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:352
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:359
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows."
+msgstr ""
+"По умолчанию, SFLPhone будет использовать первый аккаунт в списке "
+"зарегистрированных аккаунтов. Последовательность использования "
+"аккаунтов можно изменить при помощи стрелок \"Вверх\" и \"Вниз\"."
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:354
+msgid "Down"
+msgstr "Вниз"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:356
+msgid "Get this account up"
+msgstr "Поднять этот аккаунт"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:361
+msgid "Up"
+msgstr "Вверх"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:362
+msgid "Apply"
+msgstr "Применить"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:367
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:368
+msgid "IAX"
+msgstr "IAX"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:374
+#: ../sflphone-client-gnome/src/config/configwindow.c:425
+msgid "Status"
+msgstr "Статус"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:377
+#: ../sflphone-client-gnome/src/config/configwindow.c:528
+msgid "Stun parameters will be applied on each SIP account created."
+msgstr "STUN-параметры будут эффективны для каждого созданного SIP-аккаунта"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:378
+msgid "Enable Stun"
+msgstr "Вклучить STUN"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:380
+#: ../sflphone-client-gnome/src/config/configwindow.c:544
+msgid "Format : name.server:port"
+msgstr "Формат: имя.сервер:порт"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:382
+msgid "choose Stun server (example : stunserver.org)"
+msgstr "Выберите STUN-Сервер (например : stunserver.org)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:154
+msgid "Enable address book"
+msgstr "Включить адресную книгу"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:155
+msgid "Maximum results"
+msgstr "Максимальное количество результатов"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:156
+msgid "Display photo if available"
+msgstr "Показать фотографию (если имеется)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:157
+msgid "Display phone numbers of these types :"
+msgstr "Показать эти номера :"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:158
+msgid "Work"
+msgstr "Рабочий"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:159
+msgid "Mobile"
+msgstr "Мобильный"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:160
+msgid "Home"
+msgstr "Домашний"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:225
+msgid "Sound manager"
+msgstr "Менджер звука"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:228
+msgid "ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:229
+msgid "PulseAudio"
+msgstr "PulseAudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:231
+msgid "Enable ringtones"
+msgstr "Включить звонки"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:232
+#: ../sflphone-client-gnome/src/config/audioconf.c:812
+msgid "Codecs"
+msgstr "Кодеки"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:233
+#: ../sflphone-client-gnome/src/config/audioconf.c:795
+msgid "ALSA settings"
+msgstr "Настройка ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:234
+#: ../sflphone-client-gnome/src/config/audioconf.c:662
+msgid "ALSA plugin"
+msgstr "ALSA-плагин"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:235
+#: ../sflphone-client-gnome/src/config/audioconf.c:706
+msgid "Input"
+msgstr "Вход"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:236
+#: ../sflphone-client-gnome/src/config/audioconf.c:684
+msgid "Output"
+msgstr "Выход"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:237
+msgid "PulseAudio settings"
+msgstr "Настройка PulseAudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:238
+msgid "Mute other applications during a call"
+msgstr "Приглушить звук других програм во время звонка"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:121
+msgid "Enable notifications"
+msgstr "Включить предупреждения"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:122
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:126
+msgid "On incoming calls"
+msgstr "При входящих звонках"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:123
+msgid "On messages"
+msgstr "При звуковых сообщениях"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:124
+msgid "Show main window"
+msgstr "Показать главное окно"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:125
+msgid "On start"
+msgstr "При пуске"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:166
+msgctxt "Beginning of 'Keep my history for at least n days.'"
+msgid "Keep my history for at least"
+msgstr "Сохранить журнал как минимум на "
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:167
+#: ../sflphone-client-gnome/src/config/configwindow.c:643
+msgctxt "End of 'Keep my history for at least n days.'"
+msgid "days"
+msgstr "дней"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:168
+msgid "Clear history"
+msgstr "Стереть журнал"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:169
+msgid "Connection"
+msgstr "Подключение"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:170
+#: ../sflphone-client-gnome/src/config/configwindow.c:664
+msgid "SIP Port"
+msgstr "SIP-порт"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:180
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "Передача URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:181
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "Команды при входящих звонках с "
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:182
+msgid "Trigger on specific SIP header"
+msgstr "Запустить при определëнном SIP	-заголовке"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:183
+msgid "Trigger on IAX2 URL"
+msgstr "Запустить при URL IAX2"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:184
+msgid "Command to run"
+msgstr "Выполнить команду:"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:185
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "%s будет заменена на переданную URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:186
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "Переписка номера телефона"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:187
+msgid "Prefix dialed numbers with"
+msgstr "Добавить перед на набранными номерами"
+
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:92
+#: ../sflphone-client-gnome/src/config/configwindow.c:726
+msgid "Destination folder"
+msgstr "Папка назначения"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:384
+#: ../sflphone-client-gnome/src/toolbar.c:232
+#: ../sflphone-client-gnome/src/toolbar.c:234
+msgid "History"
+msgstr "Журнал"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:385
+#: ../sflphone-client-gnome/src/toolbar.c:52
+#: ../sflphone-client-gnome/src/toolbar.c:251
+#: ../sflphone-client-gnome/src/toolbar.c:255
+msgid "Voicemail"
+msgstr "Автоответчик"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:386
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:388
+msgid "Configure SFLphone"
+msgstr "Настроить SFLphone"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:390
+msgid "Display volume controls"
+msgstr "Показать настройку звука"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:391
+msgid "Display dialpad"
+msgstr "Показать клвиатуру"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:392
+msgctxt "Action record a call"
+msgid "Record"
+msgstr "Записать переговор"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:396
+msgid "Attention:number of results exceeds max displayed."
+msgstr "Внимание: количество результатов превышает настроеннуй максимум"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:398
+#: ../sflphone-client-gnome/src/sliders.c:163
+msgid "Mic volume"
+msgstr "Громкость микрофона"
+
+#: ../sflphone-client-kde/build/src/ui_sflphone_kdeview_base.h:402
+#: ../sflphone-client-gnome/src/sliders.c:161
+msgid "Speakers volume"
+msgstr "Громкость"
+
+#: ../sflphone-client-gnome/src/actions.c:54
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d речевое сообщение"
+msgstr[1] "%d речевые сообщения"
+
+#: ../sflphone-client-gnome/src/actions.c:234
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"Невозможно подключиться к SFLphone-серверу.\n"
+"Проверьте если демон работает."
+
+#: ../sflphone-client-gnome/src/actions.c:809
+#, c-format
+msgid "IP call - %s"
+msgstr "IP звонок  - %s"
+
+#: ../sflphone-client-gnome/src/actions.c:908
+#, c-format
+msgid ""
+"<b>Error: No audio codecs found.\n"
+"\n"
+"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
+"b> directory in your home( <i>%s</i> )"
+msgstr ""
+"<b>Ошибка: звуковые кодеки не найдены.\n"
+"\n"
+"</b> Звуковые кодеки SFL должны находиться в <i>%s</i> или в <b>.sflphone</"
+"b> каталоге в вашем домашнем каталоге( <i>%s</i> )"
+
+#: ../sflphone-client-gnome/src/assistant.c:70
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr "Вы можете в любое время проверить статус регистрации или изменить"
+"параметры  ваших аккаунтов в меню Правка / Аккаунты."
+
+#: ../sflphone-client-gnome/src/assistant.c:78
+msgid "Username"
+msgstr "Пользователь"
+
+#: ../sflphone-client-gnome/src/assistant.c:190
+msgid "SFLphone account creation wizard"
+msgstr "Мастер настройки SFLphone"
+
+#: ../sflphone-client-gnome/src/assistant.c:274
+#: ../sflphone-client-gnome/src/assistant.c:370
+#: ../sflphone-client-gnome/src/config/accountwindow.c:153
+msgid "_Alias"
+msgstr "_Псевдоним"
+
+#: ../sflphone-client-gnome/src/assistant.c:282
+#: ../sflphone-client-gnome/src/assistant.c:378
+#: ../sflphone-client-gnome/src/config/accountwindow.c:189
+msgid "_Host name"
+msgstr "Имя или IP-адрес _сервера"
+
+#: ../sflphone-client-gnome/src/assistant.c:290
+#: ../sflphone-client-gnome/src/assistant.c:386
+#: ../sflphone-client-gnome/src/config/accountwindow.c:197
+msgid "_User name"
+msgstr "Имя или _номер пользователя"
+
+#: ../sflphone-client-gnome/src/assistant.c:306
+#: ../sflphone-client-gnome/src/assistant.c:401
+#: ../sflphone-client-gnome/src/config/accountwindow.c:212
+msgid "_Password"
+msgstr "Па_роль"
+
+#: ../sflphone-client-gnome/src/assistant.c:324
+#: ../sflphone-client-gnome/src/assistant.c:417
+#: ../sflphone-client-gnome/src/config/accountwindow.c:228
+msgid "_Voicemail number"
+msgstr "Номер _автоответчика #"
+
+#: ../sflphone-client-gnome/src/assistant.c:347
+msgid "_Email address"
+msgstr "_Адрес эл. почты"
+
+#: ../sflphone-client-gnome/src/assistant.c:444
+#: ../sflphone-client-gnome/src/config/configwindow.c:532
+msgid "E_nable STUN"
+msgstr "Включить STUN"
+
+#: ../sflphone-client-gnome/src/assistant.c:451
+msgid "_STUN server"
+msgstr "_STUN-сервер"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Account Registration"
+msgstr "Регистрация аккаунта"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Congratulations!"
+msgstr "Поздравляем!"
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"<b>ALSA-nпредупреждение</b>\n"
+"\n"
+"Ошибка во время активирования устройства проигрывания"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"<b>ALSA-nпредупреждение</b>\n"
+"\n"
+"Ошибка во время активирования устройства входа"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"<b>Предупреждение Pulseaudio</b>\n"
+"\n"
+"Pulseaudio не работает"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:70
+msgid "There is one call in progress."
+msgstr "Звонок ещё не окончен."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:74
+msgid "There are calls in progress."
+msgstr "Несколько звонков ещё не окончены."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:83
+msgid "Do you still want to quit?"
+msgstr "Вы уверенны что хотите выйти?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:296
+msgid "SFLphone Error"
+msgstr "Ошибка SFLphone."
+
+#: ../sflphone-client-gnome/src/menus.c:134
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr "SFLphone - SIP и IAX2-совместимый VoIP-клиент "
+
+#: ../sflphone-client-gnome/src/menus.c:137
+msgid "About SFLphone"
+msgstr "О SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:161
+msgid "_Help"
+msgstr "_Помощь"
+
+#: ../sflphone-client-gnome/src/menus.c:296
+#: ../sflphone-client-gnome/src/menus.c:962
+msgid "_New call"
+msgstr "_Новый звонок"
+
+#: ../sflphone-client-gnome/src/menus.c:308
+#: ../sflphone-client-gnome/src/menus.c:794
+msgid "_Pick up"
+msgstr "_Взять трубку"
+
+#: ../sflphone-client-gnome/src/menus.c:318
+#: ../sflphone-client-gnome/src/menus.c:806
+msgid "_Hang up"
+msgstr "_Положить трубку"
+
+#: ../sflphone-client-gnome/src/menus.c:328
+#: ../sflphone-client-gnome/src/menus.c:818
+msgid "On _Hold"
+msgstr "_Удержать звонок"
+
+#: ../sflphone-client-gnome/src/menus.c:340
+#: ../sflphone-client-gnome/src/menus.c:830
+msgid "_Record"
+msgstr "Записать"
+
+#: ../sflphone-client-gnome/src/menus.c:354
+msgid "_Account creation wizard"
+msgstr "Мастер настройки SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:384
+msgid "_Call"
+msgstr "_Звонок"
+
+#: ../sflphone-client-gnome/src/menus.c:552
+msgid "Clear _history"
+msgstr "_Стереть журнал"
+
+#: ../sflphone-client-gnome/src/menus.c:564
+msgid "_Accounts"
+msgstr "_Аккаунты"
+
+#: ../sflphone-client-gnome/src/menus.c:579
+msgid "_Edit"
+msgstr "_Правка"
+
+#: ../sflphone-client-gnome/src/menus.c:640
+msgid "_Dialpad"
+msgstr "_Клавиатура"
+
+#: ../sflphone-client-gnome/src/menus.c:652
+msgid "_Volume controls"
+msgstr "_Настройки громкости"
+
+#: ../sflphone-client-gnome/src/menus.c:670
+msgid "_View"
+msgstr "_Вид"
+
+#: ../sflphone-client-gnome/src/menus.c:890
+msgid "_Call back"
+msgstr "_Перезвонить"
+
+#: ../sflphone-client-gnome/src/menus.c:1070
+msgid "Edit phone number"
+msgstr "Мобильный телефон"
+
+#: ../sflphone-client-gnome/src/menus.c:1081
+msgid "Edit the phone number before making a call"
+msgstr "Изменить номер телефона перед звонком"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s аккаунт: %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>От:</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "Звонок с аккаунтом %s <i>%s</i>"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "Нынешний аккаунт"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "Вы не настроили ни одного аккаунта"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "Ошибка"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "У вас нет зарегистрированных аккаунтов"
+
+#: ../sflphone-client-gnome/src/statusicon.c:91
+msgid "_Show main window"
+msgstr "_Показать главное окно"
+
+#: ../sflphone-client-gnome/src/statusicon.c:125
+#, c-format
+msgid "%s - %s"
+msgstr "%s - %s"
+
+#: ../sflphone-client-gnome/src/statusicon.c:127
+#, c-format
+msgid "%i account configured"
+msgid_plural "%i accounts configured"
+msgstr[0] "SFLphone - Зарегистрирован %i аккаунт"
+msgstr[1] "SFLphone - Зарегистрировано %i аккаунтов"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:113
+msgid "Account settings"
+msgstr "Настройки аккаунта"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:147
+msgid "_Enable this account"
+msgstr "_Включить"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:161
+msgid "_Protocol"
+msgstr "Пр_отокол"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:179
+msgid "Unknown"
+msgstr "Неизвестный"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "_Использовать адресную книгу Evolution"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "Ограничение скорости скачивания:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "каротчек"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "_Показать фотографию контакта (если имеется):"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "Исполоьзовать следующие поля из адресной книги Evolution:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "_Рабочий"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "_Домашний"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "_Мобильный"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "Адресная книга"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "Select which Evolution address books to use"
+msgstr "Выбрать адресную книгу Evolution:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
+#: ../sflphone-client-gnome/src/config/audioconf.c:576
+msgid "Name"
+msgstr "Имя"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:741
+msgid "_Voice Activity Detection"
+msgstr "Включить детектор тишины"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:751
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "Шумоподавление"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:780
+msgid "Sound Manager"
+msgstr "Менеджер звука"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:783
+msgid "_Pulseaudio"
+msgstr "_Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:788
+msgid "_ALSA"
+msgstr "_ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:835
+msgid "Ringtones"
+msgstr "Звонки"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:841
+msgid "_Enable ringtones"
+msgstr "Включить звонок"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:847
+msgid "Choose a ringtone"
+msgstr "Выберите звонок"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Audio Files"
+msgstr "Звуковые файлы"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:589
+msgid "Desktop Notifications"
+msgstr "Извещения на рабочем столе"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:593
+msgid "_Enable notifications"
+msgstr "Включить звонок"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:599
+msgid "Enable voicemail _notifications"
+msgstr "Включить предупреждения о речевых сообщениях"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:611
+msgid "System Tray Icon"
+msgstr "System Tray Icon"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:614
+msgid "_Popup main window on incoming call"
+msgstr "_Показать главное окно при входящем звонке"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:619
+msgid "Ne_ver popup main window"
+msgstr "Никогда не показывать главное окно"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:623
+msgid "Hide SFLphone window on _startup"
+msgstr "Спрятать окно SFLphone при пуске"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:629
+msgid "Calls History"
+msgstr "Журнал звонков"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:632
+msgctxt "Beginning of 'Keep my history for at least n days.'"
+msgid "_Keep my history for at least"
+msgstr "Сохранить журнал как минимум на "
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:647
+msgid "PulseAudio sound server"
+msgstr "Сервер звука PulseAudio"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:650
+msgid "_Mute other applications during a call"
+msgstr "Приглушать звук других програм во время звонка"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:677
+msgid "Port"
+msgstr "Порт"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:732
+msgid "Select a folder"
+msgstr "Выберите папку"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:766
+msgid "Preferences"
+msgstr "Предпочтения"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:845
+msgid "Configured Accounts"
+msgstr "Нынешний аккаунт"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "Запустить при определëнном SIP-заголовке"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "Запустить при наличии URL _IAX2"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "_Выполнить команду:"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "Добавить перед на набранными номерами"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:56
+msgid "Search all"
+msgstr "Искать всë"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:57
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Click here to change the search type"
+msgstr "Нажмите сюда чтобы выбрать тип поиска"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search by missed call"
+msgstr "Искать в пропущенных звонках"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:81
+msgid "Search by incoming call"
+msgstr "Искать во входящих звонках"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:93
+msgid "Search by outgoing call"
+msgstr "Искать в выходящих звонках"
+
diff --git a/sflphone-client-kde/po/zh_CN/CMakeLists.txt b/sflphone-client-kde/po/zh_CN/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d1c85c8e816bb5b893526c055313dd92ce209fd7
--- /dev/null
+++ b/sflphone-client-kde/po/zh_CN/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB _po_files *.po)
+GETTEXT_PROCESS_PO_FILES(zh_CN ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
diff --git a/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po b/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po
new file mode 100644
index 0000000000000000000000000000000000000000..720d784bed96e8bc84812517e872af8cb56e2b26
--- /dev/null
+++ b/sflphone-client-kde/po/zh_CN/sflphone-client-kde.po
@@ -0,0 +1,1538 @@
+# Chinese translation of SFLphone.
+# Copyright (C) 2008 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 3.
+# 
+# Yun Liu <yun.liu@savoirfairelinux.com>, 2008.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: SFLphone 0.9.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-23 10:14-0400\n"
+"PO-Revision-Date: 2008-10-28 14:15\n"
+"Last-Translator: Yun Liu <yun.liu@savoirfairelinux.com>\n"
+"Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: ../sflphone-client-kde/src/Account.cpp:34
+#: ../sflphone-client-gnome/src/accountlist.c:175
+msgid "Registered"
+msgstr "已注册"
+
+#: ../sflphone-client-kde/src/Account.cpp:36
+#: ../sflphone-client-gnome/src/accountlist.c:178
+msgid "Not Registered"
+msgstr "未注册"
+
+#: ../sflphone-client-kde/src/Account.cpp:38
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgid "Trying..."
+msgstr "正在连接..."
+
+#: ../sflphone-client-kde/src/Account.cpp:40
+#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "注册失败"
+
+#: ../sflphone-client-kde/src/Account.cpp:42
+#: ../sflphone-client-gnome/src/accountlist.c:187
+#, fuzzy
+msgid "Authentication Failed"
+msgstr "认证错误"
+
+#: ../sflphone-client-kde/src/Account.cpp:44
+#: ../sflphone-client-gnome/src/accountlist.c:190
+msgid "Network unreachable"
+msgstr "网络连接失败"
+
+#: ../sflphone-client-kde/src/Account.cpp:46
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgid "Host unreachable"
+msgstr "服务器连接失败"
+
+#: ../sflphone-client-kde/src/Account.cpp:48
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgid "Stun configuration error"
+msgstr "Stun配置有误"
+
+#: ../sflphone-client-kde/src/Account.cpp:50
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgid "Stun server invalid"
+msgstr "Stun服务器无效"
+
+#: ../sflphone-client-kde/src/Account.cpp:51
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgid "Invalid"
+msgstr "无效"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:166
+#: ../sflphone-client-kde/src/AccountWizard.cpp:281
+#: ../sflphone-client-kde/src/SFLPhone.cpp:121
+msgid "Account creation wizard"
+msgstr "帐户创建向导"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:202
+#: ../sflphone-client-kde/src/AccountWizard.cpp:220
+#: ../sflphone-client-kde/src/AccountWizard.cpp:564
+#: ../sflphone-client-gnome/src/assistant.c:68
+#, c-format
+msgid "This assistant is now finished."
+msgstr "配置完成."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:214
+msgid "Creation of account has failed for the reason"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:258
+#: ../sflphone-client-kde/src/AccountWizard.cpp:443
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:403
+#: ../sflphone-client-gnome/src/assistant.c:72
+msgid "Alias"
+msgstr "别名"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:259
+#: ../sflphone-client-kde/src/AccountWizard.cpp:444
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:410
+#: ../sflphone-client-gnome/src/assistant.c:75
+msgid "Server"
+msgstr "服务器"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:260
+#: ../sflphone-client-kde/src/AccountWizard.cpp:445
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:411
+#: ../sflphone-client-gnome/src/assistant.c:78
+msgid "Username"
+msgstr "用户名"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:261
+#: ../sflphone-client-kde/src/AccountWizard.cpp:446
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:412
+msgid "Password"
+msgstr "密码"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:262
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:404
+#: ../sflphone-client-gnome/src/config/configwindow.c:418
+msgid "Protocol"
+msgstr "协议"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:263
+#: ../sflphone-client-kde/src/AccountWizard.cpp:447
+msgid "Voicemail number"
+msgstr "语音信箱号码"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:282
+#: ../sflphone-client-gnome/src/assistant.c:216
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "欢迎使用SFLphone帐户创建向导!"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:284
+#: ../sflphone-client-gnome/src/assistant.c:217
+msgid "This installation wizard will help you configure an account."
+msgstr "安装向导将帮助您配置帐户"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:312
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Account"
+msgstr "帐户"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:313
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Please select one of the following options"
+msgstr "请选择以下选项中的一个"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:315
+#: ../sflphone-client-gnome/src/assistant.c:251
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "在sflphone.org上创建免费的SIP/IAX2帐户"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:316
+#: ../sflphone-client-gnome/src/assistant.c:253
+msgid "Register an existing SIP or IAX2 account"
+msgstr "注册已存在的SIP或IAX2帐户"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:355
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "VoIP Protocols"
+msgstr "VoIP协议"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:356
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "Select an account type"
+msgstr "选择帐户类型"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:358
+#: ../sflphone-client-gnome/src/assistant.c:233
+msgid "SIP (Session Initiation Protocol)"
+msgstr "SIP(会话初始化协议)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:359
+#: ../sflphone-client-gnome/src/assistant.c:235
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2(Asterisk内部交换协议)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:398
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "Optional email address"
+msgstr "可选邮件地址"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:399
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "This email address will be used to send your voicemail messages."
+msgstr "这个邮件地址将被用来发送您的语音邮箱消息"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:401
+msgid "Email address"
+msgstr "邮件地址"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:435
+#: ../sflphone-client-gnome/src/assistant.c:266
+msgid "SIP account settings"
+msgstr "SIP帐户设置"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:439
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "IAX2 account settings"
+msgstr "IAX2帐户设置"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:441
+#: ../sflphone-client-gnome/src/assistant.c:266
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "Please fill the following information"
+msgstr "请填写以下信息"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:526
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:856
+msgid "Network Address Translation (NAT)"
+msgstr "网络地址解析(NAT)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:527
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:536
+msgid "You should probably enable this if you are behind a firewall."
+msgstr "如果你使用网络使用防火墙,你很有可能需要设定此项."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:529
+msgid "Enable STUN"
+msgstr "使用STUN"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:530
+msgid "Stun Server"
+msgstr "STUN服务器"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:565
+msgid ""
+"After checking the settings you chose, click \"Finish\" to create the "
+"account."
+msgstr "当您检查完选定的设置, 请点击\"结束\"来创建帐户"
+
+#: ../sflphone-client-kde/src/ActionSetAccountFirst.cpp:26
+msgid "Default account"
+msgstr "默认帐户"
+
+#: ../sflphone-client-kde/src/Call.cpp:119
+#: ../sflphone-client-gnome/src/contacts/calltree.c:322
+msgid "Transfer to : "
+msgstr "转给:"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:89
+#: ../sflphone-client-gnome/src/actions.c:816
+msgid "Codec"
+msgstr "编码"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:93
+#: ../sflphone-client-gnome/src/config/audioconf.c:581
+msgid "Frequency"
+msgstr "频率"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:97
+#: ../sflphone-client-gnome/src/config/audioconf.c:586
+msgid "Bitrate"
+msgstr "比率"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:101
+#: ../sflphone-client-gnome/src/config/audioconf.c:591
+msgid "Bandwidth"
+msgstr "带宽"
+
+#: ../sflphone-client-kde/src/main.cpp:38
+msgid "SFLphone KDE Client"
+msgstr "SFLphone KDE客户端"
+
+#: ../sflphone-client-kde/src/main.cpp:42
+msgid "(C) 2009 Savoir-faire Linux"
+msgstr "(C) 2009 Savoir-faire Linux"
+
+#: ../sflphone-client-kde/src/main.cpp:46
+msgid "Jérémy Quentin"
+msgstr "Jérémy Quentin"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Yun Liu"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "yunliu2000@gmail.com"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:53
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/statusicon.c:126
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:100
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+msgid "Main screen"
+msgstr "主屏幕"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:101
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:165
+msgid "Call history"
+msgstr "呼叫记录"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:102
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/toolbar.c:243
+#: ../sflphone-client-gnome/src/toolbar.c:245
+msgid "Address book"
+msgstr "地址簿"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:115
+msgid "Configure SFLphone"
+msgstr "配置SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:117
+msgid "Display volume controls"
+msgstr "显示音量控制"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:118
+msgid "Display dialpad"
+msgstr "显示拨号键盘"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:227
+msgid "Incoming call"
+msgstr "来电"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "You have an incoming call from"
+msgstr "您有一个电话,来自于"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "Click to accept or refuse it."
+msgstr "请点击接听或拒绝"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:656
+msgid "Address book loading..."
+msgstr "载入地址簿......"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:840
+#: ../sflphone-client-gnome/src/actions.c:89
+msgid "No registered accounts"
+msgstr "没有已注册帐户"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:844
+#: ../sflphone-client-gnome/src/actions.c:83
+#: ../sflphone-client-gnome/src/actions.c:813
+msgid "Using account"
+msgstr "使用账户"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1045
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1109
+msgid "Edit before call"
+msgstr "呼叫前进行编辑"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:40
+#: ../sflphone-client-gnome/src/toolbar.c:167
+#: ../sflphone-client-gnome/src/toolbar.c:169
+msgid "New call"
+msgstr "新电话"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:41
+#: ../sflphone-client-kde/src/sflphone_const.h:46
+#: ../sflphone-client-gnome/src/toolbar.c:186
+#: ../sflphone-client-gnome/src/toolbar.c:188
+msgid "Hang up"
+msgstr "放电话"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:42
+#: ../sflphone-client-gnome/src/toolbar.c:207
+#: ../sflphone-client-gnome/src/toolbar.c:209
+msgid "Hold on"
+msgstr "呼叫保持"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:43
+#: ../sflphone-client-gnome/src/toolbar.c:220
+#: ../sflphone-client-gnome/src/toolbar.c:222
+msgid "Transfer"
+msgstr "转接"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:44
+#: ../sflphone-client-gnome/src/toolbar.c:263
+msgid "Record"
+msgstr "记录"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:45
+#: ../sflphone-client-gnome/src/toolbar.c:176
+#: ../sflphone-client-gnome/src/toolbar.c:178
+msgid "Pick up"
+msgstr "接电话"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:47
+#: ../sflphone-client-gnome/src/toolbar.c:196
+#: ../sflphone-client-gnome/src/toolbar.c:198
+msgid "Hold off"
+msgstr "恢复通话"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:48
+msgid "Give up transfer"
+msgstr "取消转接"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:49
+msgid "Call back"
+msgstr "回叫"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:50
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:413
+#: ../sflphone-client-gnome/src/toolbar.c:52
+#: ../sflphone-client-gnome/src/toolbar.c:251
+#: ../sflphone-client-gnome/src/toolbar.c:255
+msgid "Voicemail"
+msgstr "语音信箱"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:48
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:91
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/configwindow.c:722
+#: ../sflphone-client-gnome/src/config/configwindow.c:791
+msgid "General"
+msgstr "常用配置"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:49
+#, fuzzy
+msgid "Display"
+msgstr "显示"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:50
+#: ../sflphone-client-gnome/src/config/configwindow.c:833
+msgid "Accounts"
+msgstr "帐户"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:51
+#: ../sflphone-client-gnome/src/config/configwindow.c:786
+#, fuzzy
+msgid "Audio"
+msgstr "音频"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:52
+#: ../sflphone-client-gnome/src/config/configwindow.c:801
+msgid "Address Book"
+msgstr "地址簿"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:53
+#: ../sflphone-client-gnome/src/config/configwindow.c:796
+msgid "Recordings"
+msgstr "记录"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:54
+#: ../sflphone-client-gnome/src/config/configwindow.c:806
+msgid "Hooks"
+msgstr "钩键"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:368
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking "
+"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" "
+"buttons. Edit the selected account with the form on the right."
+msgstr ""
+"在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭"
+"头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户,取消"
+"选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。点击\"编辑\"按钮"
+"可以改变账户的设置。"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:372
+msgid "Remove the selected account"
+msgstr "删除所选账户"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:375
+msgid ""
+"This button will remove the selected account in the list below. Be sure you "
+"really don't need it anymore. If you think you might use it again later, "
+"just uncheck it."
+msgstr ""
+"该按钮会删除列表中被选定的账户。请确认你的操作。如果你希望继续使用某个账户,"
+"请取消对该账户的选择"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:380
+msgid "Remove"
+msgstr "删除"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:382
+msgid "Add a new account"
+msgstr "增加新帐户"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:385
+msgid ""
+"This button enables you to initialize a new account. You will then be able "
+"to edit it using the form on the right."
+msgstr ""
+"通过该按钮可以创建一个新账户。添加该账户之后你还可以通过编辑按钮来修改设置。"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:387
+msgid "Add"
+msgstr "添加"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:389
+msgid "Get this account down"
+msgstr "将该账户向下移动"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:392
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:399
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows."
+msgstr ""
+"在默认情况下,当你打电话时,sflphone会使用列表当中第一个已注册的帐户。使用箭"
+"头\"上\"和\"下\"可以改变账户的顺序。选择账户名称左边的方框可以启用帐户,取消"
+"选择则会禁用该账户。通过\"加\"\"减\"按钮可以添加或删除账户。"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:394
+msgid "Down"
+msgstr "下"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:396
+msgid "Get this account up"
+msgstr "把该账户向上移动"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:401
+msgid "Up"
+msgstr "上"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:402
+msgid "Apply"
+msgstr "应用"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:407
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:408
+msgid "IAX"
+msgstr "IAX"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:414
+#: ../sflphone-client-gnome/src/config/configwindow.c:425
+msgid "Status"
+msgstr "状态"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:416
+msgid "Basic"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:417
+#, fuzzy
+msgid "Registration expire"
+msgstr "已注册"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:418
+msgid "Conform to RFC 3263"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:419
+msgid "Advanced"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:421
+#: ../sflphone-client-gnome/src/config/configwindow.c:528
+msgid "Stun parameters will be applied on each SIP account created."
+msgstr "STUN参数将应用于每一个注册的SIP帐户"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:422
+msgid "Enable Stun"
+msgstr "使用STUN"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:424
+#: ../sflphone-client-gnome/src/config/configwindow.c:544
+msgid "Format : name.server:port"
+msgstr "格式:名称.服务器:端口"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:426
+msgid "choose Stun server (example : stunserver.org)"
+msgstr "选择STUN服务器(例如:stunserver.org)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:154
+msgid "Enable address book"
+msgstr "启用地址簿"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:155
+msgid "Maximum results"
+msgstr "结果最大值"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:156
+msgid "Display photo if available"
+msgstr "如果可行则显示联系人照片"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:157
+msgid "Display phone numbers of these types :"
+msgstr "显示这些格式的电话号码"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:158
+msgid "Work"
+msgstr "单位电话"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:159
+msgid "Mobile"
+msgstr "移动电话"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:160
+msgid "Home"
+msgstr "家庭电话"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:225
+msgid "Sound manager"
+msgstr "声音管理器"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:228
+msgid "ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:229
+msgid "PulseAudio"
+msgstr "PulseAudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:231
+msgid "Enable ringtones"
+msgstr "启用铃声"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:232
+#: ../sflphone-client-gnome/src/config/audioconf.c:812
+msgid "Codecs"
+msgstr "Codecs编码"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:233
+#: ../sflphone-client-gnome/src/config/audioconf.c:795
+msgid "ALSA settings"
+msgstr "ALSA设置"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:234
+#: ../sflphone-client-gnome/src/config/audioconf.c:662
+msgid "ALSA plugin"
+msgstr "ALSA插件"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:235
+#: ../sflphone-client-gnome/src/config/audioconf.c:706
+msgid "Input"
+msgstr "输入"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:236
+#: ../sflphone-client-gnome/src/config/audioconf.c:684
+msgid "Output"
+msgstr "输出"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:237
+msgid "PulseAudio settings"
+msgstr "PulseAudio设置"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:238
+msgid "Mute other applications during a call"
+msgstr "当有来电时静音其它应用程序"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:121
+msgid "Enable notifications"
+msgstr "启用提示"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:122
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:126
+msgid "On incoming calls"
+msgstr "有新来电"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:123
+msgid "On messages"
+msgstr "有新消息"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:124
+msgid "Show main window"
+msgstr "显示主窗口"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:125
+msgid "On start"
+msgstr "正在启动"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:166
+#, fuzzy
+msgid "Keep my history for at least"
+msgstr "保存呼叫记录至少"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:167
+#: ../sflphone-client-gnome/src/config/configwindow.c:643
+#, fuzzy
+msgid "days"
+msgstr "天"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:168
+msgid "Clear history"
+msgstr "清空历史记录"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:169
+msgid "Connection"
+msgstr "连接"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:170
+#: ../sflphone-client-gnome/src/config/configwindow.c:664
+msgid "SIP Port"
+msgstr "SIP端口号"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:180
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "URL参数"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:181
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "定制对带有URL的来电的处理"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:182
+msgid "Trigger on specific SIP header"
+msgstr "激活指定的SIP头"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:183
+msgid "Trigger on IAX2 URL"
+msgstr "激活IAX2 URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:184
+msgid "Command to run"
+msgstr "要运行的命令"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:185
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "传输的URL会被替换成%s."
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:186
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "重设电话号码"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:187
+msgid "Prefix dialed numbers with"
+msgstr "号码前缀"
+
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:92
+#: ../sflphone-client-gnome/src/config/configwindow.c:726
+msgid "Destination folder"
+msgstr "目标文件夹"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:307
+msgid "Attention:number of results exceeds max displayed."
+msgstr "注意:结果超过可显示的最大值"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:309
+#: ../sflphone-client-gnome/src/sliders.c:163
+msgid "Mic volume"
+msgstr "话筒音量"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:313
+#: ../sflphone-client-gnome/src/sliders.c:161
+msgid "Speakers volume"
+msgstr "扬声器音量"
+
+#: ../sflphone-client-gnome/src/actions.c:54
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d 个语音信息"
+msgstr[1] "%d 个语音信息"
+
+#: ../sflphone-client-gnome/src/actions.c:234
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"连接SFLphone服务器失败.\n"
+"请检查daemon是否还在运行."
+
+#: ../sflphone-client-gnome/src/actions.c:809
+#, c-format
+msgid "IP call - %s"
+msgstr "IP 电话 - %s"
+
+#: ../sflphone-client-gnome/src/actions.c:908
+#, c-format
+msgid ""
+"<b>Error: No audio codecs found.\n"
+"\n"
+"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
+"b> directory in your home( <i>%s</i> )"
+msgstr ""
+"<b>错误:无法找到codecs编码文件.\n"
+"\n"
+"</b> SFL声音codecs文件应位于<i>%s</i> 或 位于主目录( <i>%s</i> )的<b>."
+"sflphone</b>目录下"
+
+#: ../sflphone-client-gnome/src/assistant.c:70
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数."
+
+#: ../sflphone-client-gnome/src/assistant.c:190
+msgid "SFLphone account creation wizard"
+msgstr "SFLphone账户创建向导"
+
+#: ../sflphone-client-gnome/src/assistant.c:274
+#: ../sflphone-client-gnome/src/assistant.c:370
+#: ../sflphone-client-gnome/src/config/accountwindow.c:156
+msgid "_Alias"
+msgstr "别名(A)"
+
+#: ../sflphone-client-gnome/src/assistant.c:282
+#: ../sflphone-client-gnome/src/assistant.c:378
+#: ../sflphone-client-gnome/src/config/accountwindow.c:192
+msgid "_Host name"
+msgstr "主机名(H)"
+
+#: ../sflphone-client-gnome/src/assistant.c:290
+#: ../sflphone-client-gnome/src/assistant.c:386
+#: ../sflphone-client-gnome/src/config/accountwindow.c:206
+msgid "_User name"
+msgstr "用户名(U)"
+
+#: ../sflphone-client-gnome/src/assistant.c:306
+#: ../sflphone-client-gnome/src/assistant.c:401
+#: ../sflphone-client-gnome/src/config/accountwindow.c:221
+msgid "_Password"
+msgstr "密码(P)"
+
+#: ../sflphone-client-gnome/src/assistant.c:324
+#: ../sflphone-client-gnome/src/assistant.c:417
+#: ../sflphone-client-gnome/src/config/accountwindow.c:237
+msgid "_Voicemail number"
+msgstr "语音信箱号码(V)"
+
+#: ../sflphone-client-gnome/src/assistant.c:347
+msgid "_Email address"
+msgstr "邮件地址(E)"
+
+#: ../sflphone-client-gnome/src/assistant.c:444
+#: ../sflphone-client-gnome/src/config/configwindow.c:532
+msgid "E_nable STUN"
+msgstr "使用STUN(n)"
+
+#: ../sflphone-client-gnome/src/assistant.c:451
+msgid "_STUN server"
+msgstr "STUN服务器(S)"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Account Registration"
+msgstr "帐户注册"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Congratulations!"
+msgstr "恭喜!"
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"ALSA提示\n"
+"\n"
+"打开回放设备时出错"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"ALSA提示\n"
+"\n"
+"打开采集设备时出错"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"Pulseaudio提示\n"
+"\n"
+"Pulseaudio未运行"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:70
+msgid "There is one call in progress."
+msgstr "有一个电话正在处理"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:74
+msgid "There are calls in progress."
+msgstr "有电话正在处理中"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:83
+msgid "Do you still want to quit?"
+msgstr "确认要退出?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:282
+msgid "SFLphone Error"
+msgstr "SFLphone出错"
+
+#: ../sflphone-client-gnome/src/menus.c:134
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr "SFLphone是一个VoIP客户端,它兼容SIP和IAX2协议."
+
+#: ../sflphone-client-gnome/src/menus.c:137
+msgid "About SFLphone"
+msgstr "关于SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:161
+msgid "_Help"
+msgstr "帮助(H)"
+
+#: ../sflphone-client-gnome/src/menus.c:296
+#: ../sflphone-client-gnome/src/menus.c:953
+msgid "_New call"
+msgstr "新电话(N)"
+
+#: ../sflphone-client-gnome/src/menus.c:308
+#: ../sflphone-client-gnome/src/menus.c:785
+msgid "_Pick up"
+msgstr "拨出(P)"
+
+#: ../sflphone-client-gnome/src/menus.c:318
+#: ../sflphone-client-gnome/src/menus.c:797
+msgid "_Hang up"
+msgstr "放下(H)"
+
+#: ../sflphone-client-gnome/src/menus.c:328
+#: ../sflphone-client-gnome/src/menus.c:809
+msgid "On _Hold"
+msgstr "保持(H)"
+
+#: ../sflphone-client-gnome/src/menus.c:340
+#: ../sflphone-client-gnome/src/menus.c:821
+msgid "_Record"
+msgstr "记录(R)"
+
+#: ../sflphone-client-gnome/src/menus.c:354
+msgid "_Account creation wizard"
+msgstr "帐户创建向导"
+
+#: ../sflphone-client-gnome/src/menus.c:384
+msgid "_Call"
+msgstr "电话"
+
+#: ../sflphone-client-gnome/src/menus.c:552
+msgid "Clear _history"
+msgstr "清空历史记录(C)"
+
+#: ../sflphone-client-gnome/src/menus.c:564
+msgid "_Accounts"
+msgstr "帐户(A)"
+
+#: ../sflphone-client-gnome/src/menus.c:579
+msgid "_Edit"
+msgstr "编辑(E)"
+
+#: ../sflphone-client-gnome/src/menus.c:631
+msgid "_Dialpad"
+msgstr "拨号面板"
+
+#: ../sflphone-client-gnome/src/menus.c:643
+msgid "_Volume controls"
+msgstr "音量控制(V)"
+
+#: ../sflphone-client-gnome/src/menus.c:661
+msgid "_View"
+msgstr "查看(V)"
+
+#: ../sflphone-client-gnome/src/menus.c:881
+msgid "_Call back"
+msgstr "回叫(C)"
+
+#: ../sflphone-client-gnome/src/menus.c:1061
+msgid "Edit phone number"
+msgstr "编辑电话号码"
+
+#: ../sflphone-client-gnome/src/menus.c:1072
+msgid "Edit the phone number before making a call"
+msgstr "拨出电话前编辑电话号码"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s 帐户: %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>拨入方</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "使用%s帐户<i>%s</i>呼叫"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "当前帐户"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "你没有设置任何账户"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "未发现已注册帐户"
+
+#: ../sflphone-client-gnome/src/statusicon.c:91
+msgid "_Show main window"
+msgstr "显示主窗口(S)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:127
+#, c-format
+msgid "%i account configured"
+msgid_plural "%i accounts configured"
+msgstr[0] "已配置了%i个账户"
+msgstr[1] "已配置了%i个账户"
+
+#: ../sflphone-client-gnome/src/toolbar.c:232
+#: ../sflphone-client-gnome/src/toolbar.c:234
+msgid "History"
+msgstr "历史"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:116
+msgid "Account settings"
+msgstr "帐户设置"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:150
+msgid "_Enable this account"
+msgstr "启用该账户(E)"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:164
+msgid "_Protocol"
+msgstr "协议(P)"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:182
+msgid "Unknown"
+msgstr "未知"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:200
+msgid "_Resolve host name only once for the session"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "使用Evolution地址薄(U)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "下载上限:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "卡"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "如果可行则显示联系人照片(D)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "使用Evolution地址薄中的如下字段:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "单位电话(W)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "家庭电话(H)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "移动电话(M)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "地址簿"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "Select which Evolution address books to use"
+msgstr "选择使用如下Evolution地址薄"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
+#: ../sflphone-client-gnome/src/config/audioconf.c:576
+msgid "Name"
+msgstr "名称"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:741
+msgid "_Voice Activity Detection"
+msgstr "声音状态检测(V)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:751
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "降噪处理-窄频压缩(N)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:780
+msgid "Sound Manager"
+msgstr "音频管理器"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:783
+msgid "_Pulseaudio"
+msgstr "Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:788
+msgid "_ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:835
+msgid "Ringtones"
+msgstr "铃声"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:841
+msgid "_Enable ringtones"
+msgstr "启用铃声(E)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:847
+msgid "Choose a ringtone"
+msgstr "选择铃声"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Audio Files"
+msgstr "音频文件"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:589
+msgid "Desktop Notifications"
+msgstr "桌面提示"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:593
+msgid "_Enable notifications"
+msgstr "启用提示(E)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:599
+msgid "Enable voicemail _notifications"
+msgstr "启用语音邮箱提示(n)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:611
+msgid "System Tray Icon"
+msgstr "系统托盘图标"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:614
+msgid "_Popup main window on incoming call"
+msgstr "来电时弹出主窗口(P)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:619
+msgid "Ne_ver popup main window"
+msgstr "从不弹出主窗口(v)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:623
+msgid "Hide SFLphone window on _startup"
+msgstr "在启动时隐藏SFLphone主窗口"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:629
+msgid "Calls History"
+msgstr "拨号历史"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:632
+#, fuzzy
+msgid "_Keep my history for at least"
+msgstr "保留历史记录至少(K)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:647
+msgid "PulseAudio sound server"
+msgstr "PulseAudio服务器"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:650
+msgid "_Mute other applications during a call"
+msgstr "当有来电时静音其它应用程序(c)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:677
+msgid "Port"
+msgstr "端口"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:732
+msgid "Select a folder"
+msgstr "选择文件夹"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:766
+msgid "Preferences"
+msgstr "属性"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:845
+msgid "Configured Accounts"
+msgstr "已配置帐户"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "激活指定的SIP头(S)"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "激活IAX2 URL(I)"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "运行命令(r)"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "号码前缀(P)"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:56
+msgid "Search all"
+msgstr "查询所有"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:57
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Click here to change the search type"
+msgstr "请点击此处改变查询方式"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search by missed call"
+msgstr "从未接电话中查询"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:81
+msgid "Search by incoming call"
+msgstr "从来电中查询"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:93
+msgid "Search by outgoing call"
+msgstr "从拨出电话中查询"
+
+#~ msgctxt "Config section"
+#~ msgid "Accounts"
+#~ msgstr "帐户"
+
+#~ msgctxt "account state"
+#~ msgid "Registered"
+#~ msgstr "已注册"
+
+#~ msgctxt "account state"
+#~ msgid "Not Registered"
+#~ msgstr "未注册"
+
+#~ msgctxt "account state"
+#~ msgid "Trying..."
+#~ msgstr "正在连接..."
+
+#~ msgctxt "account state"
+#~ msgid "Error"
+#~ msgstr "注册失败"
+
+#~ msgctxt "account state"
+#~ msgid "Network unreachable"
+#~ msgstr "网络连接失败"
+
+#~ msgctxt "account state"
+#~ msgid "Host unreachable"
+#~ msgstr "服务器连接失败"
+
+#~ msgctxt "account state"
+#~ msgid "Stun configuration error"
+#~ msgstr "STUN配置有误"
+
+#~ msgctxt "account state"
+#~ msgid "Stun server invalid"
+#~ msgstr "STUN服务器无效"
+
+#~ msgctxt "account state"
+#~ msgid "Invalid"
+#~ msgstr "无效"
+
+#~ msgctxt "Config section"
+#~ msgid "General"
+#~ msgstr "常用配置"
+
+#~ msgctxt "Config section"
+#~ msgid "Address Book"
+#~ msgstr "地址簿"
+
+#~ msgctxt "Config section"
+#~ msgid "Recordings"
+#~ msgstr "记录"
+
+#~ msgctxt "Config section"
+#~ msgid "Hooks"
+#~ msgstr "钩键"
+
+#~ msgid "User"
+#~ msgstr "用户名"
+
+#~ msgid "Mailbox"
+#~ msgstr "语音邮件"
+
+#~ msgctxt "Action record a call"
+#~ msgid "Record"
+#~ msgstr "记录"
+
+#~ msgid "%s - %s"
+#~ msgstr "%s - %s"
+
+#~ msgid "Bad authentification"
+#~ msgstr "认证错误"
+
+#~ msgid "%d voice mails"
+#~ msgstr "%d 个语音信息"
+
+#~ msgid "No registered account"
+#~ msgstr "未发现已注册帐户"
+
+#~ msgid ""
+#~ "This assistant is now finished.\n"
+#~ "You can at any time check your registration state or modify your accounts "
+#~ "parameters in the Options/Accounts window.\n"
+#~ "\n"
+#~ "Alias :    %s\n"
+#~ "Server :   %s\n"
+#~ "Username : %s\n"
+#~ msgstr ""
+#~ "配置完成.\n"
+#~ "你可以随时在 选项/帐户 窗口中查看注册状态或者修改帐户参数.\n"
+#~ "\n"
+#~ "别名:     %s\n"
+#~ "服务器:   %s\n"
+#~ "用户名:   %s\n"
+
+#~ msgid "SFLphone account configuration wizard"
+#~ msgstr "SFLphone 帐户设置向导"
+
+#~ msgid "Welcome to SFLphone!"
+#~ msgstr "欢迎使用SFLphone!"
+
+#~ msgid "Select an account type:"
+#~ msgstr "选择帐户类型:"
+
+#~ msgid "Please select one of the following option:"
+#~ msgstr "请选择以下选项中的一个:"
+
+#~ msgid "SIP account configuration"
+#~ msgstr "SIP帐户配置"
+
+#~ msgid "Please fill the following information:"
+#~ msgstr "请填写以下信息:"
+
+#~ msgid "Optional Email Address "
+#~ msgstr "可选邮件地址 "
+
+#~ msgid "This email address will be use to send your voicemail messages"
+#~ msgstr "这个邮件地址将被用来发送您的语音邮箱消息"
+
+#~ msgid "_Email"
+#~ msgstr " 邮件(E)"
+
+#~ msgid "IAX2 account configuration"
+#~ msgstr "IAX2帐户配置"
+
+#~ msgid "Network Address Translation"
+#~ msgstr "网络地址解析"
+
+#~ msgid "Edit phone"
+#~ msgstr "编辑电话"
+
+#~ msgid "%s account: %s"
+#~ msgstr "%s 帐户: %s"
+
+#~ msgid "<i>From:</i> %s"
+#~ msgstr "<i>拨入方:</i> %s"
+
+#~ msgid "You haven't setup any accounts"
+#~ msgstr "你没有设置任何帐户"
+
+#~ msgid "SFLphone - %i accounts configured"
+#~ msgstr "SFLphone - %i 个帐户已配置"
+
+#~ msgid "\"Voicemail\" <%s>"
+#~ msgstr "\"语音邮件\" <%s>"
+
+#~ msgid "Place a call"
+#~ msgstr "拨号"
+
+#~ msgid "Off Hold"
+#~ msgstr "恢复通话"
+
+#~ msgid "On Hold"
+#~ msgstr "待机"
+
+#~ msgid "Record a call"
+#~ msgstr "记录通话"
+
+#~ msgid "Account Parameters"
+#~ msgstr "帐户相关参数"
+
+#~ msgid "Download limit:"
+#~ msgstr "下载上限:"
+
+#~ msgid "_Business phone"
+#~ msgstr "商务电话(B)"
+
+#~ msgid "_Home phone"
+#~ msgstr "家庭电话(H)"
+
+#~ msgid "_Mobile phone"
+#~ msgstr "移动电话(M)"
+
+#~ msgid "Select which Evolution address books to use:"
+#~ msgstr "选择使用如下Evolution地址薄:"
+
+#~ msgid "audio device index for output = %d"
+#~ msgstr "音频设备输出索引 = %d"
+
+#~ msgid "ALSA configuration"
+#~ msgstr "ALSA 配置"
+
+#~ msgid "Stun parameters will apply to each SIP account created."
+#~ msgstr "Stun参数将应用于每一个注册的SIP帐户"
+
+#~ msgid "Enable it if you are behind a firewall"
+#~ msgstr "当使用防火墙时,启用该项"
+
+#~ msgid "Format: name.server:port"
+#~ msgstr "格式:name.server:port"
+
+#~ msgid "Port:"
+#~ msgstr "端口:"
+
+#~ msgid "Recordings folder"
+#~ msgstr "记录文件夹(R)"
+
+#~ msgid "General Settings"
+#~ msgstr "常用配置"
+
+#~ msgid "Audio Settings"
+#~ msgstr "音频配置"
+
+#~ msgid "URL Passing"
+#~ msgstr "传输URL"
+
+#~ msgid "Phone Number Rewriting"
+#~ msgstr "重设电话号码"
+
+#~ msgid "_Prefix dialed numbers with:"
+#~ msgstr "号码前缀:"
+
+#~ msgid "Accept"
+#~ msgstr "接受"
+
+#~ msgid "Refuse"
+#~ msgstr "拒绝"
+
+#~ msgid "Ignore"
+#~ msgstr "忽略"
+
+#~ msgid "<small>Missed call</small>"
+#~ msgstr "<small>未接电话</small>"
+
+#~ msgid "<small>Duration:</small> %s"
+#~ msgstr "<small>时长:</small> %s"
+
+#~ msgid "Fields"
+#~ msgstr "字段"
+
+#~ msgid "_History size limit"
+#~ msgstr "历史记录上限(H)"
+
+#~ msgid ""
+#~ "SFLphone can run custom commands if incoming calls come with an URL "
+#~ "attached.\n"
+#~ "In this case, %s will be replaced with the passed URL."
+#~ msgstr ""
+#~ "当来电有附加的URL时,SFLphone可运行客户命令.\n"
+#~ "在此情况下,传输的URL会被替换成%s."
+
+#~ msgid "Search history"
+#~ msgstr "查找历史记录"
+
+#~ msgid "Search contact"
+#~ msgstr "查找联系人(S)"
+
+#~ msgid "Registered to %s (%s)"
+#~ msgstr "注册到 %s (%s)"
+
+#~ msgid "%s account- %s             %s"
+#~ msgstr "%s 帐户- %s             %s"
+
+#~ msgid "Books"
+#~ msgstr "钩键"
+
+#~ msgid "_Enable"
+#~ msgstr "启用(E)"
+
+#~ msgid "_Notify voice mails"
+#~ msgstr "通知语音邮件(N)"
+
+#~ msgid "_Start hidden"
+#~ msgstr "启动时隐藏(S)"
+
+#~ msgid "_Maximum number of calls"
+#~ msgstr "最大拨号数(M)"
+
+#~ msgid "_Control running applications volume"
+#~ msgstr "控制正在运行的应用程序的音量(C)"
+
+#~ msgid "Account previously setup"
+#~ msgstr "帐户以前设置"
+
+#~ msgid "URL argument"
+#~ msgstr "URL参数"
+
+#~ msgid "_SIP protocol"
+#~ msgstr "SIP 协议(S)"
+
+#~ msgid "_SIP Header: "
+#~ msgstr "SIP消息头(S):"
+
+#~ msgid "_IAX2 protocol"
+#~ msgstr "IAX2 协议(I)"
+
+#~ msgid "Search"
+#~ msgstr "查找"
+
+#~ msgid "_Enabled"
+#~ msgstr "启用(E)"
+
+#~ msgid "%s account- %s"
+#~ msgstr "%s 帐户- %s"
+
+#~ msgid "Noise reduction"
+#~ msgstr "降噪"
+
+#~ msgid "_Destination folder"
+#~ msgstr "目标文件夹(D)"
+
+#~ msgid "_Account Assistant"
+#~ msgstr "帐户向导(A)"
+
+#~ msgid "Setup Accounts"
+#~ msgstr "设定帐户"
+
+#~ msgid "Search Parameters"
+#~ msgstr "查找相关参数"
+
+#~ msgid "Maximum result number for a request: "
+#~ msgstr "最大拨号数"
+
+#~ msgid "Search for and display: "
+#~ msgstr "查找并显示:"
+
+#~ msgid "_STUN Server"
+#~ msgstr "STUN服务器(S)"
diff --git a/sflphone-client-kde/po/zh_HK/CMakeLists.txt b/sflphone-client-kde/po/zh_HK/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..90a1ffa2411968a18799be5759069b0472534204
--- /dev/null
+++ b/sflphone-client-kde/po/zh_HK/CMakeLists.txt
@@ -0,0 +1,2 @@
+file(GLOB _po_files *.po)
+GETTEXT_PROCESS_PO_FILES(zh_HK ALL INSTALL_DESTINATION ${LOCALE_INSTALL_DIR} ${_po_files} )
diff --git a/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po b/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po
new file mode 100644
index 0000000000000000000000000000000000000000..5b034406b89b4f8e16d7e3e3279ccb5d5fe9aaea
--- /dev/null
+++ b/sflphone-client-kde/po/zh_HK/sflphone-client-kde.po
@@ -0,0 +1,1540 @@
+# Chinese translation of SFLphone.
+# Copyright (C) 2008 The Free Software Foundation, Inc.
+# This file is distributed under the GNU General Public License Version 3.
+# 
+# Yun Liu <yun.liu@savoirfairelinux.com>, 2008.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: SFLphone 0.9.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-07-23 10:14-0400\n"
+"PO-Revision-Date: 2008-10-28 14:15\n"
+"Last-Translator: Yun Liu <yun.liu@savoirfairelinux.com>\n"
+"Language-Team: SavoirFaireLinux Inc <sflphoneteam@savoirfairelinux.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1;\n"
+
+#: ../sflphone-client-kde/src/Account.cpp:34
+#: ../sflphone-client-gnome/src/accountlist.c:175
+msgid "Registered"
+msgstr "已註冊"
+
+#: ../sflphone-client-kde/src/Account.cpp:36
+#: ../sflphone-client-gnome/src/accountlist.c:178
+msgid "Not Registered"
+msgstr "未註冊"
+
+#: ../sflphone-client-kde/src/Account.cpp:38
+#: ../sflphone-client-gnome/src/accountlist.c:181
+msgid "Trying..."
+msgstr "正在連接..."
+
+#: ../sflphone-client-kde/src/Account.cpp:40
+#: ../sflphone-client-gnome/src/accountlist.c:184
+#: ../sflphone-client-gnome/src/sflnotify.c:131
+#: ../sflphone-client-gnome/src/sflnotify.c:148
+msgid "Error"
+msgstr "註冊失敗"
+
+#: ../sflphone-client-kde/src/Account.cpp:42
+#: ../sflphone-client-gnome/src/accountlist.c:187
+#, fuzzy
+msgid "Authentication Failed"
+msgstr "認證錯誤"
+
+#: ../sflphone-client-kde/src/Account.cpp:44
+#: ../sflphone-client-gnome/src/accountlist.c:190
+msgid "Network unreachable"
+msgstr "網路連線失敗"
+
+#: ../sflphone-client-kde/src/Account.cpp:46
+#: ../sflphone-client-gnome/src/accountlist.c:193
+msgid "Host unreachable"
+msgstr "伺服器連線失敗"
+
+#: ../sflphone-client-kde/src/Account.cpp:48
+#: ../sflphone-client-gnome/src/accountlist.c:196
+msgid "Stun configuration error"
+msgstr "Stun配置有誤"
+
+#: ../sflphone-client-kde/src/Account.cpp:50
+#: ../sflphone-client-gnome/src/accountlist.c:199
+msgid "Stun server invalid"
+msgstr "Stun伺服器無效"
+
+#: ../sflphone-client-kde/src/Account.cpp:51
+#: ../sflphone-client-gnome/src/accountlist.c:202
+msgid "Invalid"
+msgstr "無效"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:166
+#: ../sflphone-client-kde/src/AccountWizard.cpp:281
+#: ../sflphone-client-kde/src/SFLPhone.cpp:121
+msgid "Account creation wizard"
+msgstr "帳戶創建向導"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:202
+#: ../sflphone-client-kde/src/AccountWizard.cpp:220
+#: ../sflphone-client-kde/src/AccountWizard.cpp:564
+#: ../sflphone-client-gnome/src/assistant.c:68
+#, c-format
+msgid "This assistant is now finished."
+msgstr "配置完成."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:214
+msgid "Creation of account has failed for the reason"
+msgstr ""
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:258
+#: ../sflphone-client-kde/src/AccountWizard.cpp:443
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:403
+#: ../sflphone-client-gnome/src/assistant.c:72
+msgid "Alias"
+msgstr "別稱"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:259
+#: ../sflphone-client-kde/src/AccountWizard.cpp:444
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:410
+#: ../sflphone-client-gnome/src/assistant.c:75
+msgid "Server"
+msgstr "伺服器"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:260
+#: ../sflphone-client-kde/src/AccountWizard.cpp:445
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:411
+#: ../sflphone-client-gnome/src/assistant.c:78
+msgid "Username"
+msgstr "使用者名稱"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:261
+#: ../sflphone-client-kde/src/AccountWizard.cpp:446
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:412
+msgid "Password"
+msgstr "密碼"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:262
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:404
+#: ../sflphone-client-gnome/src/config/configwindow.c:418
+msgid "Protocol"
+msgstr "協議"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:263
+#: ../sflphone-client-kde/src/AccountWizard.cpp:447
+msgid "Voicemail number"
+msgstr "語音郵箱"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:282
+#: ../sflphone-client-gnome/src/assistant.c:216
+msgid "Welcome to the Account creation wizard of SFLphone!"
+msgstr "歡迎使用SFLphone帳戶創建嚮導!"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:284
+#: ../sflphone-client-gnome/src/assistant.c:217
+msgid "This installation wizard will help you configure an account."
+msgstr "安裝向導將幫助您配置帳戶"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:312
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Account"
+msgstr "帳戶"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:313
+#: ../sflphone-client-gnome/src/assistant.c:249
+msgid "Please select one of the following options"
+msgstr "請選擇以下選項中的一個"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:315
+#: ../sflphone-client-gnome/src/assistant.c:251
+msgid "Create a free SIP/IAX2 account on sflphone.org"
+msgstr "在sflphone.org上創建免費的SIP/IAX2帳戶"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:316
+#: ../sflphone-client-gnome/src/assistant.c:253
+msgid "Register an existing SIP or IAX2 account"
+msgstr "註冊已存在的SIP或IAX2帳戶"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:355
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "VoIP Protocols"
+msgstr "VoIP協議"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:356
+#: ../sflphone-client-gnome/src/assistant.c:231
+msgid "Select an account type"
+msgstr "選擇帳戶類型"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:358
+#: ../sflphone-client-gnome/src/assistant.c:233
+msgid "SIP (Session Initiation Protocol)"
+msgstr "SIP(會話初始化協議)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:359
+#: ../sflphone-client-gnome/src/assistant.c:235
+msgid "IAX2 (InterAsterix Exchange)"
+msgstr "IAX2(Asterisk內部交換協議)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:398
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "Optional email address"
+msgstr "可選郵件地址"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:399
+#: ../sflphone-client-gnome/src/assistant.c:339
+msgid "This email address will be used to send your voicemail messages."
+msgstr "這個郵件地址將被用來發送您的語音"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:401
+msgid "Email address"
+msgstr "郵件地址"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:435
+#: ../sflphone-client-gnome/src/assistant.c:266
+msgid "SIP account settings"
+msgstr "SIP帳戶配置"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:439
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "IAX2 account settings"
+msgstr "IAX2帳戶配置"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:441
+#: ../sflphone-client-gnome/src/assistant.c:266
+#: ../sflphone-client-gnome/src/assistant.c:362
+msgid "Please fill the following information"
+msgstr "請填寫如下信息"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:526
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:856
+msgid "Network Address Translation (NAT)"
+msgstr "网络地址解析(NAT)"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:527
+#: ../sflphone-client-gnome/src/assistant.c:435
+#: ../sflphone-client-gnome/src/config/configwindow.c:536
+msgid "You should probably enable this if you are behind a firewall."
+msgstr "如果你使用網路防火牆,你很有可能需要設定該項."
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:529
+msgid "Enable STUN"
+msgstr "啟用STUN"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:530
+msgid "Stun Server"
+msgstr "STUN伺服器"
+
+#: ../sflphone-client-kde/src/AccountWizard.cpp:565
+msgid ""
+"After checking the settings you chose, click \"Finish\" to create the "
+"account."
+msgstr "當您檢查完選定的設置,請點擊\"結束\"來創建帳戶"
+
+#: ../sflphone-client-kde/src/ActionSetAccountFirst.cpp:26
+msgid "Default account"
+msgstr "默認帳戶"
+
+#: ../sflphone-client-kde/src/Call.cpp:119
+#: ../sflphone-client-gnome/src/contacts/calltree.c:322
+msgid "Transfer to : "
+msgstr "轉給:"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:89
+#: ../sflphone-client-gnome/src/actions.c:816
+msgid "Codec"
+msgstr "編碼"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:93
+#: ../sflphone-client-gnome/src/config/audioconf.c:581
+msgid "Frequency"
+msgstr "顰律"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:97
+#: ../sflphone-client-gnome/src/config/audioconf.c:586
+msgid "Bitrate"
+msgstr "比率"
+
+#: ../sflphone-client-kde/src/CodecListModel.cpp:101
+#: ../sflphone-client-gnome/src/config/audioconf.c:591
+msgid "Bandwidth"
+msgstr "顰寬"
+
+#: ../sflphone-client-kde/src/main.cpp:38
+msgid "SFLphone KDE Client"
+msgstr "SFLphone KDE客戶端"
+
+#: ../sflphone-client-kde/src/main.cpp:42
+msgid "(C) 2009 Savoir-faire Linux"
+msgstr "(C) 2009 Savoir-faire Linux"
+
+#: ../sflphone-client-kde/src/main.cpp:46
+msgid "Jérémy Quentin"
+msgstr "Jérémy Quentin"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "NAME OF TRANSLATORS"
+msgid "Your names"
+msgstr "Yun Liu"
+
+#: ../sflphone-client-kde/src/main.cpp:47
+msgctxt "EMAIL OF TRANSLATORS"
+msgid "Your emails"
+msgstr "yunliu2000@gmail.com"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:53
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/statusicon.c:126
+msgid "SFLphone"
+msgstr "SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:100
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1020
+msgid "Main screen"
+msgstr "主屏幕"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:101
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1025
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:165
+msgid "Call history"
+msgstr "呼叫記錄"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:102
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1030
+#: ../sflphone-client-gnome/src/toolbar.c:243
+#: ../sflphone-client-gnome/src/toolbar.c:245
+msgid "Address book"
+msgstr "地址簿"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:115
+msgid "Configure SFLphone"
+msgstr "配置SFLphone"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:117
+msgid "Display volume controls"
+msgstr "顯示音量控制"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:118
+msgid "Display dialpad"
+msgstr "顯示撥號鍵盤"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:227
+msgid "Incoming call"
+msgstr "來電"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "You have an incoming call from"
+msgstr "您有一個電話,來自於"
+
+#: ../sflphone-client-kde/src/SFLPhone.cpp:228
+msgid "Click to accept or refuse it."
+msgstr "請點擊接聽或拒絕"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:656
+msgid "Address book loading..."
+msgstr "載入地址簿......"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:840
+#: ../sflphone-client-gnome/src/actions.c:89
+msgid "No registered accounts"
+msgstr "沒有已註冊帳戶"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:844
+#: ../sflphone-client-gnome/src/actions.c:83
+#: ../sflphone-client-gnome/src/actions.c:813
+msgid "Using account"
+msgstr "使用賬戶"
+
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1045
+#: ../sflphone-client-kde/src/SFLPhoneView.cpp:1109
+msgid "Edit before call"
+msgstr "呼叫前進行編輯"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:40
+#: ../sflphone-client-gnome/src/toolbar.c:167
+#: ../sflphone-client-gnome/src/toolbar.c:169
+msgid "New call"
+msgstr "新電話"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:41
+#: ../sflphone-client-kde/src/sflphone_const.h:46
+#: ../sflphone-client-gnome/src/toolbar.c:186
+#: ../sflphone-client-gnome/src/toolbar.c:188
+msgid "Hang up"
+msgstr "放電話"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:42
+#: ../sflphone-client-gnome/src/toolbar.c:207
+#: ../sflphone-client-gnome/src/toolbar.c:209
+msgid "Hold on"
+msgstr "呼叫保持"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:43
+#: ../sflphone-client-gnome/src/toolbar.c:220
+#: ../sflphone-client-gnome/src/toolbar.c:222
+msgid "Transfer"
+msgstr "轉接"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:44
+#: ../sflphone-client-gnome/src/toolbar.c:263
+msgid "Record"
+msgstr "記錄"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:45
+#: ../sflphone-client-gnome/src/toolbar.c:176
+#: ../sflphone-client-gnome/src/toolbar.c:178
+msgid "Pick up"
+msgstr "接電話"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:47
+#: ../sflphone-client-gnome/src/toolbar.c:196
+#: ../sflphone-client-gnome/src/toolbar.c:198
+msgid "Hold off"
+msgstr "恢復通話"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:48
+msgid "Give up transfer"
+msgstr "取消轉接"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:49
+msgid "Call back"
+msgstr "回叫"
+
+#: ../sflphone-client-kde/src/sflphone_const.h:50
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:413
+#: ../sflphone-client-gnome/src/toolbar.c:52
+#: ../sflphone-client-gnome/src/toolbar.c:251
+#: ../sflphone-client-gnome/src/toolbar.c:255
+msgid "Voicemail"
+msgstr "語音郵件"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:48
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:91
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:306
+#: ../sflphone-client-gnome/src/config/configwindow.c:722
+#: ../sflphone-client-gnome/src/config/configwindow.c:791
+msgid "General"
+msgstr "常用配置"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:49
+#, fuzzy
+msgid "Display"
+msgstr "顯示"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:50
+#: ../sflphone-client-gnome/src/config/configwindow.c:833
+msgid "Accounts"
+msgstr "帳戶"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:51
+#: ../sflphone-client-gnome/src/config/configwindow.c:786
+#, fuzzy
+msgid "Audio"
+msgstr "音頻"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:52
+#: ../sflphone-client-gnome/src/config/configwindow.c:801
+msgid "Address Book"
+msgstr "地址簿"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:53
+#: ../sflphone-client-gnome/src/config/configwindow.c:796
+msgid "Recordings"
+msgstr "記錄"
+
+#: ../sflphone-client-kde/src/conf/ConfigurationDialog.cpp:54
+#: ../sflphone-client-gnome/src/config/configwindow.c:806
+msgid "Hooks"
+msgstr "鉤鍵"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:368
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows. Enable/disable them by checking/unchecking "
+"them on the left of the item. Add or remove some with \"Plus\" and \"Sub\" "
+"buttons. Edit the selected account with the form on the right."
+msgstr ""
+"在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭"
+"頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶,取消"
+"選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。點擊\"編輯\"按鈕"
+"可以改變賬戶的設置。"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:372
+msgid "Remove the selected account"
+msgstr "刪除所選賬戶"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:375
+msgid ""
+"This button will remove the selected account in the list below. Be sure you "
+"really don't need it anymore. If you think you might use it again later, "
+"just uncheck it."
+msgstr ""
+"該按鈕會刪除列表中被選定的賬戶。請確認你的操作。如果你希望繼續使用某個賬戶,"
+"請取消對該賬戶的選擇"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:380
+msgid "Remove"
+msgstr "刪除"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:382
+msgid "Add a new account"
+msgstr "增加新帳戶"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:385
+msgid ""
+"This button enables you to initialize a new account. You will then be able "
+"to edit it using the form on the right."
+msgstr ""
+"通過該按鈕可以創建一個新賬戶。添加該賬戶之後你還可以通過編輯按鈕來修改設置。"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:387
+msgid "Add"
+msgstr "添加"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:389
+msgid "Get this account down"
+msgstr "將該賬戶向下移動"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:392
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:399
+msgid ""
+"By default, when you place a call, sflphone will use the first account in "
+"this list which is \"registered\". Change the order of the accounts using "
+"the \"Up\" and \"Down\" arrows."
+msgstr ""
+"在默認情況下,當你打電話時,sflphone會使用列表當中第一個已註冊的帳戶。使用箭"
+"頭\"上\"和\"下\"可以改變賬戶的順序。選擇賬戶名稱左邊的方框可以啟用帳戶,取消"
+"選擇則會禁用該賬戶。通過\"加\"\"減\"按鈕可以添加或刪除賬戶。"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:394
+msgid "Down"
+msgstr "下"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:396
+msgid "Get this account up"
+msgstr "把該賬戶向上移動"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:401
+msgid "Up"
+msgstr "上"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:402
+msgid "Apply"
+msgstr "套用"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:407
+msgid "SIP"
+msgstr "SIP"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:408
+msgid "IAX"
+msgstr "IAX"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:414
+#: ../sflphone-client-gnome/src/config/configwindow.c:425
+msgid "Status"
+msgstr "狀態"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:416
+msgid "Basic"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:417
+#, fuzzy
+msgid "Registration expire"
+msgstr "已註冊"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:418
+msgid "Conform to RFC 3263"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:419
+msgid "Advanced"
+msgstr ""
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:421
+#: ../sflphone-client-gnome/src/config/configwindow.c:528
+msgid "Stun parameters will be applied on each SIP account created."
+msgstr "STUN參數將應用於每一個註冊的SIP帳戶"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:422
+msgid "Enable Stun"
+msgstr "啟用STUN"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:424
+#: ../sflphone-client-gnome/src/config/configwindow.c:544
+msgid "Format : name.server:port"
+msgstr "格式 : 名稱.服務器:端口"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaccountsbase.h:426
+msgid "choose Stun server (example : stunserver.org)"
+msgstr "選擇STUN服務器(例如:stunserver.org)"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:154
+msgid "Enable address book"
+msgstr "啟用地址簿"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:155
+msgid "Maximum results"
+msgstr "結果最大值"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:156
+msgid "Display photo if available"
+msgstr "如果可以則顯示聯繫人照片"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:157
+msgid "Display phone numbers of these types :"
+msgstr "顯示這些格式的電話號碼"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:158
+msgid "Work"
+msgstr "單位電話"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:159
+msgid "Mobile"
+msgstr "移動電話"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaddressbookbase.h:160
+msgid "Home"
+msgstr "家庭電話"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:225
+msgid "Sound manager"
+msgstr "聲音管理器"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:228
+msgid "ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:229
+msgid "PulseAudio"
+msgstr "PulseAudio"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:231
+msgid "Enable ringtones"
+msgstr "啟動鈴聲"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:232
+#: ../sflphone-client-gnome/src/config/audioconf.c:812
+msgid "Codecs"
+msgstr "編碼"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:233
+#: ../sflphone-client-gnome/src/config/audioconf.c:795
+msgid "ALSA settings"
+msgstr "ALSA 配置"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:234
+#: ../sflphone-client-gnome/src/config/audioconf.c:662
+msgid "ALSA plugin"
+msgstr "ALSA插件"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:235
+#: ../sflphone-client-gnome/src/config/audioconf.c:706
+msgid "Input"
+msgstr "輸入"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:236
+#: ../sflphone-client-gnome/src/config/audioconf.c:684
+msgid "Output"
+msgstr "輸出"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:237
+msgid "PulseAudio settings"
+msgstr "PulseAudio 配置"
+
+#: ../sflphone-client-kde/build/src/ui_dlgaudiobase.h:238
+msgid "Mute other applications during a call"
+msgstr "當有來電時靜音其它應用程序"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:121
+msgid "Enable notifications"
+msgstr "啟動提示"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:122
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:126
+msgid "On incoming calls"
+msgstr "有新來電"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:123
+msgid "On messages"
+msgstr "有新消息"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:124
+msgid "Show main window"
+msgstr "顯示主窗口"
+
+#: ../sflphone-client-kde/build/src/ui_dlgdisplaybase.h:125
+msgid "On start"
+msgstr "正在啟動"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:166
+#, fuzzy
+msgid "Keep my history for at least"
+msgstr "保存呼叫記錄數至少"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:167
+#: ../sflphone-client-gnome/src/config/configwindow.c:643
+#, fuzzy
+msgid "days"
+msgstr "天"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:168
+msgid "Clear history"
+msgstr "清空曆史記錄"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:169
+msgid "Connection"
+msgstr "連接"
+
+#: ../sflphone-client-kde/build/src/ui_dlggeneralbase.h:170
+#: ../sflphone-client-gnome/src/config/configwindow.c:664
+msgid "SIP Port"
+msgstr "SIP端口"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:180
+#: ../sflphone-client-gnome/src/config/hooks-config.c:130
+msgid "URL Argument"
+msgstr "URL參數"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:181
+#: ../sflphone-client-gnome/src/config/hooks-config.c:135
+msgid "Custom commands on incoming calls with URL"
+msgstr "定制對帶有URL的來電的處理"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:182
+msgid "Trigger on specific SIP header"
+msgstr "激活指定的SIP頭"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:183
+msgid "Trigger on IAX2 URL"
+msgstr "激活IAX2 URL"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:184
+msgid "Command to run"
+msgstr "要運行的命令"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:185
+#: ../sflphone-client-gnome/src/config/hooks-config.c:138
+#, c-format
+msgid "%s will be replaced with the passed URL."
+msgstr "傳輸的URL會被替換成%s."
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:186
+#: ../sflphone-client-gnome/src/config/hooks-config.c:165
+msgid "Phone number rewriting"
+msgstr "重設電話號碼"
+
+#: ../sflphone-client-kde/build/src/ui_dlghooksbase.h:187
+msgid "Prefix dialed numbers with"
+msgstr "號碼前綴"
+
+#: ../sflphone-client-kde/build/src/ui_dlgrecordbase.h:92
+#: ../sflphone-client-gnome/src/config/configwindow.c:726
+msgid "Destination folder"
+msgstr "目標文件夾"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:307
+msgid "Attention:number of results exceeds max displayed."
+msgstr "注意:結果超過可顯示的最大值"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:309
+#: ../sflphone-client-gnome/src/sliders.c:163
+msgid "Mic volume"
+msgstr "話筒音量"
+
+#: ../sflphone-client-kde/build/src/ui_SFLPhoneView_base.h:313
+#: ../sflphone-client-gnome/src/sliders.c:161
+msgid "Speakers volume"
+msgstr "揚聲器音量"
+
+#: ../sflphone-client-gnome/src/actions.c:54
+#: ../sflphone-client-gnome/src/sflnotify.c:94
+#, c-format
+msgid "%d voice mail"
+msgid_plural "%d voice mails"
+msgstr[0] "%d 個語音郵件"
+msgstr[1] "%d 個語音郵件"
+
+#: ../sflphone-client-gnome/src/actions.c:234
+msgid ""
+"Unable to connect to the SFLphone server.\n"
+"Make sure the daemon is running."
+msgstr ""
+"連接SFLphone伺服器失敗.\n"
+"請核查daemon是否正在運行."
+
+#: ../sflphone-client-gnome/src/actions.c:809
+#, c-format
+msgid "IP call - %s"
+msgstr "IP電話- %s"
+
+#: ../sflphone-client-gnome/src/actions.c:908
+#, c-format
+msgid ""
+"<b>Error: No audio codecs found.\n"
+"\n"
+"</b> SFL audio codecs have to be placed in <i>%s</i> or in the <b>.sflphone</"
+"b> directory in your home( <i>%s</i> )"
+msgstr ""
+"<b>錯誤:無法找到音訊編碼檔案.\n"
+"\n"
+"</b> SFL聲音編碼檔案應該位于<i>%s</i> 或者位于主目錄( <i>%s</i> )的<b>."
+"sflphone</b>目錄下"
+
+#: ../sflphone-client-gnome/src/assistant.c:70
+msgid ""
+"You can at any time check your registration state or modify your accounts "
+"parameters in the Options/Accounts window."
+msgstr "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息."
+
+#: ../sflphone-client-gnome/src/assistant.c:190
+msgid "SFLphone account creation wizard"
+msgstr "SFLphone賬戶創建嚮導"
+
+#: ../sflphone-client-gnome/src/assistant.c:274
+#: ../sflphone-client-gnome/src/assistant.c:370
+#: ../sflphone-client-gnome/src/config/accountwindow.c:156
+msgid "_Alias"
+msgstr "別稱(A)"
+
+#: ../sflphone-client-gnome/src/assistant.c:282
+#: ../sflphone-client-gnome/src/assistant.c:378
+#: ../sflphone-client-gnome/src/config/accountwindow.c:192
+msgid "_Host name"
+msgstr "主机名稱(H)"
+
+#: ../sflphone-client-gnome/src/assistant.c:290
+#: ../sflphone-client-gnome/src/assistant.c:386
+#: ../sflphone-client-gnome/src/config/accountwindow.c:206
+msgid "_User name"
+msgstr "使用者名稱(U)"
+
+#: ../sflphone-client-gnome/src/assistant.c:306
+#: ../sflphone-client-gnome/src/assistant.c:401
+#: ../sflphone-client-gnome/src/config/accountwindow.c:221
+msgid "_Password"
+msgstr "密碼(P)"
+
+#: ../sflphone-client-gnome/src/assistant.c:324
+#: ../sflphone-client-gnome/src/assistant.c:417
+#: ../sflphone-client-gnome/src/config/accountwindow.c:237
+msgid "_Voicemail number"
+msgstr "語音郵箱(V)"
+
+#: ../sflphone-client-gnome/src/assistant.c:347
+msgid "_Email address"
+msgstr "郵件地址(E)"
+
+#: ../sflphone-client-gnome/src/assistant.c:444
+#: ../sflphone-client-gnome/src/config/configwindow.c:532
+msgid "E_nable STUN"
+msgstr "啟用STUN(n)"
+
+#: ../sflphone-client-gnome/src/assistant.c:451
+msgid "_STUN server"
+msgstr "STUN伺服器(S)"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Account Registration"
+msgstr "帳戶註冊"
+
+#: ../sflphone-client-gnome/src/assistant.c:465
+msgid "Congratulations!"
+msgstr "恭喜!"
+
+#: ../sflphone-client-gnome/src/errors.c:29
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening playback device"
+msgstr ""
+"ALSA提示\n"
+"\n"
+"打開回放設備時出錯"
+
+#: ../sflphone-client-gnome/src/errors.c:32
+msgid ""
+"ALSA notification\n"
+"\n"
+"Error while opening capture device"
+msgstr ""
+"ALSA提示\n"
+"\n"
+"打開采集設備時出錯"
+
+#: ../sflphone-client-gnome/src/errors.c:35
+msgid ""
+"Pulseaudio notification\n"
+"\n"
+"Pulseaudio is not running"
+msgstr ""
+"Pulseaudio提示\n"
+"\n"
+"Pulseaudio未運行"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:70
+msgid "There is one call in progress."
+msgstr "有一個電話正在處理中."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:74
+msgid "There are calls in progress."
+msgstr "有電話正在處理中."
+
+#: ../sflphone-client-gnome/src/mainwindow.c:83
+msgid "Do you still want to quit?"
+msgstr "確認要退出?"
+
+#: ../sflphone-client-gnome/src/mainwindow.c:282
+msgid "SFLphone Error"
+msgstr "SFLphone 出錯"
+
+#: ../sflphone-client-gnome/src/menus.c:134
+msgid "SFLphone is a VoIP client compatible with SIP and IAX2 protocols."
+msgstr "SFLphone是一個VoIP客戶端,它兼容SIP和IAX2协议."
+
+#: ../sflphone-client-gnome/src/menus.c:137
+msgid "About SFLphone"
+msgstr "有關SFLphone"
+
+#: ../sflphone-client-gnome/src/menus.c:161
+msgid "_Help"
+msgstr "幫助(H)"
+
+#: ../sflphone-client-gnome/src/menus.c:296
+#: ../sflphone-client-gnome/src/menus.c:953
+msgid "_New call"
+msgstr "新電話(N)"
+
+#: ../sflphone-client-gnome/src/menus.c:308
+#: ../sflphone-client-gnome/src/menus.c:785
+msgid "_Pick up"
+msgstr "撥出(P)"
+
+#: ../sflphone-client-gnome/src/menus.c:318
+#: ../sflphone-client-gnome/src/menus.c:797
+msgid "_Hang up"
+msgstr "放下(H)"
+
+#: ../sflphone-client-gnome/src/menus.c:328
+#: ../sflphone-client-gnome/src/menus.c:809
+msgid "On _Hold"
+msgstr "待机"
+
+#: ../sflphone-client-gnome/src/menus.c:340
+#: ../sflphone-client-gnome/src/menus.c:821
+msgid "_Record"
+msgstr "記錄(R)"
+
+#: ../sflphone-client-gnome/src/menus.c:354
+msgid "_Account creation wizard"
+msgstr "帳戶創建向導(A)"
+
+#: ../sflphone-client-gnome/src/menus.c:384
+msgid "_Call"
+msgstr "電話"
+
+#: ../sflphone-client-gnome/src/menus.c:552
+msgid "Clear _history"
+msgstr "清空曆史記錄(C)"
+
+#: ../sflphone-client-gnome/src/menus.c:564
+msgid "_Accounts"
+msgstr "帳戶(A)"
+
+#: ../sflphone-client-gnome/src/menus.c:579
+msgid "_Edit"
+msgstr "編輯(E)"
+
+#: ../sflphone-client-gnome/src/menus.c:631
+msgid "_Dialpad"
+msgstr "撥號面板"
+
+#: ../sflphone-client-gnome/src/menus.c:643
+msgid "_Volume controls"
+msgstr "音量控制(V)"
+
+#: ../sflphone-client-gnome/src/menus.c:661
+msgid "_View"
+msgstr "查看(V)"
+
+#: ../sflphone-client-gnome/src/menus.c:881
+msgid "_Call back"
+msgstr "回叫(C)"
+
+#: ../sflphone-client-gnome/src/menus.c:1061
+msgid "Edit phone number"
+msgstr "編輯電話號碼"
+
+#: ../sflphone-client-gnome/src/menus.c:1072
+msgid "Edit the phone number before making a call"
+msgstr "撥出電話前編輯電話號碼"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:71
+#: ../sflphone-client-gnome/src/sflnotify.c:91
+#, c-format
+msgid "%s account : %s"
+msgstr "%s 帳戶 : %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:75
+#, c-format
+msgid "<i>From</i> %s"
+msgstr "<i>撥入方</i> %s"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:111
+#, c-format
+msgid "Calling with %s account <i>%s</i>"
+msgstr "使用%s帳戶<i>%s</i>呼叫"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:115
+msgid "Current account"
+msgstr "當前帳戶"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:130
+msgid "You have no accounts set up"
+msgstr "你沒有設置任何賬戶"
+
+#: ../sflphone-client-gnome/src/sflnotify.c:147
+msgid "You have no registered accounts"
+msgstr "未發現已註冊帳戶"
+
+#: ../sflphone-client-gnome/src/statusicon.c:91
+msgid "_Show main window"
+msgstr "顯示主窗口(S)"
+
+#: ../sflphone-client-gnome/src/statusicon.c:127
+#, c-format
+msgid "%i account configured"
+msgid_plural "%i accounts configured"
+msgstr[0] "已配置了%i個賬戶"
+msgstr[1] "已配置了%i個賬戶"
+
+#: ../sflphone-client-gnome/src/toolbar.c:232
+#: ../sflphone-client-gnome/src/toolbar.c:234
+msgid "History"
+msgstr "歷史"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:116
+msgid "Account settings"
+msgstr "帳戶設置"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:150
+msgid "_Enable this account"
+msgstr "啟用該賬戶(E)"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:164
+msgid "_Protocol"
+msgstr "協議(P)"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:182
+msgid "Unknown"
+msgstr "未知"
+
+#: ../sflphone-client-gnome/src/config/accountwindow.c:200
+msgid "_Resolve host name only once for the session"
+msgstr ""
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:312
+msgid "_Use Evolution address books"
+msgstr "使用Evolution地址薄(U)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:319
+msgid "Download limit :"
+msgstr "下載上限:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:327
+msgid "cards"
+msgstr "卡"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:333
+msgid "_Display contact photo if available"
+msgstr "如果可以則顯示聯繫人照片(D)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:341
+msgid "Fields from Evolution's address books"
+msgstr "使用Evolution地址薄中的如下字段:"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:345
+msgid "_Work"
+msgstr "單位電話(W)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:351
+msgid "_Home"
+msgstr "家庭電話(H)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:357
+msgid "_Mobile"
+msgstr "移動電話(M)"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:364
+msgid "Address Books"
+msgstr "地址簿"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:368
+msgid "Select which Evolution address books to use"
+msgstr "選擇使用如下Evolution地址薄"
+
+#: ../sflphone-client-gnome/src/config/addressbook-config.c:404
+#: ../sflphone-client-gnome/src/config/audioconf.c:576
+msgid "Name"
+msgstr "名稱"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:741
+msgid "_Voice Activity Detection"
+msgstr "聲音狀態檢測(V)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:751
+msgid "_Noise Reduction (Narrow-Band Companding)"
+msgstr "降噪處理-窄頻壓縮(N)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:780
+msgid "Sound Manager"
+msgstr "聲音管理器"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:783
+msgid "_Pulseaudio"
+msgstr "Pulseaudio"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:788
+msgid "_ALSA"
+msgstr "ALSA"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:835
+msgid "Ringtones"
+msgstr "鈴聲"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:841
+msgid "_Enable ringtones"
+msgstr "啟動鈴聲(E)"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:847
+msgid "Choose a ringtone"
+msgstr "鈴聲選擇"
+
+#: ../sflphone-client-gnome/src/config/audioconf.c:853
+msgid "Audio Files"
+msgstr "音訊檔案"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:589
+msgid "Desktop Notifications"
+msgstr "桌面提示"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:593
+msgid "_Enable notifications"
+msgstr "啟動提示(E)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:599
+msgid "Enable voicemail _notifications"
+msgstr "啟用語音郵箱提示(n)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:611
+msgid "System Tray Icon"
+msgstr "系統托盤圖標"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:614
+msgid "_Popup main window on incoming call"
+msgstr "來電話時彈出主視窗(P)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:619
+msgid "Ne_ver popup main window"
+msgstr "從不彈出主視窗(v)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:623
+msgid "Hide SFLphone window on _startup"
+msgstr "在啟動時隱藏SFLphone主窗口"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:629
+msgid "Calls History"
+msgstr "打電話歷史"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:632
+#, fuzzy
+msgid "_Keep my history for at least"
+msgstr "保留歷史記錄至少(K)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:647
+msgid "PulseAudio sound server"
+msgstr "PulseAudio聲音伺服器"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:650
+msgid "_Mute other applications during a call"
+msgstr "當有來電時靜音其它應用程序(c)"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:677
+msgid "Port"
+msgstr "端口"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:732
+msgid "Select a folder"
+msgstr "選擇文件夾"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:766
+msgid "Preferences"
+msgstr "屬性"
+
+#: ../sflphone-client-gnome/src/config/configwindow.c:845
+msgid "Configured Accounts"
+msgstr "已配置帳戶"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:141
+msgid "Trigger on specific _SIP header"
+msgstr "激活指定的SIP頭(S)"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:150
+msgid "Trigger on _IAX2 URL"
+msgstr "激活IAX2 URL(I)"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:155
+msgid "Command to _run"
+msgstr "運行命令(r)"
+
+#: ../sflphone-client-gnome/src/config/hooks-config.c:169
+msgid "_Prefix dialed numbers with"
+msgstr "號碼前綴(P)"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:56
+msgid "Search all"
+msgstr "查詢所有"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:57
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:70
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:82
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:94
+msgid "Click here to change the search type"
+msgstr "請點擊此處改變查詢方式"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:69
+msgid "Search by missed call"
+msgstr "從未接電話中查詢"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:81
+msgid "Search by incoming call"
+msgstr "從來電中查詢"
+
+#: ../sflphone-client-gnome/src/contacts/searchbar.c:93
+msgid "Search by outgoing call"
+msgstr "從撥出電話中查詢"
+
+#~ msgctxt "Config section"
+#~ msgid "Accounts"
+#~ msgstr "帳戶"
+
+#~ msgctxt "account state"
+#~ msgid "Registered"
+#~ msgstr "已註冊"
+
+#~ msgctxt "account state"
+#~ msgid "Not Registered"
+#~ msgstr "未註冊"
+
+#~ msgctxt "account state"
+#~ msgid "Trying..."
+#~ msgstr "正在連接..."
+
+#~ msgctxt "account state"
+#~ msgid "Error"
+#~ msgstr "註冊失敗"
+
+#~ msgctxt "account state"
+#~ msgid "Network unreachable"
+#~ msgstr "網路連線失敗"
+
+#~ msgctxt "account state"
+#~ msgid "Host unreachable"
+#~ msgstr "伺服器連線失敗"
+
+#~ msgctxt "account state"
+#~ msgid "Stun configuration error"
+#~ msgstr "STUN配置有誤"
+
+#~ msgctxt "account state"
+#~ msgid "Stun server invalid"
+#~ msgstr "STUN伺服器無效"
+
+#~ msgctxt "account state"
+#~ msgid "Invalid"
+#~ msgstr "無效"
+
+#~ msgctxt "Config section"
+#~ msgid "General"
+#~ msgstr "常用配置"
+
+#~ msgctxt "Config section"
+#~ msgid "Address Book"
+#~ msgstr "地址簿"
+
+#~ msgctxt "Config section"
+#~ msgid "Recordings"
+#~ msgstr "記錄"
+
+#~ msgctxt "Config section"
+#~ msgid "Hooks"
+#~ msgstr "鉤鍵"
+
+#~ msgid "User"
+#~ msgstr "使用者名稱"
+
+#~ msgid "Mailbox"
+#~ msgstr "語音郵件"
+
+#~ msgctxt "Action record a call"
+#~ msgid "Record"
+#~ msgstr "記錄"
+
+#~ msgid "%s - %s"
+#~ msgstr "%s - %s"
+
+#~ msgid "Bad authentification"
+#~ msgstr "認證錯誤"
+
+#~ msgid "%d voice mails"
+#~ msgstr "%d 個語音郵件"
+
+#~ msgid "No registered account"
+#~ msgstr "未發現已註冊帳戶"
+
+#~ msgid ""
+#~ "This assistant is now finished.\n"
+#~ "You can at any time check your registration state or modify your accounts "
+#~ "parameters in the Options/Accounts window.\n"
+#~ "\n"
+#~ "Alias :    %s\n"
+#~ "Server :   %s\n"
+#~ "Username : %s\n"
+#~ msgstr ""
+#~ "配置完成.\n"
+#~ "你可以隨時在 選項/帳戶 中查看註冊狀態或者修改帳戶信息\n"
+#~ "別稱:         %s\n"
+#~ "伺服器:       %s\n"
+#~ "使用者名稱:   %s\n"
+
+#~ msgid "SFLphone account configuration wizard"
+#~ msgstr "SFLphone 帳戶設置向導"
+
+#~ msgid "Welcome to SFLphone!"
+#~ msgstr "歡迎使用SFLphone!"
+
+#~ msgid "Select an account type:"
+#~ msgstr "選擇帳戶類型:"
+
+#~ msgid "Please select one of the following option:"
+#~ msgstr "請選擇以下選項中的一個:"
+
+#~ msgid "SIP account configuration"
+#~ msgstr "SIP帳戶配置"
+
+#~ msgid "Please fill the following information:"
+#~ msgstr "請填寫如下信息:"
+
+#~ msgid "Optional Email Address "
+#~ msgstr "可選郵件地址 "
+
+#~ msgid "This email address will be use to send your voicemail messages"
+#~ msgstr "這個郵件地址將被用來發送您的語音郵箱消息"
+
+#~ msgid "_Email"
+#~ msgstr "郵件(E)"
+
+#~ msgid "IAX2 account configuration"
+#~ msgstr "IAX2帳戶配置"
+
+#~ msgid "Network Address Translation"
+#~ msgstr "網路地址分析"
+
+#~ msgid "Edit phone"
+#~ msgstr "編輯電話"
+
+#~ msgid "%s account: %s"
+#~ msgstr "%s 帳戶: %s"
+
+#~ msgid "<i>From:</i> %s"
+#~ msgstr "<i>撥入方:</i> %s"
+
+#~ msgid "You haven't setup any accounts"
+#~ msgstr "你沒有設置任何帳戶"
+
+#~ msgid "SFLphone - %i accounts configured"
+#~ msgstr "SFLphone - %i 個帳戶已配置"
+
+#~ msgid "\"Voicemail\" <%s>"
+#~ msgstr "\"語音郵件\" <%s>"
+
+#~ msgid "Place a call"
+#~ msgstr "打電話"
+
+#~ msgid "Off Hold"
+#~ msgstr "恢复通話"
+
+#~ msgid "On Hold"
+#~ msgstr "待机"
+
+#~ msgid "Record a call"
+#~ msgstr "記錄通話"
+
+#~ msgid "Account Parameters"
+#~ msgstr "帳戶相關參數"
+
+#~ msgid "Download limit:"
+#~ msgstr "下載上限:"
+
+#~ msgid "_Business phone"
+#~ msgstr "商務電話(B)"
+
+#~ msgid "_Home phone"
+#~ msgstr "家庭電話(H)"
+
+#~ msgid "_Mobile phone"
+#~ msgstr "移動電話(M)"
+
+#~ msgid "Select which Evolution address books to use:"
+#~ msgstr "選擇使用如下Evolution地址薄:"
+
+#~ msgid "audio device index for output = %d"
+#~ msgstr "音訊設備輸出索引 = %d"
+
+#~ msgid "ALSA configuration"
+#~ msgstr "ALSA 配置"
+
+#~ msgid "Stun parameters will apply to each SIP account created."
+#~ msgstr "Stun參數將應用於每一個註冊的SIP帳戶"
+
+#~ msgid "Enable it if you are behind a firewall"
+#~ msgstr "當使用防火牆時,需要設定此項"
+
+#~ msgid "Format: name.server:port"
+#~ msgstr "格式:name.server:port"
+
+#~ msgid "Port:"
+#~ msgstr "端口:"
+
+#~ msgid "Recordings folder"
+#~ msgstr "記錄文件夾(R)"
+
+#~ msgid "General Settings"
+#~ msgstr "常用配置"
+
+#~ msgid "Audio Settings"
+#~ msgstr "音訊配置"
+
+#~ msgid "URL Passing"
+#~ msgstr "傳輸URL"
+
+#~ msgid "Command to _run: "
+#~ msgstr "運行命令(C):"
+
+#~ msgid "Phone Number Rewriting"
+#~ msgstr "重設電話號碼"
+
+#~ msgid "_Prefix dialed numbers with:"
+#~ msgstr "號碼前綴:"
+
+#~ msgid "Accept"
+#~ msgstr "接受"
+
+#~ msgid "Refuse"
+#~ msgstr "拒絕"
+
+#~ msgid "Ignore"
+#~ msgstr "忽略"
+
+#~ msgid "<small>Missed call</small>"
+#~ msgstr "<small>未接電話</small>"
+
+#~ msgid "<small>Duration:</small> %s"
+#~ msgstr "<small>時長:</small> %s"
+
+#~ msgid "Fields"
+#~ msgstr "字段"
+
+#~ msgid "_History size limit"
+#~ msgstr "歷史記錄上限(H)"
+
+#~ msgid ""
+#~ "SFLphone can run custom commands if incoming calls come with an URL "
+#~ "attached.\n"
+#~ "In this case, %s will be replaced with the passed URL."
+#~ msgstr ""
+#~ "當來電有附加的URL時,SFLphone可運行客戶命令.\n"
+#~ "在此情況下,傳輸的URL會被替換成%s."
+
+#~ msgid "Search history"
+#~ msgstr "搜尋歷史記錄"
+
+#~ msgid "Search contact"
+#~ msgstr "搜尋聯繫人(S)"
+
+#~ msgid "Registered to %s (%s)"
+#~ msgstr "註冊到 %s (%s)"
+
+#~ msgid "%s account- %s             %s"
+#~ msgstr "%s 帳戶- %s\t\t%s"
+
+#~ msgid "Books"
+#~ msgstr "鉤鍵"
+
+#~ msgid "_Enable"
+#~ msgstr "啟用(E)"
+
+#~ msgid "_Notify voice mails"
+#~ msgstr "語音郵件通知(N)"
+
+#~ msgid "_Start hidden"
+#~ msgstr "啟動時隱藏(S)"
+
+#~ msgid "_Maximum number of calls"
+#~ msgstr "最大打出電話數目(M)"
+
+#~ msgid "_Control running applications volume"
+#~ msgstr "控制正在運行中的應用程式的音量(C)"
+
+#~ msgid "Account previously setup"
+#~ msgstr "帳戶以前設定"
+
+#~ msgid "URL argument"
+#~ msgstr "URL參數"
+
+#~ msgid "_SIP protocol"
+#~ msgstr "SIP 協議(S)"
+
+#~ msgid "_SIP Header: "
+#~ msgstr "SIP消息頭(S):"
+
+#~ msgid "_IAX2 protocol"
+#~ msgstr "IAX2 協議(I)"
+
+#~ msgid "Search"
+#~ msgstr "搜尋"
+
+#~ msgid "_Enabled"
+#~ msgstr "啟用(E)"
+
+#~ msgid "%s account- %s"
+#~ msgstr "%s 帳戶- %s"
+
+#~ msgid "Noise reduction"
+#~ msgstr "降噪"
+
+#~ msgid "_Destination folder"
+#~ msgstr "目標文件夾(D)"
+
+#~ msgid "_Account Assistant"
+#~ msgstr "帳戶向導(A)"
+
+#~ msgid "Setup Accounts"
+#~ msgstr "設定帳戶"
+
+#~ msgid "Search Parameters"
+#~ msgstr "搜尋相關參數"
+
+#~ msgid "Maximum result number for a request: "
+#~ msgstr "最大打出電話數目"
+
+#~ msgid "Search for and display: "
+#~ msgstr "搜尋並顯示:"
+
+#~ msgid "_STUN Server"
+#~ msgstr "STUN伺服器(S)"
diff --git a/sflphone-common/Makefile.am b/sflphone-common/Makefile.am
index c5de2501fbb765d640061938f15ce4b259270a3a..22a5bfd63002c0aad55e909ccf821d0dd87b2988 100644
--- a/sflphone-common/Makefile.am
+++ b/sflphone-common/Makefile.am
@@ -24,13 +24,6 @@ doc:
 	@echo "D-Bus API HTML documentation has been generated in doc/dbus-api/doc/spec"
 	@echo ""
 
-indent:
-	@echo "Indenting code:"
-	if [ -f $(ASTYLERC) ] ; then \
-		$(indent) --options=$(ASTYLERC) --recursive *.cpp *.h; \
-	fi
-
-
 ACLOCAL_AMFLAGS = -I m4
 SUBDIRS = libs src ringtones man $(TESTS_DIR)
 EXTRA_DIST = m4/*.m4 tools/*.sh platform/* images/* README.gentoo
diff --git a/sflphone-common/ccccreports/cccc.xml b/sflphone-common/ccccreports/cccc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96ea4f390c72b4ede2d580215e806bc859adf537
--- /dev/null
+++ b/sflphone-common/ccccreports/cccc.xml
@@ -0,0 +1,1215 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--Report on software metrics-->
+<CCCC_Project>
+<timestamp>Tue Aug 31 09:59:48 2010
+</timestamp>
+<project_summary>
+<number_of_modules value="39" level="0" />
+<lines_of_code value="3910" level="0" />
+<lines_of_code_per_module value="100.256" level="0" />
+<McCabes_cyclomatic_complexity value="756" level="0" />
+<McCabes_cyclomatic_complexity_per_module value="19.385" level="0" />
+<lines_of_comment value="837" level="0" />
+<lines_of_comment_per_module value="21.462" level="0" />
+<lines_of_code_per_line_of_comment value="4.671" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.903" level="0" />
+<IF4 value="113" level="0" />
+<IF4_per_module value="2.897" level="0" />
+<IF4_visible value="113" level="0" />
+<IF4_visible_per_module value="2.897" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4_concrete value="0.000" level="0" />
+<rejected_lines_of_code value="48" level="0" />
+</project_summary>
+<procedural_summary>
+<module>
+<name>Account</name>
+<lines_of_code value="56" level="0" />
+<McCabes_cyclomatic_complexity value="4" level="0" />
+<lines_of_comment value="42" level="0" />
+<lines_of_code_per_line_of_comment value="1.333" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>AccountCreator</name>
+<lines_of_code value="29" level="0" />
+<McCabes_cyclomatic_complexity value="8" level="0" />
+<lines_of_comment value="29" level="0" />
+<lines_of_code_per_line_of_comment value="1.000" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.276" level="0" />
+</module>
+<module>
+<name>AccountID</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>AccountType</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>AddressbookPreference</name>
+<lines_of_code value="74" level="0" />
+<McCabes_cyclomatic_complexity value="24" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="******" level="2" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="******" level="2" />
+</module>
+<module>
+<name>AlsaLayer</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>AudioPreference</name>
+<lines_of_code value="154" level="0" />
+<McCabes_cyclomatic_complexity value="20" level="0" />
+<lines_of_comment value="25" level="0" />
+<lines_of_code_per_line_of_comment value="6.160" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.800" level="0" />
+</module>
+<module>
+<name>AudioThread</name>
+<lines_of_code value="12" level="0" />
+<McCabes_cyclomatic_complexity value="1" level="0" />
+<lines_of_comment value="4" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>Call</name>
+<lines_of_code value="132" level="0" />
+<McCabes_cyclomatic_complexity value="25" level="0" />
+<lines_of_comment value="31" level="0" />
+<lines_of_code_per_line_of_comment value="4.258" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.806" level="0" />
+</module>
+<module>
+<name>CallConfiguration</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>CallID</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>CallState</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>CallType</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>ConfID</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>Conference</name>
+<lines_of_code value="98" level="0" />
+<McCabes_cyclomatic_complexity value="15" level="0" />
+<lines_of_comment value="4" level="0" />
+<lines_of_code_per_line_of_comment value="24.500" level="1" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="3.750" level="0" />
+</module>
+<module>
+<name>ConferenceState</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>ConnectionState</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>EventThread</name>
+<lines_of_code value="11" level="0" />
+<McCabes_cyclomatic_complexity value="1" level="0" />
+<lines_of_comment value="32" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>HookPreference</name>
+<lines_of_code value="64" level="0" />
+<McCabes_cyclomatic_complexity value="14" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="******" level="2" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="******" level="2" />
+</module>
+<module>
+<name>ManagerImpl</name>
+<lines_of_code value="2687" level="2" />
+<McCabes_cyclomatic_complexity value="544" level="1" />
+<lines_of_comment value="360" level="0" />
+<lines_of_code_per_line_of_comment value="7.464" level="1" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="1.511" level="0" />
+</module>
+<module>
+<name>MappingNode</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>NumberCleaner</name>
+<lines_of_code value="21" level="0" />
+<McCabes_cyclomatic_complexity value="2" level="0" />
+<lines_of_comment value="29" level="0" />
+<lines_of_code_per_line_of_comment value="0.724" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>Observer</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>Preferences</name>
+<lines_of_code value="114" level="0" />
+<McCabes_cyclomatic_complexity value="23" level="0" />
+<lines_of_comment value="29" level="0" />
+<lines_of_code_per_line_of_comment value="3.931" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.793" level="0" />
+</module>
+<module>
+<name>RegistrationState</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>ShortcutPreferences</name>
+<lines_of_code value="90" level="0" />
+<McCabes_cyclomatic_complexity value="13" level="0" />
+<lines_of_comment value="10" level="0" />
+<lines_of_code_per_line_of_comment value="9.000" level="1" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="1.300" level="0" />
+</module>
+<module>
+<name>Subject</name>
+<lines_of_code value="23" level="0" />
+<McCabes_cyclomatic_complexity value="4" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="******" level="2" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>TONEID</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>TokenList</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>VoIPLink</name>
+<lines_of_code value="52" level="0" />
+<McCabes_cyclomatic_complexity value="12" level="0" />
+<lines_of_comment value="32" level="0" />
+<lines_of_code_per_line_of_comment value="1.625" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.375" level="0" />
+</module>
+<module>
+<name>VoipPreference</name>
+<lines_of_code value="68" level="0" />
+<McCabes_cyclomatic_complexity value="17" level="0" />
+<lines_of_comment value="2" level="0" />
+<lines_of_code_per_line_of_comment value="34.000" level="2" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="8.500" level="1" />
+</module>
+<module>
+<name>YamlEmitter</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>anonymous</name>
+<lines_of_code value="177" level="0" />
+<McCabes_cyclomatic_complexity value="29" level="0" />
+<lines_of_comment value="46" level="0" />
+<lines_of_code_per_line_of_comment value="3.848" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="0.630" level="0" />
+</module>
+<module>
+<name>bool</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>int32_t</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>map</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>short</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>string</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+<module>
+<name>vector</name>
+<lines_of_code value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<lines_of_code_per_line_of_comment value="------" level="0" />
+<McCabes_cyclomatic_complexity_per_line_of_comment value="------" level="0" />
+</module>
+</procedural_summary>
+<oo_design>
+<module>
+<name>Account</name>
+<weighted_methods_per_class_unity value="6" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="4" level="0" />
+</module>
+<module>
+<name>AccountCreator</name>
+<weighted_methods_per_class_unity value="3" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>AccountID</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="4" level="0" />
+</module>
+<module>
+<name>AccountType</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>AddressbookPreference</name>
+<weighted_methods_per_class_unity value="4" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>AlsaLayer</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>AudioPreference</name>
+<weighted_methods_per_class_unity value="4" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>AudioThread</name>
+<weighted_methods_per_class_unity value="2" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>Call</name>
+<weighted_methods_per_class_unity value="12" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="7" level="0" />
+</module>
+<module>
+<name>CallConfiguration</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>CallID</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="4" level="0" />
+</module>
+<module>
+<name>CallState</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>CallType</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>ConfID</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>Conference</name>
+<weighted_methods_per_class_unity value="10" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="3" level="0" />
+</module>
+<module>
+<name>ConferenceState</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>ConnectionState</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>EventThread</name>
+<weighted_methods_per_class_unity value="2" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>HookPreference</name>
+<weighted_methods_per_class_unity value="4" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>ManagerImpl</name>
+<weighted_methods_per_class_unity value="159" level="2" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="14" level="1" />
+</module>
+<module>
+<name>MappingNode</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="6" level="0" />
+</module>
+<module>
+<name>NumberCleaner</name>
+<weighted_methods_per_class_unity value="4" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>Observer</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>Preferences</name>
+<weighted_methods_per_class_unity value="4" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>RegistrationState</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>ShortcutPreferences</name>
+<weighted_methods_per_class_unity value="6" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="3" level="0" />
+</module>
+<module>
+<name>Subject</name>
+<weighted_methods_per_class_unity value="3" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>TONEID</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>TokenList</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>VoIPLink</name>
+<weighted_methods_per_class_unity value="7" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="4" level="0" />
+</module>
+<module>
+<name>VoipPreference</name>
+<weighted_methods_per_class_unity value="4" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>YamlEmitter</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="6" level="0" />
+</module>
+<module>
+<name>anonymous</name>
+<weighted_methods_per_class_unity value="10" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="0" level="0" />
+</module>
+<module>
+<name>bool</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>int32_t</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>map</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+<module>
+<name>short</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="1" level="0" />
+</module>
+<module>
+<name>string</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="3" level="0" />
+</module>
+<module>
+<name>vector</name>
+<weighted_methods_per_class_unity value="0" level="0" />
+<weighted_methods_per_class_visibility value="0" level="0" />
+<depth_of_inheritance_tree value="0" level="0" />
+<number_of_children value="0" level="0" />
+<coupling_between_objects value="2" level="0" />
+</module>
+</oo_design>
+<structural_summary>
+<module>
+<name>Account</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="4" level="0" />
+<fan_in_concrete value="2" level="0" />
+<fan_in value="4" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AccountCreator</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="2" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AccountID</name>
+<fan_out_visible value="4" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="4" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AccountType</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AddressbookPreference</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AlsaLayer</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AudioPreference</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>AudioThread</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="1" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="1" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>Call</name>
+<fan_out_visible value="2" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="2" level="0" />
+<fan_in_visible value="5" level="0" />
+<fan_in_concrete value="4" level="0" />
+<fan_in value="5" level="0" />
+<IF4_visible value="100" level="1" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="100" level="0" />
+</module>
+<module>
+<name>CallConfiguration</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>CallID</name>
+<fan_out_visible value="4" level="0" />
+<fan_out_concrete value="2" level="0" />
+<fan_out value="4" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>CallState</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>CallType</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>ConfID</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>Conference</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="2" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="4" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="4" level="0" />
+</module>
+<module>
+<name>ConferenceState</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>ConnectionState</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>EventThread</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="1" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="1" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>HookPreference</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>ManagerImpl</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="14" level="2" />
+<fan_in_concrete value="8" level="1" />
+<fan_in value="14" level="1" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>MappingNode</name>
+<fan_out_visible value="6" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="6" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>NumberCleaner</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="1" level="0" />
+<fan_in_concrete value="1" level="0" />
+<fan_in value="1" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>Observer</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>Preferences</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>RegistrationState</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>ShortcutPreferences</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="3" level="0" />
+<fan_in_concrete value="1" level="0" />
+<fan_in value="3" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>Subject</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="1" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="1" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>TONEID</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>TokenList</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>VoIPLink</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="3" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="3" level="0" />
+<IF4_visible value="9" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="9" level="0" />
+</module>
+<module>
+<name>VoipPreference</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="2" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="2" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>YamlEmitter</name>
+<fan_out_visible value="6" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="6" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>anonymous</name>
+<fan_out_visible value="0" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="0" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>bool</name>
+<fan_out_visible value="2" level="0" />
+<fan_out_concrete value="2" level="0" />
+<fan_out value="2" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>int32_t</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="0" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>map</name>
+<fan_out_visible value="2" level="0" />
+<fan_out_concrete value="2" level="0" />
+<fan_out value="2" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>short</name>
+<fan_out_visible value="1" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="1" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>string</name>
+<fan_out_visible value="3" level="0" />
+<fan_out_concrete value="3" level="0" />
+<fan_out value="3" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+<module>
+<name>vector</name>
+<fan_out_visible value="2" level="0" />
+<fan_out_concrete value="1" level="0" />
+<fan_out value="2" level="0" />
+<fan_in_visible value="0" level="0" />
+<fan_in_concrete value="0" level="0" />
+<fan_in value="0" level="0" />
+<IF4_visible value="0" level="0" />
+<IF4_concrete value="0" level="0" />
+<IF4 value="0" level="0" />
+</module>
+</structural_summary>
+<other_extents>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/account.cpp" line="1" />
+<lines_of_code value="0" level="0" />
+<lines_of_comment value="0" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/accountcreator.cpp" line="1" />
+<lines_of_code value="2" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/call.cpp" line="1" />
+<lines_of_code value="11" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/conference.cpp" line="1" />
+<lines_of_code value="2" level="0" />
+<lines_of_comment value="30" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/eventthread.cpp" line="1" />
+<lines_of_code value="1" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/logger.cpp" line="1" />
+<lines_of_code value="7" level="0" />
+<lines_of_comment value="29" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/main.cpp" line="1" />
+<lines_of_code value="4" level="0" />
+<lines_of_comment value="31" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/managerimpl.cpp" line="1" />
+<lines_of_code value="7" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/managerimpl_registration.cpp" line="1" />
+<lines_of_code value="4" level="0" />
+<lines_of_comment value="35" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/numbercleaner.cpp" line="1" />
+<lines_of_code value="1" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/observer.cpp" line="1" />
+<lines_of_code value="7" level="0" />
+<lines_of_comment value="30" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/preferences.cpp" line="1" />
+<lines_of_code value="1" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+<rejected_extent>
+<name>&lt;file scope items&gt;</name>
+<source_reference file="src/voiplink.cpp" line="1" />
+<lines_of_code value="1" level="0" />
+<lines_of_comment value="1" level="0" />
+<McCabes_cyclomatic_complexity value="0" level="0" />
+</rejected_extent>
+</other_extents>
+</CCCC_Project>
diff --git a/sflphone-common/configure.ac b/sflphone-common/configure.ac
index 377d01579066cf30e24d0f4956650fec58d4b9bc..43799dccc018df0047bdbf7662f1fb9379db8948 100644
--- a/sflphone-common/configure.ac
+++ b/sflphone-common/configure.ac
@@ -52,6 +52,7 @@ AC_CONFIG_FILES([Makefile])
 
 	AC_CONFIG_FILES([src/Makefile \
 			src/sip/Makefile \
+			src/im/Makefile \
 			src/iax/Makefile \
 			src/audio/Makefile \
 			src/audio/audiortp/Makefile \
@@ -61,7 +62,6 @@ AC_CONFIG_FILES([Makefile])
 			src/audio/codecs/Makefile \
 			src/config/Makefile \
 			src/dbus/Makefile \
-			src/plug-in/audiorecorder/Makefile \
 			src/plug-in/Makefile \
 			src/plug-in/test/Makefile \
 			src/hooks/Makefile \
@@ -177,7 +177,7 @@ AC_SUBST(UUID_LIBS)
 AC_SUBST(ALSA_LIBS)
 
 	dnl Check for pulseaudio development package - name: libpulse-dev 
-	LIBPULSE_MIN_VERSION=0.9.6
+	LIBPULSE_MIN_VERSION=0.9.15
 	PKG_CHECK_MODULES(PULSEAUDIO, libpulse >= ${LIBPULSE_MIN_VERSION})
 	AC_SUBST(PULSEAUDIO_LIBS)
 AC_SUBST(PULSEAUDIO_CFLAGS)
@@ -266,9 +266,24 @@ fi
 xml_CFLAGS=
 xml_LIBS=-lexpat
 
-	AC_SUBST(xml_CFLAGS)
+AC_SUBST(xml_CFLAGS)
 AC_SUBST(xml_LIBS)
 
+AC_CHECK_LIB([yaml], yaml_parser_initialize,
+	       [AC_CHECK_HEADERS(yaml.h, have_yaml=true, have_yaml=false)],
+	       have_yaml = false)
+
+	if test "$have_yaml" = "false"; then
+AC_MSG_ERROR([You need the libyaml yaml parser]
+		[http://expat.sourceforge.net/])
+	fi
+
+yaml_CFLAGS=
+yaml_LIBS=-lyaml
+
+AC_SUBST(yaml_CFLAGS)
+AC_SUBST(yaml_LIBS)
+
 AC_CHECK_LIB([pthread], pthread_create,
 		[AC_CHECK_HEADERS(pthread.h, have_pthread=true, have_pthread=false)],
 		have_pthread=false)
@@ -293,6 +308,7 @@ AC_SUBST(PCRE_CFLAGS)
 
 
 
+
 # For the tools/, we need libdbus-c++ for the "build" architecture as well
 
 	AM_CONDITIONAL(CROSS_COMPILING, test "$cross_compiling" = "yes")
@@ -341,17 +357,19 @@ AC_ARG_WITH([speex],
 
 AS_IF([test "x$with_speex" != xno],
 		[AC_CHECK_HEADER([speex/speex.h], , AC_MSG_FAILURE([Unable to find the libspeex headers (you may need to install the dev package).  You may use --without-speex to compile without speex codec support.]))]
-		[AC_CHECK_HEADER([speex/speex_preprocess.h], , AC_MSG_FAILURE([Unable to find the libspeexdsp headers (you may need to install the libspeexdsp-dev package).  You may use --without-speex to compile without speex codec support.]))]
 		[AC_CHECK_LIB([speex], [speex_decode_int],
 			[],
 			[AC_MSG_FAILURE(
 				[libspeex link test failed.   You may use --without-speex to compile without speex codec support.])]
 			)
 		]
-		dnl More advanced check in case the libspeexdsp is not installed
-		AC_SEARCH_LIBS(speex_preprocess_run, speexdsp, HAVE_SPEEXDSP="yes", HAVE_SPEEXDSP="no", [])
+		# dnl More advanced check in case the libspeexdsp is not installed
+		# AC_SEARCH_LIBS(speex_preprocess_run, speexdsp, HAVE_SPEEXDSP="yes", HAVE_SPEEXDSP="no", [])
 	 )
 
+dnl check in case the libspeexdsp is not installed
+AC_CHECK_HEADER([speex/speex_preprocess.h], , AC_MSG_FAILURE([Unable to find the libspeexdsp headers (you may need to install the libspeexdsp-dev package) used for Noise Suppression and Automatic Gain Control.]))
+AC_CHECK_LIB(speexdsp, speex_preprocess_run, [], [], [])
 AC_DEFINE([HAVE_SPEEX], test "x$with_speex" = "xyes", [Define if you have libspeex])
 	AM_CONDITIONAL(BUILD_SPEEX, test "x$with_speex" = "xyes" )
 AM_CONDITIONAL(ENABLE_SPEEXDSP, test  $HAVE_SPEEXDSP = yes)
@@ -405,7 +423,7 @@ AC_DEFUN([BB_ENABLE_DOXYGEN],
 
 	if test x$DOT = x; then
 	if test "x$enable_dot" = xyes; then
-AC_MSG_ERROR([could not find dot])
+	AC_MSG_ERROR([could not find dot])
 	fi
 	enable_dot=no
 	else
@@ -414,24 +432,22 @@ AC_MSG_ERROR([could not find dot])
 	AM_CONDITIONAL(ENABLE_DOXYGEN, test x$enable_doc = xtrue)
 	AC_SUBST(enable_dot)
 	AC_SUBST(enable_html_docs)
-AC_SUBST(enable_latex_docs)
+	AC_SUBST(enable_latex_docs)
 	])
-# Acutally perform the doxygen check
+	# Acutally perform the doxygen check
 	BB_ENABLE_DOXYGEN
 
 	dnl Datadir directory
 	sflphone_datadir=$datadir/sflphone
-AC_SUBST(sflphone_datadir)
+	AC_SUBST(sflphone_datadir)
 
 	dnl Dbus Service activation part
 	DBUS_SERVICES_DIR="$datadir/dbus-1/services"
-AC_SUBST(DBUS_SERVICES_DIR)
+	AC_SUBST(DBUS_SERVICES_DIR)
 	AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is])
 
 # Go!
 	AC_SUBST(SFLPHONE_CFLAGS)
-AC_SUBST(SFLPHONE_LIBS)
+	AC_SUBST(SFLPHONE_LIBS)
 	AC_OUTPUT
 	AC_MSG_NOTICE([[Configuration done! Please make sure that pjsip library (libs/pjproject) has already been compiled. Run `make' to build the software.]])
-
-
diff --git a/sflphone-common/globals.mak b/sflphone-common/globals.mak
index 23f700e61f5cad26b71d0550c4a5ce63c3955780..16656d11a2b224e4893a497affd2bc629f55429d 100644
--- a/sflphone-common/globals.mak
+++ b/sflphone-common/globals.mak
@@ -1,10 +1,13 @@
 # Global variables
+
+#CXXFLAGS=-Wall -Werror -Wextra
+
 src=$(top_srcdir)
 sfllibdir=$(DESTDIR)$(libdir)/sflphone
 sflcodecdir=$(sfllibdir)/codecs
 sflplugindir=$(sfllibdir)/plugins
 
-ASTYLERC="../astylerc"
+ASTYLERC="$(top_srcdir)/../astylerc"
 indent="/usr/bin/astyle"
 
 # for pjsip
@@ -56,6 +59,9 @@ AM_CPPFLAGS = \
 	-DPREFIX=\"$(prefix)\" \
 	-DPROGSHAREDIR=\"${datadir}/sflphone\" \
 	$(ZEROCONFFLAGS) \
+	$(GSTREAMER_CFLAGS) \
+	$(LIBAVCODEC_CFLAGS) \
+	$(LIBSWSCALE_CFLAGS) \
 	$(IAX_FLAGS) \
 	$(SIP_CFLAGS) \
 	-DCODECS_DIR=\""$(sflcodecdir)"\" \
@@ -63,3 +69,10 @@ AM_CPPFLAGS = \
 	-DENABLE_TRACE \
          $(SPEEXCODEC) \
          $(GSMCODEC)
+
+
+indent:
+	@echo "Indenting code:"
+	if [ -f $(ASTYLERC) ] ; then \
+		find $(top_srcdir)/src/ -regex ".*\.\(h\|cpp\)" -exec $(indent) --options=$(ASTYLERC) {} \; ; \
+	fi
diff --git a/sflphone-common/libs/dbus-c++/src/connection.cpp b/sflphone-common/libs/dbus-c++/src/connection.cpp
index b7b6729726731f238347799ca5846b371b722fbb..0cc10df95143b90287770be421a87e8372ac3351 100644
--- a/sflphone-common/libs/dbus-c++/src/connection.cpp
+++ b/sflphone-common/libs/dbus-c++/src/connection.cpp
@@ -42,13 +42,11 @@
 using namespace DBus;
 
 Connection::Private::Private (DBusConnection *c, Server::Private *s)
-        : conn (c) , dispatcher (0), server (s)
-{
+        : conn (c) , dispatcher (0), server (s) {
     init();
 }
 
-Connection::Private::Private (DBusBusType type)
-{
+Connection::Private::Private (DBusBusType type) {
     InternalError e;
 
     conn = dbus_bus_get_private (type, e);
@@ -58,8 +56,7 @@ Connection::Private::Private (DBusBusType type)
     init();
 }
 
-Connection::Private::~Private()
-{
+Connection::Private::~Private() {
     debug_log ("terminating connection 0x%08x", conn);
 
     detach_server();
@@ -79,8 +76,7 @@ Connection::Private::~Private()
     dbus_connection_unref (conn);
 }
 
-void Connection::Private::init()
-{
+void Connection::Private::init() {
     dbus_connection_ref (conn);
     dbus_connection_ref (conn);	//todo: the library has to own another reference
 
@@ -94,8 +90,7 @@ void Connection::Private::init()
     dbus_connection_set_exit_on_disconnect (conn, false); //why was this set to true??
 }
 
-void Connection::Private::detach_server()
-{
+void Connection::Private::detach_server() {
     /*	Server::Private *tmp = server;
 
     	server = NULL;
@@ -115,8 +110,7 @@ void Connection::Private::detach_server()
     	}*/
 }
 
-bool Connection::Private::do_dispatch()
-{
+bool Connection::Private::do_dispatch() {
     debug_log ("dispatching on %p", conn);
 
     if (!dbus_connection_get_is_connected (conn)) {
@@ -130,8 +124,7 @@ bool Connection::Private::do_dispatch()
     return dbus_connection_dispatch (conn) != DBUS_DISPATCH_DATA_REMAINS;
 }
 
-void Connection::Private::dispatch_status_stub (DBusConnection *dc, DBusDispatchStatus status, void *data)
-{
+void Connection::Private::dispatch_status_stub (DBusConnection *dc, DBusDispatchStatus status, void *data) {
     Private *p = static_cast<Private *> (data);
 
     switch (status) {
@@ -151,8 +144,7 @@ void Connection::Private::dispatch_status_stub (DBusConnection *dc, DBusDispatch
     }
 }
 
-DBusHandlerResult Connection::Private::message_filter_stub (DBusConnection *conn, DBusMessage *dmsg, void *data)
-{
+DBusHandlerResult Connection::Private::message_filter_stub (DBusConnection *conn, DBusMessage *dmsg, void *data) {
     MessageSlot *slot = static_cast<MessageSlot *> (data);
 
     Message msg = Message (new Message::Private (dmsg));
@@ -162,8 +154,7 @@ DBusHandlerResult Connection::Private::message_filter_stub (DBusConnection *conn
            : DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 }
 
-bool Connection::Private::disconn_filter_function (const Message &msg)
-{
+bool Connection::Private::disconn_filter_function (const Message &msg) {
     if (msg.is_signal (DBUS_INTERFACE_LOCAL,"Disconnected")) {
         debug_log ("%p disconnected by local bus", conn);
         dbus_connection_close (conn);
@@ -174,34 +165,28 @@ bool Connection::Private::disconn_filter_function (const Message &msg)
     return false;
 }
 
-DBusDispatchStatus Connection::Private::dispatch_status()
-{
+DBusDispatchStatus Connection::Private::dispatch_status() {
     return dbus_connection_get_dispatch_status (conn);
 }
 
-bool Connection::Private::has_something_to_dispatch()
-{
+bool Connection::Private::has_something_to_dispatch() {
     return dispatch_status() == DBUS_DISPATCH_DATA_REMAINS;
 }
 
 
-Connection Connection::SystemBus()
-{
+Connection Connection::SystemBus() {
     return Connection (new Private (DBUS_BUS_SYSTEM));
 }
 
-Connection Connection::SessionBus()
-{
+Connection Connection::SessionBus() {
     return Connection (new Private (DBUS_BUS_SESSION));
 }
 
-Connection Connection::ActivationBus()
-{
+Connection Connection::ActivationBus() {
     return Connection (new Private (DBUS_BUS_STARTER));
 }
 
-Connection::Connection (const char *address, bool priv)
-{
+Connection::Connection (const char *address, bool priv) {
     InternalError e;
     DBusConnection *conn = priv
                            ? dbus_connection_open_private (address, e)
@@ -217,24 +202,20 @@ Connection::Connection (const char *address, bool priv)
 }
 
 Connection::Connection (Connection::Private *p)
-        : _pvt (p)
-{
+        : _pvt (p) {
     setup (default_dispatcher);
 }
 
 Connection::Connection (const Connection &c)
-        : _pvt (c._pvt)
-{
+        : _pvt (c._pvt) {
     dbus_connection_ref (_pvt->conn);
 }
 
-Connection::~Connection()
-{
+Connection::~Connection() {
     dbus_connection_unref (_pvt->conn);
 }
 
-Dispatcher *Connection::setup (Dispatcher *dispatcher)
-{
+Dispatcher *Connection::setup (Dispatcher *dispatcher) {
     debug_log ("registering stubs for connection %p", _pvt->conn);
 
     if (!dispatcher) dispatcher = default_dispatcher;
@@ -268,13 +249,11 @@ Dispatcher *Connection::setup (Dispatcher *dispatcher)
     return prev;
 }
 
-bool Connection::operator == (const Connection &c) const
-{
+bool Connection::operator == (const Connection &c) const {
     return _pvt->conn == c._pvt->conn;
 }
 
-bool Connection::register_bus()
-{
+bool Connection::register_bus() {
     InternalError e;
 
     bool r = dbus_bus_register (_pvt->conn, e);
@@ -284,39 +263,32 @@ bool Connection::register_bus()
     return r;
 }
 
-bool Connection::connected() const
-{
+bool Connection::connected() const {
     return dbus_connection_get_is_connected (_pvt->conn);
 }
 
-void Connection::disconnect()
-{
+void Connection::disconnect() {
 //	dbus_connection_disconnect(_pvt->conn); // disappeared in 0.9x
     dbus_connection_close (_pvt->conn);
 }
 
-void Connection::exit_on_disconnect (bool exit)
-{
+void Connection::exit_on_disconnect (bool exit) {
     dbus_connection_set_exit_on_disconnect (_pvt->conn, exit);
 }
 
-bool Connection::unique_name (const char *n)
-{
+bool Connection::unique_name (const char *n) {
     return dbus_bus_set_unique_name (_pvt->conn, n);
 }
 
-const char *Connection::unique_name() const
-{
+const char *Connection::unique_name() const {
     return dbus_bus_get_unique_name (_pvt->conn);
 }
 
-void Connection::flush()
-{
+void Connection::flush() {
     dbus_connection_flush (_pvt->conn);
 }
 
-void Connection::add_match (const char *rule)
-{
+void Connection::add_match (const char *rule) {
     InternalError e;
 
     dbus_bus_add_match (_pvt->conn, rule, e);
@@ -326,8 +298,7 @@ void Connection::add_match (const char *rule)
     if (e) throw Error (e);
 }
 
-void Connection::remove_match (const char *rule)
-{
+void Connection::remove_match (const char *rule) {
     InternalError e;
 
     dbus_bus_remove_match (_pvt->conn, rule, e);
@@ -337,25 +308,21 @@ void Connection::remove_match (const char *rule)
     if (e) throw Error (e);
 }
 
-bool Connection::add_filter (MessageSlot &s)
-{
+bool Connection::add_filter (MessageSlot &s) {
     debug_log ("%s: adding filter", unique_name());
     return dbus_connection_add_filter (_pvt->conn, Private::message_filter_stub, &s, NULL);
 }
 
-void Connection::remove_filter (MessageSlot &s)
-{
+void Connection::remove_filter (MessageSlot &s) {
     debug_log ("%s: removing filter", unique_name());
     dbus_connection_remove_filter (_pvt->conn, Private::message_filter_stub, &s);
 }
 
-bool Connection::send (const Message &msg, unsigned int *serial)
-{
+bool Connection::send (const Message &msg, unsigned int *serial) {
     return dbus_connection_send (_pvt->conn, msg._pvt->msg, serial);
 }
 
-Message Connection::send_blocking (Message &msg, int timeout)
-{
+Message Connection::send_blocking (Message &msg, int timeout) {
     DBusMessage *reply;
     InternalError e;
 
@@ -366,8 +333,7 @@ Message Connection::send_blocking (Message &msg, int timeout)
     return Message (new Message::Private (reply), false);
 }
 
-PendingCall Connection::send_async (Message &msg, int timeout)
-{
+PendingCall Connection::send_async (Message &msg, int timeout) {
     DBusPendingCall *pending;
 
     if (!dbus_connection_send_with_reply (_pvt->conn, msg._pvt->msg, &pending, timeout)) {
@@ -377,8 +343,7 @@ PendingCall Connection::send_async (Message &msg, int timeout)
     return PendingCall (new PendingCall::Private (pending));
 }
 
-void Connection::request_name (const char *name, int flags)
-{
+void Connection::request_name (const char *name, int flags) {
     InternalError e;
 
     debug_log ("%s: registering bus name %s", unique_name(), name);
@@ -396,8 +361,7 @@ void Connection::request_name (const char *name, int flags)
     }
 }
 
-unsigned long Connection::sender_unix_uid (const char *sender)
-{
+unsigned long Connection::sender_unix_uid (const char *sender) {
     InternalError e;
 
     unsigned long ul = dbus_bus_get_unix_user (_pvt->conn, sender, e);
@@ -407,8 +371,7 @@ unsigned long Connection::sender_unix_uid (const char *sender)
     return ul;
 }
 
-bool Connection::has_name (const char *name)
-{
+bool Connection::has_name (const char *name) {
     InternalError e;
 
     bool b = dbus_bus_name_has_owner (_pvt->conn, name, e);
@@ -418,13 +381,11 @@ bool Connection::has_name (const char *name)
     return b;
 }
 
-const std::vector<std::string>& Connection::names()
-{
+const std::vector<std::string>& Connection::names() {
     return _pvt->names;
 }
 
-bool Connection::start_service (const char *name, unsigned long flags)
-{
+bool Connection::start_service (const char *name, unsigned long flags) {
     InternalError e;
 
     bool b = dbus_bus_start_service_by_name (_pvt->conn, name, flags, NULL, e);
diff --git a/sflphone-common/libs/dbus-c++/src/debug.cpp b/sflphone-common/libs/dbus-c++/src/debug.cpp
index 213a784d05a4a7672a86fc0825e8e0c83a4bdaf4..6ee5176ec5a2a77890980ee1023b4500744b6bfc 100644
--- a/sflphone-common/libs/dbus-c++/src/debug.cpp
+++ b/sflphone-common/libs/dbus-c++/src/debug.cpp
@@ -31,8 +31,7 @@
 #include <cstdio>
 #include <stdlib.h>
 
-static void _debug_log_default (const char *format, ...)
-{
+static void _debug_log_default (const char *format, ...) {
 #ifdef DEBUG
 
     static int debug_env = getenv ("DBUSXX_VERBOSE") ? 1 : 0;
diff --git a/sflphone-common/libs/dbus-c++/src/dispatcher.cpp b/sflphone-common/libs/dbus-c++/src/dispatcher.cpp
index e71bae99fd48a0309d9f6f1c30e57bd3da8ee90e..b333f43a6f3c3cdff290e90c4109dd729c2f794a 100644
--- a/sflphone-common/libs/dbus-c++/src/dispatcher.cpp
+++ b/sflphone-common/libs/dbus-c++/src/dispatcher.cpp
@@ -38,23 +38,19 @@ DBus::Dispatcher *DBus::default_dispatcher = NULL;
 using namespace DBus;
 
 Timeout::Timeout (Timeout::Internal *i)
-        : _int (i)
-{
+        : _int (i) {
     dbus_timeout_set_data ( (DBusTimeout *) i, this, NULL);
 }
 
-int Timeout::interval() const
-{
+int Timeout::interval() const {
     return dbus_timeout_get_interval ( (DBusTimeout *) _int);
 }
 
-bool Timeout::enabled() const
-{
+bool Timeout::enabled() const {
     return dbus_timeout_get_enabled ( (DBusTimeout *) _int);
 }
 
-bool Timeout::handle()
-{
+bool Timeout::handle() {
     return dbus_timeout_handle ( (DBusTimeout *) _int);
 }
 
@@ -62,13 +58,11 @@ bool Timeout::handle()
 */
 
 Watch::Watch (Watch::Internal *i)
-        : _int (i)
-{
+        : _int (i) {
     dbus_watch_set_data ( (DBusWatch *) i, this, NULL);
 }
 
-int Watch::descriptor() const
-{
+int Watch::descriptor() const {
 #if HAVE_WIN32
     return dbus_watch_get_socket ( (DBusWatch*) _int);
 #else
@@ -76,26 +70,22 @@ int Watch::descriptor() const
 #endif
 }
 
-int Watch::flags() const
-{
+int Watch::flags() const {
     return dbus_watch_get_flags ( (DBusWatch *) _int);
 }
 
-bool Watch::enabled() const
-{
+bool Watch::enabled() const {
     return dbus_watch_get_enabled ( (DBusWatch *) _int);
 }
 
-bool Watch::handle (int flags)
-{
+bool Watch::handle (int flags) {
     return dbus_watch_handle ( (DBusWatch *) _int, flags);
 }
 
 /*
 */
 
-dbus_bool_t Dispatcher::Private::on_add_watch (DBusWatch *watch, void *data)
-{
+dbus_bool_t Dispatcher::Private::on_add_watch (DBusWatch *watch, void *data) {
     Dispatcher *d = static_cast<Dispatcher *> (data);
 
     Watch::Internal *w = reinterpret_cast<Watch::Internal *> (watch);
@@ -105,8 +95,7 @@ dbus_bool_t Dispatcher::Private::on_add_watch (DBusWatch *watch, void *data)
     return true;
 }
 
-void Dispatcher::Private::on_rem_watch (DBusWatch *watch, void *data)
-{
+void Dispatcher::Private::on_rem_watch (DBusWatch *watch, void *data) {
     Dispatcher *d = static_cast<Dispatcher *> (data);
 
     Watch *w = static_cast<Watch *> (dbus_watch_get_data (watch));
@@ -114,15 +103,13 @@ void Dispatcher::Private::on_rem_watch (DBusWatch *watch, void *data)
     d->rem_watch (w);
 }
 
-void Dispatcher::Private::on_toggle_watch (DBusWatch *watch, void *data)
-{
+void Dispatcher::Private::on_toggle_watch (DBusWatch *watch, void *data) {
     Watch *w = static_cast<Watch *> (dbus_watch_get_data (watch));
 
     w->toggle();
 }
 
-dbus_bool_t Dispatcher::Private::on_add_timeout (DBusTimeout *timeout, void *data)
-{
+dbus_bool_t Dispatcher::Private::on_add_timeout (DBusTimeout *timeout, void *data) {
     Dispatcher *d = static_cast<Dispatcher *> (data);
 
     Timeout::Internal *t = reinterpret_cast<Timeout::Internal *> (timeout);
@@ -132,8 +119,7 @@ dbus_bool_t Dispatcher::Private::on_add_timeout (DBusTimeout *timeout, void *dat
     return true;
 }
 
-void Dispatcher::Private::on_rem_timeout (DBusTimeout *timeout, void *data)
-{
+void Dispatcher::Private::on_rem_timeout (DBusTimeout *timeout, void *data) {
     Dispatcher *d = static_cast<Dispatcher *> (data);
 
     Timeout *t = static_cast<Timeout *> (dbus_timeout_get_data (timeout));
@@ -141,23 +127,20 @@ void Dispatcher::Private::on_rem_timeout (DBusTimeout *timeout, void *data)
     d->rem_timeout (t);
 }
 
-void Dispatcher::Private::on_toggle_timeout (DBusTimeout *timeout, void *data)
-{
+void Dispatcher::Private::on_toggle_timeout (DBusTimeout *timeout, void *data) {
     Timeout *t = static_cast<Timeout *> (dbus_timeout_get_data (timeout));
 
     t->toggle();
 }
 
-void Dispatcher::queue_connection (Connection::Private *cp)
-{
+void Dispatcher::queue_connection (Connection::Private *cp) {
     _mutex_p.lock();
     _pending_queue.push_back (cp);
     _mutex_p.unlock();
 }
 
 
-bool Dispatcher::has_something_to_dispatch()
-{
+bool Dispatcher::has_something_to_dispatch() {
     _mutex_p.lock();
     bool has_something = false;
 
@@ -173,8 +156,7 @@ bool Dispatcher::has_something_to_dispatch()
 }
 
 
-void Dispatcher::dispatch_pending()
-{
+void Dispatcher::dispatch_pending() {
     _mutex_p.lock();
 
     // SEEME: dbus-glib is dispatching only one message at a time to not starve the loop/other things...
@@ -199,8 +181,7 @@ void Dispatcher::dispatch_pending()
     _mutex_p.unlock();
 }
 
-void DBus::_init_threading()
-{
+void DBus::_init_threading() {
 #ifdef DBUS_HAS_THREADS_INIT_DEFAULT
     dbus_threads_init_default();
 #else
@@ -219,8 +200,7 @@ void DBus::_init_threading (
     CondVarWaitTimeoutFn c4,
     CondVarWakeOneFn c5,
     CondVarWakeAllFn c6
-)
-{
+) {
 #ifndef DBUS_HAS_RECURSIVE_MUTEX
     DBusThreadFunctions functions = {
         DBUS_THREAD_FUNCTIONS_MUTEX_NEW_MASK |
diff --git a/sflphone-common/libs/dbus-c++/src/ecore-integration.cpp b/sflphone-common/libs/dbus-c++/src/ecore-integration.cpp
index d18d4b1136cc2b43de1f4eaa22841cb4fb4c8f80..d18192f279c12879883cf0b38bc53da646480d6b 100644
--- a/sflphone-common/libs/dbus-c++/src/ecore-integration.cpp
+++ b/sflphone-common/libs/dbus-c++/src/ecore-integration.cpp
@@ -32,26 +32,22 @@
 using namespace DBus;
 
 Ecore::BusTimeout::BusTimeout (Timeout::Internal* ti)
-        : Timeout (ti)
-{
+        : Timeout (ti) {
     _enable();
 }
 
-Ecore::BusTimeout::~BusTimeout()
-{
+Ecore::BusTimeout::~BusTimeout() {
     _disable();
 }
 
-void Ecore::BusTimeout::toggle()
-{
+void Ecore::BusTimeout::toggle() {
     debug_log ("ecore: timeout %p toggled (%s)", this, Timeout::enabled() ? "on":"off");
 
     if (Timeout::enabled())	_enable();
     else			_disable();
 }
 
-int Ecore::BusTimeout::timeout_handler (void *data)
-{
+int Ecore::BusTimeout::timeout_handler (void *data) {
     Ecore::BusTimeout* t = reinterpret_cast<Ecore::BusTimeout*> (data);
 
     debug_log ("Ecore::BusTimeout::timeout_handler( void *data )");
@@ -61,37 +57,32 @@ int Ecore::BusTimeout::timeout_handler (void *data)
     return 1; // 1 -> reshedule in ecore for next timer interval
 }
 
-void Ecore::BusTimeout::_enable()
-{
+void Ecore::BusTimeout::_enable() {
     debug_log ("Ecore::BusTimeout::_enable()");
 
     _etimer = ecore_timer_add ( ( (double) Timeout::interval()) /1000, timeout_handler, this);
 }
 
-void Ecore::BusTimeout::_disable()
-{
+void Ecore::BusTimeout::_disable() {
     debug_log ("Ecore::BusTimeout::_disable()");
 
     ecore_timer_del (_etimer);
 }
 
-static bool watch_prepare (int *timeout)
-{
+static bool watch_prepare (int *timeout) {
     debug_log ("ecore: watch_prepare");
 
     *timeout = -1;
     return false;
 }
 
-static bool watch_check()
-{
+static bool watch_check() {
     debug_log ("ecore: watch_check");
 
     return true;
 }
 
-static bool watch_dispatch (void *data)
-{
+static bool watch_dispatch (void *data) {
     debug_log ("ecore: watch_dispatch");
 
     bool cb = true;
@@ -100,26 +91,22 @@ static bool watch_dispatch (void *data)
 }
 
 Ecore::BusWatch::BusWatch (Watch::Internal* wi)
-        : Watch (wi)
-{
+        : Watch (wi) {
     _enable();
 }
 
-Ecore::BusWatch::~BusWatch()
-{
+Ecore::BusWatch::~BusWatch() {
     _disable();
 }
 
-void Ecore::BusWatch::toggle()
-{
+void Ecore::BusWatch::toggle() {
     debug_log ("ecore: watch %p toggled (%s)", this, Watch::enabled() ? "on":"off");
 
     if (Watch::enabled())	_enable();
     else			_disable();
 }
 
-int Ecore::BusWatch::watch_handler_read (void *data, Ecore_Fd_Handler *fdh)
-{
+int Ecore::BusWatch::watch_handler_read (void *data, Ecore_Fd_Handler *fdh) {
     Ecore::BusWatch* w = reinterpret_cast<Ecore::BusWatch*> (data);
 
     debug_log ("ecore: watch_handler_read");
@@ -133,8 +120,7 @@ int Ecore::BusWatch::watch_handler_read (void *data, Ecore_Fd_Handler *fdh)
     return 1;
 }
 
-int Ecore::BusWatch::watch_handler_error (void *data, Ecore_Fd_Handler *fdh)
-{
+int Ecore::BusWatch::watch_handler_error (void *data, Ecore_Fd_Handler *fdh) {
     Ecore::BusWatch* w = reinterpret_cast<Ecore::BusWatch*> (data);
 
     debug_log ("ecore: watch_handler_error");
@@ -146,8 +132,7 @@ int Ecore::BusWatch::watch_handler_error (void *data, Ecore_Fd_Handler *fdh)
     return 1;
 }
 
-void Ecore::BusWatch::_enable()
-{
+void Ecore::BusWatch::_enable() {
     debug_log ("Ecore::BusWatch::_enable()");
 
     int flags = Watch::flags();
@@ -169,18 +154,15 @@ void Ecore::BusWatch::_enable()
     ecore_main_fd_handler_active_set (fd_handler_error, ECORE_FD_ERROR);
 }
 
-void Ecore::BusWatch::_disable()
-{
+void Ecore::BusWatch::_disable() {
     ecore_main_fd_handler_del (fd_handler_read);
     ecore_main_fd_handler_del (fd_handler_error);
 }
 
-void Ecore::BusDispatcher::attach()
-{
+void Ecore::BusDispatcher::attach() {
 }
 
-Timeout* Ecore::BusDispatcher::add_timeout (Timeout::Internal* wi)
-{
+Timeout* Ecore::BusDispatcher::add_timeout (Timeout::Internal* wi) {
     Timeout* t = new Ecore::BusTimeout (wi);
 
     debug_log ("ecore: added timeout %p (%s)", t, t->enabled() ? "on":"off");
@@ -188,15 +170,13 @@ Timeout* Ecore::BusDispatcher::add_timeout (Timeout::Internal* wi)
     return t;
 }
 
-void Ecore::BusDispatcher::rem_timeout (Timeout* t)
-{
+void Ecore::BusDispatcher::rem_timeout (Timeout* t) {
     debug_log ("ecore: removed timeout %p", t);
 
     delete t;
 }
 
-Watch* Ecore::BusDispatcher::add_watch (Watch::Internal* wi)
-{
+Watch* Ecore::BusDispatcher::add_watch (Watch::Internal* wi) {
     Watch* w = new Ecore::BusWatch (wi);
 
     debug_log ("ecore: added watch %p (%s) fd=%d flags=%d",
@@ -205,8 +185,7 @@ Watch* Ecore::BusDispatcher::add_watch (Watch::Internal* wi)
     return w;
 }
 
-void Ecore::BusDispatcher::rem_watch (Watch* w)
-{
+void Ecore::BusDispatcher::rem_watch (Watch* w) {
     debug_log ("ecore: removed watch %p", w);
 
     delete w;
diff --git a/sflphone-common/libs/dbus-c++/src/error.cpp b/sflphone-common/libs/dbus-c++/src/error.cpp
index 89d91d1f39d2d604f6de6313788530b2e5176ca7..ccb3da960fec2d0ace11c4e860d07cc69a15c3af 100644
--- a/sflphone-common/libs/dbus-c++/src/error.cpp
+++ b/sflphone-common/libs/dbus-c++/src/error.cpp
@@ -39,51 +39,41 @@ using namespace DBus;
 */
 
 Error::Error()
-        : _int (new InternalError)
-{}
+        : _int (new InternalError) {}
 
 Error::Error (InternalError &i)
-        : _int (new InternalError (i))
-{}
+        : _int (new InternalError (i)) {}
 
 Error::Error (const char *name, const char *message)
-        : _int (new InternalError)
-{
+        : _int (new InternalError) {
     set (name, message);
 }
 
 Error::Error (Message &m)
-        : _int (new InternalError)
-{
+        : _int (new InternalError) {
     dbus_set_error_from_message (& (_int->error), m._pvt->msg);
 }
 
-Error::~Error() throw()
-{
+Error::~Error() throw() {
 }
 
-const char *Error::name() const
-{
+const char *Error::name() const {
     return _int->error.name;
 }
 
-const char *Error::message() const
-{
+const char *Error::message() const {
     return _int->error.message;
 }
 
-bool Error::is_set() const
-{
+bool Error::is_set() const {
     return * (_int);
 }
 
-void Error::set (const char *name, const char *message)
-{
+void Error::set (const char *name, const char *message) {
     dbus_set_error_const (& (_int->error), name, message);
 }
 
-const char *Error::what() const throw()
-{
+const char *Error::what() const throw() {
     return _int->error.message;
 }
 
diff --git a/sflphone-common/libs/dbus-c++/src/eventloop-integration.cpp b/sflphone-common/libs/dbus-c++/src/eventloop-integration.cpp
index 6947f28130fa5d27e4b83038246626c0a1b1ba9a..f367623e5f5b9fb887d5ff86fb0885fe295e062e 100644
--- a/sflphone-common/libs/dbus-c++/src/eventloop-integration.cpp
+++ b/sflphone-common/libs/dbus-c++/src/eventloop-integration.cpp
@@ -35,21 +35,18 @@
 using namespace DBus;
 
 BusTimeout::BusTimeout (Timeout::Internal *ti, BusDispatcher *bd)
-        : Timeout (ti), DefaultTimeout (Timeout::interval(), true, bd)
-{
+        : Timeout (ti), DefaultTimeout (Timeout::interval(), true, bd) {
     DefaultTimeout::enabled (Timeout::enabled());
 }
 
-void BusTimeout::toggle()
-{
+void BusTimeout::toggle() {
     debug_log ("timeout %p toggled (%s)", this, Timeout::enabled() ? "on":"off");
 
     DefaultTimeout::enabled (Timeout::enabled());
 }
 
 BusWatch::BusWatch (Watch::Internal *wi, BusDispatcher *bd)
-        : Watch (wi), DefaultWatch (Watch::descriptor(), 0, bd)
-{
+        : Watch (wi), DefaultWatch (Watch::descriptor(), 0, bd) {
     int flags = POLLHUP | POLLERR;
 
     if (Watch::flags() & DBUS_WATCH_READABLE)
@@ -63,15 +60,13 @@ BusWatch::BusWatch (Watch::Internal *wi, BusDispatcher *bd)
     DefaultWatch::enabled (Watch::enabled());
 }
 
-void BusWatch::toggle()
-{
+void BusWatch::toggle() {
     debug_log ("watch %p toggled (%s)", this, Watch::enabled() ? "on":"off");
 
     DefaultWatch::enabled (Watch::enabled());
 }
 
-void BusDispatcher::enter()
-{
+void BusDispatcher::enter() {
     debug_log ("entering dispatcher %p", this);
 
     _running = true;
@@ -83,20 +78,17 @@ void BusDispatcher::enter()
     debug_log ("leaving dispatcher %p", this);
 }
 
-void BusDispatcher::leave()
-{
+void BusDispatcher::leave() {
     _running = false;
     terminate();
 }
 
-void BusDispatcher::do_iteration()
-{
+void BusDispatcher::do_iteration() {
     dispatch_pending();
     dispatch();
 }
 
-Timeout *BusDispatcher::add_timeout (Timeout::Internal *ti)
-{
+Timeout *BusDispatcher::add_timeout (Timeout::Internal *ti) {
     BusTimeout *bt = new BusTimeout (ti, this);
 
     bt->expired = new Callback<BusDispatcher, void, DefaultTimeout &> (this, &BusDispatcher::timeout_expired);
@@ -108,15 +100,13 @@ Timeout *BusDispatcher::add_timeout (Timeout::Internal *ti)
     return bt;
 }
 
-void BusDispatcher::rem_timeout (Timeout *t)
-{
+void BusDispatcher::rem_timeout (Timeout *t) {
     debug_log ("removed timeout %p", t);
 
     delete t;
 }
 
-Watch *BusDispatcher::add_watch (Watch::Internal *wi)
-{
+Watch *BusDispatcher::add_watch (Watch::Internal *wi) {
     BusWatch *bw = new BusWatch (wi, this);
 
     bw->ready = new Callback<BusDispatcher, void, DefaultWatch &> (this, &BusDispatcher::watch_ready);
@@ -128,15 +118,13 @@ Watch *BusDispatcher::add_watch (Watch::Internal *wi)
     return bw;
 }
 
-void BusDispatcher::rem_watch (Watch *w)
-{
+void BusDispatcher::rem_watch (Watch *w) {
     debug_log ("removed watch %p", w);
 
     delete w;
 }
 
-void BusDispatcher::timeout_expired (DefaultTimeout &et)
-{
+void BusDispatcher::timeout_expired (DefaultTimeout &et) {
     debug_log ("timeout %p expired", &et);
 
     BusTimeout *timeout = reinterpret_cast<BusTimeout *> (et.data());
@@ -144,8 +132,7 @@ void BusDispatcher::timeout_expired (DefaultTimeout &et)
     timeout->handle();
 }
 
-void BusDispatcher::watch_ready (DefaultWatch &ew)
-{
+void BusDispatcher::watch_ready (DefaultWatch &ew) {
     BusWatch *watch = reinterpret_cast<BusWatch *> (ew.data());
 
     debug_log ("watch %p ready, flags=%d state=%d",
diff --git a/sflphone-common/libs/dbus-c++/src/eventloop.cpp b/sflphone-common/libs/dbus-c++/src/eventloop.cpp
index f74cafeaa6385fb66bf45d96f64315c25f3ec0a8..94bf59b389069754f9d6a016a717d6abac8b0e1d 100644
--- a/sflphone-common/libs/dbus-c++/src/eventloop.cpp
+++ b/sflphone-common/libs/dbus-c++/src/eventloop.cpp
@@ -36,14 +36,12 @@
 
 using namespace DBus;
 
-static double millis (timeval tv)
-{
+static double millis (timeval tv) {
     return (tv.tv_sec *1000.0 + tv.tv_usec/1000.0);
 }
 
 DefaultTimeout::DefaultTimeout (int interval, bool repeat, DefaultMainLoop *ed)
-        : _enabled (true), _interval (interval), _repeat (repeat), _expiration (0), _data (0), _disp (ed)
-{
+        : _enabled (true), _interval (interval), _repeat (repeat), _expiration (0), _data (0), _disp (ed) {
     timeval now;
     gettimeofday (&now, NULL);
 
@@ -54,57 +52,48 @@ DefaultTimeout::DefaultTimeout (int interval, bool repeat, DefaultMainLoop *ed)
     _disp->_mutex_t.unlock();
 }
 
-DefaultTimeout::~DefaultTimeout()
-{
+DefaultTimeout::~DefaultTimeout() {
     _disp->_mutex_t.lock();
     _disp->_timeouts.remove (this);
     _disp->_mutex_t.unlock();
 }
 
 DefaultWatch::DefaultWatch (int fd, int flags, DefaultMainLoop *ed)
-        : _enabled (true), _fd (fd), _flags (flags), _state (0), _data (0), _disp (ed)
-{
+        : _enabled (true), _fd (fd), _flags (flags), _state (0), _data (0), _disp (ed) {
     _disp->_mutex_w.lock();
     _disp->_watches.push_back (this);
     _disp->_mutex_w.unlock();
 }
 
-DefaultWatch::~DefaultWatch()
-{
+DefaultWatch::~DefaultWatch() {
     _disp->_mutex_w.lock();
     _disp->_watches.remove (this);
     _disp->_mutex_w.unlock();
 }
 
-DefaultMutex::DefaultMutex()
-{
+DefaultMutex::DefaultMutex() {
     pthread_mutex_init (&_mutex, NULL);
 }
 
-DefaultMutex::~DefaultMutex()
-{
+DefaultMutex::~DefaultMutex() {
     pthread_mutex_destroy (&_mutex);
 }
 
-void DefaultMutex::lock()
-{
+void DefaultMutex::lock() {
     pthread_mutex_lock (&_mutex);
 }
 
-void DefaultMutex::unlock()
-{
+void DefaultMutex::unlock() {
     pthread_mutex_unlock (&_mutex);
 }
 
-DefaultMainLoop::DefaultMainLoop()
-{
+DefaultMainLoop::DefaultMainLoop() {
     if (pipe (_terminateFd) < 0) {
         throw ErrorFailed ("unable to create unamed pipe");
     }
 }
 
-DefaultMainLoop::~DefaultMainLoop()
-{
+DefaultMainLoop::~DefaultMainLoop() {
     _mutex_w.lock();
 
     DefaultWatches::iterator wi = _watches.begin();
@@ -140,13 +129,11 @@ DefaultMainLoop::~DefaultMainLoop()
     _mutex_t.unlock();
 }
 
-void DefaultMainLoop::terminate()
-{
+void DefaultMainLoop::terminate() {
     write (_terminateFd[1], " ", 1);
 }
 
-void DefaultMainLoop::dispatch()
-{
+void DefaultMainLoop::dispatch() {
     _mutex_w.lock();
 
     int nfd = _watches.size() + 1;
diff --git a/sflphone-common/libs/dbus-c++/src/glib-integration.cpp b/sflphone-common/libs/dbus-c++/src/glib-integration.cpp
index 1739670bfc49bb7eaa79ed55b8113caf5a161d39..8785608fa7f15b5c507d9fb576492ab4b00a56c3 100644
--- a/sflphone-common/libs/dbus-c++/src/glib-integration.cpp
+++ b/sflphone-common/libs/dbus-c++/src/glib-integration.cpp
@@ -31,27 +31,23 @@
 using namespace DBus;
 
 Glib::BusTimeout::BusTimeout (Timeout::Internal *ti, GMainContext *ctx, int priority)
-        : Timeout (ti), _ctx (ctx), _priority (priority), _source (NULL)
-{
+        : Timeout (ti), _ctx (ctx), _priority (priority), _source (NULL) {
     if (Timeout::enabled())
         _enable();
 }
 
-Glib::BusTimeout::~BusTimeout()
-{
+Glib::BusTimeout::~BusTimeout() {
     _disable();
 }
 
-void Glib::BusTimeout::toggle()
-{
+void Glib::BusTimeout::toggle() {
     debug_log ("glib: timeout %p toggled (%s)", this, Timeout::enabled() ? "on":"off");
 
     if (Timeout::enabled())	_enable();
     else			_disable();
 }
 
-gboolean Glib::BusTimeout::timeout_handler (gpointer data)
-{
+gboolean Glib::BusTimeout::timeout_handler (gpointer data) {
     Glib::BusTimeout *t = reinterpret_cast<Glib::BusTimeout *> (data);
 
     t->handle();
@@ -59,8 +55,7 @@ gboolean Glib::BusTimeout::timeout_handler (gpointer data)
     return TRUE;
 }
 
-void Glib::BusTimeout::_enable()
-{
+void Glib::BusTimeout::_enable() {
     if (_source)
         _disable(); // be sane
 
@@ -73,8 +68,7 @@ void Glib::BusTimeout::_enable()
     g_source_attach (_source, _ctx);
 }
 
-void Glib::BusTimeout::_disable()
-{
+void Glib::BusTimeout::_disable() {
     if (_source) {
         g_source_destroy (_source);
         _source = NULL;
@@ -86,24 +80,21 @@ struct BusSource {
     GPollFD poll;
 };
 
-static gboolean watch_prepare (GSource *source, gint *timeout)
-{
+static gboolean watch_prepare (GSource *source, gint *timeout) {
     //debug_log("glib: watch_prepare");
 
     *timeout = -1;
     return FALSE;
 }
 
-static gboolean watch_check (GSource *source)
-{
+static gboolean watch_check (GSource *source) {
     //debug_log("glib: watch_check");
 
     BusSource *io = (BusSource *) source;
     return io->poll.revents ? TRUE : FALSE;
 }
 
-static gboolean watch_dispatch (GSource *source, GSourceFunc callback, gpointer data)
-{
+static gboolean watch_dispatch (GSource *source, GSourceFunc callback, gpointer data) {
     debug_log ("glib: watch_dispatch");
 
     gboolean cb = callback (data);
@@ -118,27 +109,23 @@ static GSourceFuncs watch_funcs = {
 };
 
 Glib::BusWatch::BusWatch (Watch::Internal *wi, GMainContext *ctx, int priority)
-        : Watch (wi), _ctx (ctx), _priority (priority), _source (NULL)
-{
+        : Watch (wi), _ctx (ctx), _priority (priority), _source (NULL) {
     if (Watch::enabled())
         _enable();
 }
 
-Glib::BusWatch::~BusWatch()
-{
+Glib::BusWatch::~BusWatch() {
     _disable();
 }
 
-void Glib::BusWatch::toggle()
-{
+void Glib::BusWatch::toggle() {
     debug_log ("glib: watch %p toggled (%s)", this, Watch::enabled() ? "on":"off");
 
     if (Watch::enabled())	_enable();
     else			_disable();
 }
 
-gboolean Glib::BusWatch::watch_handler (gpointer data)
-{
+gboolean Glib::BusWatch::watch_handler (gpointer data) {
     Glib::BusWatch *w = reinterpret_cast<Glib::BusWatch *> (data);
 
     BusSource *io = (BusSource *) (w->_source);
@@ -162,8 +149,7 @@ gboolean Glib::BusWatch::watch_handler (gpointer data)
     return TRUE;
 }
 
-void Glib::BusWatch::_enable()
-{
+void Glib::BusWatch::_enable() {
     if (_source)
         _disable(); // be sane
 
@@ -202,8 +188,7 @@ void Glib::BusWatch::_enable()
     g_source_attach (_source, _ctx);
 }
 
-void Glib::BusWatch::_disable()
-{
+void Glib::BusWatch::_disable() {
     if (!_source)
         return;
 
@@ -228,8 +213,7 @@ struct DispatcherSource {
 };
 
 
-static gboolean dispatcher_prepare (GSource *source, gint *timeout)
-{
+static gboolean dispatcher_prepare (GSource *source, gint *timeout) {
     Dispatcher *dispatcher = ( (DispatcherSource*) source)->dispatcher;
 
     *timeout = -1;
@@ -237,16 +221,14 @@ static gboolean dispatcher_prepare (GSource *source, gint *timeout)
     return dispatcher->has_something_to_dispatch() ? TRUE:FALSE;
 }
 
-static gboolean dispatcher_check (GSource *source)
-{
+static gboolean dispatcher_check (GSource *source) {
     return FALSE;
 }
 
 static gboolean
 dispatcher_dispatch (GSource *source,
                      GSourceFunc callback,
-                     gpointer user_data)
-{
+                     gpointer user_data) {
     Dispatcher *dispatcher = ( (DispatcherSource*) source)->dispatcher;
 
     dispatcher->dispatch_pending();
@@ -261,12 +243,10 @@ static const GSourceFuncs dispatcher_funcs = {
 };
 
 Glib::BusDispatcher::BusDispatcher()
-        : _ctx (NULL), _priority (G_PRIORITY_DEFAULT), _source (NULL)
-{
+        : _ctx (NULL), _priority (G_PRIORITY_DEFAULT), _source (NULL) {
 }
 
-Glib::BusDispatcher::~BusDispatcher()
-{
+Glib::BusDispatcher::~BusDispatcher() {
     if (_source) {
         GSource *temp = _source;
         _source = NULL;
@@ -279,8 +259,7 @@ Glib::BusDispatcher::~BusDispatcher()
         g_main_context_unref (_ctx);
 }
 
-void Glib::BusDispatcher::attach (GMainContext *ctx)
-{
+void Glib::BusDispatcher::attach (GMainContext *ctx) {
     g_assert (_ctx == NULL); // just to be sane
 
     _ctx = ctx ? ctx : g_main_context_default();
@@ -294,8 +273,7 @@ void Glib::BusDispatcher::attach (GMainContext *ctx)
     g_source_attach (_source, _ctx);
 }
 
-Timeout *Glib::BusDispatcher::add_timeout (Timeout::Internal *wi)
-{
+Timeout *Glib::BusDispatcher::add_timeout (Timeout::Internal *wi) {
     Timeout *t = new Glib::BusTimeout (wi, _ctx, _priority);
 
     debug_log ("glib: added timeout %p (%s)", t, t->enabled() ? "on":"off");
@@ -303,15 +281,13 @@ Timeout *Glib::BusDispatcher::add_timeout (Timeout::Internal *wi)
     return t;
 }
 
-void Glib::BusDispatcher::rem_timeout (Timeout *t)
-{
+void Glib::BusDispatcher::rem_timeout (Timeout *t) {
     debug_log ("glib: removed timeout %p", t);
 
     delete t;
 }
 
-Watch *Glib::BusDispatcher::add_watch (Watch::Internal *wi)
-{
+Watch *Glib::BusDispatcher::add_watch (Watch::Internal *wi) {
     Watch *w = new Glib::BusWatch (wi, _ctx, _priority);
 
     debug_log ("glib: added watch %p (%s) fd=%d flags=%d",
@@ -320,14 +296,12 @@ Watch *Glib::BusDispatcher::add_watch (Watch::Internal *wi)
     return w;
 }
 
-void Glib::BusDispatcher::rem_watch (Watch *w)
-{
+void Glib::BusDispatcher::rem_watch (Watch *w) {
     debug_log ("glib: removed watch %p", w);
 
     delete w;
 }
 
-void Glib::BusDispatcher::set_priority (int priority)
-{
+void Glib::BusDispatcher::set_priority (int priority) {
     _priority = priority;
 }
diff --git a/sflphone-common/libs/dbus-c++/src/interface.cpp b/sflphone-common/libs/dbus-c++/src/interface.cpp
index aefcd1dea91bde9fe54765990b219d4e1cde01cd..95c11efdc41ff5f0e739c00307f7a2c13e7a759c 100644
--- a/sflphone-common/libs/dbus-c++/src/interface.cpp
+++ b/sflphone-common/libs/dbus-c++/src/interface.cpp
@@ -33,29 +33,24 @@
 using namespace DBus;
 
 Interface::Interface (const std::string &name)
-        : _name (name)
-{}
+        : _name (name) {}
 
-Interface::~Interface()
-{}
+Interface::~Interface() {}
 
-InterfaceAdaptor *AdaptorBase::find_interface (const std::string &name)
-{
+InterfaceAdaptor *AdaptorBase::find_interface (const std::string &name) {
     InterfaceAdaptorTable::const_iterator ii = _interfaces.find (name);
 
     return ii != _interfaces.end() ? ii->second : NULL;
 }
 
 InterfaceAdaptor::InterfaceAdaptor (const std::string &name)
-        : Interface (name)
-{
+        : Interface (name) {
     debug_log ("adding interface %s", name.c_str());
 
     _interfaces[name] = this;
 }
 
-Message InterfaceAdaptor::dispatch_method (const CallMessage &msg)
-{
+Message InterfaceAdaptor::dispatch_method (const CallMessage &msg) {
     const char *name = msg.member();
 
     MethodTable::iterator mi = _methods.find (name);
@@ -67,8 +62,7 @@ Message InterfaceAdaptor::dispatch_method (const CallMessage &msg)
     }
 }
 
-void InterfaceAdaptor::emit_signal (const SignalMessage &sig)
-{
+void InterfaceAdaptor::emit_signal (const SignalMessage &sig) {
     SignalMessage &sig2 = const_cast<SignalMessage &> (sig);
 
     if (sig2.interface() == NULL)
@@ -77,8 +71,7 @@ void InterfaceAdaptor::emit_signal (const SignalMessage &sig)
     _emit_signal (sig2);
 }
 
-Variant *InterfaceAdaptor::get_property (const std::string &name)
-{
+Variant *InterfaceAdaptor::get_property (const std::string &name) {
     PropertyTable::iterator pti = _properties.find (name);
 
     if (pti != _properties.end()) {
@@ -91,8 +84,7 @@ Variant *InterfaceAdaptor::get_property (const std::string &name)
     return NULL;
 }
 
-void InterfaceAdaptor::set_property (const std::string &name, Variant &value)
-{
+void InterfaceAdaptor::set_property (const std::string &name, Variant &value) {
     PropertyTable::iterator pti = _properties.find (name);
 
     if (pti != _properties.end()) {
@@ -112,23 +104,20 @@ void InterfaceAdaptor::set_property (const std::string &name, Variant &value)
     throw ErrorFailed ("requested property not found");
 }
 
-InterfaceProxy *ProxyBase::find_interface (const std::string &name)
-{
+InterfaceProxy *ProxyBase::find_interface (const std::string &name) {
     InterfaceProxyTable::const_iterator ii = _interfaces.find (name);
 
     return ii != _interfaces.end() ? ii->second : NULL;
 }
 
 InterfaceProxy::InterfaceProxy (const std::string &name)
-        : Interface (name)
-{
+        : Interface (name) {
     debug_log ("adding interface %s", name.c_str());
 
     _interfaces[name] = this;
 }
 
-bool InterfaceProxy::dispatch_signal (const SignalMessage &msg)
-{
+bool InterfaceProxy::dispatch_signal (const SignalMessage &msg) {
     const char *name = msg.member();
 
     SignalTable::iterator si = _signals.find (name);
@@ -145,8 +134,7 @@ bool InterfaceProxy::dispatch_signal (const SignalMessage &msg)
     }
 }
 
-Message InterfaceProxy::invoke_method (const CallMessage &call)
-{
+Message InterfaceProxy::invoke_method (const CallMessage &call) {
     CallMessage &call2 = const_cast<CallMessage &> (call);
 
     if (call.interface() == NULL)
@@ -155,8 +143,7 @@ Message InterfaceProxy::invoke_method (const CallMessage &call)
     return _invoke_method (call2);
 }
 
-bool InterfaceProxy::invoke_method_noreply (const CallMessage &call)
-{
+bool InterfaceProxy::invoke_method_noreply (const CallMessage &call) {
     CallMessage &call2 = const_cast<CallMessage &> (call);
 
     if (call.interface() == NULL)
diff --git a/sflphone-common/libs/dbus-c++/src/introspection.cpp b/sflphone-common/libs/dbus-c++/src/introspection.cpp
index 41f6439f4aad8eae013e776a3909c96ad95b1c37..15eb5fcc0df143c64b8bc287d0e8163e36b575a3 100644
--- a/sflphone-common/libs/dbus-c++/src/introspection.cpp
+++ b/sflphone-common/libs/dbus-c++/src/introspection.cpp
@@ -38,13 +38,11 @@ using namespace DBus;
 static const char *introspectable_name = "org.freedesktop.DBus.Introspectable";
 
 IntrospectableAdaptor::IntrospectableAdaptor()
-        : InterfaceAdaptor (introspectable_name)
-{
+        : InterfaceAdaptor (introspectable_name) {
     register_method (IntrospectableAdaptor, Introspect, Introspect);
 }
 
-Message IntrospectableAdaptor::Introspect (const CallMessage &call)
-{
+Message IntrospectableAdaptor::Introspect (const CallMessage &call) {
     debug_log ("requested introspection data");
 
     std::ostringstream xml;
@@ -143,8 +141,7 @@ Message IntrospectableAdaptor::Introspect (const CallMessage &call)
     return reply;
 }
 
-IntrospectedInterface *const IntrospectableAdaptor::introspect() const
-{
+IntrospectedInterface *const IntrospectableAdaptor::introspect() const {
     static IntrospectedArgument Introspect_args[] = {
         { "data", "s", false },
         { 0, 0, 0 }
@@ -169,11 +166,9 @@ IntrospectedInterface *const IntrospectableAdaptor::introspect() const
 }
 
 IntrospectableProxy::IntrospectableProxy()
-        : InterfaceProxy (introspectable_name)
-{}
+        : InterfaceProxy (introspectable_name) {}
 
-std::string IntrospectableProxy::Introspect()
-{
+std::string IntrospectableProxy::Introspect() {
     DBus::CallMessage call;
 
     call.member ("Introspect");
diff --git a/sflphone-common/libs/dbus-c++/src/message.cpp b/sflphone-common/libs/dbus-c++/src/message.cpp
index 4f3425e08dc23c67edac9d849f717d5a2d29ef11..741aab5a19a019fb2dea7bfce5901f078d50e1d0 100644
--- a/sflphone-common/libs/dbus-c++/src/message.cpp
+++ b/sflphone-common/libs/dbus-c++/src/message.cpp
@@ -38,233 +38,194 @@ using namespace DBus;
 /*
 */
 
-int MessageIter::type()
-{
+int MessageIter::type() {
     return dbus_message_iter_get_arg_type ( (DBusMessageIter *) &_iter);
 }
 
-bool MessageIter::at_end()
-{
+bool MessageIter::at_end() {
     return type() == DBUS_TYPE_INVALID;
 }
 
-bool MessageIter::has_next()
-{
+bool MessageIter::has_next() {
     return dbus_message_iter_has_next ( (DBusMessageIter *) &_iter);
 }
 
-MessageIter &MessageIter::operator ++()
-{
+MessageIter &MessageIter::operator ++() {
     dbus_message_iter_next ( (DBusMessageIter *) &_iter);
     return (*this);
 }
 
-MessageIter MessageIter::operator ++ (int)
-{
+MessageIter MessageIter::operator ++ (int) {
     MessageIter copy (*this);
     ++ (*this);
     return copy;
 }
 
-bool MessageIter::append_basic (int type_id, void *value)
-{
+bool MessageIter::append_basic (int type_id, void *value) {
     return dbus_message_iter_append_basic ( (DBusMessageIter *) &_iter, type_id, value);
 }
 
-void MessageIter::get_basic (int type_id, void *ptr)
-{
+void MessageIter::get_basic (int type_id, void *ptr) {
     if (type() != type_id)
         throw ErrorInvalidArgs ("type mismatch");
 
     dbus_message_iter_get_basic ( (DBusMessageIter *) _iter, ptr);
 }
 
-bool MessageIter::append_byte (unsigned char b)
-{
+bool MessageIter::append_byte (unsigned char b) {
     return append_basic (DBUS_TYPE_BYTE, &b);
 }
 
-unsigned char MessageIter::get_byte()
-{
+unsigned char MessageIter::get_byte() {
     unsigned char b;
     get_basic (DBUS_TYPE_BYTE, &b);
     return b;
 }
 
-bool MessageIter::append_bool (bool b)
-{
+bool MessageIter::append_bool (bool b) {
     dbus_bool_t db = b;
     return append_basic (DBUS_TYPE_BOOLEAN, &db);
 }
 
-bool MessageIter::get_bool()
-{
+bool MessageIter::get_bool() {
     dbus_bool_t db;
     get_basic (DBUS_TYPE_BOOLEAN, &db);
     return (bool) db;
 }
 
-bool MessageIter::append_int16 (signed short i)
-{
+bool MessageIter::append_int16 (signed short i) {
     return append_basic (DBUS_TYPE_INT16, &i);
 }
 
-signed short MessageIter::get_int16()
-{
+signed short MessageIter::get_int16() {
     signed short i;
     get_basic (DBUS_TYPE_INT16, &i);
     return i;
 }
 
-bool MessageIter::append_uint16 (unsigned short u)
-{
+bool MessageIter::append_uint16 (unsigned short u) {
     return append_basic (DBUS_TYPE_UINT16, &u);
 }
 
-unsigned short MessageIter::get_uint16()
-{
+unsigned short MessageIter::get_uint16() {
     unsigned short u;
     get_basic (DBUS_TYPE_UINT16, &u);
     return u;
 }
 
-bool MessageIter::append_int32 (signed int i)
-{
+bool MessageIter::append_int32 (signed int i) {
     return append_basic (DBUS_TYPE_INT32, &i);
 }
 
-signed int MessageIter::get_int32()
-{
+signed int MessageIter::get_int32() {
     signed int i;
     get_basic (DBUS_TYPE_INT32, &i);
     return i;
 }
 
-bool MessageIter::append_uint32 (unsigned int u)
-{
+bool MessageIter::append_uint32 (unsigned int u) {
     return append_basic (DBUS_TYPE_UINT32, &u);
 }
 
-unsigned int MessageIter::get_uint32()
-{
+unsigned int MessageIter::get_uint32() {
     unsigned int u;
     get_basic (DBUS_TYPE_UINT32, &u);
     return u;
 }
 
-signed long long MessageIter::get_int64()
-{
+signed long long MessageIter::get_int64() {
     signed long long i;
     get_basic (DBUS_TYPE_INT64, &i);
     return i;
 }
 
-bool MessageIter::append_int64 (signed long long i)
-{
+bool MessageIter::append_int64 (signed long long i) {
     return append_basic (DBUS_TYPE_INT64, &i);
 }
 
-unsigned long long MessageIter::get_uint64()
-{
+unsigned long long MessageIter::get_uint64() {
     unsigned long long u;
     get_basic (DBUS_TYPE_UINT64, &u);
     return u;
 }
 
-bool MessageIter::append_uint64 (unsigned long long u)
-{
+bool MessageIter::append_uint64 (unsigned long long u) {
     return append_basic (DBUS_TYPE_UINT64, &u);
 }
 
-double MessageIter::get_double()
-{
+double MessageIter::get_double() {
     double d;
     get_basic (DBUS_TYPE_DOUBLE, &d);
     return d;
 }
 
-bool MessageIter::append_double (double d)
-{
+bool MessageIter::append_double (double d) {
     return append_basic (DBUS_TYPE_DOUBLE, &d);
 }
 
-bool MessageIter::append_string (const char *chars)
-{
+bool MessageIter::append_string (const char *chars) {
     return append_basic (DBUS_TYPE_STRING, &chars);
 }
 
-const char *MessageIter::get_string()
-{
+const char *MessageIter::get_string() {
     char *chars;
     get_basic (DBUS_TYPE_STRING, &chars);
     return chars;
 }
 
-bool MessageIter::append_path (const char *chars)
-{
+bool MessageIter::append_path (const char *chars) {
     return append_basic (DBUS_TYPE_OBJECT_PATH, &chars);
 }
 
-const char *MessageIter::get_path()
-{
+const char *MessageIter::get_path() {
     char *chars;
     get_basic (DBUS_TYPE_OBJECT_PATH, &chars);
     return chars;
 }
 
-bool MessageIter::append_signature (const char *chars)
-{
+bool MessageIter::append_signature (const char *chars) {
     return append_basic (DBUS_TYPE_SIGNATURE, &chars);
 }
 
-const char *MessageIter::get_signature()
-{
+const char *MessageIter::get_signature() {
     char *chars;
     get_basic (DBUS_TYPE_SIGNATURE, &chars);
     return chars;
 }
 
-MessageIter MessageIter::recurse()
-{
+MessageIter MessageIter::recurse() {
     MessageIter iter (msg());
     dbus_message_iter_recurse ( (DBusMessageIter *) &_iter, (DBusMessageIter *) & (iter._iter));
     return iter;
 }
 
-char *MessageIter::signature() const
-{
+char *MessageIter::signature() const {
     return dbus_message_iter_get_signature ( (DBusMessageIter *) &_iter);
 }
 
-bool MessageIter::append_array (char type, const void *ptr, size_t length)
-{
+bool MessageIter::append_array (char type, const void *ptr, size_t length) {
     return dbus_message_iter_append_fixed_array ( (DBusMessageIter *) &_iter, type, &ptr, length);
 }
 
-int MessageIter::array_type()
-{
+int MessageIter::array_type() {
     return dbus_message_iter_get_element_type ( (DBusMessageIter *) &_iter);
 }
 
-int MessageIter::get_array (void *ptr)
-{
+int MessageIter::get_array (void *ptr) {
     int length;
     dbus_message_iter_get_fixed_array ( (DBusMessageIter *) &_iter, ptr, &length);
     return length;
 }
 
-bool MessageIter::is_array()
-{
+bool MessageIter::is_array() {
     return dbus_message_iter_get_arg_type ( (DBusMessageIter *) &_iter) == DBUS_TYPE_ARRAY;
 }
 
-bool MessageIter::is_dict()
-{
+bool MessageIter::is_dict() {
     return is_array() && dbus_message_iter_get_element_type ( (DBusMessageIter *) _iter) == DBUS_TYPE_DICT_ENTRY;
 }
 
-MessageIter MessageIter::new_array (const char *sig)
-{
+MessageIter MessageIter::new_array (const char *sig) {
     MessageIter arr (msg());
     dbus_message_iter_open_container (
         (DBusMessageIter *) &_iter, DBUS_TYPE_ARRAY, sig, (DBusMessageIter *) & (arr._iter)
@@ -272,8 +233,7 @@ MessageIter MessageIter::new_array (const char *sig)
     return arr;
 }
 
-MessageIter MessageIter::new_variant (const char *sig)
-{
+MessageIter MessageIter::new_variant (const char *sig) {
     MessageIter var (msg());
     dbus_message_iter_open_container (
         (DBusMessageIter *) _iter, DBUS_TYPE_VARIANT, sig, (DBusMessageIter *) & (var._iter)
@@ -281,8 +241,7 @@ MessageIter MessageIter::new_variant (const char *sig)
     return var;
 }
 
-MessageIter MessageIter::new_struct()
-{
+MessageIter MessageIter::new_struct() {
     MessageIter stu (msg());
     dbus_message_iter_open_container (
         (DBusMessageIter *) _iter, DBUS_TYPE_STRUCT, NULL, (DBusMessageIter *) & (stu._iter)
@@ -290,8 +249,7 @@ MessageIter MessageIter::new_struct()
     return stu;
 }
 
-MessageIter MessageIter::new_dict_entry()
-{
+MessageIter MessageIter::new_dict_entry() {
     MessageIter ent (msg());
     dbus_message_iter_open_container (
         (DBusMessageIter *) _iter, DBUS_TYPE_DICT_ENTRY, NULL, (DBusMessageIter *) & (ent._iter)
@@ -299,13 +257,11 @@ MessageIter MessageIter::new_dict_entry()
     return ent;
 }
 
-void MessageIter::close_container (MessageIter &container)
-{
+void MessageIter::close_container (MessageIter &container) {
     dbus_message_iter_close_container ( (DBusMessageIter *) &_iter, (DBusMessageIter *) & (container._iter));
 }
 
-static bool is_basic_type (int typecode)
-{
+static bool is_basic_type (int typecode) {
     switch (typecode) {
 
         case 'y':
@@ -338,8 +294,7 @@ static bool is_basic_type (int typecode)
     }
 }
 
-void MessageIter::copy_data (MessageIter &to)
-{
+void MessageIter::copy_data (MessageIter &to) {
     for (MessageIter &from = *this; !from.at_end(); ++from) {
         if (is_basic_type (from.type())) {
             debug_log ("copying basic type: %c", from.type());
@@ -373,29 +328,24 @@ void MessageIter::copy_data (MessageIter &to)
 */
 
 Message::Message()
-        : _pvt (new Private)
-{
+        : _pvt (new Private) {
 }
 
 Message::Message (Message::Private *p, bool incref)
-        : _pvt (p)
-{
+        : _pvt (p) {
     if (_pvt->msg && incref) dbus_message_ref (_pvt->msg);
 }
 
 Message::Message (const Message &m)
-        : _pvt (m._pvt)
-{
+        : _pvt (m._pvt) {
     dbus_message_ref (_pvt->msg);
 }
 
-Message::~Message()
-{
+Message::~Message() {
     dbus_message_unref (_pvt->msg);
 }
 
-Message &Message::operator = (const Message &m)
-{
+Message &Message::operator = (const Message &m) {
     if (&m != this) {
         dbus_message_unref (_pvt->msg);
         _pvt = m._pvt;
@@ -405,14 +355,12 @@ Message &Message::operator = (const Message &m)
     return *this;
 }
 
-Message Message::copy()
-{
+Message Message::copy() {
     Private *pvt = new Private (dbus_message_copy (_pvt->msg));
     return Message (pvt);
 }
 
-bool Message::append (int first_type, ...)
-{
+bool Message::append (int first_type, ...) {
     va_list vl;
     va_start (vl, first_type);
 
@@ -422,70 +370,57 @@ bool Message::append (int first_type, ...)
     return b;
 }
 
-void Message::terminate()
-{
+void Message::terminate() {
     dbus_message_append_args (_pvt->msg, DBUS_TYPE_INVALID);
 }
 
-int Message::type() const
-{
+int Message::type() const {
     return dbus_message_get_type (_pvt->msg);
 }
 
-int Message::serial() const
-{
+int Message::serial() const {
     return dbus_message_get_serial (_pvt->msg);
 }
 
-int Message::reply_serial() const
-{
+int Message::reply_serial() const {
     return dbus_message_get_reply_serial (_pvt->msg);
 }
 
-bool Message::reply_serial (int s)
-{
+bool Message::reply_serial (int s) {
     return dbus_message_set_reply_serial (_pvt->msg, s);
 }
 
-const char *Message::sender() const
-{
+const char *Message::sender() const {
     return dbus_message_get_sender (_pvt->msg);
 }
 
-bool Message::sender (const char *s)
-{
+bool Message::sender (const char *s) {
     return dbus_message_set_sender (_pvt->msg, s);
 }
 
-const char *Message::destination() const
-{
+const char *Message::destination() const {
     return dbus_message_get_destination (_pvt->msg);
 }
 
-bool Message::destination (const char *s)
-{
+bool Message::destination (const char *s) {
     return dbus_message_set_destination (_pvt->msg, s);
 }
 
-bool Message::is_error() const
-{
+bool Message::is_error() const {
     return type() == DBUS_MESSAGE_TYPE_ERROR;
 }
 
-bool Message::is_signal (const char *interface, const char *member) const
-{
+bool Message::is_signal (const char *interface, const char *member) const {
     return dbus_message_is_signal (_pvt->msg, interface, member);
 }
 
-MessageIter Message::writer()
-{
+MessageIter Message::writer() {
     MessageIter iter (*this);
     dbus_message_iter_init_append (_pvt->msg, (DBusMessageIter *) & (iter._iter));
     return iter;
 }
 
-MessageIter Message::reader() const
-{
+MessageIter Message::reader() const {
     MessageIter iter (const_cast<Message &> (*this));
     dbus_message_iter_init (_pvt->msg, (DBusMessageIter *) & (iter._iter));
     return iter;
@@ -494,153 +429,131 @@ MessageIter Message::reader() const
 /*
 */
 
-ErrorMessage::ErrorMessage()
-{
+ErrorMessage::ErrorMessage() {
     _pvt->msg = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
 }
 
-ErrorMessage::ErrorMessage (const Message &to_reply, const char *name, const char *message)
-{
+ErrorMessage::ErrorMessage (const Message &to_reply, const char *name, const char *message) {
     _pvt->msg = dbus_message_new_error (to_reply._pvt->msg, name, message);
 }
 
-bool ErrorMessage::operator == (const ErrorMessage &m) const
-{
+bool ErrorMessage::operator == (const ErrorMessage &m) const {
     return dbus_message_is_error (_pvt->msg, m.name());
 }
 
-const char *ErrorMessage::name() const
-{
+const char *ErrorMessage::name() const {
     return dbus_message_get_error_name (_pvt->msg);
 }
 
-bool ErrorMessage::name (const char *n)
-{
+bool ErrorMessage::name (const char *n) {
     return dbus_message_set_error_name (_pvt->msg, n);
 }
 
 /*
 */
 
-SignalMessage::SignalMessage (const char *name)
-{
+SignalMessage::SignalMessage (const char *name) {
     _pvt->msg = dbus_message_new (DBUS_MESSAGE_TYPE_SIGNAL);
     member (name);
 }
 
-SignalMessage::SignalMessage (const char *path, const char *interface, const char *name)
-{
+SignalMessage::SignalMessage (const char *path, const char *interface, const char *name) {
     _pvt->msg = dbus_message_new_signal (path, interface, name);
 }
 
-bool SignalMessage::operator == (const SignalMessage &m) const
-{
+bool SignalMessage::operator == (const SignalMessage &m) const {
     return dbus_message_is_signal (_pvt->msg, m.interface(), m.member());
 }
 
 const char *SignalMessage::interface() const {
-        return dbus_message_get_interface (_pvt->msg);
-    }
+    return dbus_message_get_interface (_pvt->msg);
+}
 
-bool SignalMessage::interface (const char *i) {
+bool SignalMessage::interface (const char *i)
+{
     return dbus_message_set_interface (_pvt->msg, i);
 }
 
-const char *SignalMessage::member() const
-{
+const char *SignalMessage::member() const {
     return dbus_message_get_member (_pvt->msg);
 }
 
-bool SignalMessage::member (const char *m)
-{
+bool SignalMessage::member (const char *m) {
     return dbus_message_set_member (_pvt->msg, m);
 }
 
-const char *SignalMessage::path() const
-{
+const char *SignalMessage::path() const {
     return dbus_message_get_path (_pvt->msg);
 }
 
-char ** SignalMessage::path_split() const
-{
+char ** SignalMessage::path_split() const {
     char ** p;
     dbus_message_get_path_decomposed (_pvt->msg, &p);	//todo: return as a std::vector ?
     return p;
 }
 
-bool SignalMessage::path (const char *p)
-{
+bool SignalMessage::path (const char *p) {
     return dbus_message_set_path (_pvt->msg, p);
 }
 
 /*
 */
 
-CallMessage::CallMessage()
-{
+CallMessage::CallMessage() {
     _pvt->msg = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_CALL);
 }
 
-CallMessage::CallMessage (const char *dest, const char *path, const char *iface, const char *method)
-{
+CallMessage::CallMessage (const char *dest, const char *path, const char *iface, const char *method) {
     _pvt->msg = dbus_message_new_method_call (dest, path, iface, method);
 }
 
-bool CallMessage::operator == (const CallMessage &m) const
-{
+bool CallMessage::operator == (const CallMessage &m) const {
     return dbus_message_is_method_call (_pvt->msg, m.interface(), m.member());
 }
 
 const char *CallMessage::interface() const {
-        return dbus_message_get_interface (_pvt->msg);
-    }
+    return dbus_message_get_interface (_pvt->msg);
+}
 
-bool CallMessage::interface (const char *i) {
+bool CallMessage::interface (const char *i)
+{
     return dbus_message_set_interface (_pvt->msg, i);
 }
 
-const char *CallMessage::member() const
-{
+const char *CallMessage::member() const {
     return dbus_message_get_member (_pvt->msg);
 }
 
-bool CallMessage::member (const char *m)
-{
+bool CallMessage::member (const char *m) {
     return dbus_message_set_member (_pvt->msg, m);
 }
 
-const char *CallMessage::path() const
-{
+const char *CallMessage::path() const {
     return dbus_message_get_path (_pvt->msg);
 }
 
-char ** CallMessage::path_split() const
-{
+char ** CallMessage::path_split() const {
     char ** p;
     dbus_message_get_path_decomposed (_pvt->msg, &p);
     return p;
 }
 
-bool CallMessage::path (const char *p)
-{
+bool CallMessage::path (const char *p) {
     return dbus_message_set_path (_pvt->msg, p);
 }
 
-const char *CallMessage::signature() const
-{
+const char *CallMessage::signature() const {
     return dbus_message_get_signature (_pvt->msg);
 }
 
 /*
 */
 
-ReturnMessage::ReturnMessage (const CallMessage &callee)
-{
+ReturnMessage::ReturnMessage (const CallMessage &callee) {
     _pvt = new Private (dbus_message_new_method_return (callee._pvt->msg));
 }
 
-const char *ReturnMessage::signature() const
-{
+const char *ReturnMessage::signature() const {
     return dbus_message_get_signature (_pvt->msg);
 }
 
diff --git a/sflphone-common/libs/dbus-c++/src/object.cpp b/sflphone-common/libs/dbus-c++/src/object.cpp
index 4fa8cd15d11a099afae8a3ccbf52cbe2d0f1da90..a54122fdc8d27ec10cd4a277467bb9ee94688751 100644
--- a/sflphone-common/libs/dbus-c++/src/object.cpp
+++ b/sflphone-common/libs/dbus-c++/src/object.cpp
@@ -40,12 +40,10 @@
 using namespace DBus;
 
 Object::Object (Connection &conn, const Path &path, const char *service)
-        : _conn (conn), _path (path), _service (service ? service : "")
-{
+        : _conn (conn), _path (path), _service (service ? service : "") {
 }
 
-Object::~Object()
-{
+Object::~Object() {
 }
 
 struct ObjectAdaptor::Private {
@@ -59,13 +57,11 @@ static DBusObjectPathVTable _vtable = {
     NULL, NULL, NULL, NULL
 };
 
-void ObjectAdaptor::Private::unregister_function_stub (DBusConnection *conn, void *data)
-{
+void ObjectAdaptor::Private::unregister_function_stub (DBusConnection *conn, void *data) {
     //TODO: what do we have to do here ?
 }
 
-DBusHandlerResult ObjectAdaptor::Private::message_function_stub (DBusConnection *, DBusMessage *dmsg, void *data)
-{
+DBusHandlerResult ObjectAdaptor::Private::message_function_stub (DBusConnection *, DBusMessage *dmsg, void *data) {
     ObjectAdaptor *o = static_cast<ObjectAdaptor *> (data);
 
     if (o) {
@@ -89,8 +85,7 @@ DBusHandlerResult ObjectAdaptor::Private::message_function_stub (DBusConnection
 typedef std::map<Path, ObjectAdaptor *> ObjectAdaptorTable;
 static ObjectAdaptorTable _adaptor_table;
 
-ObjectAdaptor *ObjectAdaptor::from_path (const Path &path)
-{
+ObjectAdaptor *ObjectAdaptor::from_path (const Path &path) {
     ObjectAdaptorTable::iterator ati = _adaptor_table.find (path);
 
     if (ati != _adaptor_table.end())
@@ -99,8 +94,7 @@ ObjectAdaptor *ObjectAdaptor::from_path (const Path &path)
     return NULL;
 }
 
-ObjectAdaptorPList ObjectAdaptor::from_path_prefix (const std::string &prefix)
-{
+ObjectAdaptorPList ObjectAdaptor::from_path_prefix (const std::string &prefix) {
     ObjectAdaptorPList ali;
 
     ObjectAdaptorTable::iterator ati = _adaptor_table.begin();
@@ -117,8 +111,7 @@ ObjectAdaptorPList ObjectAdaptor::from_path_prefix (const std::string &prefix)
     return ali;
 }
 
-ObjectPathList ObjectAdaptor::child_nodes_from_prefix (const std::string &prefix)
-{
+ObjectPathList ObjectAdaptor::child_nodes_from_prefix (const std::string &prefix) {
     ObjectPathList ali;
 
     ObjectAdaptorTable::iterator ati = _adaptor_table.begin();
@@ -143,18 +136,15 @@ ObjectPathList ObjectAdaptor::child_nodes_from_prefix (const std::string &prefix
 }
 
 ObjectAdaptor::ObjectAdaptor (Connection &conn, const Path &path)
-        : Object (conn, path, conn.unique_name())
-{
+        : Object (conn, path, conn.unique_name()) {
     register_obj();
 }
 
-ObjectAdaptor::~ObjectAdaptor()
-{
+ObjectAdaptor::~ObjectAdaptor() {
     unregister_obj();
 }
 
-void ObjectAdaptor::register_obj()
-{
+void ObjectAdaptor::register_obj() {
     debug_log ("registering local object %s", path().c_str());
 
     if (!dbus_connection_register_object_path (conn()._pvt->conn, path().c_str(), &_vtable, this)) {
@@ -164,8 +154,7 @@ void ObjectAdaptor::register_obj()
     _adaptor_table[path() ] = this;
 }
 
-void ObjectAdaptor::unregister_obj()
-{
+void ObjectAdaptor::unregister_obj() {
     _adaptor_table.erase (path());
 
     debug_log ("unregistering local object %s", path().c_str());
@@ -173,8 +162,7 @@ void ObjectAdaptor::unregister_obj()
     dbus_connection_unregister_object_path (conn()._pvt->conn, path().c_str());
 }
 
-void ObjectAdaptor::_emit_signal (SignalMessage &sig)
-{
+void ObjectAdaptor::_emit_signal (SignalMessage &sig) {
     sig.path (path().c_str());
 
     conn().send (sig);
@@ -184,8 +172,7 @@ struct ReturnLaterError {
     const Tag *tag;
 };
 
-bool ObjectAdaptor::handle_message (const Message &msg)
-{
+bool ObjectAdaptor::handle_message (const Message &msg) {
     switch (msg.type()) {
 
         case DBUS_MESSAGE_TYPE_METHOD_CALL: {
@@ -221,14 +208,12 @@ bool ObjectAdaptor::handle_message (const Message &msg)
     }
 }
 
-void ObjectAdaptor::return_later (const Tag *tag)
-{
+void ObjectAdaptor::return_later (const Tag *tag) {
     ReturnLaterError rle = { tag };
     throw rle;
 }
 
-void ObjectAdaptor::return_now (Continuation *ret)
-{
+void ObjectAdaptor::return_now (Continuation *ret) {
     ret->_conn.send (ret->_return);
 
     ContinuationMap::iterator di = _continuations.find (ret->_tag);
@@ -238,8 +223,7 @@ void ObjectAdaptor::return_now (Continuation *ret)
     _continuations.erase (di);
 }
 
-void ObjectAdaptor::return_error (Continuation *ret, const Error error)
-{
+void ObjectAdaptor::return_error (Continuation *ret, const Error error) {
     ret->_conn.send (ErrorMessage (ret->_call, error.name(), error.message()));
 
     ContinuationMap::iterator di = _continuations.find (ret->_tag);
@@ -249,16 +233,14 @@ void ObjectAdaptor::return_error (Continuation *ret, const Error error)
     _continuations.erase (di);
 }
 
-ObjectAdaptor::Continuation *ObjectAdaptor::find_continuation (const Tag *tag)
-{
+ObjectAdaptor::Continuation *ObjectAdaptor::find_continuation (const Tag *tag) {
     ContinuationMap::iterator di = _continuations.find (tag);
 
     return di != _continuations.end() ? di->second : NULL;
 }
 
 ObjectAdaptor::Continuation::Continuation (Connection &conn, const CallMessage &call, const Tag *tag)
-        : _conn (conn), _call (call), _return (_call), _tag (tag)
-{
+        : _conn (conn), _call (call), _return (_call), _tag (tag) {
     _writer = _return.writer(); //todo: verify
 }
 
@@ -266,18 +248,15 @@ ObjectAdaptor::Continuation::Continuation (Connection &conn, const CallMessage &
 */
 
 ObjectProxy::ObjectProxy (Connection &conn, const Path &path, const char *service)
-        : Object (conn, path, service)
-{
+        : Object (conn, path, service) {
     register_obj();
 }
 
-ObjectProxy::~ObjectProxy()
-{
+ObjectProxy::~ObjectProxy() {
     unregister_obj();
 }
 
-void ObjectProxy::register_obj()
-{
+void ObjectProxy::register_obj() {
     debug_log ("registering remote object %s", path().c_str());
 
     _filtered = new Callback<ObjectProxy, bool, const Message &> (this, &ObjectProxy::handle_message);
@@ -293,8 +272,7 @@ void ObjectProxy::register_obj()
     }
 }
 
-void ObjectProxy::unregister_obj()
-{
+void ObjectProxy::unregister_obj() {
     debug_log ("unregistering remote object %s", path().c_str());
 
     InterfaceProxyTable::const_iterator ii = _interfaces.begin();
@@ -308,8 +286,7 @@ void ObjectProxy::unregister_obj()
     conn().remove_filter (_filtered);
 }
 
-Message ObjectProxy::_invoke_method (CallMessage &call)
-{
+Message ObjectProxy::_invoke_method (CallMessage &call) {
     if (call.path() == NULL)
         call.path (path().c_str());
 
@@ -319,8 +296,7 @@ Message ObjectProxy::_invoke_method (CallMessage &call)
     return conn().send_blocking (call);
 }
 
-bool ObjectProxy::_invoke_method_noreply (CallMessage &call)
-{
+bool ObjectProxy::_invoke_method_noreply (CallMessage &call) {
     if (call.path() == NULL)
         call.path (path().c_str());
 
@@ -330,8 +306,7 @@ bool ObjectProxy::_invoke_method_noreply (CallMessage &call)
     return conn().send (call);
 }
 
-bool ObjectProxy::handle_message (const Message &msg)
-{
+bool ObjectProxy::handle_message (const Message &msg) {
     switch (msg.type()) {
 
         case DBUS_MESSAGE_TYPE_SIGNAL: {
diff --git a/sflphone-common/libs/dbus-c++/src/pendingcall.cpp b/sflphone-common/libs/dbus-c++/src/pendingcall.cpp
index 775561c21c3a733e99b1f2c0c17c7a7558245936..172e3e6d3932bc50c7a708446bebbb5ee8a1c866 100644
--- a/sflphone-common/libs/dbus-c++/src/pendingcall.cpp
+++ b/sflphone-common/libs/dbus-c++/src/pendingcall.cpp
@@ -36,22 +36,19 @@
 using namespace DBus;
 
 PendingCall::Private::Private (DBusPendingCall *dpc)
-        : call (dpc), dataslot (-1)
-{
+        : call (dpc), dataslot (-1) {
     if (!dbus_pending_call_allocate_data_slot (&dataslot)) {
         throw ErrorNoMemory ("Unable to allocate data slot");
     }
 }
 
-PendingCall::Private::~Private()
-{
+PendingCall::Private::~Private() {
     if (dataslot != -1) {
         dbus_pending_call_allocate_data_slot (&dataslot);
     }
 }
 
-void PendingCall::Private::notify_stub (DBusPendingCall *dpc, void *data)
-{
+void PendingCall::Private::notify_stub (DBusPendingCall *dpc, void *data) {
     PendingCall::Private *pvt = static_cast<PendingCall::Private *> (data);
 
     PendingCall pc (pvt);
@@ -59,26 +56,22 @@ void PendingCall::Private::notify_stub (DBusPendingCall *dpc, void *data)
 }
 
 PendingCall::PendingCall (PendingCall::Private *p)
-        : _pvt (p)
-{
+        : _pvt (p) {
     if (!dbus_pending_call_set_notify (_pvt->call, Private::notify_stub, p, NULL)) {
         throw ErrorNoMemory ("Unable to initialize pending call");
     }
 }
 
 PendingCall::PendingCall (const PendingCall &c)
-        : _pvt (c._pvt)
-{
+        : _pvt (c._pvt) {
     dbus_pending_call_ref (_pvt->call);
 }
 
-PendingCall::~PendingCall()
-{
+PendingCall::~PendingCall() {
     dbus_pending_call_unref (_pvt->call);
 }
 
-PendingCall &PendingCall::operator = (const PendingCall &c)
-{
+PendingCall &PendingCall::operator = (const PendingCall &c) {
     if (&c != this) {
         dbus_pending_call_unref (_pvt->call);
         _pvt = c._pvt;
@@ -88,40 +81,33 @@ PendingCall &PendingCall::operator = (const PendingCall &c)
     return *this;
 }
 
-bool PendingCall::completed()
-{
+bool PendingCall::completed() {
     return dbus_pending_call_get_completed (_pvt->call);
 }
 
-void PendingCall::cancel()
-{
+void PendingCall::cancel() {
     dbus_pending_call_cancel (_pvt->call);
 }
 
-void PendingCall::block()
-{
+void PendingCall::block() {
     dbus_pending_call_block (_pvt->call);
 }
 
-void PendingCall::data (void *p)
-{
+void PendingCall::data (void *p) {
     if (!dbus_pending_call_set_data (_pvt->call, _pvt->dataslot, p, NULL)) {
         throw ErrorNoMemory ("Unable to initialize data slot");
     }
 }
 
-void *PendingCall::data()
-{
+void *PendingCall::data() {
     return dbus_pending_call_get_data (_pvt->call, _pvt->dataslot);
 }
 
-Slot<void, PendingCall &>& PendingCall::slot()
-{
+Slot<void, PendingCall &>& PendingCall::slot() {
     return _pvt->slot;
 }
 
-Message PendingCall::steal_reply()
-{
+Message PendingCall::steal_reply() {
     DBusMessage *dmsg = dbus_pending_call_steal_reply (_pvt->call);
 
     if (!dmsg) {
diff --git a/sflphone-common/libs/dbus-c++/src/property.cpp b/sflphone-common/libs/dbus-c++/src/property.cpp
index e8b02fdaded719b0b8d9e763e0dc42e7e9f8b42c..0afccd9b4cc7e9e3c311ae35f803e98eda540fe0 100644
--- a/sflphone-common/libs/dbus-c++/src/property.cpp
+++ b/sflphone-common/libs/dbus-c++/src/property.cpp
@@ -35,14 +35,12 @@ using namespace DBus;
 static const char *properties_name = "org.freedesktop.DBus.Properties";
 
 PropertiesAdaptor::PropertiesAdaptor()
-        : InterfaceAdaptor (properties_name)
-{
+        : InterfaceAdaptor (properties_name) {
     register_method (PropertiesAdaptor, Get, Get);
     register_method (PropertiesAdaptor, Set, Set);
 }
 
-Message PropertiesAdaptor::Get (const CallMessage &call)
-{
+Message PropertiesAdaptor::Get (const CallMessage &call) {
     MessageIter ri = call.reader();
 
     std::string iface_name;
@@ -73,8 +71,7 @@ Message PropertiesAdaptor::Get (const CallMessage &call)
     return reply;
 }
 
-Message PropertiesAdaptor::Set (const CallMessage &call)
-{
+Message PropertiesAdaptor::Set (const CallMessage &call) {
     MessageIter ri = call.reader();
 
     std::string iface_name;
@@ -97,8 +94,7 @@ Message PropertiesAdaptor::Set (const CallMessage &call)
     return reply;
 }
 
-IntrospectedInterface *const PropertiesAdaptor::introspect() const
-{
+IntrospectedInterface *const PropertiesAdaptor::introspect() const {
     static IntrospectedArgument Get_args[] = {
         { "interface_name", "s", true },
         { "property_name", "s", true },
@@ -132,19 +128,16 @@ IntrospectedInterface *const PropertiesAdaptor::introspect() const
 }
 
 PropertiesProxy::PropertiesProxy()
-        : InterfaceProxy (properties_name)
-{
+        : InterfaceProxy (properties_name) {
 }
 
-Variant PropertiesProxy::Get (const std::string &iface, const std::string &property)
-{
+Variant PropertiesProxy::Get (const std::string &iface, const std::string &property) {
 //todo
     Variant v;
     return v;
 }
 
-void PropertiesProxy::Set (const std::string &iface, const std::string &property, const Variant &value)
-{
+void PropertiesProxy::Set (const std::string &iface, const std::string &property, const Variant &value) {
 //todo
 }
 
diff --git a/sflphone-common/libs/dbus-c++/src/server.cpp b/sflphone-common/libs/dbus-c++/src/server.cpp
index b3dbfe267b96254e70a3bc9dee77f48bb66dc97d..f2bc5d293870c4e092ed7073fb21ce7954307b44 100644
--- a/sflphone-common/libs/dbus-c++/src/server.cpp
+++ b/sflphone-common/libs/dbus-c++/src/server.cpp
@@ -36,16 +36,13 @@
 using namespace DBus;
 
 Server::Private::Private (DBusServer *s)
-        : server (s)
-{
+        : server (s) {
 }
 
-Server::Private::~Private()
-{
+Server::Private::~Private() {
 }
 
-void Server::Private::on_new_conn_cb (DBusServer *server, DBusConnection *conn, void *data)
-{
+void Server::Private::on_new_conn_cb (DBusServer *server, DBusConnection *conn, void *data) {
     Server *s = static_cast<Server *> (data);
 
     Connection nc (new Connection::Private (conn, s->_pvt.get()));
@@ -57,8 +54,7 @@ void Server::Private::on_new_conn_cb (DBusServer *server, DBusConnection *conn,
     debug_log ("incoming connection 0x%08x", conn);
 }
 
-Server::Server (const char *address)
-{
+Server::Server (const char *address) {
     InternalError e;
     DBusServer *server = dbus_server_listen (address, e);
 
@@ -80,13 +76,11 @@ Server::Server(const Server &s)
 	dbus_server_ref(_pvt->server);
 }
 */
-Server::~Server()
-{
+Server::~Server() {
     dbus_server_unref (_pvt->server);
 }
 
-Dispatcher *Server::setup (Dispatcher *dispatcher)
-{
+Dispatcher *Server::setup (Dispatcher *dispatcher) {
     debug_log ("registering stubs for server %p", _pvt->server);
 
     Dispatcher *prev = _pvt->dispatcher;
@@ -114,18 +108,15 @@ Dispatcher *Server::setup (Dispatcher *dispatcher)
     return prev;
 }
 
-bool Server::operator == (const Server &s) const
-{
+bool Server::operator == (const Server &s) const {
     return _pvt->server == s._pvt->server;
 }
 
-bool Server::listening() const
-{
+bool Server::listening() const {
     return dbus_server_get_is_connected (_pvt->server);
 }
 
-void Server::disconnect()
-{
+void Server::disconnect() {
     dbus_server_disconnect (_pvt->server);
 }
 
diff --git a/sflphone-common/libs/dbus-c++/src/types.cpp b/sflphone-common/libs/dbus-c++/src/types.cpp
index d8100258e69f5251b46f9df4164ff7aaa248f038..9e16bde4bd4c07c2bb3ee05ac9e332241b9fd2ce 100644
--- a/sflphone-common/libs/dbus-c++/src/types.cpp
+++ b/sflphone-common/libs/dbus-c++/src/types.cpp
@@ -37,20 +37,17 @@
 using namespace DBus;
 
 Variant::Variant()
-        : _msg (CallMessage()) // dummy message used as temporary storage for variant data
-{
+        : _msg (CallMessage()) { // dummy message used as temporary storage for variant data
 }
 
 Variant::Variant (MessageIter &it)
-        : _msg (CallMessage())
-{
+        : _msg (CallMessage()) {
     MessageIter vi = it.recurse();
     MessageIter mi = _msg.writer();
     vi.copy_data (mi);
 }
 
-Variant &Variant::operator = (const Variant &v)
-{
+Variant &Variant::operator = (const Variant &v) {
     if (&v != this) {
         _msg = v._msg;
     }
@@ -58,14 +55,12 @@ Variant &Variant::operator = (const Variant &v)
     return *this;
 }
 
-void Variant::clear()
-{
+void Variant::clear() {
     CallMessage empty;
     _msg = empty;
 }
 
-const Signature Variant::signature() const
-{
+const Signature Variant::signature() const {
     char *sigbuf = reader().signature();
 
     Signature signature = sigbuf;
@@ -75,8 +70,7 @@ const Signature Variant::signature() const
     return signature;
 }
 
-MessageIter &operator << (MessageIter &iter, const Variant &val)
-{
+MessageIter &operator << (MessageIter &iter, const Variant &val) {
     const Signature sig = val.signature();
 
     MessageIter rit = val.reader();
@@ -89,8 +83,7 @@ MessageIter &operator << (MessageIter &iter, const Variant &val)
     return iter;
 }
 
-MessageIter &operator >> (MessageIter &iter, Variant &val)
-{
+MessageIter &operator >> (MessageIter &iter, Variant &val) {
     if (iter.type() != DBUS_TYPE_VARIANT)
         throw ErrorInvalidArgs ("variant type expected");
 
diff --git a/sflphone-common/libs/dbus-c++/tools/generate_adaptor.cpp b/sflphone-common/libs/dbus-c++/tools/generate_adaptor.cpp
index c8f0cd6abb4d08c3951e6ff8da50c80a005c4e70..98721703facb188a635bac1ddadea8e415a0e74a 100644
--- a/sflphone-common/libs/dbus-c++/tools/generate_adaptor.cpp
+++ b/sflphone-common/libs/dbus-c++/tools/generate_adaptor.cpp
@@ -39,8 +39,7 @@ extern const char *dbus_includes;
 
 /*! Generate adaptor code for a XML introspection
   */
-void generate_adaptor (Xml::Document &doc, const char *filename)
-{
+void generate_adaptor (Xml::Document &doc, const char *filename) {
     ostringstream body;
     ostringstream head;
     vector <string> include_vector;
diff --git a/sflphone-common/libs/dbus-c++/tools/generate_proxy.cpp b/sflphone-common/libs/dbus-c++/tools/generate_proxy.cpp
index 288dfa4845ec403439fced710c63a3a56747dbca..95987f45c7a308d682cf43ef5fba2ae263b53bc3 100644
--- a/sflphone-common/libs/dbus-c++/tools/generate_proxy.cpp
+++ b/sflphone-common/libs/dbus-c++/tools/generate_proxy.cpp
@@ -39,8 +39,7 @@ extern const char *dbus_includes;
 
 /*! Generate proxy code for a XML introspection
   */
-void generate_proxy (Xml::Document &doc, const char *filename)
-{
+void generate_proxy (Xml::Document &doc, const char *filename) {
     ostringstream body;
     ostringstream head;
     vector <string> include_vector;
diff --git a/sflphone-common/libs/dbus-c++/tools/generator_utils.cpp b/sflphone-common/libs/dbus-c++/tools/generator_utils.cpp
index 9b5a364966a7631eeea48a7c2b421bd7737082e9..3549632ece299ee4f496d1a4bc53bb3b0c8d4cf3 100644
--- a/sflphone-common/libs/dbus-c++/tools/generator_utils.cpp
+++ b/sflphone-common/libs/dbus-c++/tools/generator_utils.cpp
@@ -42,22 +42,19 @@ const char *dbus_includes = "\n\
 #include <cassert>\n\
 ";
 
-                            void underscorize (string &str)
-                            {
+                            void underscorize (string &str) {
                             for (unsigned int i = 0; i < str.length(); ++i) {
                             if (!isalpha (str[i]) && !isdigit (str[i])) str[i] = '_';
                             }
                             }
 
-                            string stub_name (string name)
-                            {
+                            string stub_name (string name) {
                             underscorize (name);
 
                             return "_" + name + "_stub";
                             }
 
-                            const char *atomic_type_to_string (char t)
-                            {
+                            const char *atomic_type_to_string (char t) {
 
                             static struct {
                             char type;
@@ -88,8 +85,7 @@ const char *dbus_includes = "\n\
                             return atos[i].name;
                             }
 
-                            void _parse_signature (const string &signature, string &type, unsigned int &i)
-                            {
+                            void _parse_signature (const string &signature, string &type, unsigned int &i) {
                             for (; i < signature.length(); ++i) {
                             switch (signature[i]) {
 
@@ -164,8 +160,7 @@ const char *dbus_includes = "\n\
                             }
                             }
 
-                            string signature_to_type (const string &signature)
-                            {
+                            string signature_to_type (const string &signature) {
                             string type;
                             unsigned int i = 0;
                             _parse_signature (signature, type, i);
diff --git a/sflphone-common/libs/dbus-c++/tools/introspect.cpp b/sflphone-common/libs/dbus-c++/tools/introspect.cpp
index 88a767396139d976588c1d26464cceaa9153c6bb..7459007d548c921cf8c84d5c1374634d5645e115 100644
--- a/sflphone-common/libs/dbus-c++/tools/introspect.cpp
+++ b/sflphone-common/libs/dbus-c++/tools/introspect.cpp
@@ -32,8 +32,7 @@ static bool systembus;
 static char *path;
 static char *service;
 
-void niam (int sig)
-{
+void niam (int sig) {
     DBus::Connection conn = systembus ? DBus::Connection::SystemBus() : DBus::Connection::SessionBus();
 
     IntrospectedObject io (conn, path, service);
@@ -43,8 +42,7 @@ void niam (int sig)
     dispatcher.leave();
 }
 
-int main (int argc, char ** argv)
-{
+int main (int argc, char ** argv) {
     signal (SIGTERM, niam);
     signal (SIGINT, niam);
     signal (SIGALRM, niam);
diff --git a/sflphone-common/libs/dbus-c++/tools/xml.cpp b/sflphone-common/libs/dbus-c++/tools/xml.cpp
index 2ba8635a3c9508d2f73e5cdeda87f84d7ed0b76c..0393f587ca85d0cf41bdf25071ba4c646172a636 100644
--- a/sflphone-common/libs/dbus-c++/tools/xml.cpp
+++ b/sflphone-common/libs/dbus-c++/tools/xml.cpp
@@ -28,8 +28,7 @@
 
 #include <expat.h>
 
-std::istream &operator >> (std::istream &in, DBus::Xml::Document &doc)
-{
+std::istream &operator >> (std::istream &in, DBus::Xml::Document &doc) {
     std::stringbuf xmlbuf;
     in.get (xmlbuf, '\0');
     doc.from_xml (xmlbuf.str());
@@ -37,8 +36,7 @@ std::istream &operator >> (std::istream &in, DBus::Xml::Document &doc)
     return in;
 }
 
-std::ostream &operator << (std::ostream &out, const DBus::Xml::Document &doc)
-{
+std::ostream &operator << (std::ostream &out, const DBus::Xml::Document &doc) {
     return out << doc.to_xml();
 }
 
@@ -46,8 +44,7 @@ using namespace DBus;
 
 using namespace DBus::Xml;
 
-Error::Error (const char *error, int line, int column)
-{
+Error::Error (const char *error, int line, int column) {
     std::ostringstream estream;
 
     estream << "line " << line << ", column " << column << ": " << error;
@@ -56,8 +53,7 @@ Error::Error (const char *error, int line, int column)
 }
 
 Node::Node (const char *n, const char ** a)
-        : name (n)
-{
+        : name (n) {
     if (a)
         for (int i = 0; a[i]; i += 2) {
             _attrs[a[i]] = a[i+1];
@@ -66,8 +62,7 @@ Node::Node (const char *n, const char ** a)
         }
 }
 
-Nodes Nodes::operator[] (const std::string &key)
-{
+Nodes Nodes::operator[] (const std::string &key) {
     Nodes result;
 
     for (iterator i = begin(); i != end(); ++i) {
@@ -79,8 +74,7 @@ Nodes Nodes::operator[] (const std::string &key)
     return result;
 }
 
-Nodes Nodes::select (const std::string &attr, const std::string &value)
-{
+Nodes Nodes::select (const std::string &attr, const std::string &value) {
     Nodes result;
 
     for (iterator i = begin(); i != end(); ++i) {
@@ -91,8 +85,7 @@ Nodes Nodes::select (const std::string &attr, const std::string &value)
     return result;
 }
 
-Nodes Node::operator[] (const std::string &key)
-{
+Nodes Node::operator[] (const std::string &key) {
     Nodes result;
 
     if (key.length() == 0) return result;
@@ -105,24 +98,21 @@ Nodes Node::operator[] (const std::string &key)
     return result;
 }
 
-std::string Node::get (const std::string &attribute)
-{
+std::string Node::get (const std::string &attribute) {
     if (_attrs.find (attribute) != _attrs.end())
         return _attrs[attribute];
     else
         return "";
 }
 
-void Node::set (const std::string &attribute, std::string value)
-{
+void Node::set (const std::string &attribute, std::string value) {
     if (value.length())
         _attrs[attribute] = value;
     else
         _attrs.erase (value);
 }
 
-std::string Node::to_xml() const
-{
+std::string Node::to_xml() const {
     std::string xml;
     int depth = 0;
 
@@ -131,8 +121,7 @@ std::string Node::to_xml() const
     return xml;
 }
 
-void Node::_raw_xml (std::string &xml, int &depth) const
-{
+void Node::_raw_xml (std::string &xml, int &depth) const {
     xml.append (depth *2, ' ');
     xml.append ("<"+name);
 
@@ -167,18 +156,15 @@ void Node::_raw_xml (std::string &xml, int &depth) const
 }
 
 Document::Document()
-        : root (0), _depth (0)
-{
+        : root (0), _depth (0) {
 }
 
 Document::Document (const std::string &xml)
-        : root (0), _depth (0)
-{
+        : root (0), _depth (0) {
     from_xml (xml);
 }
 
-Document::~Document()
-{
+Document::~Document() {
     delete root;
 }
 
@@ -192,8 +178,7 @@ struct Document::Expat {
     static void end_element_handler (void *data, const XML_Char *name);
 };
 
-void Document::from_xml (const std::string &xml)
-{
+void Document::from_xml (const std::string &xml) {
     _depth = 0;
     delete root;
     root = 0;
@@ -234,23 +219,19 @@ void Document::from_xml (const std::string &xml)
     }
 }
 
-std::string Document::to_xml() const
-{
+std::string Document::to_xml() const {
     return root->to_xml();
 }
 
 void Document::Expat::start_doctype_decl_handler (
     void *data, const XML_Char *name, const XML_Char *sysid, const XML_Char *pubid, int has_internal_subset
-)
-{
+) {
 }
 
-void Document::Expat::end_doctype_decl_handler (void *data)
-{
+void Document::Expat::end_doctype_decl_handler (void *data) {
 }
 
-void Document::Expat::start_element_handler (void *data, const XML_Char *name, const XML_Char **atts)
-{
+void Document::Expat::start_element_handler (void *data, const XML_Char *name, const XML_Char **atts) {
     Document *doc = (Document *) data;
 
     //debug_log("xml:%d -> %s", doc->_depth, name);
@@ -272,8 +253,7 @@ void Document::Expat::start_element_handler (void *data, const XML_Char *name, c
     doc->_depth++;
 }
 
-void Document::Expat::character_data_handler (void *data, const XML_Char *chars, int len)
-{
+void Document::Expat::character_data_handler (void *data, const XML_Char *chars, int len) {
     Document *doc = (Document *) data;
 
     Node *nod = doc->root;
@@ -294,8 +274,7 @@ void Document::Expat::character_data_handler (void *data, const XML_Char *chars,
     nod->cdata = std::string (chars, x, y+1);
 }
 
-void Document::Expat::end_element_handler (void *data, const XML_Char *name)
-{
+void Document::Expat::end_element_handler (void *data, const XML_Char *name) {
     Document *doc = (Document *) data;
 
     //debug_log("xml:%d <- %s", doc->_depth, name);
diff --git a/sflphone-common/libs/dbus-c++/tools/xml2cpp.cpp b/sflphone-common/libs/dbus-c++/tools/xml2cpp.cpp
index 3284d766753fdeb3baa39de951c56df43a88cea4..300a21d6cdc17e0ed1bec4467256d8c831abc198 100644
--- a/sflphone-common/libs/dbus-c++/tools/xml2cpp.cpp
+++ b/sflphone-common/libs/dbus-c++/tools/xml2cpp.cpp
@@ -42,8 +42,7 @@ using namespace DBus;
 
 //typedef map<string,string> TypeCache;
 
-void usage (const char *argv0)
-{
+void usage (const char *argv0) {
     cerr << endl << "Usage: " << argv0 << " <xmlfile> [ --proxy=<outfile.h> ] [ --adaptor=<outfile.h> ]"
          << endl << endl;
     exit (-1);
@@ -62,8 +61,7 @@ bool is_atomic_type(const string &type)
 	return type.length() == 1 && char_to_atomic_type(type[0]) != DBUS_TYPE_INVALID;
 }*/
 
-int main (int argc, char ** argv)
-{
+int main (int argc, char ** argv) {
     if (argc < 2) {
         usage (argv[0]);
     }
@@ -82,11 +80,10 @@ int main (int argc, char ** argv)
         if (!strncmp (argv[a], "--proxy=", 8)) {
             proxy_mode = true;
             proxy = argv[a] +8;
-        } else
-            if (!strncmp (argv[a], "--adaptor=", 10)) {
-                adaptor_mode = true;
-                adaptor = argv[a] +10;
-            }
+        } else if (!strncmp (argv[a], "--adaptor=", 10)) {
+            adaptor_mode = true;
+            adaptor = argv[a] +10;
+        }
     }
 
     if (!proxy_mode && !adaptor_mode) usage (argv[0]);
diff --git a/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h b/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h
index 7b09e23d4e61573727e72bfcd51748a3ccac2013..cb0f9e7cc309a82018f420ef589fd6ca2026da72 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h
+++ b/sflphone-common/libs/pjproject/pjlib-util/include/pjlib-util/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -70,7 +70,7 @@
  * (the #pj_dns_packet_dup() function).
  *
  * Generally name compression is desired, since it saves some memory (see
- * PJ_DNS_RESOLVER_RES_BUF_SIZE setting). However it comes at the expense of 
+ * PJ_DNS_RESOLVER_RES_BUF_SIZE setting). However it comes at the expense of
  * a little processing overhead to perform name scanning and also a little
  * bit more stack usage (8 bytes per entry on 32bit platform).
  *
@@ -95,7 +95,7 @@
 
 
 /**
- * Default retransmission delay, in miliseconds. The combination of 
+ * Default retransmission delay, in miliseconds. The combination of
  * retransmission delay and count determines the query timeout.
  *
  * Default: 2000 (2 seconds, according to RFC 1035)
@@ -117,8 +117,8 @@
 
 
 /**
- * Maximum life-time of DNS response in the resolver response cache, 
- * in seconds. If the value is zero, then DNS response caching will be 
+ * Maximum life-time of DNS response in the resolver response cache,
+ * in seconds. If the value is zero, then DNS response caching will be
  * disabled.
  *
  * Default is 300 seconds (5 minutes).
@@ -131,8 +131,8 @@
 
 /**
  * The life-time of invalid DNS response in the resolver response cache.
- * An invalid DNS response is a response which RCODE is non-zero and 
- * response without any answer section. These responses can be put in 
+ * An invalid DNS response is a response which RCODE is non-zero and
+ * response without any answer section. These responses can be put in
  * the cache too to minimize message round-trip.
  *
  * Default: 60 (one minute).
@@ -144,7 +144,7 @@
 #endif
 
 /**
- * The interval on which nameservers which are known to be good to be 
+ * The interval on which nameservers which are known to be good to be
  * probed again to determine whether they are still good. Note that
  * this applies to both active nameserver (the one currently being used)
  * and idle nameservers (good nameservers that are not currently selected).
diff --git a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp
index 07fb4468feb6954ec35315577cb42e710a94a303..db0288dd9c6f25a3430dedb54cedb71da54d9f6b 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/resolver_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: resolver_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp
index aa80d827b5d50544f3f4ba622cddd5b76b847d69..556e7dcaf644df504a8a37e0676c50f58e5c5b64 100644
--- a/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib-util/src/pjlib-util/xml_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: xml_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjlib/include/pj/config.h b/sflphone-common/libs/pjproject/pjlib/include/pj/config.h
index ce7a97cc1a6bb99fbc9589a85a8776468967d2f9..582b4a23b2941225b3ce7fef5eb7a2bb7fdd7b5c 100644
--- a/sflphone-common/libs/pjproject/pjlib/include/pj/config.h
+++ b/sflphone-common/libs/pjproject/pjlib/include/pj/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2970 2009-10-26 15:47:52Z nanang $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -60,78 +60,78 @@
  * Include target OS specific configuration.
  */
 #if defined(PJ_AUTOCONF)
-    /*
-     * Autoconf
-     */
+/*
+ * Autoconf
+ */
 #   include <pj/compat/os_auto.h>
 
 #elif defined(PJ_SYMBIAN) && PJ_SYMBIAN!=0
-    /*
-     * SymbianOS
-     */
+/*
+ * SymbianOS
+ */
 #  include <pj/compat/os_symbian.h>
 
 #elif defined(PJ_WIN32_WINCE) || defined(_WIN32_WCE) || defined(UNDER_CE)
-    /*
-     * Windows CE
-     */
+/*
+ * Windows CE
+ */
 #   undef PJ_WIN32_WINCE
 #   define PJ_WIN32_WINCE   1
 #   include <pj/compat/os_win32_wince.h>
 
-    /* Also define Win32 */
+/* Also define Win32 */
 #   define PJ_WIN32 1
 
 #elif defined(PJ_WIN32) || defined(_WIN32) || defined(__WIN32__) || \
 	defined(_WIN64) || defined(WIN32) || defined(__TOS_WIN__)
-    /*
-     * Win32
-     */
+/*
+ * Win32
+ */
 #   undef PJ_WIN32
 #   define PJ_WIN32 1
 #   include <pj/compat/os_win32.h>
 
 #elif defined(PJ_LINUX_KERNEL) && PJ_LINUX_KERNEL!=0
-    /*
-     * Linux kernel
-     */
+/*
+ * Linux kernel
+ */
 #  include <pj/compat/os_linux_kernel.h>
 
 #elif defined(PJ_LINUX) || defined(linux) || defined(__linux)
-    /*
-     * Linux
-     */
+/*
+ * Linux
+ */
 #   undef PJ_LINUX
 #   define PJ_LINUX	    1
 #   include <pj/compat/os_linux.h>
 
 #elif defined(PJ_PALMOS) && PJ_PALMOS!=0
-    /*
-     * Palm
-     */
+/*
+ * Palm
+ */
 #  include <pj/compat/os_palmos.h>
 
 #elif defined(PJ_SUNOS) || defined(sun) || defined(__sun)
-    /*
-     * SunOS
-     */
+/*
+ * SunOS
+ */
 #   undef PJ_SUNOS
 #   define PJ_SUNOS	    1
 #   include <pj/compat/os_sunos.h>
 
 #elif defined(PJ_DARWINOS) || defined(__MACOSX__) || \
       defined (__APPLE__) || defined (__MACH__)
-    /*
-     * MacOS X
-     */
+/*
+ * MacOS X
+ */
 #   undef PJ_DARWINOS
 #   define PJ_DARWINOS	    1
 #   include <pj/compat/os_darwinos.h>
 
 #elif defined(PJ_RTEMS) && PJ_RTEMS!=0
-    /*
-     * RTEMS
-     */
+/*
+ * RTEMS
+ */
 #  include <pj/compat/os_rtems.h>
 #else
 #   error "Please specify target os."
@@ -142,17 +142,17 @@
  * Target machine specific configuration.
  */
 #if defined(PJ_AUTOCONF)
-    /*
-     * Autoconf configured
-     */
+/*
+ * Autoconf configured
+ */
 #include <pj/compat/m_auto.h>
 
 #elif defined (PJ_M_I386) || defined(_i386_) || defined(i_386_) || \
 	defined(_X86_) || defined(x86) || defined(__i386__) || \
 	defined(__i386) || defined(_M_IX86) || defined(__I86__)
-    /*
-     * Generic i386 processor family, little-endian
-     */
+/*
+ * Generic i386 processor family, little-endian
+ */
 #   undef PJ_M_I386
 #   define PJ_M_I386		1
 #   define PJ_M_NAME		"i386"
@@ -163,9 +163,9 @@
 
 #elif defined (PJ_M_X86_64) || defined(__amd64__) || defined(__amd64) || \
 	defined(__x86_64__) || defined(__x86_64)
-    /*
-     * AMD 64bit processor, little endian
-     */
+/*
+ * AMD 64bit processor, little endian
+ */
 #   undef PJ_M_X86_64
 #   define PJ_M_X86_64		1
 #   define PJ_M_NAME		"x86_64"
@@ -175,9 +175,9 @@
 
 #elif defined(PJ_M_IA64) || defined(__ia64__) || defined(_IA64) || \
 	defined(__IA64__) || defined( 	_M_IA64)
-    /*
-     * Intel IA64 processor, little endian
-     */
+/*
+ * Intel IA64 processor, little endian
+ */
 #   undef PJ_M_IA64
 #   define PJ_M_IA64		1
 #   define PJ_M_NAME		"ia64"
@@ -187,9 +187,9 @@
 
 #elif defined (PJ_M_M68K) && PJ_M_M68K != 0
 
-    /*
-     * Motorola m64k processor, little endian
-     */
+/*
+ * Motorola m64k processor, little endian
+ */
 #   undef PJ_M_M68K
 #   define PJ_M_M68K		1
 #   define PJ_M_NAME		"m68k"
@@ -200,9 +200,9 @@
 
 #elif defined (PJ_M_ALPHA) || defined (__alpha__) || defined (__alpha) || \
 	defined (_M_ALPHA)
-    /*
-     * DEC Alpha processor, little endian
-     */
+/*
+ * DEC Alpha processor, little endian
+ */
 #   undef PJ_M_ALPHA
 #   define PJ_M_ALPHA		1
 #   define PJ_M_NAME		"alpha"
@@ -213,9 +213,9 @@
 
 #elif defined(PJ_M_MIPS) || defined(__mips__) || defined(__mips) || \
 	defined(__MIPS__) || defined(MIPS) || defined(_MIPS_)
-    /*
-     * MIPS, default to little endian
-     */
+/*
+ * MIPS, default to little endian
+ */
 #   undef PJ_M_MIPS
 #   define PJ_M_MIPS		1
 #   define PJ_M_NAME		"mips"
@@ -227,9 +227,9 @@
 
 
 #elif defined (PJ_M_SPARC) || defined( 	__sparc__) || defined(__sparc)
-    /*
-     * Sun Sparc, big endian
-     */
+/*
+ * Sun Sparc, big endian
+ */
 #   undef PJ_M_SPARC
 #   define PJ_M_SPARC		1
 #   define PJ_M_NAME		"sparc"
@@ -239,9 +239,9 @@
 
 #elif defined (PJ_M_ARMV4) || defined(ARM) || defined(_ARM_) ||  \
 	defined(ARMV4) || defined(__arm__)
-    /*
-     * ARM, default to little endian
-     */
+/*
+ * ARM, default to little endian
+ */
 #   undef PJ_M_ARMV4
 #   define PJ_M_ARMV4		1
 #   define PJ_M_NAME		"armv4"
@@ -254,9 +254,9 @@
 #elif defined (PJ_M_POWERPC) || defined(__powerpc) || defined(__powerpc__) || \
 	defined(__POWERPC__) || defined(__ppc__) || defined(_M_PPC) || \
 	defined(_ARCH_PPC)
-    /*
-     * PowerPC, big endian
-     */
+/*
+ * PowerPC, big endian
+ */
 #   undef PJ_M_POWERPC
 #   define PJ_M_POWERPC		1
 #   define PJ_M_NAME		"powerpc"
@@ -266,9 +266,9 @@
 
 #elif defined (PJ_M_NIOS2) || defined(__nios2) || defined(__nios2__) || \
       defined(__NIOS2__) || defined(__M_NIOS2) || defined(_ARCH_NIOS2)
-    /*
-     * Nios2, little endian
-     */
+/*
+ * Nios2, little endian
+ */
 #   undef PJ_M_NIOS2
 #   define PJ_M_NIOS2		1
 #   define PJ_M_NAME		"nios2"
@@ -278,9 +278,9 @@
 
 #elif defined (PJ_M_SH) || defined(__sh) || defined(__sh__) || \
       defined(__SH__) || defined(__M_SH) || defined(_ARCH_SH)
-    /*
-     * Renesas SH, little endian and big endian
-     */
+/*
+ * Renesas SH, little endian and big endian
+ */
 #   undef PJ_M_SH
 #   define PJ_M_SH              1
 #   define PJ_M_NAME            "sh"
@@ -295,9 +295,9 @@
 
 #elif defined (PJ_M_HPPA) || defined(__hppa) || defined(__hppa__) || \
       defined(__HPPA__) || defined(__M_HPPA) || defined(_ARCH_HPPA)
-    /*
-     * HP/PA, big endian
-     */
+/*
+ * HP/PA, big endian
+ */
 #   undef PJ_M_HPPA
 #   define PJ_M_HPPA            1
 #   define PJ_M_NAME            "hppa"
@@ -307,9 +307,9 @@
 
 #elif defined (PJ_M_S390) || defined(__s390) || defined(__s390__) || defined(__s390x) || \
       defined(__s390x__) || defined(__M_s390) || defined(_ARCH_s390)
-    /*
-     * System 390, big endian
-     */
+/*
+ * System 390, big endian
+ */
 #   undef PJ_M_S390
 #   define PJ_M_S390            1
 #   define PJ_M_NAME            "s390"
@@ -317,7 +317,6 @@
 #   define PJ_IS_LITTLE_ENDIAN  0
 #   define PJ_IS_BIG_ENDIAN     1
 
-		
 #else
 #   error "Please specify target machine."
 #endif
@@ -473,7 +472,7 @@
  * in the application.
  *
  * This will slow down pool creation and destruction and will add
- * few bytes of overhead, so application would normally want to 
+ * few bytes of overhead, so application would normally want to
  * disable this feature on release build.
  *
  * Default: 0
@@ -502,14 +501,14 @@
  *
  * Default: 8192
  */
-#ifndef PJ_THREAD_DEFAULT_STACK_SIZE 
+#ifndef PJ_THREAD_DEFAULT_STACK_SIZE
 #  define PJ_THREAD_DEFAULT_STACK_SIZE    8192
 #endif
 
 
 /**
- * Specify if PJ_CHECK_STACK() macro is enabled to check the sanity of 
- * the stack. The OS implementation may check that no stack overflow 
+ * Specify if PJ_CHECK_STACK() macro is enabled to check the sanity of
+ * the stack. The OS implementation may check that no stack overflow
  * occurs, and it also may collect statistic about stack usage. Note
  * that this will increase the footprint of the libraries since it
  * tracks the filename and line number of each functions.
@@ -539,7 +538,7 @@
 #endif
 
 /**
- * Support IPv6 in the library. If this support is disabled, some IPv6 
+ * Support IPv6 in the library. If this support is disabled, some IPv6
  * related functions will return PJ_EIPV6NOTSUP.
  *
  * Default: 0 (disabled, for now)
@@ -548,21 +547,21 @@
 #  define PJ_HAS_IPV6		    0
 #endif
 
- /**
- * Maximum hostname length.
- * Libraries sometimes needs to make copy of an address to stack buffer;
- * the value here affects the stack usage.
- *
- * Default: 128
- */
+/**
+* Maximum hostname length.
+* Libraries sometimes needs to make copy of an address to stack buffer;
+* the value here affects the stack usage.
+*
+* Default: 128
+*/
 #ifndef PJ_MAX_HOSTNAME
 #  define PJ_MAX_HOSTNAME	    (128)
 #endif
 
 /**
  * Constants for declaring the maximum handles that can be supported by
- * a single IOQ framework. This constant might not be relevant to the 
- * underlying I/O queue impelementation, but still, developers should be 
+ * a single IOQ framework. This constant might not be relevant to the
+ * underlying I/O queue impelementation, but still, developers should be
  * aware of this constant, to make sure that the program will not break when
  * the underlying implementation changes.
  */
@@ -576,8 +575,8 @@
  * things to ensure thread safety of handle unregistration operation by
  * employing reference counter to each handle.
  *
- * In addition, the ioqueue will preallocate memory for the handles, 
- * according to the maximum number of handles that is specified during 
+ * In addition, the ioqueue will preallocate memory for the handles,
+ * according to the maximum number of handles that is specified during
  * ioqueue creation.
  *
  * All applications would normally want this enabled, but you may disable
@@ -598,7 +597,7 @@
  * concurrently/in parallel. The default is yes, which means that if there
  * are more than one pending operations complete simultaneously, more
  * than one threads may call the key's callback at the same time. This
- * generally would promote good scalability for application, at the 
+ * generally would promote good scalability for application, at the
  * expense of more complexity to manage the concurrent accesses.
  *
  * Please see the ioqueue documentation for more info.
@@ -653,14 +652,14 @@
  * set to value lower than FD_SETSIZE.
  */
 #if PJ_FD_SETSIZE_SETABLE
-    /* Only override FD_SETSIZE if the value has not been set */
+/* Only override FD_SETSIZE if the value has not been set */
 #   ifndef FD_SETSIZE
 #	define FD_SETSIZE		PJ_IOQUEUE_MAX_HANDLES
 #   endif
 #else
-    /* When FD_SETSIZE is not changeable, check if PJ_IOQUEUE_MAX_HANDLES
-     * is lower than FD_SETSIZE value.
-     */
+/* When FD_SETSIZE is not changeable, check if PJ_IOQUEUE_MAX_HANDLES
+ * is lower than FD_SETSIZE value.
+ */
 #   ifdef FD_SETSIZE
 #	if PJ_IOQUEUE_MAX_HANDLES > FD_SETSIZE
 #	    error "PJ_IOQUEUE_MAX_HANDLES is greater than FD_SETSIZE"
@@ -777,7 +776,7 @@
 #ifndef PJ_NATIVE_ERR_POSITIVE
 #   define PJ_NATIVE_ERR_POSITIVE   1
 #endif
- 
+
 /**
  * Include error message string in the library (pj_strerror()).
  * This is very much desirable!
@@ -794,7 +793,7 @@
  * functions to compare alnum strings. On some systems, they're faster
  * then stricmp/strcasecmp, but they can be slower on other systems.
  * When disabled, pjlib will fallback to stricmp/strnicmp.
- * 
+ *
  * Default: 0
  */
 #ifndef PJ_HAS_STRICMP_ALNUM
@@ -806,7 +805,7 @@
  * Types of QoS backend implementation.
  */
 
-/** 
+/**
  * Dummy QoS backend implementation, will always return error on all
  * the APIs.
  */
@@ -826,7 +825,7 @@
  */
 #ifndef PJ_QOS_IMPLEMENTATION
 #   if defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE && _WIN32_WCE >= 0x502
-	/* Windows Mobile 6 or later */
+/* Windows Mobile 6 or later */
 #	define PJ_QOS_IMPLEMENTATION    PJ_QOS_WM
 #   endif
 #endif
@@ -857,7 +856,7 @@
  *
  * The libraries support generation of dynamic link libraries for
  * Symbian ABIv2 target (.dso/Dynamic Shared Object files, in Symbian
- * terms). Similar procedures may be applied for Win32 DLL with some 
+ * terms). Similar procedures may be applied for Win32 DLL with some
  * modification.
  *
  * Depending on the platforms, these steps may be necessary in order to
@@ -865,7 +864,7 @@
  *  - Create the (Visual Studio) projects to produce DLL output. PJLIB
  *    does not provide ready to use project files to produce DLL, so
  *    you need to create these projects yourself. For Symbian, the MMP
- *    files have been setup to produce DSO files for targets that 
+ *    files have been setup to produce DSO files for targets that
  *    require them.
  *  - In the (Visual Studio) projects, some macros need to be declared
  *    so that appropriate modifiers are added to symbol declarations
@@ -874,49 +873,49 @@
  *    MMP files.
  *  - Some build systems require .DEF file to be specified when creating
  *    the DLL. For Symbian, .DEF files are included in pjlib distribution,
- *    in <tt>pjlib/build.symbian</tt> directory. These DEF files are 
+ *    in <tt>pjlib/build.symbian</tt> directory. These DEF files are
  *    created by running <tt>./makedef.sh all</tt> from this directory,
  *    inside Mingw.
  *
  * Macros related for building DLL/DSO files:
  *  - For platforms that supports dynamic link libraries generation,
  *    it must declare <tt>PJ_EXPORT_SPECIFIER</tt> macro which value contains
- *    the prefix to be added to symbol definition, to export this 
+ *    the prefix to be added to symbol definition, to export this
  *    symbol in the DLL/DSO. For example, on Win32/Visual Studio, the
- *    value of this macro is \a __declspec(dllexport), and for ARM 
- *    ABIv2/Symbian, the value is \a EXPORT_C. 
+ *    value of this macro is \a __declspec(dllexport), and for ARM
+ *    ABIv2/Symbian, the value is \a EXPORT_C.
  *  - For platforms that supports linking with dynamic link libraries,
  *    it must declare <tt>PJ_IMPORT_SPECIFIER</tt> macro which value contains
- *    the prefix to be added to symbol declaration, to import this 
+ *    the prefix to be added to symbol declaration, to import this
  *    symbol from a DLL/DSO. For example, on Win32/Visual Studio, the
- *    value of this macro is \a __declspec(dllimport), and for ARM 
- *    ABIv2/Symbian, the value is \a IMPORT_C. 
- *  - Both <tt>PJ_EXPORT_SPECIFIER</tt> and <tt>PJ_IMPORT_SPECIFIER</tt> 
+ *    value of this macro is \a __declspec(dllimport), and for ARM
+ *    ABIv2/Symbian, the value is \a IMPORT_C.
+ *  - Both <tt>PJ_EXPORT_SPECIFIER</tt> and <tt>PJ_IMPORT_SPECIFIER</tt>
  *    macros above can be declared in your \a config_site.h if they are not
  *    declared by pjlib.
- *  - When PJLIB is built as DLL/DSO, both <tt>PJ_DLL</tt> and 
- *    <tt>PJ_EXPORTING</tt> macros must be declared, so that 
+ *  - When PJLIB is built as DLL/DSO, both <tt>PJ_DLL</tt> and
+ *    <tt>PJ_EXPORTING</tt> macros must be declared, so that
  *     <tt>PJ_EXPORT_SPECIFIER</tt> modifier will be added into function
  *    definition.
  *  - When application wants to link dynamically with PJLIB, then it
  *    must declare <tt>PJ_DLL</tt> macro when using/including PJLIB header,
- *    so that <tt>PJ_IMPORT_SPECIFIER</tt> modifier is properly added into 
+ *    so that <tt>PJ_IMPORT_SPECIFIER</tt> modifier is properly added into
  *    symbol declarations.
  *
  * When <b>PJ_DLL</b> macro is not declared, static linking is assumed.
  *
  * For example, here are some settings to produce DLLs with Visual Studio
  * on Windows/Win32:
- *  - Create Visual Studio projects to produce DLL. Add the appropriate 
+ *  - Create Visual Studio projects to produce DLL. Add the appropriate
  *    project dependencies to avoid link errors.
- *  - In the projects, declare <tt>PJ_DLL</tt> and <tt>PJ_EXPORTING</tt> 
+ *  - In the projects, declare <tt>PJ_DLL</tt> and <tt>PJ_EXPORTING</tt>
  *    macros.
  *  - Declare these macros in your <tt>config_site.h</tt>:
  \verbatim
 	#define PJ_EXPORT_SPECIFIER  __declspec(dllexport)
 	#define PJ_IMPORT_SPECIFIER  __declspec(dllimport)
  \endverbatim
- *  - And in the application (that links with the DLL) project, add 
+ *  - And in the application (that links with the DLL) project, add
  *    <tt>PJ_DLL</tt> in the macro declarations.
  */
 
@@ -940,7 +939,7 @@
  * is built as dynamic library.
  *
  * This macro should have been added by platform specific headers,
- * if the platform supports building dynamic library target. 
+ * if the platform supports building dynamic library target.
  */
 #ifndef PJ_EXPORT_DECL_SPECIFIER
 #   define PJ_EXPORT_DECL_SPECIFIER
@@ -953,7 +952,7 @@
  * is built as dynamic library.
  *
  * This macro should have been added by platform specific headers,
- * if the platform supports building dynamic library target. 
+ * if the platform supports building dynamic library target.
  */
 #ifndef PJ_EXPORT_DEF_SPECIFIER
 #   define PJ_EXPORT_DEF_SPECIFIER
@@ -1048,7 +1047,7 @@
  * @def PJ_DECL_DATA(type)
  * @param type The data type.
  * Declare a global data.
- */ 
+ */
 #if defined(PJ_DLL)
 #   if defined(PJ_EXPORTING)
 #	define PJ_DECL_DATA(type)   PJ_EXPORT_DECL_SPECIFIER extern type
@@ -1064,7 +1063,7 @@
  * @def PJ_DEF_DATA(type)
  * @param type The data type.
  * Define a global data.
- */ 
+ */
 #if defined(PJ_DLL) && defined(PJ_EXPORTING)
 #   define PJ_DEF_DATA(type)	    PJ_EXPORT_DEF_SPECIFIER type
 #elif !defined(PJ_DEF_DATA)
@@ -1154,19 +1153,19 @@ PJ_BEGIN_DECL
 /**
  * PJLIB version string constant. @see pj_get_version()
  */
-PJ_DECL_DATA(const char*) PJ_VERSION;
+PJ_DECL_DATA (const char*) PJ_VERSION;
 
 /**
  * Get PJLIB version string.
  *
  * @return #PJ_VERSION constant.
  */
-PJ_DECL(const char*) pj_get_version(void);
+PJ_DECL (const char*) pj_get_version (void);
 
 /**
  * Dump configuration to log with verbosity equal to info(3).
  */
-PJ_DECL(void) pj_dump_config(void);
+PJ_DECL (void) pj_dump_config (void);
 
 PJ_END_DECL
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp
index d53bd764252ddf2345a63b36470da437e1b29f28..fd393532edfea4d37e10d96788603066e59e021a 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/addr_resolv_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: addr_resolv_symbian.cpp 2888 2009-08-17 11:29:39Z nanang $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -38,130 +38,137 @@
 #include <pj/unicode.h>
 
 #include "os_symbian.h"
- 
+
 #define THIS_FILE 	"addr_resolv_symbian.cpp"
 #define TRACE_ME	0
 
 
 // PJLIB API: resolve hostname
-PJ_DEF(pj_status_t) pj_gethostbyname(const pj_str_t *name, pj_hostent *he)
+PJ_DEF (pj_status_t) pj_gethostbyname (const pj_str_t *name, pj_hostent *he)
 {
     static pj_addrinfo ai;
     static char *aliases[2];
     static char *addrlist[2];
     unsigned count = 1;
     pj_status_t status;
-    
-    status = pj_getaddrinfo(PJ_AF_INET, name, &count, &ai);
+
+    status = pj_getaddrinfo (PJ_AF_INET, name, &count, &ai);
+
     if (status != PJ_SUCCESS)
-    	return status;
-    
+        return status;
+
     aliases[0] = ai.ai_canonname;
     aliases[1] = NULL;
-    
+
     addrlist[0] = (char*) &ai.ai_addr.ipv4.sin_addr;
     addrlist[1] = NULL;
-    
-    pj_bzero(he, sizeof(*he));
+
+    pj_bzero (he, sizeof (*he));
     he->h_name = aliases[0];
     he->h_aliases = aliases;
     he->h_addrtype = PJ_AF_INET;
     he->h_length = 4;
     he->h_addr_list = addrlist;
-    
+
     return PJ_SUCCESS;
 }
 
 
 // Resolve for specific address family
-static pj_status_t getaddrinfo_by_af(int af, const pj_str_t *name,
-				     unsigned *count, pj_addrinfo ai[]) 
+static pj_status_t getaddrinfo_by_af (int af, const pj_str_t *name,
+                                      unsigned *count, pj_addrinfo ai[])
 {
     unsigned i;
     pj_status_t status;
-    
-    PJ_ASSERT_RETURN(name && count && ai, PJ_EINVAL);
+
+    PJ_ASSERT_RETURN (name && count && ai, PJ_EINVAL);
 
 #if !defined(PJ_HAS_IPV6) || !PJ_HAS_IPV6
+
     if (af == PJ_AF_INET6)
-    	return PJ_EIPV6NOTSUP;
+        return PJ_EIPV6NOTSUP;
+
 #endif
-	
+
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
     // Get resolver for the specified address family
-    RHostResolver &resv = PjSymbianOS::Instance()->GetResolver(af);
+    RHostResolver &resv = PjSymbianOS::Instance()->GetResolver (af);
 
     // Convert name to Unicode
     wchar_t name16[PJ_MAX_HOSTNAME];
-    pj_ansi_to_unicode(name->ptr, name->slen, name16, PJ_ARRAY_SIZE(name16));
-    TPtrC16 data((const TUint16*)name16);
+    pj_ansi_to_unicode (name->ptr, name->slen, name16, PJ_ARRAY_SIZE (name16));
+    TPtrC16 data ( (const TUint16*) name16);
 
     // Resolve!
     TNameEntry nameEntry;
     TRequestStatus reqStatus;
-    
-    resv.GetByName(data, nameEntry, reqStatus);
-    User::WaitForRequest(reqStatus);
-    
+
+    resv.GetByName (data, nameEntry, reqStatus);
+    User::WaitForRequest (reqStatus);
+
     // Iterate each result
     i = 0;
+
     while (reqStatus == KErrNone && i < *count) {
-    	
-		// Get the resolved TInetAddr
-		TInetAddr inetAddr(nameEntry().iAddr);
-		int addrlen;
+
+        // Get the resolved TInetAddr
+        TInetAddr inetAddr (nameEntry().iAddr);
+        int addrlen;
 
 #if TRACE_ME
-		if (1) {
-			pj_sockaddr a;
-			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-			int namelen;
-			
-			namelen = sizeof(pj_sockaddr);
-			if (PjSymbianOS::Addr2pj(inetAddr, a, &namelen, 
-									 PJ_FALSE) == PJ_SUCCESS) 
-			{
-				PJ_LOG(5,(THIS_FILE, "resolve %.*s: %s", 
-						(int)name->slen, name->ptr,
-						pj_sockaddr_print(&a, ipaddr, sizeof(ipaddr), 2)));
-			}
-		}
+
+        if (1) {
+            pj_sockaddr a;
+            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+            int namelen;
+
+            namelen = sizeof (pj_sockaddr);
+
+            if (PjSymbianOS::Addr2pj (inetAddr, a, &namelen,
+                                      PJ_FALSE) == PJ_SUCCESS) {
+                PJ_LOG (5, (THIS_FILE, "resolve %.*s: %s",
+                            (int) name->slen, name->ptr,
+                            pj_sockaddr_print (&a, ipaddr, sizeof (ipaddr), 2)));
+            }
+        }
+
 #endif
-		
-		// Ignore if this is not the same address family
-		// Not a good idea, as Symbian mapps IPv4 to IPv6.
-		//fam = inetAddr.Family();
-		//if (fam != af) {
-		//    resv.Next(nameEntry, reqStatus);
-		//    User::WaitForRequest(reqStatus);
-		//    continue;
-		//}
-		
-		// Convert IP address first to get IPv4 mapped address
-		addrlen = sizeof(ai[i].ai_addr);
-		status = PjSymbianOS::Addr2pj(inetAddr, ai[i].ai_addr, 
-									  &addrlen, PJ_TRUE);
-		if (status != PJ_SUCCESS)
-		    return status;
-		
-		// Ignore if address family doesn't match
-		if (ai[i].ai_addr.addr.sa_family != af) {
-		    resv.Next(nameEntry, reqStatus);
-		    User::WaitForRequest(reqStatus);
-		    continue;
-		}
-
-		// Convert the official address to ANSI.
-		pj_unicode_to_ansi((const wchar_t*)nameEntry().iName.Ptr(), 
-				   nameEntry().iName.Length(),
-			       	   ai[i].ai_canonname, sizeof(ai[i].ai_canonname));
-	
-		// Next
-		++i;
-		resv.Next(nameEntry, reqStatus);
-		User::WaitForRequest(reqStatus);
+
+        // Ignore if this is not the same address family
+        // Not a good idea, as Symbian mapps IPv4 to IPv6.
+        //fam = inetAddr.Family();
+        //if (fam != af) {
+        //    resv.Next(nameEntry, reqStatus);
+        //    User::WaitForRequest(reqStatus);
+        //    continue;
+        //}
+
+        // Convert IP address first to get IPv4 mapped address
+        addrlen = sizeof (ai[i].ai_addr);
+        status = PjSymbianOS::Addr2pj (inetAddr, ai[i].ai_addr,
+                                       &addrlen, PJ_TRUE);
+
+        if (status != PJ_SUCCESS)
+            return status;
+
+        // Ignore if address family doesn't match
+        if (ai[i].ai_addr.addr.sa_family != af) {
+            resv.Next (nameEntry, reqStatus);
+            User::WaitForRequest (reqStatus);
+            continue;
+        }
+
+        // Convert the official address to ANSI.
+        pj_unicode_to_ansi ( (const wchar_t*) nameEntry().iName.Ptr(),
+                             nameEntry().iName.Length(),
+                             ai[i].ai_canonname, sizeof (ai[i].ai_canonname));
+
+        // Next
+        ++i;
+        resv.Next (nameEntry, reqStatus);
+        User::WaitForRequest (reqStatus);
     }
 
     *count = i;
@@ -169,44 +176,46 @@ static pj_status_t getaddrinfo_by_af(int af, const pj_str_t *name,
 }
 
 /* Resolve IPv4/IPv6 address */
-PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
-				   unsigned *count, pj_addrinfo ai[]) 
+PJ_DEF (pj_status_t) pj_getaddrinfo (int af, const pj_str_t *nodename,
+                                     unsigned *count, pj_addrinfo ai[])
 {
     unsigned start;
     pj_status_t status = PJ_EAFNOTSUP;
-    
-    PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6 || af==PJ_AF_UNSPEC,
-    		     PJ_EAFNOTSUP);
-    PJ_ASSERT_RETURN(nodename && count && *count && ai, PJ_EINVAL);
-    
+
+    PJ_ASSERT_RETURN (af==PJ_AF_INET || af==PJ_AF_INET6 || af==PJ_AF_UNSPEC,
+                      PJ_EAFNOTSUP);
+    PJ_ASSERT_RETURN (nodename && count && *count && ai, PJ_EINVAL);
+
     start = 0;
-    
+
     if (af==PJ_AF_INET6 || af==PJ_AF_UNSPEC) {
         unsigned max = *count;
-    	status = getaddrinfo_by_af(PJ_AF_INET6, nodename, 
-    				   &max, &ai[start]);
-    	if (status == PJ_SUCCESS) {
-    	    (*count) -= max;
-    	    start += max;
-    	}
+        status = getaddrinfo_by_af (PJ_AF_INET6, nodename,
+                                    &max, &ai[start]);
+
+        if (status == PJ_SUCCESS) {
+            (*count) -= max;
+            start += max;
+        }
     }
-    
+
     if (af==PJ_AF_INET || af==PJ_AF_UNSPEC) {
         unsigned max = *count;
-    	status = getaddrinfo_by_af(PJ_AF_INET, nodename, 
-    				   &max, &ai[start]);
-    	if (status == PJ_SUCCESS) {
-    	    (*count) -= max;
-    	    start += max;
-    	}
+        status = getaddrinfo_by_af (PJ_AF_INET, nodename,
+                                    &max, &ai[start]);
+
+        if (status == PJ_SUCCESS) {
+            (*count) -= max;
+            start += max;
+        }
     }
-    
+
     *count = start;
-    
+
     if (*count) {
-    	return PJ_SUCCESS;
+        return PJ_SUCCESS;
     } else {
-    	return status!=PJ_SUCCESS ? status : PJ_ENOTFOUND;
+        return status!=PJ_SUCCESS ? status : PJ_ENOTFOUND;
     }
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp
index f4bc5908d876ba7ed1d88c7bf1e940217dd53fde..0315a8dee22751080ab5a49199f53075394a1d65 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/exception_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: exception_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -36,19 +36,19 @@
 
 
 #if defined(PJ_HAS_EXCEPTION_NAMES) && PJ_HAS_EXCEPTION_NAMES != 0
-    static const char *exception_id_names[PJ_MAX_EXCEPTION_ID];
+static const char *exception_id_names[PJ_MAX_EXCEPTION_ID];
 #else
-    /*
-     * Start from 1 (not 0)!!!
-     * Exception 0 is reserved for normal path of setjmp()!!!
-     */
-    static int last_exception_id = 1;
+/*
+ * Start from 1 (not 0)!!!
+ * Exception 0 is reserved for normal path of setjmp()!!!
+ */
+static int last_exception_id = 1;
 #endif  /* PJ_HAS_EXCEPTION_NAMES */
 
 
 #if defined(PJ_HAS_EXCEPTION_NAMES) && PJ_HAS_EXCEPTION_NAMES != 0
-PJ_DEF(pj_status_t) pj_exception_id_alloc( const char *name,
-                                           pj_exception_id_t *id)
+PJ_DEF (pj_status_t) pj_exception_id_alloc (const char *name,
+        pj_exception_id_t *id)
 {
     unsigned i;
 
@@ -71,14 +71,14 @@ PJ_DEF(pj_status_t) pj_exception_id_alloc( const char *name,
     return PJ_ETOOMANY;
 }
 
-PJ_DEF(pj_status_t) pj_exception_id_free( pj_exception_id_t id )
+PJ_DEF (pj_status_t) pj_exception_id_free (pj_exception_id_t id)
 {
     /*
      * Start from 1 (not 0)!!!
      * Exception 0 is reserved for normal path of setjmp()!!!
      */
-    PJ_ASSERT_RETURN(id>0 && id<PJ_MAX_EXCEPTION_ID, PJ_EINVAL);
-    
+    PJ_ASSERT_RETURN (id>0 && id<PJ_MAX_EXCEPTION_ID, PJ_EINVAL);
+
     pj_enter_critical_section();
     exception_id_names[id] = NULL;
     pj_leave_critical_section();
@@ -87,13 +87,13 @@ PJ_DEF(pj_status_t) pj_exception_id_free( pj_exception_id_t id )
 
 }
 
-PJ_DEF(const char*) pj_exception_id_name(pj_exception_id_t id)
+PJ_DEF (const char*) pj_exception_id_name (pj_exception_id_t id)
 {
     /*
      * Start from 1 (not 0)!!!
      * Exception 0 is reserved for normal path of setjmp()!!!
      */
-    PJ_ASSERT_RETURN(id>0 && id<PJ_MAX_EXCEPTION_ID, "<Invalid ID>");
+    PJ_ASSERT_RETURN (id>0 && id<PJ_MAX_EXCEPTION_ID, "<Invalid ID>");
 
     if (exception_id_names[id] == NULL)
         return "<Unallocated ID>";
@@ -102,21 +102,21 @@ PJ_DEF(const char*) pj_exception_id_name(pj_exception_id_t id)
 }
 
 #else   /* PJ_HAS_EXCEPTION_NAMES */
-PJ_DEF(pj_status_t) pj_exception_id_alloc( const char *name,
-                                           pj_exception_id_t *id)
+PJ_DEF (pj_status_t) pj_exception_id_alloc (const char *name,
+        pj_exception_id_t *id)
 {
-    PJ_ASSERT_RETURN(last_exception_id < PJ_MAX_EXCEPTION_ID-1, PJ_ETOOMANY);
+    PJ_ASSERT_RETURN (last_exception_id < PJ_MAX_EXCEPTION_ID-1, PJ_ETOOMANY);
 
     *id = last_exception_id++;
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) pj_exception_id_free( pj_exception_id_t id )
+PJ_DEF (pj_status_t) pj_exception_id_free (pj_exception_id_t id)
 {
     return PJ_SUCCESS;
 }
 
-PJ_DEF(const char*) pj_exception_id_name(pj_exception_id_t id)
+PJ_DEF (const char*) pj_exception_id_name (pj_exception_id_t id)
 {
     return "";
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp
index e52c64091ac56440861431bfcd22b46231985991..ee67280fda718fead924815777652d67f14b34b0 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ioqueue_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: ioqueue_symbian.cpp 2771 2009-06-17 13:31:13Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -43,8 +43,7 @@ class CIoqueueCallback;
 /*
  * IO Queue structure.
  */
-struct pj_ioqueue_t
-{
+struct pj_ioqueue_t {
     int		     eventCount;
 };
 
@@ -54,146 +53,136 @@ struct pj_ioqueue_t
 //
 class CIoqueueCallback : public CActive
 {
-public:
-    static CIoqueueCallback* NewL(pj_ioqueue_t *ioqueue,
-				  pj_ioqueue_key_t *key, 
-				  pj_sock_t sock, 
-				  const pj_ioqueue_callback *cb, 
-				  void *user_data);
-
-    //
-    // Start asynchronous recv() operation
-    //
-    pj_status_t StartRead(pj_ioqueue_op_key_t *op_key, 
-			  void *buf, pj_ssize_t *size, unsigned flags,
-			  pj_sockaddr_t *addr, int *addrlen);
-
-    //
-    // Start asynchronous accept() operation.
-    //
-    pj_status_t StartAccept(pj_ioqueue_op_key_t *op_key,
-			    pj_sock_t *new_sock,
-			    pj_sockaddr_t *local,
-			    pj_sockaddr_t *remote,
-			    int *addrlen );
-
-    //
-    // Completion callback.
-    //
-    void RunL();
-
-    //
-    // CActive's DoCancel()
-    //
-    void DoCancel();
-
-    //
-    // Cancel operation and call callback.
-    //
-    void CancelOperation(pj_ioqueue_op_key_t *op_key, 
-			 pj_ssize_t bytes_status);
-
-    //
-    // Accessors
-    //
-    void* get_user_data() const
-    {
-	return user_data_;
-    }
-    void set_user_data(void *user_data)
-    {
-	user_data_ = user_data;
-    }
-    pj_ioqueue_op_key_t *get_op_key() const
-    {
-	return pending_data_.common_.op_key_;
-    }
-    CPjSocket* get_pj_socket()
-    {
-	return sock_;
-    }
-
-private:
-    // Type of pending operation.
-    enum Type {
-	TYPE_NONE,
-	TYPE_READ,
-	TYPE_ACCEPT,
-    };
-
-    // Static data.
-    pj_ioqueue_t		*ioqueue_;
-    pj_ioqueue_key_t		*key_;
-    CPjSocket			*sock_;
-    pj_ioqueue_callback		 cb_;
-    void			*user_data_;
-
-    // Symbian data.
-    TPtr8			 aBufferPtr_;
-    TInetAddr			 aAddress_;
-
-    // Application data.
-    Type			 type_;
-
-    union Pending_Data
-    {
-	struct Common
-	{
-	    pj_ioqueue_op_key_t	*op_key_;
-	} common_;
-
-	struct Pending_Read
-	{
-	    pj_ioqueue_op_key_t	*op_key_;
-	    pj_sockaddr_t	*addr_;
-	    int			*addrlen_;
-	} read_;
-
-	struct Pending_Accept
-	{
-	    pj_ioqueue_op_key_t *op_key_;
-	    pj_sock_t		*new_sock_;
-	    pj_sockaddr_t	*local_;
-	    pj_sockaddr_t	*remote_;
-	    int			*addrlen_;
-	} accept_;
-    };
-
-    union Pending_Data		 pending_data_;
-    RSocket			blank_sock_;
-
-    CIoqueueCallback(pj_ioqueue_t *ioqueue,
-		     pj_ioqueue_key_t *key, pj_sock_t sock, 
-		     const pj_ioqueue_callback *cb, void *user_data)
-    : CActive(CActive::EPriorityStandard),
-	  ioqueue_(ioqueue), key_(key), sock_((CPjSocket*)sock), 
-	  user_data_(user_data), aBufferPtr_(NULL, 0), type_(TYPE_NONE)
-    {
-    	pj_memcpy(&cb_, cb, sizeof(*cb));
-    }
-
-
-    void ConstructL()
-    {
-	CActiveScheduler::Add(this);
-    }
-    
-    void HandleReadCompletion();
-    CPjSocket *HandleAcceptCompletion();
+    public:
+        static CIoqueueCallback* NewL (pj_ioqueue_t *ioqueue,
+                                       pj_ioqueue_key_t *key,
+                                       pj_sock_t sock,
+                                       const pj_ioqueue_callback *cb,
+                                       void *user_data);
+
+        //
+        // Start asynchronous recv() operation
+        //
+        pj_status_t StartRead (pj_ioqueue_op_key_t *op_key,
+                               void *buf, pj_ssize_t *size, unsigned flags,
+                               pj_sockaddr_t *addr, int *addrlen);
+
+        //
+        // Start asynchronous accept() operation.
+        //
+        pj_status_t StartAccept (pj_ioqueue_op_key_t *op_key,
+                                 pj_sock_t *new_sock,
+                                 pj_sockaddr_t *local,
+                                 pj_sockaddr_t *remote,
+                                 int *addrlen);
+
+        //
+        // Completion callback.
+        //
+        void RunL();
+
+        //
+        // CActive's DoCancel()
+        //
+        void DoCancel();
+
+        //
+        // Cancel operation and call callback.
+        //
+        void CancelOperation (pj_ioqueue_op_key_t *op_key,
+                              pj_ssize_t bytes_status);
+
+        //
+        // Accessors
+        //
+        void* get_user_data() const {
+            return user_data_;
+        }
+        void set_user_data (void *user_data) {
+            user_data_ = user_data;
+        }
+        pj_ioqueue_op_key_t *get_op_key() const {
+            return pending_data_.common_.op_key_;
+        }
+        CPjSocket* get_pj_socket() {
+            return sock_;
+        }
+
+    private:
+        // Type of pending operation.
+        enum Type {
+            TYPE_NONE,
+            TYPE_READ,
+            TYPE_ACCEPT,
+        };
+
+        // Static data.
+        pj_ioqueue_t		*ioqueue_;
+        pj_ioqueue_key_t		*key_;
+        CPjSocket			*sock_;
+        pj_ioqueue_callback		 cb_;
+        void			*user_data_;
+
+        // Symbian data.
+        TPtr8			 aBufferPtr_;
+        TInetAddr			 aAddress_;
+
+        // Application data.
+        Type			 type_;
+
+        union Pending_Data {
+            struct Common {
+                pj_ioqueue_op_key_t	*op_key_;
+            } common_;
+
+            struct Pending_Read {
+                pj_ioqueue_op_key_t	*op_key_;
+                pj_sockaddr_t	*addr_;
+                int			*addrlen_;
+            } read_;
+
+            struct Pending_Accept {
+                pj_ioqueue_op_key_t *op_key_;
+                pj_sock_t		*new_sock_;
+                pj_sockaddr_t	*local_;
+                pj_sockaddr_t	*remote_;
+                int			*addrlen_;
+            } accept_;
+        };
+
+        union Pending_Data		 pending_data_;
+        RSocket			blank_sock_;
+
+        CIoqueueCallback (pj_ioqueue_t *ioqueue,
+                          pj_ioqueue_key_t *key, pj_sock_t sock,
+                          const pj_ioqueue_callback *cb, void *user_data)
+                : CActive (CActive::EPriorityStandard),
+                ioqueue_ (ioqueue), key_ (key), sock_ ( (CPjSocket*) sock),
+                user_data_ (user_data), aBufferPtr_ (NULL, 0), type_ (TYPE_NONE) {
+            pj_memcpy (&cb_, cb, sizeof (*cb));
+        }
+
+
+        void ConstructL() {
+            CActiveScheduler::Add (this);
+        }
+
+        void HandleReadCompletion();
+        CPjSocket *HandleAcceptCompletion();
 };
 
 
-CIoqueueCallback* CIoqueueCallback::NewL(pj_ioqueue_t *ioqueue,
-					 pj_ioqueue_key_t *key, 
-					 pj_sock_t sock, 
-					 const pj_ioqueue_callback *cb, 
-					 void *user_data)
+CIoqueueCallback* CIoqueueCallback::NewL (pj_ioqueue_t *ioqueue,
+        pj_ioqueue_key_t *key,
+        pj_sock_t sock,
+        const pj_ioqueue_callback *cb,
+        void *user_data)
 {
-    CIoqueueCallback *self = new CIoqueueCallback(ioqueue, key, sock, 
-						  cb, user_data);
-    CleanupStack::PushL(self);
+    CIoqueueCallback *self = new CIoqueueCallback (ioqueue, key, sock,
+            cb, user_data);
+    CleanupStack::PushL (self);
     self->ConstructL();
-    CleanupStack::Pop(self);
+    CleanupStack::Pop (self);
 
     return self;
 }
@@ -202,13 +191,13 @@ CIoqueueCallback* CIoqueueCallback::NewL(pj_ioqueue_t *ioqueue,
 //
 // Start asynchronous recv() operation
 //
-pj_status_t CIoqueueCallback::StartRead(pj_ioqueue_op_key_t *op_key, 
-					void *buf, pj_ssize_t *size, 
-					unsigned flags,
-					pj_sockaddr_t *addr, int *addrlen)
+pj_status_t CIoqueueCallback::StartRead (pj_ioqueue_op_key_t *op_key,
+        void *buf, pj_ssize_t *size,
+        unsigned flags,
+        pj_sockaddr_t *addr, int *addrlen)
 {
-    PJ_ASSERT_RETURN(IsActive()==false, PJ_EBUSY);
-    PJ_ASSERT_RETURN(pending_data_.common_.op_key_==NULL, PJ_EBUSY);
+    PJ_ASSERT_RETURN (IsActive() ==false, PJ_EBUSY);
+    PJ_ASSERT_RETURN (pending_data_.common_.op_key_==NULL, PJ_EBUSY);
 
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
 
@@ -216,24 +205,25 @@ pj_status_t CIoqueueCallback::StartRead(pj_ioqueue_op_key_t *op_key,
     pending_data_.read_.addr_ = addr;
     pending_data_.read_.addrlen_ = addrlen;
 
-    aBufferPtr_.Set((TUint8*)buf, 0, (TInt)*size);
+    aBufferPtr_.Set ( (TUint8*) buf, 0, (TInt) *size);
 
     type_ = TYPE_READ;
+
     if (addr && addrlen) {
-	sock_->Socket().RecvFrom(aBufferPtr_, aAddress_, flags, iStatus);
+        sock_->Socket().RecvFrom (aBufferPtr_, aAddress_, flags, iStatus);
     } else {
-	aAddress_.SetAddress(0);
-	aAddress_.SetPort(0);
-
-	if (sock_->IsDatagram()) {
-	    sock_->Socket().Recv(aBufferPtr_, flags, iStatus);
-	} else {
-	    // Using static like this is not pretty, but we don't need to use
-	    // the value anyway, hence doing it like this is probably most
-	    // optimal.
-	    static TSockXfrLength len;
-	    sock_->Socket().RecvOneOrMore(aBufferPtr_, flags, iStatus, len);
-	}
+        aAddress_.SetAddress (0);
+        aAddress_.SetPort (0);
+
+        if (sock_->IsDatagram()) {
+            sock_->Socket().Recv (aBufferPtr_, flags, iStatus);
+        } else {
+            // Using static like this is not pretty, but we don't need to use
+            // the value anyway, hence doing it like this is probably most
+            // optimal.
+            static TSockXfrLength len;
+            sock_->Socket().RecvOneOrMore (aBufferPtr_, flags, iStatus, len);
+        }
     }
 
     SetActive();
@@ -244,19 +234,19 @@ pj_status_t CIoqueueCallback::StartRead(pj_ioqueue_op_key_t *op_key,
 //
 // Start asynchronous accept() operation.
 //
-pj_status_t CIoqueueCallback::StartAccept(pj_ioqueue_op_key_t *op_key,
-					  pj_sock_t *new_sock,
-					  pj_sockaddr_t *local,
-					  pj_sockaddr_t *remote,
-					  int *addrlen )
+pj_status_t CIoqueueCallback::StartAccept (pj_ioqueue_op_key_t *op_key,
+        pj_sock_t *new_sock,
+        pj_sockaddr_t *local,
+        pj_sockaddr_t *remote,
+        int *addrlen)
 {
-    PJ_ASSERT_RETURN(IsActive()==false, PJ_EBUSY);
-    PJ_ASSERT_RETURN(pending_data_.common_.op_key_==NULL, PJ_EBUSY);
+    PJ_ASSERT_RETURN (IsActive() ==false, PJ_EBUSY);
+    PJ_ASSERT_RETURN (pending_data_.common_.op_key_==NULL, PJ_EBUSY);
 
     // addrlen must be specified if local or remote is specified
-    PJ_ASSERT_RETURN((!local && !remote) ||
-    		     (addrlen && *addrlen), PJ_EINVAL);
-    
+    PJ_ASSERT_RETURN ( (!local && !remote) ||
+                       (addrlen && *addrlen), PJ_EINVAL);
+
     pending_data_.accept_.op_key_ = op_key;
     pending_data_.accept_.new_sock_ = new_sock;
     pending_data_.accept_.local_ = local;
@@ -264,10 +254,10 @@ pj_status_t CIoqueueCallback::StartAccept(pj_ioqueue_op_key_t *op_key,
     pending_data_.accept_.addrlen_ = addrlen;
 
     // Create blank socket
-    blank_sock_.Open(PjSymbianOS::Instance()->SocketServ());
+    blank_sock_.Open (PjSymbianOS::Instance()->SocketServ());
 
     type_ = TYPE_ACCEPT;
-    sock_->Socket().Accept(blank_sock_, iStatus);
+    sock_->Socket().Accept (blank_sock_, iStatus);
 
     SetActive();
     return PJ_EPENDING;
@@ -277,16 +267,16 @@ pj_status_t CIoqueueCallback::StartAccept(pj_ioqueue_op_key_t *op_key,
 //
 // Handle asynchronous RecvFrom() completion
 //
-void CIoqueueCallback::HandleReadCompletion() 
+void CIoqueueCallback::HandleReadCompletion()
 {
     if (pending_data_.read_.addr_ && pending_data_.read_.addrlen_) {
-	PjSymbianOS::Addr2pj(aAddress_, 
-			     *(pj_sockaddr*)pending_data_.read_.addr_,
-			     pending_data_.read_.addrlen_);
-	pending_data_.read_.addr_ = NULL;
-	pending_data_.read_.addrlen_ = NULL;
+        PjSymbianOS::Addr2pj (aAddress_,
+                              * (pj_sockaddr*) pending_data_.read_.addr_,
+                              pending_data_.read_.addrlen_);
+        pending_data_.read_.addr_ = NULL;
+        pending_data_.read_.addrlen_ = NULL;
     }
-	
+
     pending_data_.read_.op_key_ = NULL;
 }
 
@@ -294,55 +284,56 @@ void CIoqueueCallback::HandleReadCompletion()
 //
 // Handle asynchronous Accept() completion.
 //
-CPjSocket *CIoqueueCallback::HandleAcceptCompletion() 
+CPjSocket *CIoqueueCallback::HandleAcceptCompletion()
 {
-	CPjSocket *pjNewSock = new CPjSocket(get_pj_socket()->GetAf(), 
-					     get_pj_socket()->GetSockType(),
-					     blank_sock_);
-	int addrlen = 0;
-	
-	if (pending_data_.accept_.new_sock_) {
-	    *pending_data_.accept_.new_sock_ = (pj_sock_t)pjNewSock;
-	    pending_data_.accept_.new_sock_ = NULL;
-	}
-
-	if (pending_data_.accept_.local_) {
-	    TInetAddr aAddr;
-	    pj_sockaddr *ptr_sockaddr;
-	    
-	    blank_sock_.LocalName(aAddr);
-	    ptr_sockaddr = (pj_sockaddr*)pending_data_.accept_.local_;
-	    addrlen = *pending_data_.accept_.addrlen_;
-	    PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr, &addrlen);
-	    pending_data_.accept_.local_ = NULL;
-	}
-
-	if (pending_data_.accept_.remote_) {
-	    TInetAddr aAddr;
-	    pj_sockaddr *ptr_sockaddr;
-
-	    blank_sock_.RemoteName(aAddr);
-	    ptr_sockaddr = (pj_sockaddr*)pending_data_.accept_.remote_;
-	    addrlen = *pending_data_.accept_.addrlen_;
-	    PjSymbianOS::Addr2pj(aAddr, *ptr_sockaddr, &addrlen);
-	    pending_data_.accept_.remote_ = NULL;
-	}
-
-	if (pending_data_.accept_.addrlen_) {
-	    if (addrlen == 0) {
-	    	if (pjNewSock->GetAf() == PJ_AF_INET)
-	    	    addrlen = sizeof(pj_sockaddr_in);
-	    	else if (pjNewSock->GetAf() == PJ_AF_INET6)
-	    	    addrlen = sizeof(pj_sockaddr_in6);
-	    	else {
-	    	    pj_assert(!"Unsupported address family");
-	    	}
-	    }
-	    *pending_data_.accept_.addrlen_ = addrlen;
-	    pending_data_.accept_.addrlen_ = NULL;
-	}
-	
-	return pjNewSock;
+    CPjSocket *pjNewSock = new CPjSocket (get_pj_socket()->GetAf(),
+                                          get_pj_socket()->GetSockType(),
+                                          blank_sock_);
+    int addrlen = 0;
+
+    if (pending_data_.accept_.new_sock_) {
+        *pending_data_.accept_.new_sock_ = (pj_sock_t) pjNewSock;
+        pending_data_.accept_.new_sock_ = NULL;
+    }
+
+    if (pending_data_.accept_.local_) {
+        TInetAddr aAddr;
+        pj_sockaddr *ptr_sockaddr;
+
+        blank_sock_.LocalName (aAddr);
+        ptr_sockaddr = (pj_sockaddr*) pending_data_.accept_.local_;
+        addrlen = *pending_data_.accept_.addrlen_;
+        PjSymbianOS::Addr2pj (aAddr, *ptr_sockaddr, &addrlen);
+        pending_data_.accept_.local_ = NULL;
+    }
+
+    if (pending_data_.accept_.remote_) {
+        TInetAddr aAddr;
+        pj_sockaddr *ptr_sockaddr;
+
+        blank_sock_.RemoteName (aAddr);
+        ptr_sockaddr = (pj_sockaddr*) pending_data_.accept_.remote_;
+        addrlen = *pending_data_.accept_.addrlen_;
+        PjSymbianOS::Addr2pj (aAddr, *ptr_sockaddr, &addrlen);
+        pending_data_.accept_.remote_ = NULL;
+    }
+
+    if (pending_data_.accept_.addrlen_) {
+        if (addrlen == 0) {
+            if (pjNewSock->GetAf() == PJ_AF_INET)
+                addrlen = sizeof (pj_sockaddr_in);
+            else if (pjNewSock->GetAf() == PJ_AF_INET6)
+                addrlen = sizeof (pj_sockaddr_in6);
+            else {
+                pj_assert (!"Unsupported address family");
+            }
+        }
+
+        *pending_data_.accept_.addrlen_ = addrlen;
+        pending_data_.accept_.addrlen_ = NULL;
+    }
+
+    return pjNewSock;
 }
 
 
@@ -356,58 +347,60 @@ void CIoqueueCallback::RunL()
     type_ = TYPE_NONE;
 
     if (cur_type == TYPE_READ) {
-	//
-	// Completion of asynchronous RecvFrom()
-	//
-
-	/* Clear op_key (save it to temp variable first!) */
-	pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
-	pending_data_.read_.op_key_ = NULL;
-
-	// Handle failure condition
-	if (iStatus != KErrNone) {
-	    if (cb_.on_read_complete) {
-	    	cb_.on_read_complete( key_, op_key, 
-				      -PJ_RETURN_OS_ERROR(iStatus.Int()));
-	    }
-	    return;
-	}
-
-	HandleReadCompletion();
-
-	/* Call callback */
-	if (cb_.on_read_complete) {
-	    cb_.on_read_complete(key_, op_key, aBufferPtr_.Length());
-	}
+        //
+        // Completion of asynchronous RecvFrom()
+        //
+
+        /* Clear op_key (save it to temp variable first!) */
+        pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
+        pending_data_.read_.op_key_ = NULL;
+
+        // Handle failure condition
+        if (iStatus != KErrNone) {
+            if (cb_.on_read_complete) {
+                cb_.on_read_complete (key_, op_key,
+                                      -PJ_RETURN_OS_ERROR (iStatus.Int()));
+            }
+
+            return;
+        }
+
+        HandleReadCompletion();
+
+        /* Call callback */
+        if (cb_.on_read_complete) {
+            cb_.on_read_complete (key_, op_key, aBufferPtr_.Length());
+        }
 
     } else if (cur_type == TYPE_ACCEPT) {
-	//
-	// Completion of asynchronous Accept()
-	//
-	
-	/* Clear op_key (save it to temp variable first!) */
-	pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
-	pending_data_.read_.op_key_ = NULL;
-
-	// Handle failure condition
-	if (iStatus != KErrNone) {
-	    if (pending_data_.accept_.new_sock_)
-		*pending_data_.accept_.new_sock_ = PJ_INVALID_SOCKET;
-	    
-	    if (cb_.on_accept_complete) {
-	    	cb_.on_accept_complete( key_, op_key, PJ_INVALID_SOCKET,
-				        -PJ_RETURN_OS_ERROR(iStatus.Int()));
-	    }
-	    return;
-	}
-
-	CPjSocket *pjNewSock = HandleAcceptCompletion();
-	
-	// Call callback.
-	if (cb_.on_accept_complete) {
-	    cb_.on_accept_complete( key_, op_key, (pj_sock_t)pjNewSock, 
-				    PJ_SUCCESS);
-	}
+        //
+        // Completion of asynchronous Accept()
+        //
+
+        /* Clear op_key (save it to temp variable first!) */
+        pj_ioqueue_op_key_t	*op_key = pending_data_.read_.op_key_;
+        pending_data_.read_.op_key_ = NULL;
+
+        // Handle failure condition
+        if (iStatus != KErrNone) {
+            if (pending_data_.accept_.new_sock_)
+                *pending_data_.accept_.new_sock_ = PJ_INVALID_SOCKET;
+
+            if (cb_.on_accept_complete) {
+                cb_.on_accept_complete (key_, op_key, PJ_INVALID_SOCKET,
+                                        -PJ_RETURN_OS_ERROR (iStatus.Int()));
+            }
+
+            return;
+        }
+
+        CPjSocket *pjNewSock = HandleAcceptCompletion();
+
+        // Call callback.
+        if (cb_.on_accept_complete) {
+            cb_.on_accept_complete (key_, op_key, (pj_sock_t) pjNewSock,
+                                    PJ_SUCCESS);
+        }
     }
 
     ioqueue_->eventCount++;
@@ -419,9 +412,9 @@ void CIoqueueCallback::RunL()
 void CIoqueueCallback::DoCancel()
 {
     if (type_ == TYPE_READ)
-	sock_->Socket().CancelRecv();
+        sock_->Socket().CancelRecv();
     else if (type_ == TYPE_ACCEPT)
-	sock_->Socket().CancelAccept();
+        sock_->Socket().CancelAccept();
 
     type_ = TYPE_NONE;
     pending_data_.common_.op_key_ = NULL;
@@ -430,20 +423,20 @@ void CIoqueueCallback::DoCancel()
 //
 // Cancel operation and call callback.
 //
-void CIoqueueCallback::CancelOperation(pj_ioqueue_op_key_t *op_key, 
-				       pj_ssize_t bytes_status)
+void CIoqueueCallback::CancelOperation (pj_ioqueue_op_key_t *op_key,
+                                        pj_ssize_t bytes_status)
 {
     Type cur_type = type_;
 
-    pj_assert(op_key == pending_data_.common_.op_key_);
+    pj_assert (op_key == pending_data_.common_.op_key_);
 
     Cancel();
 
     if (cur_type == TYPE_READ) {
-    	if (cb_.on_read_complete)
-    	    cb_.on_read_complete(key_, op_key, bytes_status);
+        if (cb_.on_read_complete)
+            cb_.on_read_complete (key_, op_key, bytes_status);
     } else if (cur_type == TYPE_ACCEPT)
-	;    
+        ;
 }
 
 
@@ -451,8 +444,7 @@ void CIoqueueCallback::CancelOperation(pj_ioqueue_op_key_t *op_key,
 /*
  * IO Queue key structure.
  */
-struct pj_ioqueue_key_t
-{
+struct pj_ioqueue_key_t {
     CIoqueueCallback	*cbObj;
 };
 
@@ -460,7 +452,7 @@ struct pj_ioqueue_key_t
 /*
  * Return the name of the ioqueue implementation.
  */
-PJ_DEF(const char*) pj_ioqueue_name(void)
+PJ_DEF (const char*) pj_ioqueue_name (void)
 {
     return "ioqueue-symbian";
 }
@@ -469,15 +461,15 @@ PJ_DEF(const char*) pj_ioqueue_name(void)
 /*
  * Create a new I/O Queue framework.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_create(	pj_pool_t *pool, 
-					pj_size_t max_fd,
-					pj_ioqueue_t **p_ioqueue)
+PJ_DEF (pj_status_t) pj_ioqueue_create (pj_pool_t *pool,
+                                        pj_size_t max_fd,
+                                        pj_ioqueue_t **p_ioqueue)
 {
     pj_ioqueue_t *ioq;
 
-    PJ_UNUSED_ARG(max_fd);
+    PJ_UNUSED_ARG (max_fd);
 
-    ioq = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_t);
+    ioq = PJ_POOL_ZALLOC_T (pool, pj_ioqueue_t);
     *p_ioqueue = ioq;
     return PJ_SUCCESS;
 }
@@ -486,69 +478,69 @@ PJ_DEF(pj_status_t) pj_ioqueue_create(	pj_pool_t *pool,
 /*
  * Destroy the I/O queue.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_destroy( pj_ioqueue_t *ioq )
+PJ_DEF (pj_status_t) pj_ioqueue_destroy (pj_ioqueue_t *ioq)
 {
-    PJ_UNUSED_ARG(ioq);
+    PJ_UNUSED_ARG (ioq);
     return PJ_SUCCESS;
 }
 
 
 /*
- * Set the lock object to be used by the I/O Queue. 
+ * Set the lock object to be used by the I/O Queue.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_set_lock( pj_ioqueue_t *ioq, 
-					 pj_lock_t *lock,
-					 pj_bool_t auto_delete )
+PJ_DEF (pj_status_t) pj_ioqueue_set_lock (pj_ioqueue_t *ioq,
+        pj_lock_t *lock,
+        pj_bool_t auto_delete)
 {
     /* Don't really need lock for now */
-    PJ_UNUSED_ARG(ioq);
-    
+    PJ_UNUSED_ARG (ioq);
+
     if (auto_delete) {
-	pj_lock_destroy(lock);
+        pj_lock_destroy (lock);
     }
 
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) pj_ioqueue_set_default_concurrency(pj_ioqueue_t *ioqueue,
-													   pj_bool_t allow)
+PJ_DEF (pj_status_t) pj_ioqueue_set_default_concurrency (pj_ioqueue_t *ioqueue,
+        pj_bool_t allow)
 {
-	/* Not supported, just return PJ_SUCCESS silently */
-	PJ_UNUSED_ARG(ioqueue);
-	PJ_UNUSED_ARG(allow);
-	return PJ_SUCCESS;
+    /* Not supported, just return PJ_SUCCESS silently */
+    PJ_UNUSED_ARG (ioqueue);
+    PJ_UNUSED_ARG (allow);
+    return PJ_SUCCESS;
 }
 
 /*
- * Register a socket to the I/O queue framework. 
+ * Register a socket to the I/O queue framework.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_register_sock( pj_pool_t *pool,
-					      pj_ioqueue_t *ioq,
-					      pj_sock_t sock,
-					      void *user_data,
-					      const pj_ioqueue_callback *cb,
-                                              pj_ioqueue_key_t **p_key )
+PJ_DEF (pj_status_t) pj_ioqueue_register_sock (pj_pool_t *pool,
+        pj_ioqueue_t *ioq,
+        pj_sock_t sock,
+        void *user_data,
+        const pj_ioqueue_callback *cb,
+        pj_ioqueue_key_t **p_key)
 {
     pj_ioqueue_key_t *key;
 
-    key = PJ_POOL_ZALLOC_T(pool, pj_ioqueue_key_t);
-    key->cbObj = CIoqueueCallback::NewL(ioq, key, sock, cb, user_data);
+    key = PJ_POOL_ZALLOC_T (pool, pj_ioqueue_key_t);
+    key->cbObj = CIoqueueCallback::NewL (ioq, key, sock, cb, user_data);
 
     *p_key = key;
     return PJ_SUCCESS;
 }
 
 /*
- * Unregister from the I/O Queue framework. 
+ * Unregister from the I/O Queue framework.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_unregister( pj_ioqueue_key_t *key )
+PJ_DEF (pj_status_t) pj_ioqueue_unregister (pj_ioqueue_key_t *key)
 {
     if (key == NULL || key->cbObj == NULL)
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
 
     // Cancel pending async object
     if (key->cbObj) {
-	key->cbObj->Cancel();
+        key->cbObj->Cancel();
     }
 
     // Close socket.
@@ -557,8 +549,8 @@ PJ_DEF(pj_status_t) pj_ioqueue_unregister( pj_ioqueue_key_t *key )
 
     // Delete async object.
     if (key->cbObj) {
-	delete key->cbObj;
-	key->cbObj = NULL;
+        delete key->cbObj;
+        key->cbObj = NULL;
     }
 
     return PJ_SUCCESS;
@@ -568,7 +560,7 @@ PJ_DEF(pj_status_t) pj_ioqueue_unregister( pj_ioqueue_key_t *key )
 /*
  * Get user data associated with an ioqueue key.
  */
-PJ_DEF(void*) pj_ioqueue_get_user_data( pj_ioqueue_key_t *key )
+PJ_DEF (void*) pj_ioqueue_get_user_data (pj_ioqueue_key_t *key)
 {
     return key->cbObj->get_user_data();
 }
@@ -578,13 +570,14 @@ PJ_DEF(void*) pj_ioqueue_get_user_data( pj_ioqueue_key_t *key )
  * Set or change the user data to be associated with the file descriptor or
  * handle or socket descriptor.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_set_user_data( pj_ioqueue_key_t *key,
-                                              void *user_data,
-                                              void **old_data)
+PJ_DEF (pj_status_t) pj_ioqueue_set_user_data (pj_ioqueue_key_t *key,
+        void *user_data,
+        void **old_data)
 {
     if (old_data)
-	*old_data = key->cbObj->get_user_data();
-    key->cbObj->set_user_data(user_data);
+        *old_data = key->cbObj->get_user_data();
+
+    key->cbObj->set_user_data (user_data);
 
     return PJ_SUCCESS;
 }
@@ -593,88 +586,90 @@ PJ_DEF(pj_status_t) pj_ioqueue_set_user_data( pj_ioqueue_key_t *key,
 /*
  * Initialize operation key.
  */
-PJ_DEF(void) pj_ioqueue_op_key_init( pj_ioqueue_op_key_t *op_key,
-				     pj_size_t size )
+PJ_DEF (void) pj_ioqueue_op_key_init (pj_ioqueue_op_key_t *op_key,
+                                      pj_size_t size)
 {
-    pj_bzero(op_key, size);
+    pj_bzero (op_key, size);
 }
 
 
 /*
  * Check if operation is pending on the specified operation key.
  */
-PJ_DEF(pj_bool_t) pj_ioqueue_is_pending( pj_ioqueue_key_t *key,
-                                         pj_ioqueue_op_key_t *op_key )
+PJ_DEF (pj_bool_t) pj_ioqueue_is_pending (pj_ioqueue_key_t *key,
+        pj_ioqueue_op_key_t *op_key)
 {
-    return key->cbObj->get_op_key()==op_key &&
-	   key->cbObj->IsActive();
+    return key->cbObj->get_op_key() ==op_key &&
+           key->cbObj->IsActive();
 }
 
 
 /*
  * Post completion status to the specified operation key and call the
- * appropriate callback. 
+ * appropriate callback.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_post_completion( pj_ioqueue_key_t *key,
-                                                pj_ioqueue_op_key_t *op_key,
-                                                pj_ssize_t bytes_status )
+PJ_DEF (pj_status_t) pj_ioqueue_post_completion (pj_ioqueue_key_t *key,
+        pj_ioqueue_op_key_t *op_key,
+        pj_ssize_t bytes_status)
 {
-    if (pj_ioqueue_is_pending(key, op_key)) {
-	key->cbObj->CancelOperation(op_key, bytes_status);
+    if (pj_ioqueue_is_pending (key, op_key)) {
+        key->cbObj->CancelOperation (op_key, bytes_status);
     }
+
     return PJ_SUCCESS;
 }
 
 
 #if defined(PJ_HAS_TCP) && PJ_HAS_TCP != 0
 /**
- * Instruct I/O Queue to accept incoming connection on the specified 
+ * Instruct I/O Queue to accept incoming connection on the specified
  * listening socket.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_accept( pj_ioqueue_key_t *key,
-                                       pj_ioqueue_op_key_t *op_key,
-				       pj_sock_t *new_sock,
-				       pj_sockaddr_t *local,
-				       pj_sockaddr_t *remote,
-				       int *addrlen )
+PJ_DEF (pj_status_t) pj_ioqueue_accept (pj_ioqueue_key_t *key,
+                                        pj_ioqueue_op_key_t *op_key,
+                                        pj_sock_t *new_sock,
+                                        pj_sockaddr_t *local,
+                                        pj_sockaddr_t *remote,
+                                        int *addrlen)
 {
-    
-    return key->cbObj->StartAccept(op_key, new_sock, local, remote, addrlen);
+
+    return key->cbObj->StartAccept (op_key, new_sock, local, remote, addrlen);
 }
 
 
 /*
  * Initiate non-blocking socket connect.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_connect( pj_ioqueue_key_t *key,
-					const pj_sockaddr_t *addr,
-					int addrlen )
+PJ_DEF (pj_status_t) pj_ioqueue_connect (pj_ioqueue_key_t *key,
+        const pj_sockaddr_t *addr,
+        int addrlen)
 {
     pj_status_t status;
-    
+
     RSocket &rSock = key->cbObj->get_pj_socket()->Socket();
     TInetAddr inetAddr;
     TRequestStatus reqStatus;
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
+
     // Convert address
-    status = PjSymbianOS::pj2Addr(*(const pj_sockaddr*)addr, addrlen, 
-    				  inetAddr);
+    status = PjSymbianOS::pj2Addr (* (const pj_sockaddr*) addr, addrlen,
+                                   inetAddr);
+
     if (status != PJ_SUCCESS)
-    	return status;
-    
+        return status;
+
     // We don't support async connect for now.
-    PJ_TODO(IOQUEUE_SUPPORT_ASYNC_CONNECT);
+    PJ_TODO (IOQUEUE_SUPPORT_ASYNC_CONNECT);
 
-    rSock.Connect(inetAddr, reqStatus);
-    User::WaitForRequest(reqStatus);
+    rSock.Connect (inetAddr, reqStatus);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus == KErrNone)
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
 
-    return PJ_RETURN_OS_ERROR(reqStatus.Int());
+    return PJ_RETURN_OS_ERROR (reqStatus.Int());
 }
 
 
@@ -683,14 +678,14 @@ PJ_DEF(pj_status_t) pj_ioqueue_connect( pj_ioqueue_key_t *key,
 /*
  * Poll the I/O Queue for completed events.
  */
-PJ_DEF(int) pj_ioqueue_poll( pj_ioqueue_t *ioq,
-			     const pj_time_val *timeout)
+PJ_DEF (int) pj_ioqueue_poll (pj_ioqueue_t *ioq,
+                              const pj_time_val *timeout)
 {
     /* Polling is not necessary on Symbian, since all async activities
      * are registered to active scheduler.
      */
-    PJ_UNUSED_ARG(ioq);
-    PJ_UNUSED_ARG(timeout);
+    PJ_UNUSED_ARG (ioq);
+    PJ_UNUSED_ARG (timeout);
     return 0;
 }
 
@@ -698,19 +693,19 @@ PJ_DEF(int) pj_ioqueue_poll( pj_ioqueue_t *ioq,
 /*
  * Instruct the I/O Queue to read from the specified handle.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_recv( pj_ioqueue_key_t *key,
-                                     pj_ioqueue_op_key_t *op_key,
-				     void *buffer,
-				     pj_ssize_t *length,
-				     pj_uint32_t flags )
+PJ_DEF (pj_status_t) pj_ioqueue_recv (pj_ioqueue_key_t *key,
+                                      pj_ioqueue_op_key_t *op_key,
+                                      void *buffer,
+                                      pj_ssize_t *length,
+                                      pj_uint32_t flags)
 {
     // If socket has reader, delete it.
     if (key->cbObj->get_pj_socket()->Reader())
-    	key->cbObj->get_pj_socket()->DestroyReader();
-    
+        key->cbObj->get_pj_socket()->DestroyReader();
+
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
-    return key->cbObj->StartRead(op_key, buffer, length, flags, NULL, NULL);
+    return key->cbObj->StartRead (op_key, buffer, length, flags, NULL, NULL);
 }
 
 
@@ -719,57 +714,58 @@ PJ_DEF(pj_status_t) pj_ioqueue_recv( pj_ioqueue_key_t *key,
  * normally called for socket, and the remote address will also be returned
  * along with the data.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_recvfrom( pj_ioqueue_key_t *key,
-                                         pj_ioqueue_op_key_t *op_key,
-					 void *buffer,
-					 pj_ssize_t *length,
-                                         pj_uint32_t flags,
-					 pj_sockaddr_t *addr,
-					 int *addrlen)
+PJ_DEF (pj_status_t) pj_ioqueue_recvfrom (pj_ioqueue_key_t *key,
+        pj_ioqueue_op_key_t *op_key,
+        void *buffer,
+        pj_ssize_t *length,
+        pj_uint32_t flags,
+        pj_sockaddr_t *addr,
+        int *addrlen)
 {
     CPjSocket *sock = key->cbObj->get_pj_socket();
-    
+
     // If address is specified, check that the length match the
     // address family
     if (addr || addrlen) {
-    	PJ_ASSERT_RETURN(addr && addrlen && *addrlen, PJ_EINVAL);
-    	if (sock->GetAf() == PJ_AF_INET) {
-    	    PJ_ASSERT_RETURN(*addrlen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
-    	} else if (sock->GetAf() == PJ_AF_INET6) {
-    	    PJ_ASSERT_RETURN(*addrlen>=(int)sizeof(pj_sockaddr_in6), PJ_EINVAL);
-    	}
+        PJ_ASSERT_RETURN (addr && addrlen && *addrlen, PJ_EINVAL);
+
+        if (sock->GetAf() == PJ_AF_INET) {
+            PJ_ASSERT_RETURN (*addrlen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
+        } else if (sock->GetAf() == PJ_AF_INET6) {
+            PJ_ASSERT_RETURN (*addrlen>= (int) sizeof (pj_sockaddr_in6), PJ_EINVAL);
+        }
     }
-    
+
     // If socket has reader, delete it.
     if (sock->Reader())
-    	sock->DestroyReader();
-    
+        sock->DestroyReader();
+
     if (key->cbObj->IsActive())
-	return PJ_EBUSY;
+        return PJ_EBUSY;
 
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
-    return key->cbObj->StartRead(op_key, buffer, length, flags, addr, addrlen);
+    return key->cbObj->StartRead (op_key, buffer, length, flags, addr, addrlen);
 }
 
 
 /*
  * Instruct the I/O Queue to write to the handle.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_send( pj_ioqueue_key_t *key,
-                                     pj_ioqueue_op_key_t *op_key,
-				     const void *data,
-				     pj_ssize_t *length,
-				     pj_uint32_t flags )
+PJ_DEF (pj_status_t) pj_ioqueue_send (pj_ioqueue_key_t *key,
+                                      pj_ioqueue_op_key_t *op_key,
+                                      const void *data,
+                                      pj_ssize_t *length,
+                                      pj_uint32_t flags)
 {
     TRequestStatus reqStatus;
-    TPtrC8 aBuffer((const TUint8*)data, (TInt)*length);
+    TPtrC8 aBuffer ( (const TUint8*) data, (TInt) *length);
     TSockXfrLength aLen;
-    
-    PJ_UNUSED_ARG(op_key);
+
+    PJ_UNUSED_ARG (op_key);
 
     // Forcing pending operation is not supported.
-    PJ_ASSERT_RETURN((flags & PJ_IOQUEUE_ALWAYS_ASYNC)==0, PJ_EINVAL);
+    PJ_ASSERT_RETURN ( (flags & PJ_IOQUEUE_ALWAYS_ASYNC) ==0, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
@@ -777,11 +773,11 @@ PJ_DEF(pj_status_t) pj_ioqueue_send( pj_ioqueue_key_t *key,
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
 
-    key->cbObj->get_pj_socket()->Socket().Send(aBuffer, flags, reqStatus, aLen);
-    User::WaitForRequest(reqStatus);
+    key->cbObj->get_pj_socket()->Socket().Send (aBuffer, flags, reqStatus, aLen);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus.Int() != KErrNone)
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
 
     //At least in UIQ Emulator, aLen.Length() reports incorrect length
     //for UDP (some newlc.com users seem to have reported this too).
@@ -793,45 +789,46 @@ PJ_DEF(pj_status_t) pj_ioqueue_send( pj_ioqueue_key_t *key,
 /*
  * Instruct the I/O Queue to write to the handle.
  */
-PJ_DEF(pj_status_t) pj_ioqueue_sendto( pj_ioqueue_key_t *key,
-                                       pj_ioqueue_op_key_t *op_key,
-				       const void *data,
-				       pj_ssize_t *length,
-                                       pj_uint32_t flags,
-				       const pj_sockaddr_t *addr,
-				       int addrlen)
+PJ_DEF (pj_status_t) pj_ioqueue_sendto (pj_ioqueue_key_t *key,
+                                        pj_ioqueue_op_key_t *op_key,
+                                        const void *data,
+                                        pj_ssize_t *length,
+                                        pj_uint32_t flags,
+                                        const pj_sockaddr_t *addr,
+                                        int addrlen)
 {
     TRequestStatus reqStatus;
     TPtrC8 aBuffer;
     TInetAddr inetAddr;
     TSockXfrLength aLen;
     pj_status_t status;
-    
-    PJ_UNUSED_ARG(op_key);
+
+    PJ_UNUSED_ARG (op_key);
 
     // Forcing pending operation is not supported.
-    PJ_ASSERT_RETURN((flags & PJ_IOQUEUE_ALWAYS_ASYNC)==0, PJ_EINVAL);
+    PJ_ASSERT_RETURN ( (flags & PJ_IOQUEUE_ALWAYS_ASYNC) ==0, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
     // Convert address
-    status = PjSymbianOS::pj2Addr(*(const pj_sockaddr*)addr, addrlen, 
-    				  inetAddr);
+    status = PjSymbianOS::pj2Addr (* (const pj_sockaddr*) addr, addrlen,
+                                   inetAddr);
+
     if (status != PJ_SUCCESS)
-    	return status;
-    
+        return status;
+
     // Clear flag
     flags &= ~PJ_IOQUEUE_ALWAYS_ASYNC;
 
-    aBuffer.Set((const TUint8*)data, (TInt)*length);
+    aBuffer.Set ( (const TUint8*) data, (TInt) *length);
     CPjSocket *pjSock = key->cbObj->get_pj_socket();
 
-    pjSock->Socket().SendTo(aBuffer, inetAddr, flags, reqStatus, aLen);
-    User::WaitForRequest(reqStatus);
+    pjSock->Socket().SendTo (aBuffer, inetAddr, flags, reqStatus, aLen);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus.Int() != KErrNone)
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
 
     //At least in UIQ Emulator, aLen.Length() reports incorrect length
     //for UDP (some newlc.com users seem to have reported this too).
@@ -839,25 +836,25 @@ PJ_DEF(pj_status_t) pj_ioqueue_sendto( pj_ioqueue_key_t *key,
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) pj_ioqueue_set_concurrency(pj_ioqueue_key_t *key,
-											   pj_bool_t allow)
+PJ_DEF (pj_status_t) pj_ioqueue_set_concurrency (pj_ioqueue_key_t *key,
+        pj_bool_t allow)
 {
-	/* Not supported, just return PJ_SUCCESS silently */
-	PJ_UNUSED_ARG(key);
-	PJ_UNUSED_ARG(allow);
-	return PJ_SUCCESS;
+    /* Not supported, just return PJ_SUCCESS silently */
+    PJ_UNUSED_ARG (key);
+    PJ_UNUSED_ARG (allow);
+    return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) pj_ioqueue_lock_key(pj_ioqueue_key_t *key)
+PJ_DEF (pj_status_t) pj_ioqueue_lock_key (pj_ioqueue_key_t *key)
 {
-	/* Not supported, just return PJ_SUCCESS silently */
-	PJ_UNUSED_ARG(key);
-	return PJ_SUCCESS;
+    /* Not supported, just return PJ_SUCCESS silently */
+    PJ_UNUSED_ARG (key);
+    return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) pj_ioqueue_unlock_key(pj_ioqueue_key_t *key)
+PJ_DEF (pj_status_t) pj_ioqueue_unlock_key (pj_ioqueue_key_t *key)
 {
-	/* Not supported, just return PJ_SUCCESS silently */
-	PJ_UNUSED_ARG(key);
-	return PJ_SUCCESS;
+    /* Not supported, just return PJ_SUCCESS silently */
+    PJ_UNUSED_ARG (key);
+    return PJ_SUCCESS;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp
index 511f12331abffc5765da4130d8161c4490e3e5e3..ea47fa0e6fcbb3a6e8ff1151727832df9c96aa07 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ip_helper_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: ip_helper_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -42,119 +42,122 @@
 #define THIS_FILE	"ip_helper_symbian.cpp"
 #define TRACE_ME	0
 
-static pj_status_t rsock_enum_interface(int af,
-					unsigned *p_cnt,
-					pj_sockaddr ifs[]) 
+static pj_status_t rsock_enum_interface (int af,
+        unsigned *p_cnt,
+        pj_sockaddr ifs[])
 {
     TInt rc;
     RSocket rSock;
     TPckgBuf<TSoInetInterfaceInfo> info;
     unsigned i;
-    
+
     if (PjSymbianOS::Instance()->Connection()) {
-    	
-    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
-    			af, PJ_SOCK_DGRAM, KProtocolInetUdp,
-    			*PjSymbianOS::Instance()->Connection());
+
+        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
+                         af, PJ_SOCK_DGRAM, KProtocolInetUdp,
+                         *PjSymbianOS::Instance()->Connection());
     } else {
-    	
-    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
-    			af, PJ_SOCK_DGRAM, KProtocolInetUdp);
-    			
+
+        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
+                         af, PJ_SOCK_DGRAM, KProtocolInetUdp);
+
     }
-        
+
     if (rc != KErrNone)
-	return PJ_RETURN_OS_ERROR(rc);
-    
-    rSock.SetOpt(KSoInetEnumInterfaces, KSolInetIfCtrl);
-    
+        return PJ_RETURN_OS_ERROR (rc);
+
+    rSock.SetOpt (KSoInetEnumInterfaces, KSolInetIfCtrl);
+
     for (i=0; i<*p_cnt &&
-    		rSock.GetOpt(KSoInetNextInterface, KSolInetIfCtrl, 
-    		             info) == KErrNone; ) 
-    {
-    	TInetAddr &iAddress = info().iAddress;
-    	int namelen;
+            rSock.GetOpt (KSoInetNextInterface, KSolInetIfCtrl,
+                          info) == KErrNone;) {
+        TInetAddr &iAddress = info().iAddress;
+        int namelen;
 
 #if TRACE_ME
-		if (1) {
-			pj_sockaddr a;
-			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-			
-			namelen = sizeof(pj_sockaddr);
-			if (PjSymbianOS::Addr2pj(iAddress, a, &namelen, 
-									 PJ_FALSE) == PJ_SUCCESS) 
-			{
-				PJ_LOG(5,(THIS_FILE, "Enum: found address %s", 
-						pj_sockaddr_print(&a, ipaddr, sizeof(ipaddr), 2)));
-			}
-		}
+
+        if (1) {
+            pj_sockaddr a;
+            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+
+            namelen = sizeof (pj_sockaddr);
+
+            if (PjSymbianOS::Addr2pj (iAddress, a, &namelen,
+                                      PJ_FALSE) == PJ_SUCCESS) {
+                PJ_LOG (5, (THIS_FILE, "Enum: found address %s",
+                            pj_sockaddr_print (&a, ipaddr, sizeof (ipaddr), 2)));
+            }
+        }
+
 #endif
-    	
-    	namelen = sizeof(ifs[i]);
-    	if (PjSymbianOS::Addr2pj(iAddress, ifs[i], &namelen, 
-    							 PJ_TRUE) != PJ_SUCCESS)
-    	{
-    	    continue;
-    	}
-
-    	if (ifs[i].addr.sa_family != af)
-		    continue;
-    	
-    	++i;
+
+        namelen = sizeof (ifs[i]);
+
+        if (PjSymbianOS::Addr2pj (iAddress, ifs[i], &namelen,
+                                  PJ_TRUE) != PJ_SUCCESS) {
+            continue;
+        }
+
+        if (ifs[i].addr.sa_family != af)
+            continue;
+
+        ++i;
     }
-    
+
     rSock.Close();
-    
+
     // Done
     *p_cnt = i;
-    
+
     return PJ_SUCCESS;
 }
-					
+
 /*
  * Enumerate the local IP interface currently active in the host.
  */
-PJ_DEF(pj_status_t) pj_enum_ip_interface(int af,
-					 unsigned *p_cnt,
-					 pj_sockaddr ifs[])
+PJ_DEF (pj_status_t) pj_enum_ip_interface (int af,
+        unsigned *p_cnt,
+        pj_sockaddr ifs[])
 {
     unsigned start;
     pj_status_t status = PJ_SUCCESS;
 
     start = 0;
-    	    
+
     /* Get IPv6 interface first. */
     if (af==PJ_AF_INET6 || af==PJ_AF_UNSPEC) {
-    	unsigned max = *p_cnt;
-    	status = rsock_enum_interface(PJ_AF_INET6, &max, &ifs[start]);
-    	if (status == PJ_SUCCESS) {
-    	    (*p_cnt) -= max;
-    	    start += max;
-    	}
+        unsigned max = *p_cnt;
+        status = rsock_enum_interface (PJ_AF_INET6, &max, &ifs[start]);
+
+        if (status == PJ_SUCCESS) {
+            (*p_cnt) -= max;
+            start += max;
+        }
     }
-    
+
     /* Get IPv4 interface. */
     if (af==PJ_AF_INET || af==PJ_AF_UNSPEC) {
-    	unsigned max = *p_cnt;
-    	status = rsock_enum_interface(PJ_AF_INET, &max, &ifs[start]);
-    	if (status == PJ_SUCCESS) {
-    	    (*p_cnt) -= max;
-    	    start += max;
-    	}
+        unsigned max = *p_cnt;
+        status = rsock_enum_interface (PJ_AF_INET, &max, &ifs[start]);
+
+        if (status == PJ_SUCCESS) {
+            (*p_cnt) -= max;
+            start += max;
+        }
     }
-    
+
     *p_cnt = start;
-    
+
     return start ? PJ_SUCCESS : PJ_ENOTFOUND;
 }
 
 /*
  * Enumerate the IP routing table for this host.
  */
-PJ_DEF(pj_status_t) pj_enum_ip_route(unsigned *p_cnt,
-				     pj_ip_route_entry routes[])
+PJ_DEF (pj_status_t) pj_enum_ip_route (unsigned *p_cnt,
+                                       pj_ip_route_entry routes[])
 {
-    PJ_ASSERT_RETURN(p_cnt && *p_cnt > 0 && routes, PJ_EINVAL);
+    PJ_ASSERT_RETURN (p_cnt && *p_cnt > 0 && routes, PJ_EINVAL);
     *p_cnt = 0;
     return PJ_ENOTSUP;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp
index 26e4c7307cbfc6ae66a0501287c56a5cc61c7ef1..1d9b315f6d815e74947a553f6ee70b45504ab899 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/log_writer_symbian_console.cpp
@@ -1,5 +1,5 @@
 /* $Id: log_writer_symbian_console.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -35,21 +35,21 @@
 #include "os_symbian.h"
 #include <e32cons.h>
 
-PJ_DEF(void) pj_log_write(int level, const char *buffer, int len)
+PJ_DEF (void) pj_log_write (int level, const char *buffer, int len)
 {
 #if 0
     wchar_t wbuffer[PJ_LOG_MAX_SIZE];
     CConsoleBase *cons = PjSymbianOS::Instance->Console();
 
-    pj_ansi_to_unicode(buffer, len, wbuffer, PJ_ARRAY_SIZE(wbuffer));
+    pj_ansi_to_unicode (buffer, len, wbuffer, PJ_ARRAY_SIZE (wbuffer));
 
-    
-    TPtrC16 aPtr((TUint16*)wbuffer, len);
-    console->Write(aPtr);
+
+    TPtrC16 aPtr ( (TUint16*) wbuffer, len);
+    console->Write (aPtr);
 #else
-    PJ_UNUSED_ARG(level);
-    PJ_UNUSED_ARG(buffer);
-    PJ_UNUSED_ARG(len);
+    PJ_UNUSED_ARG (level);
+    PJ_UNUSED_ARG (buffer);
+    PJ_UNUSED_ARG (len);
 #endif
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp
index 7ef1e1173ff7686a60563068c4285731e2c8fee9..ac5c2f1399ab1edac833e42d80d3c2939d8e0424 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/os_core_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: os_core_symbian.cpp 2853 2009-08-05 10:58:02Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -46,15 +46,14 @@
 #define DUMMY_MUTEX	    ((pj_mutex_t*)101)
 #define DUMMY_SEMAPHORE	    ((pj_sem_t*)102)
 #define THIS_FILE	    "os_core_symbian.c"
- 
+
 /*
  * Note:
  *
  * The Symbian implementation does not support threading!
- */ 
+ */
 
-struct pj_thread_t
-{
+struct pj_thread_t {
     char	    obj_name[PJ_MAX_OBJ_NAME];
     void	   *tls_values[PJ_MAX_TLS];
 
@@ -68,13 +67,11 @@ struct pj_thread_t
 
 } main_thread;
 
-struct pj_atomic_t
-{
+struct pj_atomic_t {
     pj_atomic_value_t	value;
 };
 
-struct pj_sem_t
-{
+struct pj_sem_t {
     int value;
     int max;
 };
@@ -84,7 +81,7 @@ static int tls_vars[PJ_MAX_TLS];
 
 /* atexit handlers */
 static unsigned atexit_count;
-static void (*atexit_func[32])(void);
+static void (*atexit_func[32]) (void);
 
 
 
@@ -95,7 +92,7 @@ static void (*atexit_func[32])(void);
 //
 
 CPjTimeoutTimer::CPjTimeoutTimer()
-: CActive(PJ_SYMBIAN_TIMER_PRIORITY), hasTimedOut_(PJ_FALSE)
+        : CActive (PJ_SYMBIAN_TIMER_PRIORITY), hasTimedOut_ (PJ_FALSE)
 {
 }
 
@@ -109,27 +106,27 @@ void CPjTimeoutTimer::ConstructL()
 {
     hasTimedOut_ = PJ_FALSE;
     timer_.CreateLocal();
-    CActiveScheduler::Add(this);
+    CActiveScheduler::Add (this);
 }
 
 CPjTimeoutTimer *CPjTimeoutTimer::NewL()
 {
     CPjTimeoutTimer *self = new CPjTimeoutTimer;
-    CleanupStack::PushL(self);
+    CleanupStack::PushL (self);
 
     self->ConstructL();
 
-    CleanupStack::Pop(self);
+    CleanupStack::Pop (self);
     return self;
 
 }
 
-void CPjTimeoutTimer::StartTimer(TUint miliSeconds)
+void CPjTimeoutTimer::StartTimer (TUint miliSeconds)
 {
     Cancel();
 
     hasTimedOut_ = PJ_FALSE;
-    timer_.After(iStatus, miliSeconds * 1000);
+    timer_.After (iStatus, miliSeconds * 1000);
     SetActive();
 }
 
@@ -148,9 +145,9 @@ void CPjTimeoutTimer::DoCancel()
     timer_.Cancel();
 }
 
-TInt CPjTimeoutTimer::RunError(TInt aError)
+TInt CPjTimeoutTimer::RunError (TInt aError)
 {
-    PJ_UNUSED_ARG(aError);
+    PJ_UNUSED_ARG (aError);
     return KErrNone;
 }
 
@@ -162,16 +159,16 @@ TInt CPjTimeoutTimer::RunError(TInt aError)
 //
 
 PjSymbianOS::PjSymbianOS()
-: isConnectionUp_(false),
-  isSocketServInitialized_(false), isResolverInitialized_(false),
-  console_(NULL), selectTimeoutTimer_(NULL),
-  appSocketServ_(NULL), appConnection_(NULL), appHostResolver_(NULL),
-  appHostResolver6_(NULL)
+        : isConnectionUp_ (false),
+        isSocketServInitialized_ (false), isResolverInitialized_ (false),
+        console_ (NULL), selectTimeoutTimer_ (NULL),
+        appSocketServ_ (NULL), appConnection_ (NULL), appHostResolver_ (NULL),
+        appHostResolver6_ (NULL)
 {
 }
 
 // Set parameters
-void PjSymbianOS::SetParameters(pj_symbianos_params *params) 
+void PjSymbianOS::SetParameters (pj_symbianos_params *params)
 {
     appSocketServ_ = (RSocketServ*) params->rsocketserv;
     appConnection_ = (RConnection*) params->rconnection;
@@ -195,9 +192,9 @@ TInt PjSymbianOS::Initialize()
     selectTimeoutTimer_ = CPjTimeoutTimer::NewL();
 
 #if 0
-    pj_assert(console_ == NULL);
-    TRAPD(err, console_ = Console::NewL(_L("PJLIB"), 
-				        TSize(KConsFullScreen,KConsFullScreen)));
+    pj_assert (console_ == NULL);
+    TRAPD (err, console_ = Console::NewL (_L ("PJLIB"),
+                                          TSize (KConsFullScreen,KConsFullScreen)));
     return err;
 #endif
 
@@ -205,44 +202,47 @@ TInt PjSymbianOS::Initialize()
      * in the parameters
      */
     if (!isSocketServInitialized_ && appSocketServ_ == NULL) {
-	err = socketServ_.Connect();
-	if (err != KErrNone)
-	    goto on_error;
+        err = socketServ_.Connect();
+
+        if (err != KErrNone)
+            goto on_error;
 
-	isSocketServInitialized_ = true;
+        isSocketServInitialized_ = true;
     }
 
     if (!isResolverInitialized_) {
-    	if (appHostResolver_ == NULL) {
-    	    if (Connection())
-    	    	err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream,
-    	    			     	 *Connection());
-    	    else
-	    	err = hostResolver_.Open(SocketServ(), KAfInet, KSockStream);
-    	
-	    if (err != KErrNone)
-	    	goto on_error;
-    	}
-    	
+        if (appHostResolver_ == NULL) {
+            if (Connection())
+                err = hostResolver_.Open (SocketServ(), KAfInet, KSockStream,
+                                          *Connection());
+            else
+                err = hostResolver_.Open (SocketServ(), KAfInet, KSockStream);
+
+            if (err != KErrNone)
+                goto on_error;
+        }
+
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
-    	if (appHostResolver6_ == NULL) {
-    	    if (Connection())
-    	    	err = hostResolver6_.Open(SocketServ(), KAfInet6, KSockStream,
-    	    			     	  *Connection());
-    	    else
-	    	err = hostResolver6_.Open(SocketServ(), KAfInet6, KSockStream);
-    	
-	    if (err != KErrNone)
-	    	goto on_error;
-    	}
+
+        if (appHostResolver6_ == NULL) {
+            if (Connection())
+                err = hostResolver6_.Open (SocketServ(), KAfInet6, KSockStream,
+                                           *Connection());
+            else
+                err = hostResolver6_.Open (SocketServ(), KAfInet6, KSockStream);
+
+            if (err != KErrNone)
+                goto on_error;
+        }
+
 #endif
-    	
-    	
-	isResolverInitialized_ = true;
+
+
+        isResolverInitialized_ = true;
     }
 
     isConnectionUp_ = true;
-    
+
     return KErrNone;
 
 on_error:
@@ -254,18 +254,18 @@ on_error:
 void PjSymbianOS::Shutdown()
 {
     isConnectionUp_ = false;
-    
+
     if (isResolverInitialized_) {
-		hostResolver_.Close();
+        hostResolver_.Close();
 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6!=0
-    	hostResolver6_.Close();
+        hostResolver6_.Close();
 #endif
-    	isResolverInitialized_ = false;
+        isResolverInitialized_ = false;
     }
 
     if (isSocketServInitialized_) {
-	socketServ_.Close();
-	isSocketServInitialized_ = false;
+        socketServ_.Close();
+        isSocketServInitialized_ = false;
     }
 
     delete console_;
@@ -273,7 +273,7 @@ void PjSymbianOS::Shutdown()
 
     delete selectTimeoutTimer_;
     selectTimeoutTimer_ = NULL;
-    
+
     appSocketServ_ = NULL;
     appConnection_ = NULL;
     appHostResolver_ = NULL;
@@ -281,24 +281,24 @@ void PjSymbianOS::Shutdown()
 }
 
 // Convert to Unicode
-TInt PjSymbianOS::ConvertToUnicode(TDes16 &aUnicode, const TDesC8 &aForeign)
+TInt PjSymbianOS::ConvertToUnicode (TDes16 &aUnicode, const TDesC8 &aForeign)
 {
 #if 0
-    pj_assert(conv_ != NULL);
-    return conv_->ConvertToUnicode(aUnicode, aForeign, convToUnicodeState_);
+    pj_assert (conv_ != NULL);
+    return conv_->ConvertToUnicode (aUnicode, aForeign, convToUnicodeState_);
 #else
-    return CnvUtfConverter::ConvertToUnicodeFromUtf8(aUnicode, aForeign);
+    return CnvUtfConverter::ConvertToUnicodeFromUtf8 (aUnicode, aForeign);
 #endif
 }
 
 // Convert from Unicode
-TInt PjSymbianOS::ConvertFromUnicode(TDes8 &aForeign, const TDesC16 &aUnicode)
+TInt PjSymbianOS::ConvertFromUnicode (TDes8 &aForeign, const TDesC16 &aUnicode)
 {
 #if 0
-    pj_assert(conv_ != NULL);
-    return conv_->ConvertFromUnicode(aForeign, aUnicode, convToAnsiState_);
+    pj_assert (conv_ != NULL);
+    return conv_->ConvertFromUnicode (aForeign, aUnicode, convToAnsiState_);
 #else
-    return CnvUtfConverter::ConvertFromUnicodeToUtf8(aForeign, aUnicode);
+    return CnvUtfConverter::ConvertFromUnicodeToUtf8 (aForeign, aUnicode);
 #endif
 }
 
@@ -308,25 +308,25 @@ TInt PjSymbianOS::ConvertFromUnicode(TDes8 &aForeign, const TDesC16 &aUnicode)
 // PJLIB os.h implementation
 //
 
-PJ_DEF(pj_uint32_t) pj_getpid(void)
+PJ_DEF (pj_uint32_t) pj_getpid (void)
 {
     return 0;
 }
 
 
 /* Set Symbian specific parameters */
-PJ_DEF(pj_status_t) pj_symbianos_set_params(pj_symbianos_params *prm) 
+PJ_DEF (pj_status_t) pj_symbianos_set_params (pj_symbianos_params *prm)
 {
-    PJ_ASSERT_RETURN(prm != NULL, PJ_EINVAL);
-    PjSymbianOS::Instance()->SetParameters(prm);
+    PJ_ASSERT_RETURN (prm != NULL, PJ_EINVAL);
+    PjSymbianOS::Instance()->SetParameters (prm);
     return PJ_SUCCESS;
 }
 
 
 /* Set connection status */
-PJ_DEF(void) pj_symbianos_set_connection_status(pj_bool_t up)
+PJ_DEF (void) pj_symbianos_set_connection_status (pj_bool_t up)
 {
-    PjSymbianOS::Instance()->SetConnectionStatus(up != 0);
+    PjSymbianOS::Instance()->SetConnectionStatus (up != 0);
 }
 
 
@@ -334,33 +334,35 @@ PJ_DEF(void) pj_symbianos_set_connection_status(pj_bool_t up)
  * pj_init(void).
  * Init PJLIB!
  */
-PJ_DEF(pj_status_t) pj_init(void)
+PJ_DEF (pj_status_t) pj_init (void)
 {
-	char stack_ptr;
+    char stack_ptr;
     pj_status_t status;
-    
-    pj_ansi_strcpy(main_thread.obj_name, "pjthread");
+
+    pj_ansi_strcpy (main_thread.obj_name, "pjthread");
 
     // Init main thread
-    pj_memset(&main_thread, 0, sizeof(main_thread));
+    pj_memset (&main_thread, 0, sizeof (main_thread));
 
     // Initialize PjSymbianOS instance
     PjSymbianOS *os = PjSymbianOS::Instance();
 
-    PJ_LOG(4,(THIS_FILE, "Initializing PJLIB for Symbian OS.."));
+    PJ_LOG (4, (THIS_FILE, "Initializing PJLIB for Symbian OS.."));
 
-    TInt err; 
+    TInt err;
     err = os->Initialize();
+
     if (err != KErrNone)
-    	return PJ_RETURN_OS_ERROR(err);
+        return PJ_RETURN_OS_ERROR (err);
 
     /* Init logging */
     pj_log_init();
 
-    /* Initialize exception ID for the pool. 
+    /* Initialize exception ID for the pool.
      * Must do so after critical section is configured.
-     */ 
-    status = pj_exception_id_alloc("PJLIB/No memory", &PJ_NO_MEMORY_EXCEPTION);
+     */
+    status = pj_exception_id_alloc ("PJLIB/No memory", &PJ_NO_MEMORY_EXCEPTION);
+
     if (status != PJ_SUCCESS)
         goto on_error;
 
@@ -372,19 +374,19 @@ PJ_DEF(pj_status_t) pj_init(void)
     stack_ptr = '\0';
 #endif
 
-    PJ_LOG(5,(THIS_FILE, "PJLIB initialized."));
+    PJ_LOG (5, (THIS_FILE, "PJLIB initialized."));
     return PJ_SUCCESS;
 
 on_error:
     pj_shutdown();
-    return PJ_RETURN_OS_ERROR(err);
+    return PJ_RETURN_OS_ERROR (err);
 }
 
 
-PJ_DEF(pj_status_t) pj_atexit(pj_exit_callback func)
+PJ_DEF (pj_status_t) pj_atexit (pj_exit_callback func)
 {
-    if (atexit_count >= PJ_ARRAY_SIZE(atexit_func))
-	return PJ_ETOOMANY;
+    if (atexit_count >= PJ_ARRAY_SIZE (atexit_func))
+        return PJ_ETOOMANY;
 
     atexit_func[atexit_count++] = func;
     return PJ_SUCCESS;
@@ -392,18 +394,18 @@ PJ_DEF(pj_status_t) pj_atexit(pj_exit_callback func)
 
 
 
-PJ_DEF(void) pj_shutdown(void)
+PJ_DEF (void) pj_shutdown (void)
 {
     /* Call atexit() functions */
     while (atexit_count > 0) {
-	(*atexit_func[atexit_count-1])();
-	--atexit_count;
+        (*atexit_func[atexit_count-1]) ();
+        --atexit_count;
     }
 
     /* Free exception ID */
     if (PJ_NO_MEMORY_EXCEPTION != -1) {
-	pj_exception_id_free(PJ_NO_MEMORY_EXCEPTION);
-	PJ_NO_MEMORY_EXCEPTION = -1;
+        pj_exception_id_free (PJ_NO_MEMORY_EXCEPTION);
+        PJ_NO_MEMORY_EXCEPTION = -1;
     }
 
     /* Clear static variables */
@@ -415,88 +417,88 @@ PJ_DEF(void) pj_shutdown(void)
 
 /////////////////////////////////////////////////////////////////////////////
 
-class CPollTimeoutTimer : public CActive 
+class CPollTimeoutTimer : public CActive
 {
-public:
-    static CPollTimeoutTimer* NewL(int msec, TInt prio);
-    ~CPollTimeoutTimer();
-    
-    virtual void RunL();
-    virtual void DoCancel();
+    public:
+        static CPollTimeoutTimer* NewL (int msec, TInt prio);
+        ~CPollTimeoutTimer();
 
-private:	
-    RTimer	     rtimer_;
-    
-    explicit CPollTimeoutTimer(TInt prio);
-    void ConstructL(int msec);
+        virtual void RunL();
+        virtual void DoCancel();
+
+    private:
+        RTimer	     rtimer_;
+
+        explicit CPollTimeoutTimer (TInt prio);
+        void ConstructL (int msec);
 };
 
-CPollTimeoutTimer::CPollTimeoutTimer(TInt prio)
-: CActive(prio)
+CPollTimeoutTimer::CPollTimeoutTimer (TInt prio)
+        : CActive (prio)
 {
 }
 
 
-CPollTimeoutTimer::~CPollTimeoutTimer() 
+CPollTimeoutTimer::~CPollTimeoutTimer()
 {
     rtimer_.Close();
 }
 
-void CPollTimeoutTimer::ConstructL(int msec) 
+void CPollTimeoutTimer::ConstructL (int msec)
 {
     rtimer_.CreateLocal();
-    CActiveScheduler::Add(this);
-    rtimer_.After(iStatus, msec*1000);
+    CActiveScheduler::Add (this);
+    rtimer_.After (iStatus, msec*1000);
     SetActive();
 }
 
-CPollTimeoutTimer* CPollTimeoutTimer::NewL(int msec, TInt prio) 
+CPollTimeoutTimer* CPollTimeoutTimer::NewL (int msec, TInt prio)
 {
-    CPollTimeoutTimer *self = new CPollTimeoutTimer(prio);
-    CleanupStack::PushL(self);
-    self->ConstructL(msec);    
-    CleanupStack::Pop(self);
+    CPollTimeoutTimer *self = new CPollTimeoutTimer (prio);
+    CleanupStack::PushL (self);
+    self->ConstructL (msec);
+    CleanupStack::Pop (self);
 
     return self;
 }
 
-void CPollTimeoutTimer::RunL() 
+void CPollTimeoutTimer::RunL()
 {
 }
 
-void CPollTimeoutTimer::DoCancel() 
+void CPollTimeoutTimer::DoCancel()
 {
-     rtimer_.Cancel();
+    rtimer_.Cancel();
 }
 
 
 /*
- * Wait the completion of any Symbian active objects. 
+ * Wait the completion of any Symbian active objects.
  */
-PJ_DEF(pj_bool_t) pj_symbianos_poll(int priority, int ms_timeout)
+PJ_DEF (pj_bool_t) pj_symbianos_poll (int priority, int ms_timeout)
 {
     CPollTimeoutTimer *timer = NULL;
-    
+
     if (priority==-1)
-    	priority = EPriorityNull;
-    
+        priority = EPriorityNull;
+
     if (ms_timeout >= 0) {
-    	timer = CPollTimeoutTimer::NewL(ms_timeout, priority);
+        timer = CPollTimeoutTimer::NewL (ms_timeout, priority);
     }
-    
-    PjSymbianOS::Instance()->WaitForActiveObjects(priority);
-    
+
+    PjSymbianOS::Instance()->WaitForActiveObjects (priority);
+
     if (timer) {
         bool timer_is_active = timer->IsActive();
-    
-	timer->Cancel();
-        
+
+        timer->Cancel();
+
         delete timer;
-        
-    	return timer_is_active ? PJ_TRUE : PJ_FALSE;
-    	
+
+        return timer_is_active ? PJ_TRUE : PJ_FALSE;
+
     } else {
-    	return PJ_TRUE;
+        return PJ_TRUE;
     }
 }
 
@@ -504,7 +506,7 @@ PJ_DEF(pj_bool_t) pj_symbianos_poll(int priority, int ms_timeout)
 /*
  * pj_thread_is_registered()
  */
-PJ_DEF(pj_bool_t) pj_thread_is_registered(void)
+PJ_DEF (pj_bool_t) pj_thread_is_registered (void)
 {
     return PJ_FALSE;
 }
@@ -513,9 +515,9 @@ PJ_DEF(pj_bool_t) pj_thread_is_registered(void)
 /*
  * Get thread priority value for the thread.
  */
-PJ_DEF(int) pj_thread_get_prio(pj_thread_t *thread)
+PJ_DEF (int) pj_thread_get_prio (pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG(thread);
+    PJ_UNUSED_ARG (thread);
     return 1;
 }
 
@@ -523,10 +525,10 @@ PJ_DEF(int) pj_thread_get_prio(pj_thread_t *thread)
 /*
  * Set the thread priority.
  */
-PJ_DEF(pj_status_t) pj_thread_set_prio(pj_thread_t *thread,  int prio)
+PJ_DEF (pj_status_t) pj_thread_set_prio (pj_thread_t *thread,  int prio)
 {
-    PJ_UNUSED_ARG(thread);
-    PJ_UNUSED_ARG(prio);
+    PJ_UNUSED_ARG (thread);
+    PJ_UNUSED_ARG (prio);
     return PJ_SUCCESS;
 }
 
@@ -534,9 +536,9 @@ PJ_DEF(pj_status_t) pj_thread_set_prio(pj_thread_t *thread,  int prio)
 /*
  * Get the lowest priority value available on this system.
  */
-PJ_DEF(int) pj_thread_get_prio_min(pj_thread_t *thread)
+PJ_DEF (int) pj_thread_get_prio_min (pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG(thread);
+    PJ_UNUSED_ARG (thread);
     return 1;
 }
 
@@ -544,9 +546,9 @@ PJ_DEF(int) pj_thread_get_prio_min(pj_thread_t *thread)
 /*
  * Get the highest priority value available on this system.
  */
-PJ_DEF(int) pj_thread_get_prio_max(pj_thread_t *thread)
+PJ_DEF (int) pj_thread_get_prio_max (pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG(thread);
+    PJ_UNUSED_ARG (thread);
     return 1;
 }
 
@@ -554,22 +556,22 @@ PJ_DEF(int) pj_thread_get_prio_max(pj_thread_t *thread)
 /*
  * pj_thread_get_os_handle()
  */
-PJ_DEF(void*) pj_thread_get_os_handle(pj_thread_t *thread) 
+PJ_DEF (void*) pj_thread_get_os_handle (pj_thread_t *thread)
 {
-    PJ_UNUSED_ARG(thread);
+    PJ_UNUSED_ARG (thread);
     return NULL;
 }
 
 /*
  * pj_thread_register(..)
  */
-PJ_DEF(pj_status_t) pj_thread_register ( const char *cstr_thread_name,
-					 pj_thread_desc desc,
-                                         pj_thread_t **thread_ptr)
+PJ_DEF (pj_status_t) pj_thread_register (const char *cstr_thread_name,
+        pj_thread_desc desc,
+        pj_thread_t **thread_ptr)
 {
-    PJ_UNUSED_ARG(cstr_thread_name);
-    PJ_UNUSED_ARG(desc);
-    PJ_UNUSED_ARG(thread_ptr);
+    PJ_UNUSED_ARG (cstr_thread_name);
+    PJ_UNUSED_ARG (desc);
+    PJ_UNUSED_ARG (thread_ptr);
     return PJ_EINVALIDOP;
 }
 
@@ -577,21 +579,21 @@ PJ_DEF(pj_status_t) pj_thread_register ( const char *cstr_thread_name,
 /*
  * pj_thread_create(...)
  */
-PJ_DEF(pj_status_t) pj_thread_create( pj_pool_t *pool, 
-				      const char *thread_name,
-				      pj_thread_proc *proc, 
-				      void *arg,
-				      pj_size_t stack_size, 
-				      unsigned flags,
-				      pj_thread_t **ptr_thread)
-{
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(thread_name);
-    PJ_UNUSED_ARG(proc);
-    PJ_UNUSED_ARG(arg);
-    PJ_UNUSED_ARG(stack_size);
-    PJ_UNUSED_ARG(flags);
-    PJ_UNUSED_ARG(ptr_thread);
+PJ_DEF (pj_status_t) pj_thread_create (pj_pool_t *pool,
+                                       const char *thread_name,
+                                       pj_thread_proc *proc,
+                                       void *arg,
+                                       pj_size_t stack_size,
+                                       unsigned flags,
+                                       pj_thread_t **ptr_thread)
+{
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (thread_name);
+    PJ_UNUSED_ARG (proc);
+    PJ_UNUSED_ARG (arg);
+    PJ_UNUSED_ARG (stack_size);
+    PJ_UNUSED_ARG (flags);
+    PJ_UNUSED_ARG (ptr_thread);
 
     /* Sorry mate, we don't support threading */
     return PJ_ENOTSUP;
@@ -600,25 +602,25 @@ PJ_DEF(pj_status_t) pj_thread_create( pj_pool_t *pool,
 /*
  * pj_thread-get_name()
  */
-PJ_DEF(const char*) pj_thread_get_name(pj_thread_t *p)
+PJ_DEF (const char*) pj_thread_get_name (pj_thread_t *p)
 {
-    pj_assert(p == &main_thread);
+    pj_assert (p == &main_thread);
     return p->obj_name;
 }
 
 /*
  * pj_thread_resume()
  */
-PJ_DEF(pj_status_t) pj_thread_resume(pj_thread_t *p)
+PJ_DEF (pj_status_t) pj_thread_resume (pj_thread_t *p)
 {
-    PJ_UNUSED_ARG(p);
+    PJ_UNUSED_ARG (p);
     return PJ_EINVALIDOP;
 }
 
 /*
  * pj_thread_this()
  */
-PJ_DEF(pj_thread_t*) pj_thread_this(void)
+PJ_DEF (pj_thread_t*) pj_thread_this (void)
 {
     return &main_thread;
 }
@@ -626,27 +628,27 @@ PJ_DEF(pj_thread_t*) pj_thread_this(void)
 /*
  * pj_thread_join()
  */
-PJ_DEF(pj_status_t) pj_thread_join(pj_thread_t *rec)
+PJ_DEF (pj_status_t) pj_thread_join (pj_thread_t *rec)
 {
-    PJ_UNUSED_ARG(rec);
+    PJ_UNUSED_ARG (rec);
     return PJ_EINVALIDOP;
 }
 
 /*
  * pj_thread_destroy()
  */
-PJ_DEF(pj_status_t) pj_thread_destroy(pj_thread_t *rec)
+PJ_DEF (pj_status_t) pj_thread_destroy (pj_thread_t *rec)
 {
-    PJ_UNUSED_ARG(rec);
+    PJ_UNUSED_ARG (rec);
     return PJ_EINVALIDOP;
 }
 
 /*
  * pj_thread_sleep()
  */
-PJ_DEF(pj_status_t) pj_thread_sleep(unsigned msec)
+PJ_DEF (pj_status_t) pj_thread_sleep (unsigned msec)
 {
-    User::After(msec*1000);
+    User::After (msec*1000);
 
     return PJ_SUCCESS;
 }
@@ -657,18 +659,18 @@ PJ_DEF(pj_status_t) pj_thread_sleep(unsigned msec)
  * pj_thread_local_alloc()
  */
 
-PJ_DEF(pj_status_t) pj_thread_local_alloc(long *index)
+PJ_DEF (pj_status_t) pj_thread_local_alloc (long *index)
 {
     unsigned i;
 
     /* Find unused TLS variable */
-    for (i=0; i<PJ_ARRAY_SIZE(tls_vars); ++i) {
-	if (tls_vars[i] == 0)
-	    break;
+    for (i=0; i<PJ_ARRAY_SIZE (tls_vars); ++i) {
+        if (tls_vars[i] == 0)
+            break;
     }
 
-    if (i == PJ_ARRAY_SIZE(tls_vars))
-	return PJ_ETOOMANY;
+    if (i == PJ_ARRAY_SIZE (tls_vars))
+        return PJ_ETOOMANY;
 
     tls_vars[i] = 1;
     *index = i;
@@ -679,10 +681,10 @@ PJ_DEF(pj_status_t) pj_thread_local_alloc(long *index)
 /*
  * pj_thread_local_free()
  */
-PJ_DEF(void) pj_thread_local_free(long index)
+PJ_DEF (void) pj_thread_local_free (long index)
 {
-    PJ_ASSERT_ON_FAIL(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
-		     tls_vars[index] != 0, return);
+    PJ_ASSERT_ON_FAIL (index >= 0 && index < (int) PJ_ARRAY_SIZE (tls_vars) &&
+                       tls_vars[index] != 0, return);
 
     tls_vars[index] = 0;
 }
@@ -691,12 +693,12 @@ PJ_DEF(void) pj_thread_local_free(long index)
 /*
  * pj_thread_local_set()
  */
-PJ_DEF(pj_status_t) pj_thread_local_set(long index, void *value)
+PJ_DEF (pj_status_t) pj_thread_local_set (long index, void *value)
 {
     pj_thread_t *rec = pj_thread_this();
 
-    PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
-		     tls_vars[index] != 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN (index >= 0 && index < (int) PJ_ARRAY_SIZE (tls_vars) &&
+                      tls_vars[index] != 0, PJ_EINVAL);
 
     rec->tls_values[index] = value;
     return PJ_SUCCESS;
@@ -705,12 +707,12 @@ PJ_DEF(pj_status_t) pj_thread_local_set(long index, void *value)
 /*
  * pj_thread_local_get()
  */
-PJ_DEF(void*) pj_thread_local_get(long index)
+PJ_DEF (void*) pj_thread_local_get (long index)
 {
     pj_thread_t *rec = pj_thread_this();
 
-    PJ_ASSERT_RETURN(index >= 0 && index < (int)PJ_ARRAY_SIZE(tls_vars) &&
-		     tls_vars[index] != 0, NULL);
+    PJ_ASSERT_RETURN (index >= 0 && index < (int) PJ_ARRAY_SIZE (tls_vars) &&
+                      tls_vars[index] != 0, NULL);
 
     return rec->tls_values[index];
 }
@@ -720,11 +722,11 @@ PJ_DEF(void*) pj_thread_local_get(long index)
 /*
  * Create atomic variable.
  */
-PJ_DEF(pj_status_t) pj_atomic_create( pj_pool_t *pool, 
-				      pj_atomic_value_t initial,
-				      pj_atomic_t **atomic )
+PJ_DEF (pj_status_t) pj_atomic_create (pj_pool_t *pool,
+                                       pj_atomic_value_t initial,
+                                       pj_atomic_t **atomic)
 {
-    *atomic = (pj_atomic_t*)pj_pool_alloc(pool, sizeof(struct pj_atomic_t));
+    *atomic = (pj_atomic_t*) pj_pool_alloc (pool, sizeof (struct pj_atomic_t));
     (*atomic)->value = initial;
     return PJ_SUCCESS;
 }
@@ -733,9 +735,9 @@ PJ_DEF(pj_status_t) pj_atomic_create( pj_pool_t *pool,
 /*
  * Destroy atomic variable.
  */
-PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *atomic_var )
+PJ_DEF (pj_status_t) pj_atomic_destroy (pj_atomic_t *atomic_var)
 {
-    PJ_UNUSED_ARG(atomic_var);
+    PJ_UNUSED_ARG (atomic_var);
     return PJ_SUCCESS;
 }
 
@@ -743,8 +745,8 @@ PJ_DEF(pj_status_t) pj_atomic_destroy( pj_atomic_t *atomic_var )
 /*
  * Set the value of an atomic type, and return the previous value.
  */
-PJ_DEF(void) pj_atomic_set( pj_atomic_t *atomic_var, 
-			    pj_atomic_value_t value)
+PJ_DEF (void) pj_atomic_set (pj_atomic_t *atomic_var,
+                             pj_atomic_value_t value)
 {
     atomic_var->value = value;
 }
@@ -753,7 +755,7 @@ PJ_DEF(void) pj_atomic_set( pj_atomic_t *atomic_var,
 /*
  * Get the value of an atomic type.
  */
-PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var)
+PJ_DEF (pj_atomic_value_t) pj_atomic_get (pj_atomic_t *atomic_var)
 {
     return atomic_var->value;
 }
@@ -762,7 +764,7 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_get(pj_atomic_t *atomic_var)
 /*
  * Increment the value of an atomic type.
  */
-PJ_DEF(void) pj_atomic_inc(pj_atomic_t *atomic_var)
+PJ_DEF (void) pj_atomic_inc (pj_atomic_t *atomic_var)
 {
     ++atomic_var->value;
 }
@@ -771,7 +773,7 @@ PJ_DEF(void) pj_atomic_inc(pj_atomic_t *atomic_var)
 /*
  * Increment the value of an atomic type and get the result.
  */
-PJ_DEF(pj_atomic_value_t) pj_atomic_inc_and_get(pj_atomic_t *atomic_var)
+PJ_DEF (pj_atomic_value_t) pj_atomic_inc_and_get (pj_atomic_t *atomic_var)
 {
     return ++atomic_var->value;
 }
@@ -780,16 +782,16 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_inc_and_get(pj_atomic_t *atomic_var)
 /*
  * Decrement the value of an atomic type.
  */
-PJ_DEF(void) pj_atomic_dec(pj_atomic_t *atomic_var)
+PJ_DEF (void) pj_atomic_dec (pj_atomic_t *atomic_var)
 {
     --atomic_var->value;
-}	
+}
 
 
 /*
  * Decrement the value of an atomic type and get the result.
  */
-PJ_DEF(pj_atomic_value_t) pj_atomic_dec_and_get(pj_atomic_t *atomic_var)
+PJ_DEF (pj_atomic_value_t) pj_atomic_dec_and_get (pj_atomic_t *atomic_var)
 {
     return --atomic_var->value;
 }
@@ -798,8 +800,8 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_dec_and_get(pj_atomic_t *atomic_var)
 /*
  * Add a value to an atomic type.
  */
-PJ_DEF(void) pj_atomic_add( pj_atomic_t *atomic_var,
-			    pj_atomic_value_t value)
+PJ_DEF (void) pj_atomic_add (pj_atomic_t *atomic_var,
+                             pj_atomic_value_t value)
 {
     atomic_var->value += value;
 }
@@ -808,8 +810,8 @@ PJ_DEF(void) pj_atomic_add( pj_atomic_t *atomic_var,
 /*
  * Add a value to an atomic type and get the result.
  */
-PJ_DEF(pj_atomic_value_t) pj_atomic_add_and_get( pj_atomic_t *atomic_var,
-			                         pj_atomic_value_t value)
+PJ_DEF (pj_atomic_value_t) pj_atomic_add_and_get (pj_atomic_t *atomic_var,
+        pj_atomic_value_t value)
 {
     atomic_var->value += value;
     return atomic_var->value;
@@ -819,14 +821,14 @@ PJ_DEF(pj_atomic_value_t) pj_atomic_add_and_get( pj_atomic_t *atomic_var,
 
 /////////////////////////////////////////////////////////////////////////////
 
-PJ_DEF(pj_status_t) pj_mutex_create( pj_pool_t *pool, 
-                                     const char *name,
-				     int type, 
-                                     pj_mutex_t **mutex)
+PJ_DEF (pj_status_t) pj_mutex_create (pj_pool_t *pool,
+                                      const char *name,
+                                      int type,
+                                      pj_mutex_t **mutex)
 {
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(name);
-    PJ_UNUSED_ARG(type);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (name);
+    PJ_UNUSED_ARG (type);
 
     *mutex = DUMMY_MUTEX;
     return PJ_SUCCESS;
@@ -835,55 +837,55 @@ PJ_DEF(pj_status_t) pj_mutex_create( pj_pool_t *pool,
 /*
  * pj_mutex_create_simple()
  */
-PJ_DEF(pj_status_t) pj_mutex_create_simple( pj_pool_t *pool, 
-                                            const char *name,
-					    pj_mutex_t **mutex )
+PJ_DEF (pj_status_t) pj_mutex_create_simple (pj_pool_t *pool,
+        const char *name,
+        pj_mutex_t **mutex)
 {
-    return pj_mutex_create(pool, name, PJ_MUTEX_SIMPLE, mutex);
+    return pj_mutex_create (pool, name, PJ_MUTEX_SIMPLE, mutex);
 }
 
 
-PJ_DEF(pj_status_t) pj_mutex_create_recursive( pj_pool_t *pool,
-					       const char *name,
-					       pj_mutex_t **mutex )
+PJ_DEF (pj_status_t) pj_mutex_create_recursive (pj_pool_t *pool,
+        const char *name,
+        pj_mutex_t **mutex)
 {
-    return pj_mutex_create(pool, name, PJ_MUTEX_RECURSE, mutex);
+    return pj_mutex_create (pool, name, PJ_MUTEX_RECURSE, mutex);
 }
 
 
 /*
  * pj_mutex_lock()
  */
-PJ_DEF(pj_status_t) pj_mutex_lock(pj_mutex_t *mutex)
+PJ_DEF (pj_status_t) pj_mutex_lock (pj_mutex_t *mutex)
 {
-    pj_assert(mutex == DUMMY_MUTEX);
+    pj_assert (mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
 /*
  * pj_mutex_trylock()
  */
-PJ_DEF(pj_status_t) pj_mutex_trylock(pj_mutex_t *mutex)
+PJ_DEF (pj_status_t) pj_mutex_trylock (pj_mutex_t *mutex)
 {
-    pj_assert(mutex == DUMMY_MUTEX);
+    pj_assert (mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
 /*
  * pj_mutex_unlock()
  */
-PJ_DEF(pj_status_t) pj_mutex_unlock(pj_mutex_t *mutex)
+PJ_DEF (pj_status_t) pj_mutex_unlock (pj_mutex_t *mutex)
 {
-    pj_assert(mutex == DUMMY_MUTEX);
+    pj_assert (mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
 /*
  * pj_mutex_destroy()
  */
-PJ_DEF(pj_status_t) pj_mutex_destroy(pj_mutex_t *mutex)
+PJ_DEF (pj_status_t) pj_mutex_destroy (pj_mutex_t *mutex)
 {
-    pj_assert(mutex == DUMMY_MUTEX);
+    pj_assert (mutex == DUMMY_MUTEX);
     return PJ_SUCCESS;
 }
 
@@ -900,7 +902,7 @@ PJ_DEF(pj_status_t) pj_mutex_destroy(pj_mutex_t *mutex)
 /*
  * Enter critical section.
  */
-PJ_DEF(void) pj_enter_critical_section(void)
+PJ_DEF (void) pj_enter_critical_section (void)
 {
     /* Nothing to do */
 }
@@ -909,7 +911,7 @@ PJ_DEF(void) pj_enter_critical_section(void)
 /*
  * Leave critical section.
  */
-PJ_DEF(void) pj_leave_critical_section(void)
+PJ_DEF (void) pj_leave_critical_section (void)
 {
     /* Nothing to do */
 }
@@ -920,17 +922,17 @@ PJ_DEF(void) pj_leave_critical_section(void)
 /*
  * Create semaphore.
  */
-PJ_DEF(pj_status_t) pj_sem_create( pj_pool_t *pool, 
-                                   const char *name,
-				   unsigned initial, 
-                                   unsigned max,
-				   pj_sem_t **p_sem)
+PJ_DEF (pj_status_t) pj_sem_create (pj_pool_t *pool,
+                                    const char *name,
+                                    unsigned initial,
+                                    unsigned max,
+                                    pj_sem_t **p_sem)
 {
     pj_sem_t *sem;
- 
-    PJ_UNUSED_ARG(name);
 
-    sem = (pj_sem_t*) pj_pool_zalloc(pool, sizeof(pj_sem_t));
+    PJ_UNUSED_ARG (name);
+
+    sem = (pj_sem_t*) pj_pool_zalloc (pool, sizeof (pj_sem_t));
     sem->value = initial;
     sem->max = max;
 
@@ -943,14 +945,14 @@ PJ_DEF(pj_status_t) pj_sem_create( pj_pool_t *pool,
 /*
  * Wait for semaphore.
  */
-PJ_DEF(pj_status_t) pj_sem_wait(pj_sem_t *sem)
+PJ_DEF (pj_status_t) pj_sem_wait (pj_sem_t *sem)
 {
     if (sem->value > 0) {
-	sem->value--;
-	return PJ_SUCCESS;
+        sem->value--;
+        return PJ_SUCCESS;
     } else {
-	pj_assert(!"Unexpected!");
-	return PJ_EINVALIDOP;
+        pj_assert (!"Unexpected!");
+        return PJ_EINVALIDOP;
     }
 }
 
@@ -958,14 +960,14 @@ PJ_DEF(pj_status_t) pj_sem_wait(pj_sem_t *sem)
 /*
  * Try wait for semaphore.
  */
-PJ_DEF(pj_status_t) pj_sem_trywait(pj_sem_t *sem)
+PJ_DEF (pj_status_t) pj_sem_trywait (pj_sem_t *sem)
 {
     if (sem->value > 0) {
-	sem->value--;
-	return PJ_SUCCESS;
+        sem->value--;
+        return PJ_SUCCESS;
     } else {
-	pj_assert(!"Unexpected!");
-	return PJ_EINVALIDOP;
+        pj_assert (!"Unexpected!");
+        return PJ_EINVALIDOP;
     }
 }
 
@@ -973,7 +975,7 @@ PJ_DEF(pj_status_t) pj_sem_trywait(pj_sem_t *sem)
 /*
  * Release semaphore.
  */
-PJ_DEF(pj_status_t) pj_sem_post(pj_sem_t *sem)
+PJ_DEF (pj_status_t) pj_sem_post (pj_sem_t *sem)
 {
     sem->value++;
     return PJ_SUCCESS;
@@ -983,56 +985,56 @@ PJ_DEF(pj_status_t) pj_sem_post(pj_sem_t *sem)
 /*
  * Destroy semaphore.
  */
-PJ_DEF(pj_status_t) pj_sem_destroy(pj_sem_t *sem)
+PJ_DEF (pj_status_t) pj_sem_destroy (pj_sem_t *sem)
 {
-    PJ_UNUSED_ARG(sem);
+    PJ_UNUSED_ARG (sem);
     return PJ_SUCCESS;
 }
 
 
 #if defined(PJ_OS_HAS_CHECK_STACK) && PJ_OS_HAS_CHECK_STACK != 0
 /*
- * The implementation of stack checking. 
+ * The implementation of stack checking.
  */
-PJ_DEF(void) pj_thread_check_stack(const char *file, int line)
+PJ_DEF (void) pj_thread_check_stack (const char *file, int line)
 {
     char stk_ptr;
     pj_uint32_t usage;
     pj_thread_t *thread = pj_thread_this();
 
-    pj_assert(thread);
+    pj_assert (thread);
 
     /* Calculate current usage. */
     usage = (&stk_ptr > thread->stk_start) ? &stk_ptr - thread->stk_start :
-		thread->stk_start - &stk_ptr;
+            thread->stk_start - &stk_ptr;
 
     /* Assert if stack usage is dangerously high. */
-    pj_assert("STACK OVERFLOW!! " && (usage <= thread->stk_size - 128));
+    pj_assert ("STACK OVERFLOW!! " && (usage <= thread->stk_size - 128));
 
     /* Keep statistic. */
     if (usage > thread->stk_max_usage) {
-	thread->stk_max_usage = usage;
-	thread->caller_file = file;
-	thread->caller_line = line;
+        thread->stk_max_usage = usage;
+        thread->caller_file = file;
+        thread->caller_line = line;
     }
 }
 
 /*
- * Get maximum stack usage statistic. 
+ * Get maximum stack usage statistic.
  */
-PJ_DEF(pj_uint32_t) pj_thread_get_stack_max_usage(pj_thread_t *thread)
+PJ_DEF (pj_uint32_t) pj_thread_get_stack_max_usage (pj_thread_t *thread)
 {
     return thread->stk_max_usage;
 }
 
 /*
- * Dump thread stack status. 
+ * Dump thread stack status.
  */
-PJ_DEF(pj_status_t) pj_thread_get_stack_info(pj_thread_t *thread,
-					     const char **file,
-					     int *line)
+PJ_DEF (pj_status_t) pj_thread_get_stack_info (pj_thread_t *thread,
+        const char **file,
+        int *line)
 {
-    pj_assert(thread);
+    pj_assert (thread);
 
     *file = thread->caller_file;
     *line = thread->caller_line;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp
index eba44ecc0934b506ecf6bb7ecb9185cdeee49f16..93b25ba60332ac07087eddb6fd4fb9f30267a442 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/os_error_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: os_error_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -46,61 +46,61 @@ static const struct {
     /*
      * Generic error -1 to -46
      */
-    PJ_BUILD_ERR( KErrNotFound,	    "Unable to find the specified object"),
-    PJ_BUILD_ERR( KErrGeneral,	    "General (unspecified) error"),
-    PJ_BUILD_ERR( KErrCancel,	    "The operation was cancelled"),
-    PJ_BUILD_ERR( KErrNoMemory,	    "Not enough memory"),
-    PJ_BUILD_ERR( KErrNotSupported, "The operation requested is not supported"),
-    PJ_BUILD_ERR( KErrArgument,	    "Bad request"),
-    PJ_BUILD_ERR( KErrTotalLossOfPrecision, "Total loss of precision"),
-    PJ_BUILD_ERR( KErrBadHandle,    "Bad object"),
-    PJ_BUILD_ERR( KErrOverflow,	    "Overflow"),
-    PJ_BUILD_ERR( KErrUnderflow,    "Underflow"),
-    PJ_BUILD_ERR( KErrAlreadyExists,"Already exists"),
-    PJ_BUILD_ERR( KErrPathNotFound, "Unable to find the specified folder"),
-    PJ_BUILD_ERR( KErrDied,	    "Closed"),
-    PJ_BUILD_ERR( KErrInUse,	    "The specified object is currently in use by another program"),
-    PJ_BUILD_ERR( KErrServerTerminated,	    "Server has closed"),
-    PJ_BUILD_ERR( KErrServerBusy,   "Server busy"),
-    PJ_BUILD_ERR( KErrCompletion,   "Completion error"),
-    PJ_BUILD_ERR( KErrNotReady,	    "Not ready"),
-    PJ_BUILD_ERR( KErrUnknown,	    "Unknown error"),
-    PJ_BUILD_ERR( KErrCorrupt,	    "Corrupt"),
-    PJ_BUILD_ERR( KErrAccessDenied, "Access denied"),
-    PJ_BUILD_ERR( KErrLocked,	    "Locked"),
-    PJ_BUILD_ERR( KErrWrite,	    "Failed to write"),
-    PJ_BUILD_ERR( KErrDisMounted,   "Wrong disk present"),
-    PJ_BUILD_ERR( KErrEof,	    "Unexpected end of file"),
-    PJ_BUILD_ERR( KErrDiskFull,	    "Disk full"),
-    PJ_BUILD_ERR( KErrBadDriver,    "Bad device driver"),
-    PJ_BUILD_ERR( KErrBadName,	    "Bad name"),
-    PJ_BUILD_ERR( KErrCommsLineFail,"Comms line failed"),
-    PJ_BUILD_ERR( KErrCommsFrame,   "Comms frame error"),
-    PJ_BUILD_ERR( KErrCommsOverrun, "Comms overrun error"),
-    PJ_BUILD_ERR( KErrCommsParity,  "Comms parity error"),
-    PJ_BUILD_ERR( KErrTimedOut,	    "Timed out"),
-    PJ_BUILD_ERR( KErrCouldNotConnect, "Failed to connect"),
-    PJ_BUILD_ERR( KErrCouldNotDisconnect, "Failed to disconnect"),
-    PJ_BUILD_ERR( KErrDisconnected, "Disconnected"),
-    PJ_BUILD_ERR( KErrBadLibraryEntryPoint, "Bad library entry point"),
-    PJ_BUILD_ERR( KErrBadDescriptor,"Bad descriptor"),
-    PJ_BUILD_ERR( KErrAbort,	    "Interrupted"),
-    PJ_BUILD_ERR( KErrTooBig,	    "Too big"),
-    PJ_BUILD_ERR( KErrDivideByZero, "Divide by zero"),
-    PJ_BUILD_ERR( KErrBadPower,	    "Batteries too low"),
-    PJ_BUILD_ERR( KErrDirFull,	    "Folder full"),
-    PJ_BUILD_ERR( KErrHardwareNotAvailable, ""),
-    PJ_BUILD_ERR( KErrSessionClosed,	    ""),
-    PJ_BUILD_ERR( KErrPermissionDenied,     ""),
+    PJ_BUILD_ERR (KErrNotFound,	    "Unable to find the specified object"),
+    PJ_BUILD_ERR (KErrGeneral,	    "General (unspecified) error"),
+    PJ_BUILD_ERR (KErrCancel,	    "The operation was cancelled"),
+    PJ_BUILD_ERR (KErrNoMemory,	    "Not enough memory"),
+    PJ_BUILD_ERR (KErrNotSupported, "The operation requested is not supported"),
+    PJ_BUILD_ERR (KErrArgument,	    "Bad request"),
+    PJ_BUILD_ERR (KErrTotalLossOfPrecision, "Total loss of precision"),
+    PJ_BUILD_ERR (KErrBadHandle,    "Bad object"),
+    PJ_BUILD_ERR (KErrOverflow,	    "Overflow"),
+    PJ_BUILD_ERR (KErrUnderflow,    "Underflow"),
+    PJ_BUILD_ERR (KErrAlreadyExists,"Already exists"),
+    PJ_BUILD_ERR (KErrPathNotFound, "Unable to find the specified folder"),
+    PJ_BUILD_ERR (KErrDied,	    "Closed"),
+    PJ_BUILD_ERR (KErrInUse,	    "The specified object is currently in use by another program"),
+    PJ_BUILD_ERR (KErrServerTerminated,	    "Server has closed"),
+    PJ_BUILD_ERR (KErrServerBusy,   "Server busy"),
+    PJ_BUILD_ERR (KErrCompletion,   "Completion error"),
+    PJ_BUILD_ERR (KErrNotReady,	    "Not ready"),
+    PJ_BUILD_ERR (KErrUnknown,	    "Unknown error"),
+    PJ_BUILD_ERR (KErrCorrupt,	    "Corrupt"),
+    PJ_BUILD_ERR (KErrAccessDenied, "Access denied"),
+    PJ_BUILD_ERR (KErrLocked,	    "Locked"),
+    PJ_BUILD_ERR (KErrWrite,	    "Failed to write"),
+    PJ_BUILD_ERR (KErrDisMounted,   "Wrong disk present"),
+    PJ_BUILD_ERR (KErrEof,	    "Unexpected end of file"),
+    PJ_BUILD_ERR (KErrDiskFull,	    "Disk full"),
+    PJ_BUILD_ERR (KErrBadDriver,    "Bad device driver"),
+    PJ_BUILD_ERR (KErrBadName,	    "Bad name"),
+    PJ_BUILD_ERR (KErrCommsLineFail,"Comms line failed"),
+    PJ_BUILD_ERR (KErrCommsFrame,   "Comms frame error"),
+    PJ_BUILD_ERR (KErrCommsOverrun, "Comms overrun error"),
+    PJ_BUILD_ERR (KErrCommsParity,  "Comms parity error"),
+    PJ_BUILD_ERR (KErrTimedOut,	    "Timed out"),
+    PJ_BUILD_ERR (KErrCouldNotConnect, "Failed to connect"),
+    PJ_BUILD_ERR (KErrCouldNotDisconnect, "Failed to disconnect"),
+    PJ_BUILD_ERR (KErrDisconnected, "Disconnected"),
+    PJ_BUILD_ERR (KErrBadLibraryEntryPoint, "Bad library entry point"),
+    PJ_BUILD_ERR (KErrBadDescriptor,"Bad descriptor"),
+    PJ_BUILD_ERR (KErrAbort,	    "Interrupted"),
+    PJ_BUILD_ERR (KErrTooBig,	    "Too big"),
+    PJ_BUILD_ERR (KErrDivideByZero, "Divide by zero"),
+    PJ_BUILD_ERR (KErrBadPower,	    "Batteries too low"),
+    PJ_BUILD_ERR (KErrDirFull,	    "Folder full"),
+    PJ_BUILD_ERR (KErrHardwareNotAvailable, ""),
+    PJ_BUILD_ERR (KErrSessionClosed,	    ""),
+    PJ_BUILD_ERR (KErrPermissionDenied,     ""),
 
     /*
      * Socket errors (-190 - -1000)
      */
-    PJ_BUILD_ERR( KErrNetUnreach,   "Could not connect to the network. Currently unreachable"),
-    PJ_BUILD_ERR( KErrHostUnreach,  "Could not connect to the specified server"),
-    PJ_BUILD_ERR( KErrNoProtocolOpt,"The specified server refuses the selected protocol"),
-    PJ_BUILD_ERR( KErrUrgentData,   ""),
-    PJ_BUILD_ERR( KErrWouldBlock,   "Conflicts with KErrExtended, but cannot occur in practice"),
+    PJ_BUILD_ERR (KErrNetUnreach,   "Could not connect to the network. Currently unreachable"),
+    PJ_BUILD_ERR (KErrHostUnreach,  "Could not connect to the specified server"),
+    PJ_BUILD_ERR (KErrNoProtocolOpt,"The specified server refuses the selected protocol"),
+    PJ_BUILD_ERR (KErrUrgentData,   ""),
+    PJ_BUILD_ERR (KErrWouldBlock,   "Conflicts with KErrExtended, but cannot occur in practice"),
 
     {0, NULL}
 };
@@ -108,45 +108,45 @@ static const struct {
 #endif	/* PJ_HAS_ERROR_STRING */
 
 
-PJ_DEF(pj_status_t) pj_get_os_error(void)
+PJ_DEF (pj_status_t) pj_get_os_error (void)
 {
     return -1;
 }
 
-PJ_DEF(void) pj_set_os_error(pj_status_t code)
+PJ_DEF (void) pj_set_os_error (pj_status_t code)
 {
-    PJ_UNUSED_ARG(code);
+    PJ_UNUSED_ARG (code);
 }
 
-PJ_DEF(pj_status_t) pj_get_netos_error(void)
+PJ_DEF (pj_status_t) pj_get_netos_error (void)
 {
     return -1;
 }
 
-PJ_DEF(void) pj_set_netos_error(pj_status_t code)
+PJ_DEF (void) pj_set_netos_error (pj_status_t code)
 {
-    PJ_UNUSED_ARG(code);
+    PJ_UNUSED_ARG (code);
 }
 
 PJ_BEGIN_DECL
 
-    PJ_DECL(int) platform_strerror( pj_os_err_type os_errcode, 
-                       		    char *buf, pj_size_t bufsize);
+PJ_DECL (int) platform_strerror (pj_os_err_type os_errcode,
+                                 char *buf, pj_size_t bufsize);
 PJ_END_DECL
 
-/* 
+/*
  * platform_strerror()
  *
- * Platform specific error message. This file is called by pj_strerror() 
- * in errno.c 
+ * Platform specific error message. This file is called by pj_strerror()
+ * in errno.c
  */
-PJ_DEF(int) platform_strerror( pj_os_err_type os_errcode, 
-			       char *buf, pj_size_t bufsize)
+PJ_DEF (int) platform_strerror (pj_os_err_type os_errcode,
+                                char *buf, pj_size_t bufsize)
 {
     int len = 0;
 
-    pj_assert(buf != NULL);
-    pj_assert(bufsize >= 0);
+    pj_assert (buf != NULL);
+    pj_assert (bufsize >= 0);
 
     /*
      * MUST NOT check stack here.
@@ -156,26 +156,30 @@ PJ_DEF(int) platform_strerror( pj_os_err_type os_errcode,
 
     if (!len) {
 #if defined(PJ_HAS_ERROR_STRING) && (PJ_HAS_ERROR_STRING!=0)
-	int i;
+        int i;
+
         for (i = 0; gaErrorList[i].msg; ++i) {
             if (gaErrorList[i].code == os_errcode) {
-                len = strlen(gaErrorList[i].msg);
-		if ((pj_size_t)len >= bufsize) {
-		    len = bufsize-1;
-		}
-		pj_memcpy(buf, gaErrorList[i].msg, len);
-		buf[len] = '\0';
+                len = strlen (gaErrorList[i].msg);
+
+                if ( (pj_size_t) len >= bufsize) {
+                    len = bufsize-1;
+                }
+
+                pj_memcpy (buf, gaErrorList[i].msg, len);
+                buf[len] = '\0';
                 break;
             }
         }
+
 #endif	/* PJ_HAS_ERROR_STRING */
 
     }
 
     if (!len) {
-	len = pj_ansi_snprintf( buf, bufsize, "Symbian native error %d", 
-				os_errcode);
-	buf[len] = '\0';
+        len = pj_ansi_snprintf (buf, bufsize, "Symbian native error %d",
+                                os_errcode);
+        buf[len] = '\0';
     }
 
     return len;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp
index ed4f2b4f44db36831e5a8badc938156894d9c3f3..2015204b7bf55a82335ce7aba19c170389afcf1a 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/pool_policy_new.cpp
@@ -1,5 +1,5 @@
 /* $Id: pool_policy_new.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -38,76 +38,76 @@
  * This file contains pool default policy definition and implementation.
  */
 #include "pool_signature.h"
- 
 
-static void *operator_new(pj_pool_factory *factory, pj_size_t size)
+
+static void *operator_new (pj_pool_factory *factory, pj_size_t size)
 {
     void *mem;
 
     PJ_CHECK_STACK();
 
     if (factory->on_block_alloc) {
-		int rc;
-		rc = factory->on_block_alloc(factory, size);
-		if (!rc)
-		    return NULL;
+        int rc;
+        rc = factory->on_block_alloc (factory, size);
+
+        if (!rc)
+            return NULL;
     }
-    
-    mem = (void*) new char[size+(SIG_SIZE << 1)];
-    
+
+    mem = (void*) new char[size+ (SIG_SIZE << 1) ];
+
     /* Exception for new operator may be disabled, so.. */
     if (mem) {
-	/* Apply signature when PJ_SAFE_POOL is set. It will move
-	 * "mem" pointer forward.
-	 */
-	APPLY_SIG(mem, size);
+        /* Apply signature when PJ_SAFE_POOL is set. It will move
+         * "mem" pointer forward.
+         */
+        APPLY_SIG (mem, size);
     }
 
     return mem;
 }
 
-static void operator_delete(pj_pool_factory *factory, void *mem, pj_size_t size)
+static void operator_delete (pj_pool_factory *factory, void *mem, pj_size_t size)
 {
     PJ_CHECK_STACK();
 
-    if (factory->on_block_free) 
-        factory->on_block_free(factory, size);
-    
+    if (factory->on_block_free)
+        factory->on_block_free (factory, size);
+
     /* Check and remove signature when PJ_SAFE_POOL is set. It will
      * move "mem" pointer backward.
      */
-    REMOVE_SIG(mem, size);
+    REMOVE_SIG (mem, size);
 
     /* Note that when PJ_SAFE_POOL is set, the actual size of the block
      * is size + SIG_SIZE*2.
      */
 
-    char *p = (char*)mem;
+    char *p = (char*) mem;
     delete [] p;
 }
 
-static void default_pool_callback(pj_pool_t *pool, pj_size_t size)
+static void default_pool_callback (pj_pool_t *pool, pj_size_t size)
 {
     PJ_CHECK_STACK();
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(size);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (size);
 
-    PJ_THROW(PJ_NO_MEMORY_EXCEPTION);
+    PJ_THROW (PJ_NO_MEMORY_EXCEPTION);
 }
 
-PJ_DEF_DATA(pj_pool_factory_policy) pj_pool_factory_default_policy = 
-{
+PJ_DEF_DATA (pj_pool_factory_policy) pj_pool_factory_default_policy = {
     &operator_new,
     &operator_delete,
     &default_pool_callback,
     0
 };
 
-PJ_DEF(const pj_pool_factory_policy*) pj_pool_factory_get_default_policy(void)
+PJ_DEF (const pj_pool_factory_policy*) pj_pool_factory_get_default_policy (void)
 {
     return &pj_pool_factory_default_policy;
 }
 
- 
+
 #endif	/* PJ_HAS_POOL_ALT_API */
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp
index 112fcc210407580424cf68d810281a7caee64bbf..6881fbe01ab9d20b2bffe16f44dbf39e595b862b 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_qos_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: sock_qos_symbian.cpp 2998 2009-11-09 08:51:34Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -30,77 +30,81 @@
 #include <pj/sock_qos.h>
 #include "os_symbian.h"
 
-PJ_DEF(pj_status_t) pj_sock_set_qos_params(pj_sock_t sock,
-					   pj_qos_params *param)
+PJ_DEF (pj_status_t) pj_sock_set_qos_params (pj_sock_t sock,
+        pj_qos_params *param)
 {
-    PJ_ASSERT_RETURN(sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL);
-    
-    CPjSocket *pjsock = (CPjSocket*)sock;
+    PJ_ASSERT_RETURN (sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL);
+
+    CPjSocket *pjsock = (CPjSocket*) sock;
     RSocket & rsock = pjsock->Socket();
     pj_status_t last_err = PJ_ENOTSUP;
-    
+
     /* SO_PRIORITY and WMM are not supported */
-    param->flags &= ~(PJ_QOS_PARAM_HAS_SO_PRIO | PJ_QOS_PARAM_HAS_WMM);
-    
+    param->flags &= ~ (PJ_QOS_PARAM_HAS_SO_PRIO | PJ_QOS_PARAM_HAS_WMM);
+
     if (param->flags & PJ_QOS_PARAM_HAS_DSCP) {
-	TInt err;
-	
-	err = rsock.SetOpt(KSoIpTOS, KProtocolInetIp,
-		           (param->dscp_val << 2));
-	if (err != KErrNone) {
-	    last_err = PJ_RETURN_OS_ERROR(err);
-	    param->flags &= ~(PJ_QOS_PARAM_HAS_DSCP);
-	}
+        TInt err;
+
+        err = rsock.SetOpt (KSoIpTOS, KProtocolInetIp,
+                            (param->dscp_val << 2));
+
+        if (err != KErrNone) {
+            last_err = PJ_RETURN_OS_ERROR (err);
+            param->flags &= ~ (PJ_QOS_PARAM_HAS_DSCP);
+        }
     }
-    
+
     return param->flags ? PJ_SUCCESS : last_err;
 }
 
-PJ_DEF(pj_status_t) pj_sock_set_qos_type(pj_sock_t sock,
-					 pj_qos_type type)
+PJ_DEF (pj_status_t) pj_sock_set_qos_type (pj_sock_t sock,
+        pj_qos_type type)
 {
     pj_qos_params param;
     pj_status_t status;
-    
-    status = pj_qos_get_params(type, &param);
+
+    status = pj_qos_get_params (type, &param);
+
     if (status != PJ_SUCCESS)
-	return status;
-    
-    return pj_sock_set_qos_params(sock, &param);
+        return status;
+
+    return pj_sock_set_qos_params (sock, &param);
 }
 
 
-PJ_DEF(pj_status_t) pj_sock_get_qos_params(pj_sock_t sock,
-					   pj_qos_params *p_param)
+PJ_DEF (pj_status_t) pj_sock_get_qos_params (pj_sock_t sock,
+        pj_qos_params *p_param)
 {
-    PJ_ASSERT_RETURN(sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL);
-    
-    CPjSocket *pjsock = (CPjSocket*)sock;
+    PJ_ASSERT_RETURN (sock!=0 && sock!=PJ_INVALID_SOCKET, PJ_EINVAL);
+
+    CPjSocket *pjsock = (CPjSocket*) sock;
     RSocket & rsock = pjsock->Socket();
     TInt err, dscp;
-    
-    pj_bzero(p_param, sizeof(*p_param));
 
-    err = rsock.GetOpt(KSoIpTOS, KProtocolInetIp, dscp);
+    pj_bzero (p_param, sizeof (*p_param));
+
+    err = rsock.GetOpt (KSoIpTOS, KProtocolInetIp, dscp);
+
     if (err == KErrNone) {
-	p_param->flags |= PJ_QOS_PARAM_HAS_DSCP;
-	p_param->dscp_val = (dscp >> 2);
-	return PJ_SUCCESS;
+        p_param->flags |= PJ_QOS_PARAM_HAS_DSCP;
+        p_param->dscp_val = (dscp >> 2);
+        return PJ_SUCCESS;
     } else {
-	return PJ_RETURN_OS_ERROR(err);
+        return PJ_RETURN_OS_ERROR (err);
     }
 }
 
-PJ_DEF(pj_status_t) pj_sock_get_qos_type(pj_sock_t sock,
-					 pj_qos_type *p_type)
+PJ_DEF (pj_status_t) pj_sock_get_qos_type (pj_sock_t sock,
+        pj_qos_type *p_type)
 {
     pj_qos_params param;
     pj_status_t status;
-    
-    status = pj_sock_get_qos_params(sock, &param);
+
+    status = pj_sock_get_qos_params (sock, &param);
+
     if (status != PJ_SUCCESS)
-	return status;
-    
-    return pj_qos_get_type(&param, p_type);
+        return status;
+
+    return pj_qos_get_type (&param, p_type);
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp
index 7d4cc8c9a8ef3fa78e19d654a0a87485c2103c43..ee1d23b041abbc2a766872724eea2a38d6a0b300 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_select_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: sock_select_symbian.cpp 2394 2008-12-23 17:27:53Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -34,140 +34,142 @@
 #include <pj/os.h>
 #include "os_symbian.h"
 
- 
-struct symbian_fd_set
-{
+
+struct symbian_fd_set {
     unsigned	 count;
     CPjSocket	*sock[PJ_IOQUEUE_MAX_HANDLES];
 };
 
 
-PJ_DEF(void) PJ_FD_ZERO(pj_fd_set_t *fdsetp)
+PJ_DEF (void) PJ_FD_ZERO (pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
     fds->count = 0;
 }
 
 
-PJ_DEF(void) PJ_FD_SET(pj_sock_t fd, pj_fd_set_t *fdsetp)
+PJ_DEF (void) PJ_FD_SET (pj_sock_t fd, pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
 
-    PJ_ASSERT_ON_FAIL(fds->count < PJ_IOQUEUE_MAX_HANDLES, return);
-    fds->sock[fds->count++] = (CPjSocket*)fd;
+    PJ_ASSERT_ON_FAIL (fds->count < PJ_IOQUEUE_MAX_HANDLES, return);
+    fds->sock[fds->count++] = (CPjSocket*) fd;
 }
 
 
-PJ_DEF(void) PJ_FD_CLR(pj_sock_t fd, pj_fd_set_t *fdsetp)
+PJ_DEF (void) PJ_FD_CLR (pj_sock_t fd, pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
     unsigned i;
-    
+
     for (i=0; i<fds->count; ++i) {
-	if (fds->sock[i] == (CPjSocket*)fd) {
-	    pj_array_erase(fds->sock, sizeof(fds->sock[0]), fds->count, i);
-	    --fds->count;
-	    return;
-	}
+        if (fds->sock[i] == (CPjSocket*) fd) {
+            pj_array_erase (fds->sock, sizeof (fds->sock[0]), fds->count, i);
+            --fds->count;
+            return;
+        }
     }
 }
 
 
-PJ_DEF(pj_bool_t) PJ_FD_ISSET(pj_sock_t fd, const pj_fd_set_t *fdsetp)
+PJ_DEF (pj_bool_t) PJ_FD_ISSET (pj_sock_t fd, const pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
     unsigned i;
-    
+
     for (i=0; i<fds->count; ++i) {
-	if (fds->sock[i] == (CPjSocket*)fd) {
-	    return PJ_TRUE;
-	}
+        if (fds->sock[i] == (CPjSocket*) fd) {
+            return PJ_TRUE;
+        }
     }
 
     return PJ_FALSE;
 }
 
-PJ_DEF(pj_size_t) PJ_FD_COUNT(const pj_fd_set_t *fdsetp)
+PJ_DEF (pj_size_t) PJ_FD_COUNT (const pj_fd_set_t *fdsetp)
 {
-    symbian_fd_set *fds = (symbian_fd_set *)fdsetp;
+    symbian_fd_set *fds = (symbian_fd_set *) fdsetp;
     return fds->count;
 }
 
 
-PJ_DEF(int) pj_sock_select( int n, 
-			    pj_fd_set_t *readfds, 
-			    pj_fd_set_t *writefds,
-			    pj_fd_set_t *exceptfds, 
-			    const pj_time_val *timeout)
+PJ_DEF (int) pj_sock_select (int n,
+                             pj_fd_set_t *readfds,
+                             pj_fd_set_t *writefds,
+                             pj_fd_set_t *exceptfds,
+                             const pj_time_val *timeout)
 {
     CPjTimeoutTimer *pjTimer;
     unsigned i;
 
-    PJ_UNUSED_ARG(n);
-    PJ_UNUSED_ARG(writefds);
-    PJ_UNUSED_ARG(exceptfds);
+    PJ_UNUSED_ARG (n);
+    PJ_UNUSED_ARG (writefds);
+    PJ_UNUSED_ARG (exceptfds);
 
     if (timeout) {
-	pjTimer = PjSymbianOS::Instance()->SelectTimeoutTimer();
-	pjTimer->StartTimer(timeout->sec*1000 + timeout->msec);
+        pjTimer = PjSymbianOS::Instance()->SelectTimeoutTimer();
+        pjTimer->StartTimer (timeout->sec*1000 + timeout->msec);
 
     } else {
-	pjTimer = NULL;
+        pjTimer = NULL;
     }
 
     /* Scan for readable sockets */
 
     if (readfds) {
-	symbian_fd_set *fds = (symbian_fd_set *)readfds;
+        symbian_fd_set *fds = (symbian_fd_set *) readfds;
 
-	do {
-	    /* Scan sockets for readily available data */
-	    for (i=0; i<fds->count; ++i) {
-		CPjSocket *pjsock = fds->sock[i];
+        do {
+            /* Scan sockets for readily available data */
+            for (i=0; i<fds->count; ++i) {
+                CPjSocket *pjsock = fds->sock[i];
 
-		if (pjsock->Reader()) {
-		    if (pjsock->Reader()->HasData() && !pjsock->Reader()->IsActive()) {
+                if (pjsock->Reader()) {
+                    if (pjsock->Reader()->HasData() && !pjsock->Reader()->IsActive()) {
 
-			/* Found socket with data ready */
-			PJ_FD_ZERO(readfds);
-			PJ_FD_SET((pj_sock_t)pjsock, readfds);
+                        /* Found socket with data ready */
+                        PJ_FD_ZERO (readfds);
+                        PJ_FD_SET ( (pj_sock_t) pjsock, readfds);
 
-			/* Cancel timer, if any */
-			if (pjTimer) {
-			    pjTimer->Cancel();
-			}
+                        /* Cancel timer, if any */
+                        if (pjTimer) {
+                            pjTimer->Cancel();
+                        }
 
-			/* Clear writable and exception fd_set */
-			if (writefds)
-			    PJ_FD_ZERO(writefds);
-			if (exceptfds)
-			    PJ_FD_ZERO(exceptfds);
+                        /* Clear writable and exception fd_set */
+                        if (writefds)
+                            PJ_FD_ZERO (writefds);
 
-			return 1;
+                        if (exceptfds)
+                            PJ_FD_ZERO (exceptfds);
 
-		    } else if (!pjsock->Reader()->IsActive())
-			pjsock->Reader()->StartRecvFrom();
+                        return 1;
 
-		} else {
-		    pjsock->CreateReader();
-		    pjsock->Reader()->StartRecvFrom();
-		}
-	    }
+                    } else if (!pjsock->Reader()->IsActive())
+                        pjsock->Reader()->StartRecvFrom();
 
-	    PjSymbianOS::Instance()->WaitForActiveObjects();
+                } else {
+                    pjsock->CreateReader();
+                    pjsock->Reader()->StartRecvFrom();
+                }
+            }
 
-	} while (pjTimer==NULL || !pjTimer->HasTimedOut());
+            PjSymbianOS::Instance()->WaitForActiveObjects();
+
+        } while (pjTimer==NULL || !pjTimer->HasTimedOut());
     }
 
 
     /* Timeout */
 
     if (readfds)
-	PJ_FD_ZERO(readfds);
+        PJ_FD_ZERO (readfds);
+
     if (writefds)
-	PJ_FD_ZERO(writefds);
+        PJ_FD_ZERO (writefds);
+
     if (exceptfds)
-	PJ_FD_ZERO(exceptfds);
+        PJ_FD_ZERO (exceptfds);
 
     return 0;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp
index 7479ac745f485bc3e80aa9db54602ab336e8fb19..ce6683bf49f5ae36de63ca8c8afe305137062d43 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/sock_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: sock_symbian.cpp 2966 2009-10-25 09:02:07Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -108,19 +108,19 @@ CPjSocket::~CPjSocket()
 
 
 // Create socket reader.
-CPjSocketReader *CPjSocket::CreateReader(unsigned max_len)
+CPjSocketReader *CPjSocket::CreateReader (unsigned max_len)
 {
-    pj_assert(sockReader_ == NULL);
-    return sockReader_ = CPjSocketReader::NewL(*this, max_len);
+    pj_assert (sockReader_ == NULL);
+    return sockReader_ = CPjSocketReader::NewL (*this, max_len);
 }
 
 // Delete socket reader when it's not wanted.
-void CPjSocket::DestroyReader() 
+void CPjSocket::DestroyReader()
 {
     if (sockReader_) {
-	sockReader_->Cancel();
-	delete sockReader_;
-	sockReader_ = NULL;
+        sockReader_->Cancel();
+        delete sockReader_;
+        sockReader_ = NULL;
     }
 }
 
@@ -132,28 +132,28 @@ void CPjSocket::DestroyReader()
 //
 
 
-CPjSocketReader::CPjSocketReader(CPjSocket &sock)
-: CActive(EPriorityStandard), 
-  sock_(sock), buffer_(NULL, 0), readCb_(NULL), key_(NULL)
+CPjSocketReader::CPjSocketReader (CPjSocket &sock)
+        : CActive (EPriorityStandard),
+        sock_ (sock), buffer_ (NULL, 0), readCb_ (NULL), key_ (NULL)
 {
 }
 
 
-void CPjSocketReader::ConstructL(unsigned max_len)
+void CPjSocketReader::ConstructL (unsigned max_len)
 {
     isDatagram_ = sock_.IsDatagram();
 
     TUint8 *ptr = new TUint8[max_len];
-    buffer_.Set(ptr, 0, (TInt)max_len);
-    CActiveScheduler::Add(this);
+    buffer_.Set (ptr, 0, (TInt) max_len);
+    CActiveScheduler::Add (this);
 }
 
-CPjSocketReader *CPjSocketReader::NewL(CPjSocket &sock, unsigned max_len)
+CPjSocketReader *CPjSocketReader::NewL (CPjSocket &sock, unsigned max_len)
 {
-    CPjSocketReader *self = new (ELeave) CPjSocketReader(sock);
-    CleanupStack::PushL(self);
-    self->ConstructL(max_len);
-    CleanupStack::Pop(self);
+    CPjSocketReader *self = new (ELeave) CPjSocketReader (sock);
+    CleanupStack::PushL (self);
+    self->ConstructL (max_len);
+    CleanupStack::Pop (self);
 
     return self;
 }
@@ -165,27 +165,28 @@ CPjSocketReader::~CPjSocketReader()
     delete [] data;
 }
 
-void CPjSocketReader::StartRecv(void (*cb)(void *key), 
-			        void *key, 
-			        TDes8 *aDesc,
-			        TUint flags)
+void CPjSocketReader::StartRecv (void (*cb) (void *key),
+                                 void *key,
+                                 TDes8 *aDesc,
+                                 TUint flags)
 {
-    StartRecvFrom(cb, key, aDesc, flags, NULL);
+    StartRecvFrom (cb, key, aDesc, flags, NULL);
 }
 
-void CPjSocketReader::StartRecvFrom(void (*cb)(void *key), 
-				    void *key, 
-				    TDes8 *aDesc,
-				    TUint flags,
-				    TSockAddr *fromAddr)
+void CPjSocketReader::StartRecvFrom (void (*cb) (void *key),
+                                     void *key,
+                                     TDes8 *aDesc,
+                                     TUint flags,
+                                     TSockAddr *fromAddr)
 {
     readCb_ = cb;
     key_ = key;
 
     if (aDesc == NULL) aDesc = &buffer_;
+
     if (fromAddr == NULL) fromAddr = &recvAddr_;
 
-    sock_.Socket().RecvFrom(*aDesc, *fromAddr, flags, iStatus);
+    sock_.Socket().RecvFrom (*aDesc, *fromAddr, flags, iStatus);
     SetActive();
 }
 
@@ -196,40 +197,41 @@ void CPjSocketReader::DoCancel()
 
 void CPjSocketReader::RunL()
 {
-    void (*old_cb)(void *key) = readCb_;
+    void (*old_cb) (void *key) = readCb_;
     void *old_key = key_;
 
     readCb_ = NULL;
     key_ = NULL;
 
     if (old_cb) {
-	(*old_cb)(old_key);
+        (*old_cb) (old_key);
     }
 }
 
 // Append data to aDesc, up to aDesc's maximum size.
 // If socket is datagram based, buffer_ will be clared.
-void CPjSocketReader::ReadData(TDes8 &aDesc, TInetAddr *addr)
+void CPjSocketReader::ReadData (TDes8 &aDesc, TInetAddr *addr)
 {
     if (isDatagram_)
-	aDesc.Zero();
+        aDesc.Zero();
 
     if (buffer_.Length() == 0)
-	return;
+        return;
 
     TInt size_to_copy = aDesc.MaxLength() - aDesc.Length();
+
     if (size_to_copy > buffer_.Length())
-	size_to_copy = buffer_.Length();
+        size_to_copy = buffer_.Length();
 
-    aDesc.Append(buffer_.Ptr(), size_to_copy);
+    aDesc.Append (buffer_.Ptr(), size_to_copy);
 
     if (isDatagram_)
-	buffer_.Zero();
+        buffer_.Zero();
     else
-	buffer_.Delete(0, size_to_copy);
+        buffer_.Delete (0, size_to_copy);
 
     if (addr)
-	*addr = recvAddr_;
+        *addr = recvAddr_;
 }
 
 
@@ -242,10 +244,10 @@ void CPjSocketReader::ReadData(TDes8 &aDesc, TInetAddr *addr)
 /*
  * Convert 16-bit value from network byte order to host byte order.
  */
-PJ_DEF(pj_uint16_t) pj_ntohs(pj_uint16_t netshort)
+PJ_DEF (pj_uint16_t) pj_ntohs (pj_uint16_t netshort)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap16(netshort);
+    return pj_swap16 (netshort);
 #else
     return netshort;
 #endif
@@ -254,10 +256,10 @@ PJ_DEF(pj_uint16_t) pj_ntohs(pj_uint16_t netshort)
 /*
  * Convert 16-bit value from host byte order to network byte order.
  */
-PJ_DEF(pj_uint16_t) pj_htons(pj_uint16_t hostshort)
+PJ_DEF (pj_uint16_t) pj_htons (pj_uint16_t hostshort)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap16(hostshort);
+    return pj_swap16 (hostshort);
 #else
     return hostshort;
 #endif
@@ -266,10 +268,10 @@ PJ_DEF(pj_uint16_t) pj_htons(pj_uint16_t hostshort)
 /*
  * Convert 32-bit value from network byte order to host byte order.
  */
-PJ_DEF(pj_uint32_t) pj_ntohl(pj_uint32_t netlong)
+PJ_DEF (pj_uint32_t) pj_ntohl (pj_uint32_t netlong)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap32(netlong);
+    return pj_swap32 (netlong);
 #else
     return netlong;
 #endif
@@ -278,10 +280,10 @@ PJ_DEF(pj_uint32_t) pj_ntohl(pj_uint32_t netlong)
 /*
  * Convert 32-bit value from host byte order to network byte order.
  */
-PJ_DEF(pj_uint32_t) pj_htonl(pj_uint32_t hostlong)
+PJ_DEF (pj_uint32_t) pj_htonl (pj_uint32_t hostlong)
 {
 #if PJ_IS_LITTLE_ENDIAN
-    return pj_swap32(hostlong);
+    return pj_swap32 (hostlong);
 #else
     return netlong;
 #endif
@@ -291,25 +293,25 @@ PJ_DEF(pj_uint32_t) pj_htonl(pj_uint32_t hostlong)
  * Convert an Internet host address given in network byte order
  * to string in standard numbers and dots notation.
  */
-PJ_DEF(char*) pj_inet_ntoa(pj_in_addr inaddr)
+PJ_DEF (char*) pj_inet_ntoa (pj_in_addr inaddr)
 {
-	static char str8[PJ_INET_ADDRSTRLEN];
-    TBuf<PJ_INET_ADDRSTRLEN> str16(0);
+    static char str8[PJ_INET_ADDRSTRLEN];
+    TBuf<PJ_INET_ADDRSTRLEN> str16 (0);
 
     /* (Symbian IP address is in host byte order) */
-    TInetAddr temp_addr((TUint32)pj_ntohl(inaddr.s_addr), (TUint)0);
-    temp_addr.Output(str16);
- 
-    return pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
-			      str8, sizeof(str8));
+    TInetAddr temp_addr ( (TUint32) pj_ntohl (inaddr.s_addr), (TUint) 0);
+    temp_addr.Output (str16);
+
+    return pj_unicode_to_ansi ( (const wchar_t*) str16.PtrZ(), str16.Length(),
+                                str8, sizeof (str8));
 }
 
 /*
  * This function converts the Internet host address cp from the standard
  * numbers-and-dots notation into binary data and stores it in the structure
- * that inp points to. 
+ * that inp points to.
  */
-PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp)
+PJ_DEF (int) pj_inet_aton (const pj_str_t *cp, struct pj_in_addr *inp)
 {
     enum { MAXIPLEN = PJ_INET_ADDRSTRLEN };
 
@@ -323,48 +325,50 @@ PJ_DEF(int) pj_inet_aton(const pj_str_t *cp, struct pj_in_addr *inp)
      *	this function might be called with cp->slen >= 16
      *  (i.e. when called with hostname to check if it's an IP addr).
      */
-    PJ_ASSERT_RETURN(cp && cp->slen && inp, 0);
+    PJ_ASSERT_RETURN (cp && cp->slen && inp, 0);
+
     if (cp->slen >= 16) {
-	return 0;
+        return 0;
     }
 
     char tempaddr8[MAXIPLEN];
-    pj_memcpy(tempaddr8, cp->ptr, cp->slen);
+    pj_memcpy (tempaddr8, cp->ptr, cp->slen);
     tempaddr8[cp->slen] = '\0';
 
     wchar_t tempaddr16[MAXIPLEN];
-    pj_ansi_to_unicode(tempaddr8, pj_ansi_strlen(tempaddr8),
-		       tempaddr16, sizeof(tempaddr16));
+    pj_ansi_to_unicode (tempaddr8, pj_ansi_strlen (tempaddr8),
+                        tempaddr16, sizeof (tempaddr16));
 
-    TBuf<MAXIPLEN> ip_addr((const TText*)tempaddr16);
+    TBuf<MAXIPLEN> ip_addr ( (const TText*) tempaddr16);
 
     TInetAddr addr;
-    addr.Init(KAfInet);
-    if (addr.Input(ip_addr) == KErrNone) {
-	/* Success (Symbian IP address is in host byte order) */
-	inp->s_addr = pj_htonl(addr.Address());
-	return 1;
+    addr.Init (KAfInet);
+
+    if (addr.Input (ip_addr) == KErrNone) {
+        /* Success (Symbian IP address is in host byte order) */
+        inp->s_addr = pj_htonl (addr.Address());
+        return 1;
     } else {
-	/* Error */
-	return 0;
+        /* Error */
+        return 0;
     }
 }
 
 /*
  * Convert text to IPv4/IPv6 address.
  */
-PJ_DEF(pj_status_t) pj_inet_pton(int af, const pj_str_t *src, void *dst)
+PJ_DEF (pj_status_t) pj_inet_pton (int af, const pj_str_t *src, void *dst)
 {
     char tempaddr[PJ_INET6_ADDRSTRLEN];
 
-    PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6, PJ_EINVAL);
-    PJ_ASSERT_RETURN(src && src->slen && dst, PJ_EINVAL);
+    PJ_ASSERT_RETURN (af==PJ_AF_INET || af==PJ_AF_INET6, PJ_EINVAL);
+    PJ_ASSERT_RETURN (src && src->slen && dst, PJ_EINVAL);
 
-    /* Initialize output with PJ_IN_ADDR_NONE for IPv4 (to be 
+    /* Initialize output with PJ_IN_ADDR_NONE for IPv4 (to be
      * compatible with pj_inet_aton()
      */
     if (af==PJ_AF_INET) {
-	((pj_in_addr*)dst)->s_addr = PJ_INADDR_NONE;
+        ( (pj_in_addr*) dst)->s_addr = PJ_INADDR_NONE;
     }
 
     /* Caution:
@@ -372,88 +376,90 @@ PJ_DEF(pj_status_t) pj_inet_pton(int af, const pj_str_t *src, void *dst)
      *  (i.e. when called with hostname to check if it's an IP addr).
      */
     if (src->slen >= PJ_INET6_ADDRSTRLEN) {
-	return PJ_ENAMETOOLONG;
+        return PJ_ENAMETOOLONG;
     }
 
-    pj_memcpy(tempaddr, src->ptr, src->slen);
+    pj_memcpy (tempaddr, src->ptr, src->slen);
     tempaddr[src->slen] = '\0';
 
 
     wchar_t tempaddr16[PJ_INET6_ADDRSTRLEN];
-    pj_ansi_to_unicode(tempaddr, pj_ansi_strlen(tempaddr),
-		       tempaddr16, sizeof(tempaddr16));
+    pj_ansi_to_unicode (tempaddr, pj_ansi_strlen (tempaddr),
+                        tempaddr16, sizeof (tempaddr16));
 
-    TBuf<PJ_INET6_ADDRSTRLEN> ip_addr((const TText*)tempaddr16);
+    TBuf<PJ_INET6_ADDRSTRLEN> ip_addr ( (const TText*) tempaddr16);
 
     TInetAddr addr;
-    addr.Init(KAfInet6);
-    if (addr.Input(ip_addr) == KErrNone) {
-	if (af==PJ_AF_INET) {
-	    /* Success (Symbian IP address is in host byte order) */
-	    pj_uint32_t ip = pj_htonl(addr.Address());
-	    pj_memcpy(dst, &ip, 4);
-	} else if (af==PJ_AF_INET6) {
-	    const TIp6Addr & ip6 = addr.Ip6Address();
-	    pj_memcpy(dst, ip6.u.iAddr8, 16);
-	} else {
-	    pj_assert(!"Unexpected!");
-	    return PJ_EBUG;
-	}
-	return PJ_SUCCESS;
+    addr.Init (KAfInet6);
+
+    if (addr.Input (ip_addr) == KErrNone) {
+        if (af==PJ_AF_INET) {
+            /* Success (Symbian IP address is in host byte order) */
+            pj_uint32_t ip = pj_htonl (addr.Address());
+            pj_memcpy (dst, &ip, 4);
+        } else if (af==PJ_AF_INET6) {
+            const TIp6Addr & ip6 = addr.Ip6Address();
+            pj_memcpy (dst, ip6.u.iAddr8, 16);
+        } else {
+            pj_assert (!"Unexpected!");
+            return PJ_EBUG;
+        }
+
+        return PJ_SUCCESS;
     } else {
-	/* Error */
-	return PJ_EINVAL;
+        /* Error */
+        return PJ_EINVAL;
     }
 }
 
 /*
  * Convert IPv4/IPv6 address to text.
  */
-PJ_DEF(pj_status_t) pj_inet_ntop(int af, const void *src,
-				 char *dst, int size)
+PJ_DEF (pj_status_t) pj_inet_ntop (int af, const void *src,
+                                   char *dst, int size)
 
 {
-    PJ_ASSERT_RETURN(src && dst && size, PJ_EINVAL);
+    PJ_ASSERT_RETURN (src && dst && size, PJ_EINVAL);
 
     *dst = '\0';
 
     if (af==PJ_AF_INET) {
 
-	TBuf<PJ_INET_ADDRSTRLEN> str16;
-	pj_in_addr inaddr;
+        TBuf<PJ_INET_ADDRSTRLEN> str16;
+        pj_in_addr inaddr;
+
+        if (size < PJ_INET_ADDRSTRLEN)
+            return PJ_ETOOSMALL;
 
-	if (size < PJ_INET_ADDRSTRLEN)
-	    return PJ_ETOOSMALL;
+        pj_memcpy (&inaddr, src, 4);
 
-	pj_memcpy(&inaddr, src, 4);
+        /* Symbian IP address is in host byte order */
+        TInetAddr temp_addr ( (TUint32) pj_ntohl (inaddr.s_addr), (TUint) 0);
+        temp_addr.Output (str16);
 
-	/* Symbian IP address is in host byte order */
-	TInetAddr temp_addr((TUint32)pj_ntohl(inaddr.s_addr), (TUint)0);
-	temp_addr.Output(str16);
- 
-	pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
-			   dst, size);
-	return PJ_SUCCESS;
+        pj_unicode_to_ansi ( (const wchar_t*) str16.PtrZ(), str16.Length(),
+                             dst, size);
+        return PJ_SUCCESS;
 
     } else if (af==PJ_AF_INET6) {
-	TBuf<PJ_INET6_ADDRSTRLEN> str16;
+        TBuf<PJ_INET6_ADDRSTRLEN> str16;
 
-	if (size < PJ_INET6_ADDRSTRLEN)
-	    return PJ_ETOOSMALL;
+        if (size < PJ_INET6_ADDRSTRLEN)
+            return PJ_ETOOSMALL;
 
-	TIp6Addr ip6;
-	pj_memcpy(ip6.u.iAddr8, src, 16);
+        TIp6Addr ip6;
+        pj_memcpy (ip6.u.iAddr8, src, 16);
 
-	TInetAddr temp_addr(ip6, (TUint)0);
-	temp_addr.Output(str16);
- 
-	pj_unicode_to_ansi((const wchar_t*)str16.PtrZ(), str16.Length(),
-			   dst, size);
-	return PJ_SUCCESS;
+        TInetAddr temp_addr (ip6, (TUint) 0);
+        temp_addr.Output (str16);
+
+        pj_unicode_to_ansi ( (const wchar_t*) str16.PtrZ(), str16.Length(),
+                             dst, size);
+        return PJ_SUCCESS;
 
     } else {
-	pj_assert(!"Unsupport address family");
-	return PJ_EINVAL;
+        pj_assert (!"Unsupport address family");
+        return PJ_EINVAL;
     }
 
 }
@@ -461,7 +467,7 @@ PJ_DEF(pj_status_t) pj_inet_ntop(int af, const void *src,
 /*
  * Get hostname.
  */
-PJ_DEF(const pj_str_t*) pj_gethostname(void)
+PJ_DEF (const pj_str_t*) pj_gethostname (void)
 {
     static char buf[PJ_MAX_HOSTNAME];
     static pj_str_t hostname;
@@ -469,66 +475,68 @@ PJ_DEF(const pj_str_t*) pj_gethostname(void)
     PJ_CHECK_STACK();
 
     if (hostname.ptr == NULL) {
-	RHostResolver &resv = PjSymbianOS::Instance()->GetResolver(PJ_AF_INET);
-	TRequestStatus reqStatus;
-	THostName tmpName;
+        RHostResolver &resv = PjSymbianOS::Instance()->GetResolver (PJ_AF_INET);
+        TRequestStatus reqStatus;
+        THostName tmpName;
 
-	// Return empty hostname if access point is marked as down by app.
-	PJ_SYMBIAN_CHECK_CONNECTION2(&hostname);
+        // Return empty hostname if access point is marked as down by app.
+        PJ_SYMBIAN_CHECK_CONNECTION2 (&hostname);
 
-	resv.GetHostName(tmpName, reqStatus);
-	User::WaitForRequest(reqStatus);
+        resv.GetHostName (tmpName, reqStatus);
+        User::WaitForRequest (reqStatus);
 
-	hostname.ptr = pj_unicode_to_ansi((const wchar_t*)tmpName.Ptr(), tmpName.Length(),
-					  buf, sizeof(buf));
-	hostname.slen = tmpName.Length();
+        hostname.ptr = pj_unicode_to_ansi ( (const wchar_t*) tmpName.Ptr(), tmpName.Length(),
+                                            buf, sizeof (buf));
+        hostname.slen = tmpName.Length();
     }
+
     return &hostname;
 }
 
 /*
  * Create new socket/endpoint for communication and returns a descriptor.
  */
-PJ_DEF(pj_status_t) pj_sock_socket(int af, 
-				   int type, 
-				   int proto,
-				   pj_sock_t *p_sock)
+PJ_DEF (pj_status_t) pj_sock_socket (int af,
+                                     int type,
+                                     int proto,
+                                     pj_sock_t *p_sock)
 {
     TInt rc;
 
     PJ_CHECK_STACK();
 
     /* Sanity checks. */
-    PJ_ASSERT_RETURN(p_sock!=NULL, PJ_EINVAL);
+    PJ_ASSERT_RETURN (p_sock!=NULL, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
+
     /* Set proto if none is specified. */
     if (proto == 0) {
-	if (type == pj_SOCK_STREAM())
-	    proto = KProtocolInetTcp;
-	else if (type == pj_SOCK_DGRAM())
-	    proto = KProtocolInetUdp;
+        if (type == pj_SOCK_STREAM())
+            proto = KProtocolInetTcp;
+        else if (type == pj_SOCK_DGRAM())
+            proto = KProtocolInetUdp;
     }
 
     /* Create Symbian RSocket */
     RSocket rSock;
+
     if (PjSymbianOS::Instance()->Connection())
-    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
-    			af, type, proto,
-    			*PjSymbianOS::Instance()->Connection());
+        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
+                         af, type, proto,
+                         *PjSymbianOS::Instance()->Connection());
     else
-    	rc = rSock.Open(PjSymbianOS::Instance()->SocketServ(), 
-    			af, type, proto);
-        
+        rc = rSock.Open (PjSymbianOS::Instance()->SocketServ(),
+                         af, type, proto);
+
     if (rc != KErrNone)
-	return PJ_RETURN_OS_ERROR(rc);
+        return PJ_RETURN_OS_ERROR (rc);
 
 
     /* Wrap Symbian RSocket into PJLIB's CPjSocket, and return to caller */
-    CPjSocket *pjSock = new CPjSocket(af, type, rSock);
-    *p_sock = (pj_sock_t)pjSock;
+    CPjSocket *pjSock = new CPjSocket (af, type, rSock);
+    *p_sock = (pj_sock_t) pjSock;
 
     return PJ_SUCCESS;
 }
@@ -537,64 +545,65 @@ PJ_DEF(pj_status_t) pj_sock_socket(int af,
 /*
  * Bind socket.
  */
-PJ_DEF(pj_status_t) pj_sock_bind( pj_sock_t sock, 
-				  const pj_sockaddr_t *addr,
-				  int len)
+PJ_DEF (pj_status_t) pj_sock_bind (pj_sock_t sock,
+                                   const pj_sockaddr_t *addr,
+                                   int len)
 {
     pj_status_t status;
     TInt rc;
 
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock != 0, PJ_EINVAL);
-    PJ_ASSERT_RETURN(addr && len>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock != 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN (addr && len>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
 
     // Convert PJLIB's pj_sockaddr into Symbian's TInetAddr
     TInetAddr inetAddr;
-    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)addr, len, inetAddr);
+    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) addr, len, inetAddr);
+
     if (status != PJ_SUCCESS)
-    	return status;
+        return status;
 
     // Get the RSocket instance
-    RSocket &rSock = ((CPjSocket*)sock)->Socket();
+    RSocket &rSock = ( (CPjSocket*) sock)->Socket();
 
     // Bind
-    rc = rSock.Bind(inetAddr);
+    rc = rSock.Bind (inetAddr);
 
-    return (rc==KErrNone) ? PJ_SUCCESS : PJ_RETURN_OS_ERROR(rc);
+    return (rc==KErrNone) ? PJ_SUCCESS : PJ_RETURN_OS_ERROR (rc);
 }
 
 
 /*
  * Bind socket.
  */
-PJ_DEF(pj_status_t) pj_sock_bind_in( pj_sock_t sock, 
-				     pj_uint32_t addr32,
-				     pj_uint16_t port)
+PJ_DEF (pj_status_t) pj_sock_bind_in (pj_sock_t sock,
+                                      pj_uint32_t addr32,
+                                      pj_uint16_t port)
 {
     pj_sockaddr_in addr;
 
     PJ_CHECK_STACK();
 
-    pj_bzero(&addr, sizeof(addr));
+    pj_bzero (&addr, sizeof (addr));
     addr.sin_family = PJ_AF_INET;
-    addr.sin_addr.s_addr = pj_htonl(addr32);
-    addr.sin_port = pj_htons(port);
+    addr.sin_addr.s_addr = pj_htonl (addr32);
+    addr.sin_port = pj_htons (port);
 
-    return pj_sock_bind(sock, &addr, sizeof(pj_sockaddr_in));
+    return pj_sock_bind (sock, &addr, sizeof (pj_sockaddr_in));
 }
 
 
 /*
  * Close socket.
  */
-PJ_DEF(pj_status_t) pj_sock_close(pj_sock_t sock)
+PJ_DEF (pj_status_t) pj_sock_close (pj_sock_t sock)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock != 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock != 0, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    CPjSocket *pjSock = (CPjSocket*) sock;
 
     // This will close the socket.
     delete pjSock;
@@ -605,325 +614,328 @@ PJ_DEF(pj_status_t) pj_sock_close(pj_sock_t sock)
 /*
  * Get remote's name.
  */
-PJ_DEF(pj_status_t) pj_sock_getpeername( pj_sock_t sock,
-					 pj_sockaddr_t *addr,
-					 int *namelen)
+PJ_DEF (pj_status_t) pj_sock_getpeername (pj_sock_t sock,
+        pj_sockaddr_t *addr,
+        int *namelen)
 {
     PJ_CHECK_STACK();
-    
-    PJ_ASSERT_RETURN(sock && addr && namelen && 
-		     *namelen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    PJ_ASSERT_RETURN (sock && addr && namelen &&
+                      *namelen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
+
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     // Socket must be connected.
-    PJ_ASSERT_RETURN(pjSock->IsConnected(), PJ_EINVALIDOP);
+    PJ_ASSERT_RETURN (pjSock->IsConnected(), PJ_EINVALIDOP);
 
     TInetAddr inetAddr;
-    rSock.RemoteName(inetAddr);
+    rSock.RemoteName (inetAddr);
 
-    return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)addr, namelen);
+    return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) addr, namelen);
 }
 
 /*
  * Get socket name.
  */
-PJ_DEF(pj_status_t) pj_sock_getsockname( pj_sock_t sock,
-					 pj_sockaddr_t *addr,
-					 int *namelen)
+PJ_DEF (pj_status_t) pj_sock_getsockname (pj_sock_t sock,
+        pj_sockaddr_t *addr,
+        int *namelen)
 {
     PJ_CHECK_STACK();
-    
-    PJ_ASSERT_RETURN(sock && addr && namelen && 
-		     *namelen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    PJ_ASSERT_RETURN (sock && addr && namelen &&
+                      *namelen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
+
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     TInetAddr inetAddr;
-    rSock.LocalName(inetAddr);
+    rSock.LocalName (inetAddr);
 
-    return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)addr, namelen);
+    return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) addr, namelen);
 }
 
 /*
  * Send data
  */
-PJ_DEF(pj_status_t) pj_sock_send(pj_sock_t sock,
-				 const void *buf,
-				 pj_ssize_t *len,
-				 unsigned flags)
+PJ_DEF (pj_status_t) pj_sock_send (pj_sock_t sock,
+                                   const void *buf,
+                                   pj_ssize_t *len,
+                                   unsigned flags)
 {
     PJ_CHECK_STACK();
-    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock && buf && len, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
-    CPjSocket *pjSock = (CPjSocket*)sock;
+
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     // send() should only be called to connected socket
-    PJ_ASSERT_RETURN(pjSock->IsConnected(), PJ_EINVALIDOP);
+    PJ_ASSERT_RETURN (pjSock->IsConnected(), PJ_EINVALIDOP);
 
-    TPtrC8 data((const TUint8*)buf, (TInt)*len);
+    TPtrC8 data ( (const TUint8*) buf, (TInt) *len);
     TRequestStatus reqStatus;
     TSockXfrLength sentLen;
 
-    rSock.Send(data, flags, reqStatus, sentLen);
-    User::WaitForRequest(reqStatus);
+    rSock.Send (data, flags, reqStatus, sentLen);
+    User::WaitForRequest (reqStatus);
 
-    if (reqStatus.Int()==KErrNone) {
-	//*len = (TInt) sentLen.Length();
-	return PJ_SUCCESS;
+    if (reqStatus.Int() ==KErrNone) {
+        //*len = (TInt) sentLen.Length();
+        return PJ_SUCCESS;
     } else
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
 }
 
 
 /*
  * Send data.
  */
-PJ_DEF(pj_status_t) pj_sock_sendto(pj_sock_t sock,
-				   const void *buf,
-				   pj_ssize_t *len,
-				   unsigned flags,
-				   const pj_sockaddr_t *to,
-				   int tolen)
+PJ_DEF (pj_status_t) pj_sock_sendto (pj_sock_t sock,
+                                     const void *buf,
+                                     pj_ssize_t *len,
+                                     unsigned flags,
+                                     const pj_sockaddr_t *to,
+                                     int tolen)
 {
     pj_status_t status;
-    
+
     PJ_CHECK_STACK();
-    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock && buf && len, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
-    CPjSocket *pjSock = (CPjSocket*)sock;
+
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     // Only supports AF_INET for now
-    PJ_ASSERT_RETURN(tolen>=(int)sizeof(pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN (tolen>= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
 
     TInetAddr inetAddr;
-    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)to, tolen, inetAddr);
+    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) to, tolen, inetAddr);
+
     if (status != PJ_SUCCESS)
-    	return status;
+        return status;
 
-    TPtrC8 data((const TUint8*)buf, (TInt)*len);
+    TPtrC8 data ( (const TUint8*) buf, (TInt) *len);
     TRequestStatus reqStatus;
     TSockXfrLength sentLen;
 
-    rSock.SendTo(data, inetAddr, flags, reqStatus, sentLen);
-    User::WaitForRequest(reqStatus);
+    rSock.SendTo (data, inetAddr, flags, reqStatus, sentLen);
+    User::WaitForRequest (reqStatus);
 
-    if (reqStatus.Int()==KErrNone) {
-	//For some reason TSockXfrLength is not returning correctly!
-	//*len = (TInt) sentLen.Length();
-	return PJ_SUCCESS;
-    } else 
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+    if (reqStatus.Int() ==KErrNone) {
+        //For some reason TSockXfrLength is not returning correctly!
+        //*len = (TInt) sentLen.Length();
+        return PJ_SUCCESS;
+    } else
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
 }
 
 /*
  * Receive data.
  */
-PJ_DEF(pj_status_t) pj_sock_recv(pj_sock_t sock,
-				 void *buf,
-				 pj_ssize_t *len,
-				 unsigned flags)
+PJ_DEF (pj_status_t) pj_sock_recv (pj_sock_t sock,
+                                   void *buf,
+                                   pj_ssize_t *len,
+                                   unsigned flags)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock && buf && len, PJ_EINVAL);
-    PJ_ASSERT_RETURN(*len > 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock && buf && len, PJ_EINVAL);
+    PJ_ASSERT_RETURN (*len > 0, PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    CPjSocket *pjSock = (CPjSocket*) sock;
 
     if (pjSock->Reader()) {
-	CPjSocketReader *reader = pjSock->Reader();
+        CPjSocketReader *reader = pjSock->Reader();
 
-	while (reader->IsActive() && !reader->HasData()) {
-	    User::WaitForAnyRequest();
-	}
+        while (reader->IsActive() && !reader->HasData()) {
+            User::WaitForAnyRequest();
+        }
 
-	if (reader->HasData()) {
-	    TPtr8 data((TUint8*)buf, (TInt)*len);
-	    TInetAddr inetAddr;
+        if (reader->HasData()) {
+            TPtr8 data ( (TUint8*) buf, (TInt) *len);
+            TInetAddr inetAddr;
 
-	    reader->ReadData(data, &inetAddr);
+            reader->ReadData (data, &inetAddr);
 
-	    *len = data.Length();
-	    return PJ_SUCCESS;
-	}
+            *len = data.Length();
+            return PJ_SUCCESS;
+        }
     }
 
     TRequestStatus reqStatus;
     TSockXfrLength recvLen;
-    TPtr8 data((TUint8*)buf, (TInt)*len, (TInt)*len);
+    TPtr8 data ( (TUint8*) buf, (TInt) *len, (TInt) *len);
 
     if (pjSock->IsDatagram()) {
-	pjSock->Socket().Recv(data, flags, reqStatus);
+        pjSock->Socket().Recv (data, flags, reqStatus);
     } else {
-	// Using static like this is not pretty, but we don't need to use
-	// the value anyway, hence doing it like this is probably most
-	// optimal.
-	static TSockXfrLength len;
-	pjSock->Socket().RecvOneOrMore(data, flags, reqStatus, len);
+        // Using static like this is not pretty, but we don't need to use
+        // the value anyway, hence doing it like this is probably most
+        // optimal.
+        static TSockXfrLength len;
+        pjSock->Socket().RecvOneOrMore (data, flags, reqStatus, len);
     }
-    User::WaitForRequest(reqStatus);
+
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus == KErrNone) {
-	//*len = (TInt)recvLen.Length();
-	*len = data.Length();
-	return PJ_SUCCESS;
+        //*len = (TInt)recvLen.Length();
+        *len = data.Length();
+        return PJ_SUCCESS;
     } else {
-	*len = -1;
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        *len = -1;
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
     }
 }
 
 /*
  * Receive data.
  */
-PJ_DEF(pj_status_t) pj_sock_recvfrom(pj_sock_t sock,
-				     void *buf,
-				     pj_ssize_t *len,
-				     unsigned flags,
-				     pj_sockaddr_t *from,
-				     int *fromlen)
+PJ_DEF (pj_status_t) pj_sock_recvfrom (pj_sock_t sock,
+                                       void *buf,
+                                       pj_ssize_t *len,
+                                       unsigned flags,
+                                       pj_sockaddr_t *from,
+                                       int *fromlen)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock && buf && len && from && fromlen, PJ_EINVAL);
-    PJ_ASSERT_RETURN(*len > 0, PJ_EINVAL);
-    PJ_ASSERT_RETURN(*fromlen >= (int)sizeof(pj_sockaddr_in), PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock && buf && len && from && fromlen, PJ_EINVAL);
+    PJ_ASSERT_RETURN (*len > 0, PJ_EINVAL);
+    PJ_ASSERT_RETURN (*fromlen >= (int) sizeof (pj_sockaddr_in), PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     if (pjSock->Reader()) {
-	CPjSocketReader *reader = pjSock->Reader();
+        CPjSocketReader *reader = pjSock->Reader();
 
-	while (reader->IsActive() && !reader->HasData()) {
-	    User::WaitForAnyRequest();
-	}
+        while (reader->IsActive() && !reader->HasData()) {
+            User::WaitForAnyRequest();
+        }
 
-	if (reader->HasData()) {
-	    TPtr8 data((TUint8*)buf, (TInt)*len);
-	    TInetAddr inetAddr;
+        if (reader->HasData()) {
+            TPtr8 data ( (TUint8*) buf, (TInt) *len);
+            TInetAddr inetAddr;
 
-	    reader->ReadData(data, &inetAddr);
+            reader->ReadData (data, &inetAddr);
 
-	    *len = data.Length();
+            *len = data.Length();
 
-	    if (from && fromlen) {
-		return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)from, 
-					    fromlen);
-	    } else {
-	    	return PJ_SUCCESS;
-	    }
-	}
+            if (from && fromlen) {
+                return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) from,
+                                             fromlen);
+            } else {
+                return PJ_SUCCESS;
+            }
+        }
     }
 
     TInetAddr inetAddr;
     TRequestStatus reqStatus;
     TSockXfrLength recvLen;
-    TPtr8 data((TUint8*)buf, (TInt)*len, (TInt)*len);
+    TPtr8 data ( (TUint8*) buf, (TInt) *len, (TInt) *len);
 
-    rSock.RecvFrom(data, inetAddr, flags, reqStatus, recvLen);
-    User::WaitForRequest(reqStatus);
+    rSock.RecvFrom (data, inetAddr, flags, reqStatus, recvLen);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus == KErrNone) {
-	//*len = (TInt)recvLen.Length();
-	*len = data.Length();
-	return PjSymbianOS::Addr2pj(inetAddr, *(pj_sockaddr*)from, fromlen);
+        //*len = (TInt)recvLen.Length();
+        *len = data.Length();
+        return PjSymbianOS::Addr2pj (inetAddr, * (pj_sockaddr*) from, fromlen);
     } else {
-	*len = -1;
-	*fromlen = -1;
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        *len = -1;
+        *fromlen = -1;
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
     }
 }
 
 /*
  * Get socket option.
  */
-PJ_DEF(pj_status_t) pj_sock_getsockopt( pj_sock_t sock,
-					pj_uint16_t level,
-					pj_uint16_t optname,
-					void *optval,
-					int *optlen)
+PJ_DEF (pj_status_t) pj_sock_getsockopt (pj_sock_t sock,
+        pj_uint16_t level,
+        pj_uint16_t optname,
+        void *optval,
+        int *optlen)
 {
     // Not supported for now.
-    PJ_UNUSED_ARG(sock);
-    PJ_UNUSED_ARG(level);
-    PJ_UNUSED_ARG(optname);
-    PJ_UNUSED_ARG(optval);
-    PJ_UNUSED_ARG(optlen);
+    PJ_UNUSED_ARG (sock);
+    PJ_UNUSED_ARG (level);
+    PJ_UNUSED_ARG (optname);
+    PJ_UNUSED_ARG (optval);
+    PJ_UNUSED_ARG (optlen);
     return PJ_EINVALIDOP;
 }
 
 /*
  * Set socket option.
  */
-PJ_DEF(pj_status_t) pj_sock_setsockopt( pj_sock_t sock,
-					pj_uint16_t level,
-					pj_uint16_t optname,
-					const void *optval,
-					int optlen)
+PJ_DEF (pj_status_t) pj_sock_setsockopt (pj_sock_t sock,
+        pj_uint16_t level,
+        pj_uint16_t optname,
+        const void *optval,
+        int optlen)
 {
     // Not supported for now.
-    PJ_UNUSED_ARG(sock);
-    PJ_UNUSED_ARG(level);
-    PJ_UNUSED_ARG(optname);
-    PJ_UNUSED_ARG(optval);
-    PJ_UNUSED_ARG(optlen);
+    PJ_UNUSED_ARG (sock);
+    PJ_UNUSED_ARG (level);
+    PJ_UNUSED_ARG (optname);
+    PJ_UNUSED_ARG (optval);
+    PJ_UNUSED_ARG (optlen);
     return PJ_EINVALIDOP;
 }
 
 /*
  * Connect socket.
  */
-PJ_DEF(pj_status_t) pj_sock_connect( pj_sock_t sock,
-				     const pj_sockaddr_t *addr,
-				     int namelen)
+PJ_DEF (pj_status_t) pj_sock_connect (pj_sock_t sock,
+                                      const pj_sockaddr_t *addr,
+                                      int namelen)
 {
     pj_status_t status;
-    
+
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock && addr && namelen, PJ_EINVAL);
-    PJ_ASSERT_RETURN(((pj_sockaddr*)addr)->addr.sa_family == PJ_AF_INET, 
-		     PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock && addr && namelen, PJ_EINVAL);
+    PJ_ASSERT_RETURN ( ( (pj_sockaddr*) addr)->addr.sa_family == PJ_AF_INET,
+                       PJ_EINVAL);
 
     // Return failure if access point is marked as down by app.
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
-    CPjSocket *pjSock = (CPjSocket*)sock;
+
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     TInetAddr inetAddr;
     TRequestStatus reqStatus;
 
-    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)addr, namelen, inetAddr);
+    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) addr, namelen, inetAddr);
+
     if (status != PJ_SUCCESS)
-    	return status;
+        return status;
 
-    rSock.Connect(inetAddr, reqStatus);
-    User::WaitForRequest(reqStatus);
+    rSock.Connect (inetAddr, reqStatus);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus == KErrNone) {
-	pjSock->SetConnected(true);
-	return PJ_SUCCESS;
+        pjSock->SetConnected (true);
+        return PJ_SUCCESS;
     } else {
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
     }
 }
 
@@ -932,96 +944,97 @@ PJ_DEF(pj_status_t) pj_sock_connect( pj_sock_t sock,
  * Shutdown socket.
  */
 #if PJ_HAS_TCP
-PJ_DEF(pj_status_t) pj_sock_shutdown( pj_sock_t sock,
-				      int how)
+PJ_DEF (pj_status_t) pj_sock_shutdown (pj_sock_t sock,
+                                       int how)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock, PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
     RSocket::TShutdown aHow;
+
     if (how == PJ_SD_RECEIVE)
-	aHow = RSocket::EStopInput;
+        aHow = RSocket::EStopInput;
     else if (how == PJ_SHUT_WR)
-	aHow = RSocket::EStopOutput;
+        aHow = RSocket::EStopOutput;
     else
-	aHow = RSocket::ENormal;
+        aHow = RSocket::ENormal;
 
     TRequestStatus reqStatus;
 
-    rSock.Shutdown(aHow, reqStatus);
-    User::WaitForRequest(reqStatus);
+    rSock.Shutdown (aHow, reqStatus);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus == KErrNone) {
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
     } else {
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
     }
 }
 
 /*
  * Start listening to incoming connections.
  */
-PJ_DEF(pj_status_t) pj_sock_listen( pj_sock_t sock,
-				    int backlog)
+PJ_DEF (pj_status_t) pj_sock_listen (pj_sock_t sock,
+                                     int backlog)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(sock && backlog, PJ_EINVAL);
+    PJ_ASSERT_RETURN (sock && backlog, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*)sock;
+    CPjSocket *pjSock = (CPjSocket*) sock;
     RSocket &rSock = pjSock->Socket();
 
-    TInt rc = rSock.Listen((TUint)backlog);
+    TInt rc = rSock.Listen ( (TUint) backlog);
 
     if (rc == KErrNone) {
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
     } else {
-	return PJ_RETURN_OS_ERROR(rc);
+        return PJ_RETURN_OS_ERROR (rc);
     }
 }
 
 /*
  * Accept incoming connections
  */
-PJ_DEF(pj_status_t) pj_sock_accept( pj_sock_t serverfd,
-				    pj_sock_t *newsock,
-				    pj_sockaddr_t *addr,
-				    int *addrlen)
+PJ_DEF (pj_status_t) pj_sock_accept (pj_sock_t serverfd,
+                                     pj_sock_t *newsock,
+                                     pj_sockaddr_t *addr,
+                                     int *addrlen)
 {
     PJ_CHECK_STACK();
 
-    PJ_ASSERT_RETURN(serverfd && newsock, PJ_EINVAL);
+    PJ_ASSERT_RETURN (serverfd && newsock, PJ_EINVAL);
 
-    CPjSocket *pjSock = (CPjSocket*)serverfd;
+    CPjSocket *pjSock = (CPjSocket*) serverfd;
     RSocket &rSock = pjSock->Socket();
 
     // Create a 'blank' socket
     RSocket newSock;
-    newSock.Open(PjSymbianOS::Instance()->SocketServ());
+    newSock.Open (PjSymbianOS::Instance()->SocketServ());
 
     // Call Accept()
     TRequestStatus reqStatus;
 
-    rSock.Accept(newSock, reqStatus);
-    User::WaitForRequest(reqStatus);
+    rSock.Accept (newSock, reqStatus);
+    User::WaitForRequest (reqStatus);
 
     if (reqStatus != KErrNone) {
-	return PJ_RETURN_OS_ERROR(reqStatus.Int());
+        return PJ_RETURN_OS_ERROR (reqStatus.Int());
     }
 
     // Create PJ socket
-    CPjSocket *newPjSock = new CPjSocket(pjSock->GetAf(), pjSock->GetSockType(),
-					 newSock);
-    newPjSock->SetConnected(true);
+    CPjSocket *newPjSock = new CPjSocket (pjSock->GetAf(), pjSock->GetSockType(),
+                                          newSock);
+    newPjSock->SetConnected (true);
 
     *newsock = (pj_sock_t) newPjSock;
 
     if (addr && addrlen) {
-	return pj_sock_getpeername(*newsock, addr, addrlen);
+        return pj_sock_getpeername (*newsock, addr, addrlen);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp
index da388d0bc4f674681204100400f3b52a8de18817..acafd88b50b2b3d803a024bef4c3ec83792a0b88 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/ssl_sock_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: ssl_sock_symbian.cpp 2998 2009-11-09 08:51:34Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -43,235 +43,240 @@
 
 #define THIS_FILE "ssl_sock_symbian.cpp"
 
-typedef void (*CPjSSLSocket_cb)(int err, void *key);
+typedef void (*CPjSSLSocket_cb) (int err, void *key);
 
 class CPjSSLSocketReader : public CActive
 {
-public:
-    static CPjSSLSocketReader *NewL(CSecureSocket &sock) 
-    {
-	CPjSSLSocketReader *self = new (ELeave) 
-				   CPjSSLSocketReader(sock);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-    }
+    public:
+        static CPjSSLSocketReader *NewL (CSecureSocket &sock) {
+            CPjSSLSocketReader *self = new (ELeave)
+            CPjSSLSocketReader (sock);
+            CleanupStack::PushL (self);
+            self->ConstructL();
+            CleanupStack::Pop (self);
+            return self;
+        }
 
-    ~CPjSSLSocketReader() {
-	Cancel();
-    }
+        ~CPjSSLSocketReader() {
+            Cancel();
+        }
 
-    /* Asynchronous read from the socket. */
-    int Read(CPjSSLSocket_cb cb, void *key, TPtr8 &data, TUint flags)
-    {
-	PJ_ASSERT_RETURN(!IsActive(), PJ_EBUSY);
-	
-	cb_ = cb;
-	key_ = key;
-	sock_.RecvOneOrMore(data, iStatus, len_received_);
-	SetActive();
-	
-	return PJ_EPENDING;
-    }
+        /* Asynchronous read from the socket. */
+        int Read (CPjSSLSocket_cb cb, void *key, TPtr8 &data, TUint flags) {
+            PJ_ASSERT_RETURN (!IsActive(), PJ_EBUSY);
 
-private:
-    CSecureSocket  	&sock_;
-    CPjSSLSocket_cb	 cb_;
-    void		*key_;
-    TSockXfrLength  	 len_received_; /* not really useful? */
+            cb_ = cb;
+            key_ = key;
+            sock_.RecvOneOrMore (data, iStatus, len_received_);
+            SetActive();
 
-    void DoCancel() {
-	sock_.CancelAll();
-    }
-    
-    void RunL() {
-	(*cb_)(iStatus.Int(), key_);
-    }
+            return PJ_EPENDING;
+        }
 
-    CPjSSLSocketReader(CSecureSocket &sock) : 
-	CActive(0), sock_(sock), cb_(NULL), key_(NULL) 
-    {}
-    
-    void ConstructL() {
-	CActiveScheduler::Add(this);
-    }
+    private:
+        CSecureSocket  	&sock_;
+        CPjSSLSocket_cb	 cb_;
+        void		*key_;
+        TSockXfrLength  	 len_received_; /* not really useful? */
+
+        void DoCancel() {
+            sock_.CancelAll();
+        }
+
+        void RunL() {
+            (*cb_) (iStatus.Int(), key_);
+        }
+
+        CPjSSLSocketReader (CSecureSocket &sock) :
+                CActive (0), sock_ (sock), cb_ (NULL), key_ (NULL) {}
+
+        void ConstructL() {
+            CActiveScheduler::Add (this);
+        }
 };
 
 class CPjSSLSocket : public CActive
 {
-public:
-    enum ssl_state {
-	SSL_STATE_NULL,
-	SSL_STATE_CONNECTING,
-	SSL_STATE_HANDSHAKING,
-	SSL_STATE_ESTABLISHED
-    };
-    
-    static CPjSSLSocket *NewL(const TDesC8 &ssl_proto,
-			      pj_qos_type qos_type,
-			      const pj_qos_params &qos_params) 
-    {
-	CPjSSLSocket *self = new (ELeave) CPjSSLSocket(qos_type, qos_params);
-	CleanupStack::PushL(self);
-	self->ConstructL(ssl_proto);
-	CleanupStack::Pop(self);
-	return self;
-    }
+    public:
+        enum ssl_state {
+            SSL_STATE_NULL,
+            SSL_STATE_CONNECTING,
+            SSL_STATE_HANDSHAKING,
+            SSL_STATE_ESTABLISHED
+        };
+
+        static CPjSSLSocket *NewL (const TDesC8 &ssl_proto,
+                                   pj_qos_type qos_type,
+                                   const pj_qos_params &qos_params) {
+            CPjSSLSocket *self = new (ELeave) CPjSSLSocket (qos_type, qos_params);
+            CleanupStack::PushL (self);
+            self->ConstructL (ssl_proto);
+            CleanupStack::Pop (self);
+            return self;
+        }
 
-    ~CPjSSLSocket() {
-	Cancel();
-	CleanupSubObjects();
-    }
+        ~CPjSSLSocket() {
+            Cancel();
+            CleanupSubObjects();
+        }
 
-    int Connect(CPjSSLSocket_cb cb, void *key, const TInetAddr &local_addr, 
-		const TInetAddr &rem_addr, 
-		const TDesC8 &servername = TPtrC8(NULL,0));
-    int Send(CPjSSLSocket_cb cb, void *key, const TDesC8 &aDesc, TUint flags);
-    int SendSync(const TDesC8 &aDesc, TUint flags);
-
-    CPjSSLSocketReader* GetReader();
-    enum ssl_state GetState() const { return state_; }
-    const TInetAddr* GetLocalAddr() const { return &local_addr_; }
-    int GetCipher(TDes8 &cipher) const {
-	if (securesock_)
-	    return securesock_->CurrentCipherSuite(cipher);
-	return KErrNotFound;
-    }
+        int Connect (CPjSSLSocket_cb cb, void *key, const TInetAddr &local_addr,
+                     const TInetAddr &rem_addr,
+                     const TDesC8 &servername = TPtrC8 (NULL,0));
+        int Send (CPjSSLSocket_cb cb, void *key, const TDesC8 &aDesc, TUint flags);
+        int SendSync (const TDesC8 &aDesc, TUint flags);
 
-private:
-    enum ssl_state	 state_;
-    pj_sock_t	    	 sock_;
-    CSecureSocket  	*securesock_;
-    bool	    	 is_connected_;
-    
-    pj_qos_type 	 qos_type_;
-    pj_qos_params 	 qos_params_;
-    			      
-    CPjSSLSocketReader  *reader_;
-    TBuf<32> 	    	 ssl_proto_;
-    TInetAddr       	 rem_addr_;
-    TPtrC8		 servername_;
-    TInetAddr       	 local_addr_;
-    TSockXfrLength 	 sent_len_;
-
-    CPjSSLSocket_cb 	 cb_;
-    void 	   	*key_;
-    
-    void DoCancel();
-    void RunL();
-
-    CPjSSLSocket(pj_qos_type qos_type, const pj_qos_params &qos_params) :
-	CActive(0), state_(SSL_STATE_NULL), sock_(PJ_INVALID_SOCKET), 
-	securesock_(NULL), is_connected_(false),
-	qos_type_(qos_type), qos_params_(qos_params),
-	reader_(NULL), 	cb_(NULL), key_(NULL)
-    {}
-    
-    void ConstructL(const TDesC8 &ssl_proto) {
-	ssl_proto_.Copy(ssl_proto);
-	CActiveScheduler::Add(this);
-    }
+        CPjSSLSocketReader* GetReader();
+        enum ssl_state GetState() const {
+            return state_;
+        }
+        const TInetAddr* GetLocalAddr() const {
+            return &local_addr_;
+        }
+        int GetCipher (TDes8 &cipher) const {
+            if (securesock_)
+                return securesock_->CurrentCipherSuite (cipher);
 
-    void CleanupSubObjects() {
-	delete reader_;
-	reader_ = NULL;
-	if (securesock_) {
-	    securesock_->Close();
-	    delete securesock_;
-	    securesock_ = NULL;
-	}
-	if (sock_ != PJ_INVALID_SOCKET) {
-	    pj_sock_close(sock_);
-	    sock_ = PJ_INVALID_SOCKET;
-	}	    
-    }
+            return KErrNotFound;
+        }
+
+    private:
+        enum ssl_state	 state_;
+        pj_sock_t	    	 sock_;
+        CSecureSocket  	*securesock_;
+        bool	    	 is_connected_;
+
+        pj_qos_type 	 qos_type_;
+        pj_qos_params 	 qos_params_;
+
+        CPjSSLSocketReader  *reader_;
+        TBuf<32> 	    	 ssl_proto_;
+        TInetAddr       	 rem_addr_;
+        TPtrC8		 servername_;
+        TInetAddr       	 local_addr_;
+        TSockXfrLength 	 sent_len_;
+
+        CPjSSLSocket_cb 	 cb_;
+        void 	   	*key_;
+
+        void DoCancel();
+        void RunL();
+
+        CPjSSLSocket (pj_qos_type qos_type, const pj_qos_params &qos_params) :
+                CActive (0), state_ (SSL_STATE_NULL), sock_ (PJ_INVALID_SOCKET),
+                securesock_ (NULL), is_connected_ (false),
+                qos_type_ (qos_type), qos_params_ (qos_params),
+                reader_ (NULL), 	cb_ (NULL), key_ (NULL) {}
+
+        void ConstructL (const TDesC8 &ssl_proto) {
+            ssl_proto_.Copy (ssl_proto);
+            CActiveScheduler::Add (this);
+        }
+
+        void CleanupSubObjects() {
+            delete reader_;
+            reader_ = NULL;
+
+            if (securesock_) {
+                securesock_->Close();
+                delete securesock_;
+                securesock_ = NULL;
+            }
+
+            if (sock_ != PJ_INVALID_SOCKET) {
+                pj_sock_close (sock_);
+                sock_ = PJ_INVALID_SOCKET;
+            }
+        }
 };
 
-int CPjSSLSocket::Connect(CPjSSLSocket_cb cb, void *key, 
-			  const TInetAddr &local_addr, 
-			  const TInetAddr &rem_addr,
-			  const TDesC8 &servername)
+int CPjSSLSocket::Connect (CPjSSLSocket_cb cb, void *key,
+                           const TInetAddr &local_addr,
+                           const TInetAddr &rem_addr,
+                           const TDesC8 &servername)
 {
     pj_status_t status;
-    
-    PJ_ASSERT_RETURN(state_ == SSL_STATE_NULL, PJ_EINVALIDOP);
-    
-    status = pj_sock_socket(rem_addr.Family(), pj_SOCK_STREAM(), 0, &sock_);
+
+    PJ_ASSERT_RETURN (state_ == SSL_STATE_NULL, PJ_EINVALIDOP);
+
+    status = pj_sock_socket (rem_addr.Family(), pj_SOCK_STREAM(), 0, &sock_);
+
     if (status != PJ_SUCCESS)
-	return status;
+        return status;
 
     // Apply QoS
-    status = pj_sock_apply_qos2(sock_, qos_type_, &qos_params_, 
-    				2,  THIS_FILE, NULL);
-    
-    RSocket &rSock = ((CPjSocket*)sock_)->Socket();
+    status = pj_sock_apply_qos2 (sock_, qos_type_, &qos_params_,
+                                 2,  THIS_FILE, NULL);
+
+    RSocket &rSock = ( (CPjSocket*) sock_)->Socket();
 
     local_addr_ = local_addr;
-    
+
     if (!local_addr_.IsUnspecified()) {
-	TInt err = rSock.Bind(local_addr_);
-	if (err != KErrNone)
-	    return PJ_RETURN_OS_ERROR(err);
+        TInt err = rSock.Bind (local_addr_);
+
+        if (err != KErrNone)
+            return PJ_RETURN_OS_ERROR (err);
     }
-    
+
     cb_ = cb;
     key_ = key;
     rem_addr_ = rem_addr;
-    servername_.Set(servername);
+    servername_.Set (servername);
     state_ = SSL_STATE_CONNECTING;
 
-    rSock.Connect(rem_addr_, iStatus);
+    rSock.Connect (rem_addr_, iStatus);
     SetActive();
-    
-    rSock.LocalName(local_addr_);
+
+    rSock.LocalName (local_addr_);
 
     return PJ_EPENDING;
 }
 
-int CPjSSLSocket::Send(CPjSSLSocket_cb cb, void *key, const TDesC8 &aDesc, 
-		       TUint flags)
+int CPjSSLSocket::Send (CPjSSLSocket_cb cb, void *key, const TDesC8 &aDesc,
+                        TUint flags)
 {
-    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG (flags);
+
+    PJ_ASSERT_RETURN (state_ == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
 
-    PJ_ASSERT_RETURN(state_ == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
-    
     if (IsActive())
-	return PJ_EBUSY;
-    
+        return PJ_EBUSY;
+
     cb_ = cb;
     key_ = key;
-    
-    securesock_->Send(aDesc, iStatus, sent_len_);
+
+    securesock_->Send (aDesc, iStatus, sent_len_);
     SetActive();
-    
+
     return PJ_EPENDING;
 }
 
-int CPjSSLSocket::SendSync(const TDesC8 &aDesc, TUint flags)
+int CPjSSLSocket::SendSync (const TDesC8 &aDesc, TUint flags)
 {
-    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG (flags);
+
+    PJ_ASSERT_RETURN (state_ == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
 
-    PJ_ASSERT_RETURN(state_ == SSL_STATE_ESTABLISHED, PJ_EINVALIDOP);
-    
     TRequestStatus reqStatus;
-    securesock_->Send(aDesc, reqStatus, sent_len_);
-    User::WaitForRequest(reqStatus);
-    
-    return PJ_RETURN_OS_ERROR(reqStatus.Int());
+    securesock_->Send (aDesc, reqStatus, sent_len_);
+    User::WaitForRequest (reqStatus);
+
+    return PJ_RETURN_OS_ERROR (reqStatus.Int());
 }
 
 CPjSSLSocketReader* CPjSSLSocket::GetReader()
 {
-    PJ_ASSERT_RETURN(state_ == SSL_STATE_ESTABLISHED, NULL);
-    
+    PJ_ASSERT_RETURN (state_ == SSL_STATE_ESTABLISHED, NULL);
+
     if (reader_)
-	return reader_;
-    
-    TRAPD(err,	reader_ = CPjSSLSocketReader::NewL(*securesock_));
+        return reader_;
+
+    TRAPD (err,	reader_ = CPjSSLSocketReader::NewL (*securesock_));
+
     if (err != KErrNone)
-	return NULL;
-    
+        return NULL;
+
     return reader_;
 }
 
@@ -279,109 +284,124 @@ void CPjSSLSocket::DoCancel()
 {
     /* Operation to be cancelled depends on current state */
     switch (state_) {
-    case SSL_STATE_CONNECTING:
-	{
-	    RSocket &rSock = ((CPjSocket*)sock_)->Socket();
-	    rSock.CancelConnect();
-	    
-	    CleanupSubObjects();
-
-	    state_ = SSL_STATE_NULL;
-	}
-	break;
-    case SSL_STATE_HANDSHAKING:
-	{
-	    securesock_->CancelHandshake();
-	    securesock_->Close();
-	    
-	    CleanupSubObjects();
-	    
-	    state_ = SSL_STATE_NULL;
-	}
-	break;
-    case SSL_STATE_ESTABLISHED:
-	securesock_->CancelSend();
-	break;
-    default:
-	break;
+        case SSL_STATE_CONNECTING: {
+            RSocket &rSock = ( (CPjSocket*) sock_)->Socket();
+            rSock.CancelConnect();
+
+            CleanupSubObjects();
+
+            state_ = SSL_STATE_NULL;
+        }
+        break;
+        case SSL_STATE_HANDSHAKING: {
+            securesock_->CancelHandshake();
+            securesock_->Close();
+
+            CleanupSubObjects();
+
+            state_ = SSL_STATE_NULL;
+        }
+        break;
+        case SSL_STATE_ESTABLISHED:
+            securesock_->CancelSend();
+            break;
+        default:
+            break;
     }
 }
 
 void CPjSSLSocket::RunL()
 {
     switch (state_) {
-    case SSL_STATE_CONNECTING:
-	if (iStatus != KErrNone) {
-	    CleanupSubObjects();
-	    state_ = SSL_STATE_NULL;
-	    /* Dispatch connect failure notification */
-	    if (cb_) (*cb_)(iStatus.Int(), key_);
-	} else {
-	    RSocket &rSock = ((CPjSocket*)sock_)->Socket();
-
-	    /* Get local addr */
-	    rSock.LocalName(local_addr_);
-	    
-	    /* Prepare and start handshake */
-	    securesock_ = CSecureSocket::NewL(rSock, ssl_proto_);
-	    securesock_->SetDialogMode(EDialogModeAttended);
-	    if (servername_.Length() > 0)
-		securesock_->SetOpt(KSoSSLDomainName, KSolInetSSL,
-				    servername_);
-	    securesock_->FlushSessionCache();
-	    securesock_->StartClientHandshake(iStatus);
-	    SetActive();
-	    state_ = SSL_STATE_HANDSHAKING;
-	}
-	break;
-    case SSL_STATE_HANDSHAKING:
-	if (iStatus == KErrNone) {
-	    state_ = SSL_STATE_ESTABLISHED;
-	} else {
-	    state_ = SSL_STATE_NULL;
-	    CleanupSubObjects();
-	}
-	/* Dispatch connect status notification */
-	if (cb_) (*cb_)(iStatus.Int(), key_);
-	break;
-    case SSL_STATE_ESTABLISHED:
-	/* Dispatch data sent notification */
-	if (cb_) (*cb_)(iStatus.Int(), key_);
-	break;
-    default:
-	pj_assert(0);
-	break;
+        case SSL_STATE_CONNECTING:
+
+            if (iStatus != KErrNone) {
+                CleanupSubObjects();
+                state_ = SSL_STATE_NULL;
+
+                /* Dispatch connect failure notification */
+                if (cb_) (*cb_) (iStatus.Int(), key_);
+            } else {
+                RSocket &rSock = ( (CPjSocket*) sock_)->Socket();
+
+                /* Get local addr */
+                rSock.LocalName (local_addr_);
+
+                /* Prepare and start handshake */
+                securesock_ = CSecureSocket::NewL (rSock, ssl_proto_);
+                securesock_->SetDialogMode (EDialogModeAttended);
+
+                if (servername_.Length() > 0)
+                    securesock_->SetOpt (KSoSSLDomainName, KSolInetSSL,
+                                         servername_);
+
+                securesock_->FlushSessionCache();
+                securesock_->StartClientHandshake (iStatus);
+                SetActive();
+                state_ = SSL_STATE_HANDSHAKING;
+            }
+
+            break;
+        case SSL_STATE_HANDSHAKING:
+
+            if (iStatus == KErrNone) {
+                state_ = SSL_STATE_ESTABLISHED;
+            } else {
+                state_ = SSL_STATE_NULL;
+                CleanupSubObjects();
+            }
+
+            /* Dispatch connect status notification */
+            if (cb_) (*cb_) (iStatus.Int(), key_);
+
+            break;
+        case SSL_STATE_ESTABLISHED:
+
+            /* Dispatch data sent notification */
+            if (cb_) (*cb_) (iStatus.Int(), key_);
+
+            break;
+        default:
+            pj_assert (0);
+            break;
     }
 }
 
-typedef void (*CPjTimer_cb)(void *user_data);
+typedef void (*CPjTimer_cb) (void *user_data);
 
-class CPjTimer : public CActive 
+class CPjTimer : public CActive
 {
-public:
-    CPjTimer(const pj_time_val *delay, CPjTimer_cb cb, void *user_data) : 
-	CActive(0), cb_(cb), user_data_(user_data)
-    {
-	CActiveScheduler::Add(this);
-
-	rtimer_.CreateLocal();
-	pj_int32_t interval = PJ_TIME_VAL_MSEC(*delay) * 1000;
-	if (interval < 0) {
-	    interval = 0;
-	}
-	rtimer_.After(iStatus, interval);
-	SetActive();
-    }
-    
-    ~CPjTimer() { Cancel(); }
-    
-private:	
-    RTimer		 rtimer_;
-    CPjTimer_cb		 cb_;
-    void		*user_data_;
-    
-    void RunL() { if (cb_) (*cb_)(user_data_); }
-    void DoCancel() { rtimer_.Cancel(); }
+    public:
+        CPjTimer (const pj_time_val *delay, CPjTimer_cb cb, void *user_data) :
+                CActive (0), cb_ (cb), user_data_ (user_data) {
+            CActiveScheduler::Add (this);
+
+            rtimer_.CreateLocal();
+            pj_int32_t interval = PJ_TIME_VAL_MSEC (*delay) * 1000;
+
+            if (interval < 0) {
+                interval = 0;
+            }
+
+            rtimer_.After (iStatus, interval);
+            SetActive();
+        }
+
+        ~CPjTimer() {
+            Cancel();
+        }
+
+    private:
+        RTimer		 rtimer_;
+        CPjTimer_cb		 cb_;
+        void		*user_data_;
+
+        void RunL() {
+            if (cb_) (*cb_) (user_data_);
+        }
+        void DoCancel() {
+            rtimer_.Cancel();
+        }
 };
 
 /*
@@ -390,7 +410,7 @@ private:
 typedef struct read_state_t {
     TPtr8		*read_buf;
     TPtr8		*orig_buf;
-    pj_uint32_t		 flags;    
+    pj_uint32_t		 flags;
 } read_state_t;
 
 /*
@@ -408,7 +428,7 @@ typedef struct write_data_t {
  */
 typedef struct write_state_t {
     char		*buf;
-    pj_size_t		 max_len;    
+    pj_size_t		 max_len;
     char		*start;
     pj_size_t		 len;
     write_data_t	*current_data;
@@ -418,11 +438,10 @@ typedef struct write_state_t {
 /*
  * Secure socket structure definition.
  */
-struct pj_ssl_sock_t
-{
+struct pj_ssl_sock_t {
     pj_ssl_sock_cb	 cb;
     void		*user_data;
-    
+
     pj_bool_t		 established;
     write_state_t	 write_state;
     read_state_t	 read_state;
@@ -451,89 +470,96 @@ struct pj_ssl_sock_t
 /*
  * Get cipher list supported by SSL/TLS backend.
  */
-PJ_DEF(pj_status_t) pj_ssl_cipher_get_availables (pj_ssl_cipher ciphers[],
-					          unsigned *cipher_num)
+PJ_DEF (pj_status_t) pj_ssl_cipher_get_availables (pj_ssl_cipher ciphers[],
+        unsigned *cipher_num)
 {
     /* Available ciphers */
     static pj_ssl_cipher ciphers_[64];
     static unsigned ciphers_num_ = 0;
     unsigned i;
 
-    PJ_ASSERT_RETURN(ciphers && cipher_num, PJ_EINVAL);
-    
+    PJ_ASSERT_RETURN (ciphers && cipher_num, PJ_EINVAL);
+
     if (ciphers_num_ == 0) {
         RSocket sock;
         CSecureSocket *secure_sock;
-        TPtrC16 proto(_L16("TLS1.0"));
+        TPtrC16 proto (_L16 ("TLS1.0"));
+
+        secure_sock = CSecureSocket::NewL (sock, proto);
 
-        secure_sock = CSecureSocket::NewL(sock, proto);
         if (secure_sock) {
-            TBuf8<128> ciphers_buf(0);
-            secure_sock->AvailableCipherSuites(ciphers_buf);
-            
+            TBuf8<128> ciphers_buf (0);
+            secure_sock->AvailableCipherSuites (ciphers_buf);
+
             ciphers_num_ = ciphers_buf.Length() / 2;
-            if (ciphers_num_ > PJ_ARRAY_SIZE(ciphers_))
-        	ciphers_num_ = PJ_ARRAY_SIZE(ciphers_);
+
+            if (ciphers_num_ > PJ_ARRAY_SIZE (ciphers_))
+                ciphers_num_ = PJ_ARRAY_SIZE (ciphers_);
+
             for (i = 0; i < ciphers_num_; ++i)
-                ciphers_[i] = (pj_ssl_cipher)(ciphers_buf[i*2]*10 + 
-					      ciphers_buf[i*2+1]);
+                ciphers_[i] = (pj_ssl_cipher) (ciphers_buf[i*2]*10 +
+                                               ciphers_buf[i*2+1]);
         }
-        
+
         delete secure_sock;
     }
-    
+
     if (ciphers_num_ == 0) {
-	return PJ_ENOTFOUND;
+        return PJ_ENOTFOUND;
     }
-    
-    *cipher_num = PJ_MIN(*cipher_num, ciphers_num_);
+
+    *cipher_num = PJ_MIN (*cipher_num, ciphers_num_);
+
     for (i = 0; i < *cipher_num; ++i)
         ciphers[i] = ciphers_[i];
-    
+
     return PJ_SUCCESS;
 }
 
 /*
- * Create SSL socket instance. 
+ * Create SSL socket instance.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_create (pj_pool_t *pool,
-					const pj_ssl_sock_param *param,
-					pj_ssl_sock_t **p_ssock)
+PJ_DEF (pj_status_t) pj_ssl_sock_create (pj_pool_t *pool,
+        const pj_ssl_sock_param *param,
+        pj_ssl_sock_t **p_ssock)
 {
     pj_ssl_sock_t *ssock;
 
-    PJ_ASSERT_RETURN(param->async_cnt == 1, PJ_EINVAL);
-    PJ_ASSERT_RETURN(pool && param && p_ssock, PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->async_cnt == 1, PJ_EINVAL);
+    PJ_ASSERT_RETURN (pool && param && p_ssock, PJ_EINVAL);
 
     /* Allocate secure socket */
-    ssock = PJ_POOL_ZALLOC_T(pool, pj_ssl_sock_t);
-    
+    ssock = PJ_POOL_ZALLOC_T (pool, pj_ssl_sock_t);
+
     /* Allocate write buffer */
-    ssock->write_state.buf = (char*)pj_pool_alloc(pool, 
-						  param->send_buffer_size);
+    ssock->write_state.buf = (char*) pj_pool_alloc (pool,
+                             param->send_buffer_size);
     ssock->write_state.max_len = param->send_buffer_size;
     ssock->write_state.start = ssock->write_state.buf;
-    
+
     /* Init secure socket */
     ssock->sock_af = param->sock_af;
     ssock->sock_type = param->sock_type;
     ssock->cb = param->cb;
     ssock->user_data = param->user_data;
     ssock->ciphers_num = param->ciphers_num;
+
     if (param->ciphers_num > 0) {
-	unsigned i;
-	ssock->ciphers = (pj_ssl_cipher*)
-			 pj_pool_calloc(pool, param->ciphers_num, 
-					sizeof(pj_ssl_cipher));
-	for (i = 0; i < param->ciphers_num; ++i)
-	    ssock->ciphers[i] = param->ciphers[i];
+        unsigned i;
+        ssock->ciphers = (pj_ssl_cipher*)
+                         pj_pool_calloc (pool, param->ciphers_num,
+                                         sizeof (pj_ssl_cipher));
+
+        for (i = 0; i < param->ciphers_num; ++i)
+            ssock->ciphers[i] = param->ciphers[i];
     }
-    pj_strdup_with_null(pool, &ssock->servername, &param->server_name);
+
+    pj_strdup_with_null (pool, &ssock->servername, &param->server_name);
 
     ssock->qos_type = param->qos_type;
     ssock->qos_ignore_error = param->qos_ignore_error;
-    pj_memcpy(&ssock->qos_params, &param->qos_params,
-	      sizeof(param->qos_params));
+    pj_memcpy (&ssock->qos_params, &param->qos_params,
+               sizeof (param->qos_params));
 
     /* Finally */
     *p_ssock = ssock;
@@ -542,46 +568,46 @@ PJ_DEF(pj_status_t) pj_ssl_sock_create (pj_pool_t *pool,
 }
 
 
-PJ_DEF(pj_status_t) pj_ssl_cert_load_from_files(pj_pool_t *pool,
-                                        	const pj_str_t *CA_file,
-                                        	const pj_str_t *cert_file,
-                                        	const pj_str_t *privkey_file,
-                                        	const pj_str_t *privkey_pass,
-                                        	pj_ssl_cert_t **p_cert)
+PJ_DEF (pj_status_t) pj_ssl_cert_load_from_files (pj_pool_t *pool,
+        const pj_str_t *CA_file,
+        const pj_str_t *cert_file,
+        const pj_str_t *privkey_file,
+        const pj_str_t *privkey_pass,
+        pj_ssl_cert_t **p_cert)
 {
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(CA_file);
-    PJ_UNUSED_ARG(cert_file);
-    PJ_UNUSED_ARG(privkey_file);
-    PJ_UNUSED_ARG(privkey_pass);
-    PJ_UNUSED_ARG(p_cert);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (CA_file);
+    PJ_UNUSED_ARG (cert_file);
+    PJ_UNUSED_ARG (privkey_file);
+    PJ_UNUSED_ARG (privkey_pass);
+    PJ_UNUSED_ARG (p_cert);
     return PJ_ENOTSUP;
 }
 
 /*
  * Set SSL socket credential.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_set_certificate(
-					    pj_ssl_sock_t *ssock,
-					    pj_pool_t *pool,
-					    const pj_ssl_cert_t *cert)
+PJ_DEF (pj_status_t) pj_ssl_sock_set_certificate (
+    pj_ssl_sock_t *ssock,
+    pj_pool_t *pool,
+    const pj_ssl_cert_t *cert)
 {
-    PJ_UNUSED_ARG(ssock);
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(cert);
+    PJ_UNUSED_ARG (ssock);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (cert);
     return PJ_ENOTSUP;
 }
 
 /*
  * Close the SSL socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_close(pj_ssl_sock_t *ssock)
+PJ_DEF (pj_status_t) pj_ssl_sock_close (pj_ssl_sock_t *ssock)
 {
-    PJ_ASSERT_RETURN(ssock, PJ_EINVAL);
-    
+    PJ_ASSERT_RETURN (ssock, PJ_EINVAL);
+
     delete ssock->connect_timer;
     ssock->connect_timer = NULL;
-    
+
     delete ssock->sock;
     ssock->sock = NULL;
 
@@ -589,7 +615,7 @@ PJ_DEF(pj_status_t) pj_ssl_sock_close(pj_ssl_sock_t *ssock)
     delete ssock->read_state.orig_buf;
     ssock->read_state.read_buf = NULL;
     ssock->read_state.orig_buf = NULL;
-    
+
     return PJ_SUCCESS;
 }
 
@@ -597,25 +623,25 @@ PJ_DEF(pj_status_t) pj_ssl_sock_close(pj_ssl_sock_t *ssock)
 /*
  * Associate arbitrary data with the SSL socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_set_user_data (pj_ssl_sock_t *ssock,
-					       void *user_data)
+PJ_DEF (pj_status_t) pj_ssl_sock_set_user_data (pj_ssl_sock_t *ssock,
+        void *user_data)
 {
-    PJ_ASSERT_RETURN(ssock, PJ_EINVAL);
-    
+    PJ_ASSERT_RETURN (ssock, PJ_EINVAL);
+
     ssock->user_data = user_data;
-    
+
     return PJ_SUCCESS;
 }
-					       
+
 
 /*
  * Retrieve the user data previously associated with this SSL
  * socket.
  */
-PJ_DEF(void*) pj_ssl_sock_get_user_data(pj_ssl_sock_t *ssock)
+PJ_DEF (void*) pj_ssl_sock_get_user_data (pj_ssl_sock_t *ssock)
 {
-    PJ_ASSERT_RETURN(ssock, NULL);
-    
+    PJ_ASSERT_RETURN (ssock, NULL);
+
     return ssock->user_data;
 }
 
@@ -623,43 +649,45 @@ PJ_DEF(void*) pj_ssl_sock_get_user_data(pj_ssl_sock_t *ssock)
 /*
  * Retrieve the local address and port used by specified SSL socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_get_info (pj_ssl_sock_t *ssock,
-					  pj_ssl_sock_info *info)
+PJ_DEF (pj_status_t) pj_ssl_sock_get_info (pj_ssl_sock_t *ssock,
+        pj_ssl_sock_info *info)
 {
-    PJ_ASSERT_RETURN(ssock && info, PJ_EINVAL);
-    
-    pj_bzero(info, sizeof(*info));
-    
+    PJ_ASSERT_RETURN (ssock && info, PJ_EINVAL);
+
+    pj_bzero (info, sizeof (*info));
+
     info->established = ssock->established;
-    
+
     /* Local address */
     if (ssock->sock) {
-	const TInetAddr* local_addr_ = ssock->sock->GetLocalAddr();
-	int addrlen = sizeof(pj_sockaddr);
-	pj_status_t status;
-	
-	status = PjSymbianOS::Addr2pj(*local_addr_, info->local_addr, &addrlen);
-	if (status != PJ_SUCCESS)
-	    return status;
+        const TInetAddr* local_addr_ = ssock->sock->GetLocalAddr();
+        int addrlen = sizeof (pj_sockaddr);
+        pj_status_t status;
+
+        status = PjSymbianOS::Addr2pj (*local_addr_, info->local_addr, &addrlen);
+
+        if (status != PJ_SUCCESS)
+            return status;
     } else {
-	pj_sockaddr_cp(&info->local_addr, &ssock->local_addr);
+        pj_sockaddr_cp (&info->local_addr, &ssock->local_addr);
     }
 
     if (info->established) {
-	/* Cipher suite */
-	TBuf8<4> cipher;
-	if (ssock->sock->GetCipher(cipher) == KErrNone) {
-	    info->cipher = (pj_ssl_cipher)cipher[1]; 
-	}
-
-	/* Remote address */
-        pj_sockaddr_cp((pj_sockaddr_t*)&info->remote_addr, 
-    		   (pj_sockaddr_t*)&ssock->rem_addr);
+        /* Cipher suite */
+        TBuf8<4> cipher;
+
+        if (ssock->sock->GetCipher (cipher) == KErrNone) {
+            info->cipher = (pj_ssl_cipher) cipher[1];
+        }
+
+        /* Remote address */
+        pj_sockaddr_cp ( (pj_sockaddr_t*) &info->remote_addr,
+                         (pj_sockaddr_t*) &ssock->rem_addr);
     }
 
     /* Protocol */
     info->proto = ssock->proto;
-    
+
     return PJ_SUCCESS;
 }
 
@@ -667,91 +695,92 @@ PJ_DEF(pj_status_t) pj_ssl_sock_get_info (pj_ssl_sock_t *ssock,
 /*
  * Starts read operation on this SSL socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_start_read (pj_ssl_sock_t *ssock,
-					    pj_pool_t *pool,
-					    unsigned buff_size,
-					    pj_uint32_t flags)
+PJ_DEF (pj_status_t) pj_ssl_sock_start_read (pj_ssl_sock_t *ssock,
+        pj_pool_t *pool,
+        unsigned buff_size,
+        pj_uint32_t flags)
 {
-    PJ_ASSERT_RETURN(ssock && pool && buff_size, PJ_EINVAL);
-    PJ_ASSERT_RETURN(ssock->established, PJ_EINVALIDOP);
+    PJ_ASSERT_RETURN (ssock && pool && buff_size, PJ_EINVAL);
+    PJ_ASSERT_RETURN (ssock->established, PJ_EINVALIDOP);
 
     /* Reading is already started */
     if (ssock->read_state.orig_buf) {
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
     }
 
     void *readbuf[1];
-    readbuf[0] = pj_pool_alloc(pool, buff_size);
-    return pj_ssl_sock_start_read2(ssock, pool, buff_size, readbuf, flags);
+    readbuf[0] = pj_pool_alloc (pool, buff_size);
+    return pj_ssl_sock_start_read2 (ssock, pool, buff_size, readbuf, flags);
 }
 
-static void read_cb(int err, void *key)
+static void read_cb (int err, void *key)
 {
-    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)key;
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*) key;
     pj_status_t status;
 
-    status = (err == KErrNone)? PJ_SUCCESS : PJ_RETURN_OS_ERROR(err);
+    status = (err == KErrNone) ? PJ_SUCCESS : PJ_RETURN_OS_ERROR (err);
 
     /* Check connection status */
     if (err == KErrEof || !PjSymbianOS::Instance()->IsConnectionUp() ||
-	!ssock->established) 
-    {
-	status = PJ_EEOF;
+            !ssock->established) {
+        status = PJ_EEOF;
     }
-    
+
     /* Notify data arrival */
     if (ssock->cb.on_data_read) {
-	pj_size_t remainder = 0;
-	char *data = (char*)ssock->read_state.orig_buf->Ptr();
-	pj_size_t data_len = ssock->read_state.read_buf->Length() + 
-			     ssock->read_state.read_buf->Ptr() -
-			     ssock->read_state.orig_buf->Ptr();
-	
-	if (data_len > 0) {
-	    /* Notify received data */
-	    pj_bool_t ret = (*ssock->cb.on_data_read)(ssock, data, data_len, 
-						      status, &remainder);
-	    if (!ret) {
-		/* We've been destroyed */
-		return;
-	    }
-	    
-	    /* Calculate available data for next READ operation */
-	    if (remainder > 0) {
-		pj_size_t data_maxlen = ssock->read_state.orig_buf->MaxLength();
-		
-		/* There is some data left unconsumed by application, we give
-		 * smaller buffer for next READ operation.
-		 */
-		ssock->read_state.read_buf->Set((TUint8*)data+remainder, 0, 
-					        data_maxlen - remainder);
-	    } else {
-		/* Give all buffer for next READ operation. 
-		 */
-		ssock->read_state.read_buf->Set(*ssock->read_state.orig_buf);
-	    }
-	}
+        pj_size_t remainder = 0;
+        char *data = (char*) ssock->read_state.orig_buf->Ptr();
+        pj_size_t data_len = ssock->read_state.read_buf->Length() +
+                             ssock->read_state.read_buf->Ptr() -
+                             ssock->read_state.orig_buf->Ptr();
+
+        if (data_len > 0) {
+            /* Notify received data */
+            pj_bool_t ret = (*ssock->cb.on_data_read) (ssock, data, data_len,
+                            status, &remainder);
+
+            if (!ret) {
+                /* We've been destroyed */
+                return;
+            }
+
+            /* Calculate available data for next READ operation */
+            if (remainder > 0) {
+                pj_size_t data_maxlen = ssock->read_state.orig_buf->MaxLength();
+
+                /* There is some data left unconsumed by application, we give
+                 * smaller buffer for next READ operation.
+                 */
+                ssock->read_state.read_buf->Set ( (TUint8*) data+remainder, 0,
+                                                  data_maxlen - remainder);
+            } else {
+                /* Give all buffer for next READ operation.
+                 */
+                ssock->read_state.read_buf->Set (*ssock->read_state.orig_buf);
+            }
+        }
     }
 
     if (status == PJ_SUCCESS) {
-	/* Perform the "next" READ operation */
-	CPjSSLSocketReader *reader = ssock->sock->GetReader(); 
-	ssock->read_state.read_buf->SetLength(0);
-	status = reader->Read(&read_cb, ssock, *ssock->read_state.read_buf, 
-			      ssock->read_state.flags);
-	if (status != PJ_EPENDING) {
-	    /* Notify error */
-	    (*ssock->cb.on_data_read)(ssock, NULL, 0, status, NULL);
-	}
+        /* Perform the "next" READ operation */
+        CPjSSLSocketReader *reader = ssock->sock->GetReader();
+        ssock->read_state.read_buf->SetLength (0);
+        status = reader->Read (&read_cb, ssock, *ssock->read_state.read_buf,
+                               ssock->read_state.flags);
+
+        if (status != PJ_EPENDING) {
+            /* Notify error */
+            (*ssock->cb.on_data_read) (ssock, NULL, 0, status, NULL);
+        }
     }
-    
+
     if (status != PJ_SUCCESS && status != PJ_EPENDING) {
-	/* Connection closed or something goes wrong */
-	delete ssock->read_state.read_buf;
-	delete ssock->read_state.orig_buf;
-	ssock->read_state.read_buf = NULL;
-	ssock->read_state.orig_buf = NULL;
-	ssock->established = PJ_FALSE;
+        /* Connection closed or something goes wrong */
+        delete ssock->read_state.read_buf;
+        delete ssock->read_state.orig_buf;
+        ssock->read_state.read_buf = NULL;
+        ssock->read_state.orig_buf = NULL;
+        ssock->established = PJ_FALSE;
     }
 }
 
@@ -760,52 +789,53 @@ static void read_cb(int err, void *key)
  * supplies the buffers for the read operation so that the acive socket
  * does not have to allocate the buffers.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_start_read2 (pj_ssl_sock_t *ssock,
-					     pj_pool_t *pool,
-					     unsigned buff_size,
-					     void *readbuf[],
-					     pj_uint32_t flags)
+PJ_DEF (pj_status_t) pj_ssl_sock_start_read2 (pj_ssl_sock_t *ssock,
+        pj_pool_t *pool,
+        unsigned buff_size,
+        void *readbuf[],
+        pj_uint32_t flags)
 {
-    PJ_ASSERT_RETURN(ssock && buff_size && readbuf, PJ_EINVAL);
-    PJ_ASSERT_RETURN(ssock->established, PJ_EINVALIDOP);
-    
+    PJ_ASSERT_RETURN (ssock && buff_size && readbuf, PJ_EINVAL);
+    PJ_ASSERT_RETURN (ssock->established, PJ_EINVALIDOP);
+
     /* Return failure if access point is marked as down by app. */
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
+
     /* Reading is already started */
     if (ssock->read_state.orig_buf) {
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
     }
-    
-    PJ_UNUSED_ARG(pool);
+
+    PJ_UNUSED_ARG (pool);
 
     /* Get reader instance */
     CPjSSLSocketReader *reader = ssock->sock->GetReader();
+
     if (!reader)
-	return PJ_ENOMEM;
-    
+        return PJ_ENOMEM;
+
     /* We manage two buffer pointers here:
      * 1. orig_buf keeps the orginal buffer address (and its max length).
      * 2. read_buf provides buffer for READ operation, mind that there may be
      *    some remainder data left by application.
      */
-    ssock->read_state.read_buf = new TPtr8((TUint8*)readbuf[0], 0, buff_size);
-    ssock->read_state.orig_buf = new TPtr8((TUint8*)readbuf[0], 0, buff_size);
+    ssock->read_state.read_buf = new TPtr8 ( (TUint8*) readbuf[0], 0, buff_size);
+    ssock->read_state.orig_buf = new TPtr8 ( (TUint8*) readbuf[0], 0, buff_size);
     ssock->read_state.flags = flags;
-    
+
     pj_status_t status;
-    status = reader->Read(&read_cb, ssock, *ssock->read_state.read_buf, 
-			  ssock->read_state.flags);
-    
+    status = reader->Read (&read_cb, ssock, *ssock->read_state.read_buf,
+                           ssock->read_state.flags);
+
     if (status != PJ_SUCCESS && status != PJ_EPENDING) {
-	delete ssock->read_state.read_buf;
-	delete ssock->read_state.orig_buf;
-	ssock->read_state.read_buf = NULL;
-	ssock->read_state.orig_buf = NULL;
-	
-	return status;
+        delete ssock->read_state.read_buf;
+        delete ssock->read_state.orig_buf;
+        ssock->read_state.read_buf = NULL;
+        ssock->read_state.orig_buf = NULL;
+
+        return status;
     }
-    
+
     return PJ_SUCCESS;
 }
 
@@ -814,48 +844,47 @@ PJ_DEF(pj_status_t) pj_ssl_sock_start_read2 (pj_ssl_sock_t *ssock,
  * only for datagram sockets, and it will trigger \a on_data_recvfrom()
  * callback instead.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_start_recvfrom (pj_ssl_sock_t *ssock,
-						pj_pool_t *pool,
-						unsigned buff_size,
-						pj_uint32_t flags)
+PJ_DEF (pj_status_t) pj_ssl_sock_start_recvfrom (pj_ssl_sock_t *ssock,
+        pj_pool_t *pool,
+        unsigned buff_size,
+        pj_uint32_t flags)
 {
-    PJ_UNUSED_ARG(ssock);
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(buff_size);
-    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG (ssock);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (buff_size);
+    PJ_UNUSED_ARG (flags);
     return PJ_ENOTSUP;
 }
 
 /*
- * Same as #pj_ssl_sock_start_recvfrom() except that the recvfrom() 
+ * Same as #pj_ssl_sock_start_recvfrom() except that the recvfrom()
  * operation takes the buffer from the argument rather than creating
  * new ones.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_start_recvfrom2 (pj_ssl_sock_t *ssock,
-						 pj_pool_t *pool,
-						 unsigned buff_size,
-						 void *readbuf[],
-						 pj_uint32_t flags)
+PJ_DEF (pj_status_t) pj_ssl_sock_start_recvfrom2 (pj_ssl_sock_t *ssock,
+        pj_pool_t *pool,
+        unsigned buff_size,
+        void *readbuf[],
+        pj_uint32_t flags)
 {
-    PJ_UNUSED_ARG(ssock);
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(buff_size);
-    PJ_UNUSED_ARG(readbuf);
-    PJ_UNUSED_ARG(flags);
+    PJ_UNUSED_ARG (ssock);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (buff_size);
+    PJ_UNUSED_ARG (readbuf);
+    PJ_UNUSED_ARG (flags);
     return PJ_ENOTSUP;
 }
 
-static void send_cb(int err, void *key)
+static void send_cb (int err, void *key)
 {
-    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)key;
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*) key;
     write_state_t *st = &ssock->write_state;
 
     /* Check connection status */
     if (err != KErrNone || !PjSymbianOS::Instance()->IsConnectionUp() ||
-	!ssock->established) 
-    {
-	ssock->established = PJ_FALSE;
-	return;
+            !ssock->established) {
+        ssock->established = PJ_FALSE;
+        return;
     }
 
     /* Remove sent data from buffer */
@@ -867,253 +896,260 @@ static void send_cb(int err, void *key)
 
     /* Let's check if there is pending data to send */
     if (st->len) {
-	write_data_t *wdata = (write_data_t*)st->start;
-	pj_status_t status;
-	
-	st->send_ptr.Set((TUint8*)wdata->data, (TInt)wdata->data_len);
-	st->current_data = wdata;
-	status = ssock->sock->Send(&send_cb, ssock, st->send_ptr, 0);
-	if (status != PJ_EPENDING) {
-	    ssock->established = PJ_FALSE;
-	    st->len = 0;
-	    return;
-	}
+        write_data_t *wdata = (write_data_t*) st->start;
+        pj_status_t status;
+
+        st->send_ptr.Set ( (TUint8*) wdata->data, (TInt) wdata->data_len);
+        st->current_data = wdata;
+        status = ssock->sock->Send (&send_cb, ssock, st->send_ptr, 0);
+
+        if (status != PJ_EPENDING) {
+            ssock->established = PJ_FALSE;
+            st->len = 0;
+            return;
+        }
     }
 }
 
 /*
  * Send data using the socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_send (pj_ssl_sock_t *ssock,
-				      pj_ioqueue_op_key_t *send_key,
-				      const void *data,
-				      pj_ssize_t *size,
-				      unsigned flags)
+PJ_DEF (pj_status_t) pj_ssl_sock_send (pj_ssl_sock_t *ssock,
+                                       pj_ioqueue_op_key_t *send_key,
+                                       const void *data,
+                                       pj_ssize_t *size,
+                                       unsigned flags)
 {
     PJ_CHECK_STACK();
-    PJ_ASSERT_RETURN(ssock && data && size, PJ_EINVAL);
-    PJ_ASSERT_RETURN(ssock->write_state.max_len == 0 || 
-		     ssock->write_state.max_len >= (pj_size_t)*size, 
-		     PJ_ETOOSMALL);
-    
+    PJ_ASSERT_RETURN (ssock && data && size, PJ_EINVAL);
+    PJ_ASSERT_RETURN (ssock->write_state.max_len == 0 ||
+                      ssock->write_state.max_len >= (pj_size_t) *size,
+                      PJ_ETOOSMALL);
+
     /* Check connection status */
-    if (!PjSymbianOS::Instance()->IsConnectionUp() || !ssock->established) 
-    {
-	ssock->established = PJ_FALSE;
-	return PJ_ECANCELLED;
+    if (!PjSymbianOS::Instance()->IsConnectionUp() || !ssock->established) {
+        ssock->established = PJ_FALSE;
+        return PJ_ECANCELLED;
     }
 
     write_state_t *st = &ssock->write_state;
-    
+
     /* Synchronous mode */
     if (st->max_len == 0) {
-	st->send_ptr.Set((TUint8*)data, (TInt)*size);
-	return ssock->sock->SendSync(st->send_ptr, flags);
+        st->send_ptr.Set ( (TUint8*) data, (TInt) *size);
+        return ssock->sock->SendSync (st->send_ptr, flags);
     }
 
     /* CSecureSocket only allows one outstanding send operation, so
-     * we use buffering mechanism to allow application to perform send 
+     * we use buffering mechanism to allow application to perform send
      * operations at any time.
      */
-    
+
     pj_size_t avail_len = st->max_len - st->len;
-    pj_size_t needed_len = *size + sizeof(write_data_t) - 1;
-    
+    pj_size_t needed_len = *size + sizeof (write_data_t) - 1;
+
     /* Align needed_len to be multiplication of 4 */
-    needed_len = ((needed_len + 3) >> 2) << 2; 
+    needed_len = ( (needed_len + 3) >> 2) << 2;
 
     /* Block until there is buffer slot available! */
     while (needed_len >= avail_len) {
-	pj_symbianos_poll(-1, -1);
-	avail_len = st->max_len - st->len;
+        pj_symbianos_poll (-1, -1);
+        avail_len = st->max_len - st->len;
     }
 
     /* Ok, make sure the new data will not get wrapped */
     if (st->start + st->len + needed_len > st->buf + st->max_len) {
-	/* Align buffer left */
-	pj_memmove(st->buf, st->start, st->len);
-	st->start = st->buf;
+        /* Align buffer left */
+        pj_memmove (st->buf, st->start, st->len);
+        st->start = st->buf;
     }
-    
+
     /* Push back the send data into the buffer */
-    write_data_t *wdata = (write_data_t*)(st->start + st->len);
-    
+    write_data_t *wdata = (write_data_t*) (st->start + st->len);
+
     wdata->len = needed_len;
     wdata->key = send_key;
-    wdata->data_len = (pj_size_t)*size;
-    pj_memcpy(wdata->data, data, *size);
+    wdata->data_len = (pj_size_t) *size;
+    pj_memcpy (wdata->data, data, *size);
     st->len += needed_len;
 
     /* If no outstanding send, send it */
     if (st->current_data == NULL) {
-	pj_status_t status;
-	    
-	wdata = (write_data_t*)st->start;
-	st->current_data = wdata;
-	st->send_ptr.Set((TUint8*)wdata->data, (TInt)wdata->data_len);
-	status = ssock->sock->Send(&send_cb, ssock, st->send_ptr, flags);
-	
-	if (status != PJ_EPENDING) {
-	    *size = -status;
-	    return status;
-	}
+        pj_status_t status;
+
+        wdata = (write_data_t*) st->start;
+        st->current_data = wdata;
+        st->send_ptr.Set ( (TUint8*) wdata->data, (TInt) wdata->data_len);
+        status = ssock->sock->Send (&send_cb, ssock, st->send_ptr, flags);
+
+        if (status != PJ_EPENDING) {
+            *size = -status;
+            return status;
+        }
     }
-    
+
     return PJ_SUCCESS;
 }
 
 /*
  * Send datagram using the socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_sendto (pj_ssl_sock_t *ssock,
-					pj_ioqueue_op_key_t *send_key,
-					const void *data,
-					pj_ssize_t *size,
-					unsigned flags,
-					const pj_sockaddr_t *addr,
-					int addr_len)
+PJ_DEF (pj_status_t) pj_ssl_sock_sendto (pj_ssl_sock_t *ssock,
+        pj_ioqueue_op_key_t *send_key,
+        const void *data,
+        pj_ssize_t *size,
+        unsigned flags,
+        const pj_sockaddr_t *addr,
+        int addr_len)
 {
-    PJ_UNUSED_ARG(ssock);
-    PJ_UNUSED_ARG(send_key);
-    PJ_UNUSED_ARG(data);
-    PJ_UNUSED_ARG(size);
-    PJ_UNUSED_ARG(flags);
-    PJ_UNUSED_ARG(addr);
-    PJ_UNUSED_ARG(addr_len);
+    PJ_UNUSED_ARG (ssock);
+    PJ_UNUSED_ARG (send_key);
+    PJ_UNUSED_ARG (data);
+    PJ_UNUSED_ARG (size);
+    PJ_UNUSED_ARG (flags);
+    PJ_UNUSED_ARG (addr);
+    PJ_UNUSED_ARG (addr_len);
     return PJ_ENOTSUP;
 }
 
 /*
- * Starts asynchronous socket accept() operations on this SSL socket. 
+ * Starts asynchronous socket accept() operations on this SSL socket.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_start_accept (pj_ssl_sock_t *ssock,
-					      pj_pool_t *pool,
-					      const pj_sockaddr_t *local_addr,
-					      int addr_len)
+PJ_DEF (pj_status_t) pj_ssl_sock_start_accept (pj_ssl_sock_t *ssock,
+        pj_pool_t *pool,
+        const pj_sockaddr_t *local_addr,
+        int addr_len)
 {
-    PJ_UNUSED_ARG(ssock);
-    PJ_UNUSED_ARG(pool);
-    PJ_UNUSED_ARG(local_addr);
-    PJ_UNUSED_ARG(addr_len);
-    
+    PJ_UNUSED_ARG (ssock);
+    PJ_UNUSED_ARG (pool);
+    PJ_UNUSED_ARG (local_addr);
+    PJ_UNUSED_ARG (addr_len);
+
     return PJ_ENOTSUP;
 }
 
-static void connect_cb(int err, void *key)
+static void connect_cb (int err, void *key)
 {
-    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*)key;
+    pj_ssl_sock_t *ssock = (pj_ssl_sock_t*) key;
     pj_status_t status;
-    
+
     if (ssock->connect_timer) {
-	delete ssock->connect_timer;
-	ssock->connect_timer = NULL;
+        delete ssock->connect_timer;
+        ssock->connect_timer = NULL;
     }
 
-    status = (err == KErrNone)? PJ_SUCCESS : PJ_RETURN_OS_ERROR(err);
+    status = (err == KErrNone) ? PJ_SUCCESS : PJ_RETURN_OS_ERROR (err);
+
     if (status == PJ_SUCCESS) {
-	ssock->established = PJ_TRUE;
+        ssock->established = PJ_TRUE;
     } else {
-	delete ssock->sock;
-	ssock->sock = NULL;
+        delete ssock->sock;
+        ssock->sock = NULL;
     }
-    
+
     if (ssock->cb.on_connect_complete) {
-	pj_bool_t ret = (*ssock->cb.on_connect_complete)(ssock, status);
-	if (!ret) {
-	    /* We've been destroyed */
-	    return;
-	}
+        pj_bool_t ret = (*ssock->cb.on_connect_complete) (ssock, status);
+
+        if (!ret) {
+            /* We've been destroyed */
+            return;
+        }
     }
 }
 
-static void connect_timer_cb(void *key)
+static void connect_timer_cb (void *key)
 {
-    connect_cb(KErrTimedOut, key);
+    connect_cb (KErrTimedOut, key);
 }
 
 /*
- * Starts asynchronous socket connect() operation and SSL/TLS handshaking 
+ * Starts asynchronous socket connect() operation and SSL/TLS handshaking
  * for this socket. Once the connection is done (either successfully or not),
  * the \a on_connect_complete() callback will be called.
  */
-PJ_DEF(pj_status_t) pj_ssl_sock_start_connect (pj_ssl_sock_t *ssock,
-					       pj_pool_t *pool,
-					       const pj_sockaddr_t *localaddr,
-					       const pj_sockaddr_t *remaddr,
-					       int addr_len)
+PJ_DEF (pj_status_t) pj_ssl_sock_start_connect (pj_ssl_sock_t *ssock,
+        pj_pool_t *pool,
+        const pj_sockaddr_t *localaddr,
+        const pj_sockaddr_t *remaddr,
+        int addr_len)
 {
     CPjSSLSocket *sock = NULL;
     pj_status_t status;
-    
-    PJ_ASSERT_RETURN(ssock && pool && localaddr && remaddr && addr_len,
-		     PJ_EINVAL);
+
+    PJ_ASSERT_RETURN (ssock && pool && localaddr && remaddr && addr_len,
+                      PJ_EINVAL);
 
     /* Check connection status */
     PJ_SYMBIAN_CHECK_CONNECTION();
-    
+
     if (ssock->sock != NULL) {
-	CPjSSLSocket::ssl_state state = ssock->sock->GetState();
-	switch (state) {
-	case CPjSSLSocket::SSL_STATE_ESTABLISHED:
-	    return PJ_SUCCESS;
-	default:
-	    return PJ_EPENDING;
-	}
+        CPjSSLSocket::ssl_state state = ssock->sock->GetState();
+
+        switch (state) {
+            case CPjSSLSocket::SSL_STATE_ESTABLISHED:
+                return PJ_SUCCESS;
+            default:
+                return PJ_EPENDING;
+        }
     }
 
     /* Set SSL protocol */
     TPtrC8 proto;
-    
+
     if (ssock->proto == PJ_SSL_SOCK_PROTO_DEFAULT)
-	ssock->proto = PJ_SSL_SOCK_PROTO_TLS1;
+        ssock->proto = PJ_SSL_SOCK_PROTO_TLS1;
 
     /* CSecureSocket only support TLS1.0 and SSL3.0 */
-    switch(ssock->proto) {
-    case PJ_SSL_SOCK_PROTO_TLS1:
-	proto.Set((const TUint8*)"TLS1.0", 6);
-	break;
-    case PJ_SSL_SOCK_PROTO_SSL3:
-	proto.Set((const TUint8*)"SSL3.0", 6);
-	break;
-    default:
-	return PJ_ENOTSUP;
+    switch (ssock->proto) {
+        case PJ_SSL_SOCK_PROTO_TLS1:
+            proto.Set ( (const TUint8*) "TLS1.0", 6);
+            break;
+        case PJ_SSL_SOCK_PROTO_SSL3:
+            proto.Set ( (const TUint8*) "SSL3.0", 6);
+            break;
+        default:
+            return PJ_ENOTSUP;
     }
 
     /* Prepare addresses */
     TInetAddr localaddr_, remaddr_;
-    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)localaddr, addr_len, 
-				  localaddr_);
+    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) localaddr, addr_len,
+                                   localaddr_);
+
     if (status != PJ_SUCCESS)
-	return status;
-    
-    status = PjSymbianOS::pj2Addr(*(pj_sockaddr*)remaddr, addr_len,
-				  remaddr_);
+        return status;
+
+    status = PjSymbianOS::pj2Addr (* (pj_sockaddr*) remaddr, addr_len,
+                                   remaddr_);
+
     if (status != PJ_SUCCESS)
-	return status;
+        return status;
 
-    pj_sockaddr_cp((pj_sockaddr_t*)&ssock->rem_addr, remaddr);
+    pj_sockaddr_cp ( (pj_sockaddr_t*) &ssock->rem_addr, remaddr);
 
     /* Init SSL engine */
-    TRAPD(err, sock = CPjSSLSocket::NewL(proto, ssock->qos_type, 
-				         ssock->qos_params));
+    TRAPD (err, sock = CPjSSLSocket::NewL (proto, ssock->qos_type,
+                                           ssock->qos_params));
+
     if (err != KErrNone)
-	return PJ_ENOMEM;
-    
+        return PJ_ENOMEM;
+
     if (ssock->timeout.sec != 0 || ssock->timeout.msec != 0) {
-	ssock->connect_timer = new CPjTimer(&ssock->timeout, 
-					    &connect_timer_cb, ssock);
+        ssock->connect_timer = new CPjTimer (&ssock->timeout,
+                                             &connect_timer_cb, ssock);
     }
-    
+
     /* Convert server name to Symbian descriptor */
-    TPtrC8 servername_((TUint8*)ssock->servername.ptr, 
-		       ssock->servername.slen);
-    
+    TPtrC8 servername_ ( (TUint8*) ssock->servername.ptr,
+                         ssock->servername.slen);
+
     /* Try to connect */
-    status = sock->Connect(&connect_cb, ssock, localaddr_, remaddr_,
-			   servername_);
+    status = sock->Connect (&connect_cb, ssock, localaddr_, remaddr_,
+                            servername_);
+
     if (status != PJ_SUCCESS && status != PJ_EPENDING) {
-	delete sock;
-	return status;
+        delete sock;
+        return status;
     }
 
     ssock->sock = sock;
@@ -1121,8 +1157,8 @@ PJ_DEF(pj_status_t) pj_ssl_sock_start_connect (pj_ssl_sock_t *ssock,
 }
 
 
-PJ_DEF(pj_status_t) pj_ssl_sock_renegotiate(pj_ssl_sock_t *ssock)
+PJ_DEF (pj_status_t) pj_ssl_sock_renegotiate (pj_ssl_sock_t *ssock)
 {
-    PJ_UNUSED_ARG(ssock);
+    PJ_UNUSED_ARG (ssock);
     return PJ_ENOTSUP;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp
index 6a243ecda2eac1147e9aad38443216c0135965b6..03c7d7da31a32cafffb4f0d2d7926a33dceb9e37 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/timer_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: timer_symbian.cpp 3034 2009-12-16 13:30:34Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -56,8 +56,7 @@ class CPjTimerEntry;
 /**
  * The implementation of timer heap.
  */
-struct pj_timer_heap_t
-{
+struct pj_timer_heap_t {
     /** Maximum size of the heap. */
     pj_size_t max_size;
 
@@ -68,7 +67,7 @@ struct pj_timer_heap_t
      *  the slot number will be saved in entry->_timer_id
      */
     CPjTimerEntry **entries;
-    
+
     /** Array of free slot indexes in the "entries" array */
     int *free_slots;
 };
@@ -76,28 +75,28 @@ struct pj_timer_heap_t
 /**
  * Active object for each timer entry.
  */
-class CPjTimerEntry : public CActive 
+class CPjTimerEntry : public CActive
 {
-public:
-    pj_timer_entry  *entry_;
-    
-    static CPjTimerEntry* NewL(	pj_timer_heap_t *timer_heap,
-    				pj_timer_entry *entry,
-    				const pj_time_val *delay);
-    
-    ~CPjTimerEntry();
-    
-    virtual void RunL();
-    virtual void DoCancel();
-
-private:	
-    pj_timer_heap_t *timer_heap_;
-    RTimer	     rtimer_;
-    pj_uint32_t	     interval_left_;
-    
-    CPjTimerEntry(pj_timer_heap_t *timer_heap, pj_timer_entry *entry);
-    void ConstructL(const pj_time_val *delay);
-    void Schedule();
+    public:
+        pj_timer_entry  *entry_;
+
+        static CPjTimerEntry* NewL (pj_timer_heap_t *timer_heap,
+                                    pj_timer_entry *entry,
+                                    const pj_time_val *delay);
+
+        ~CPjTimerEntry();
+
+        virtual void RunL();
+        virtual void DoCancel();
+
+    private:
+        pj_timer_heap_t *timer_heap_;
+        RTimer	     rtimer_;
+        pj_uint32_t	     interval_left_;
+
+        CPjTimerEntry (pj_timer_heap_t *timer_heap, pj_timer_entry *entry);
+        void ConstructL (const pj_time_val *delay);
+        void Schedule();
 };
 
 //////////////////////////////////////////////////////////////////////////////
@@ -106,46 +105,52 @@ private:
  */
 
 /* Grow timer heap to the specified size */
-static pj_status_t realloc_timer_heap(pj_timer_heap_t *th, pj_size_t new_size)
+static pj_status_t realloc_timer_heap (pj_timer_heap_t *th, pj_size_t new_size)
 {
     typedef CPjTimerEntry *entry_ptr;
     CPjTimerEntry **entries = NULL;
     int *free_slots = NULL;
     unsigned i, j;
- 
+
     if (new_size > PJ_SYMBIAN_TIMER_MAX_COUNT) {
-	/* Just some sanity limit */
-	new_size = PJ_SYMBIAN_TIMER_MAX_COUNT;
-	if (new_size <= th->max_size) {
-	    /* We've grown large enough */
-	    pj_assert(!"Too many timer heap entries");
-	    return PJ_ETOOMANY;
-	}
+        /* Just some sanity limit */
+        new_size = PJ_SYMBIAN_TIMER_MAX_COUNT;
+
+        if (new_size <= th->max_size) {
+            /* We've grown large enough */
+            pj_assert (!"Too many timer heap entries");
+            return PJ_ETOOMANY;
+        }
     }
-    
+
     /* Allocate entries, move entries from the old array if there is one */
     entries = new entry_ptr[new_size];
+
     if (th->entries) {
-	pj_memcpy(entries, th->entries, th->max_size * sizeof(th->entries[0]));
+        pj_memcpy (entries, th->entries, th->max_size * sizeof (th->entries[0]));
     }
+
     /* Initialize the remaining new area */
-    pj_bzero(&entries[th->max_size], 
-	    (new_size - th->max_size) * sizeof(th->entries[0]));
-    
+    pj_bzero (&entries[th->max_size],
+              (new_size - th->max_size) * sizeof (th->entries[0]));
+
     /* Allocate free slots array */
     free_slots = new int[new_size];
+
     if (th->free_slots) {
-	pj_memcpy(free_slots, th->free_slots, 
-		  FREECNT(th) * sizeof(th->free_slots[0]));
+        pj_memcpy (free_slots, th->free_slots,
+                   FREECNT (th) * sizeof (th->free_slots[0]));
     }
+
     /* Initialize the remaining new area */
-    for (i=FREECNT(th), j=th->max_size; j<new_size; ++i, ++j) {
-	free_slots[i] = j;
+    for (i=FREECNT (th), j=th->max_size; j<new_size; ++i, ++j) {
+        free_slots[i] = j;
     }
-    for ( ; i<new_size; ++i) {
-	free_slots[i] = -1;
+
+    for (; i<new_size; ++i) {
+        free_slots[i] = -1;
     }
-    
+
     /* Apply */
     delete [] th->entries;
     th->entries = entries;
@@ -157,59 +162,60 @@ static pj_status_t realloc_timer_heap(pj_timer_heap_t *th, pj_size_t new_size)
 }
 
 /* Allocate and register an entry to timer heap for newly scheduled entry */
-static pj_status_t add_entry(pj_timer_heap_t *th, CPjTimerEntry *entry)
+static pj_status_t add_entry (pj_timer_heap_t *th, CPjTimerEntry *entry)
 {
     pj_status_t status;
     int slot;
-    
+
     /* Check that there's still capacity left in the timer heap */
-    if (FREECNT(th) < 1) {
-	// Grow the timer heap twice the capacity
-	status = realloc_timer_heap(th, th->max_size * 2);
-	if (status != PJ_SUCCESS)
-	    return status;
+    if (FREECNT (th) < 1) {
+        // Grow the timer heap twice the capacity
+        status = realloc_timer_heap (th, th->max_size * 2);
+
+        if (status != PJ_SUCCESS)
+            return status;
     }
-    
+
     /* Allocate one free slot. Use LIFO */
-    slot = th->free_slots[FREECNT(th)-1];
-    PJ_ASSERT_RETURN((slot >= 0) && (slot < (int)th->max_size) && 
-		     (th->entries[slot]==NULL), PJ_EBUG);
-    
-    th->free_slots[FREECNT(th)-1] = -1;
+    slot = th->free_slots[FREECNT (th)-1];
+    PJ_ASSERT_RETURN ( (slot >= 0) && (slot < (int) th->max_size) &&
+                       (th->entries[slot]==NULL), PJ_EBUG);
+
+    th->free_slots[FREECNT (th)-1] = -1;
     th->entries[slot] = entry;
     entry->entry_->_timer_id = slot;
     ++th->cur_size;
-    
+
     return PJ_SUCCESS;
 }
 
 /* Free a slot when an entry's timer has elapsed or cancel */
-static pj_status_t remove_entry(pj_timer_heap_t *th, CPjTimerEntry *entry)
+static pj_status_t remove_entry (pj_timer_heap_t *th, CPjTimerEntry *entry)
 {
     int slot = entry->entry_->_timer_id;
-    
-    PJ_ASSERT_RETURN(slot >= 0 && slot < (int)th->max_size, PJ_EBUG);
-    PJ_ASSERT_RETURN(FREECNT(th) < th->max_size, PJ_EBUG);
-    PJ_ASSERT_RETURN(th->entries[slot]==entry, PJ_EBUG);
-    PJ_ASSERT_RETURN(th->free_slots[FREECNT(th)]==-1, PJ_EBUG);
-    
+
+    PJ_ASSERT_RETURN (slot >= 0 && slot < (int) th->max_size, PJ_EBUG);
+    PJ_ASSERT_RETURN (FREECNT (th) < th->max_size, PJ_EBUG);
+    PJ_ASSERT_RETURN (th->entries[slot]==entry, PJ_EBUG);
+    PJ_ASSERT_RETURN (th->free_slots[FREECNT (th) ]==-1, PJ_EBUG);
+
     th->entries[slot] = NULL;
-    th->free_slots[FREECNT(th)] = slot;
+    th->free_slots[FREECNT (th) ] = slot;
     entry->entry_->_timer_id = -1;
     --th->cur_size;
-    
+
     return PJ_SUCCESS;
 }
 
 
-CPjTimerEntry::CPjTimerEntry(pj_timer_heap_t *timer_heap,
-			     pj_timer_entry *entry)
-: CActive(PJ_SYMBIAN_TIMER_PRIORITY), entry_(entry), timer_heap_(timer_heap), 
-  interval_left_(0)
+CPjTimerEntry::CPjTimerEntry (pj_timer_heap_t *timer_heap,
+                              pj_timer_entry *entry)
+        : CActive (PJ_SYMBIAN_TIMER_PRIORITY), entry_ (entry), timer_heap_ (timer_heap),
+        interval_left_ (0)
 {
 }
 
-CPjTimerEntry::~CPjTimerEntry() 
+CPjTimerEntry::~CPjTimerEntry()
 {
     Cancel();
     rtimer_.Close();
@@ -218,62 +224,62 @@ CPjTimerEntry::~CPjTimerEntry()
 void CPjTimerEntry::Schedule()
 {
     pj_int32_t interval;
-    
+
     if (interval_left_ > MAX_RTIMER_INTERVAL) {
-	interval = MAX_RTIMER_INTERVAL;
+        interval = MAX_RTIMER_INTERVAL;
     } else {
-	interval = interval_left_;
+        interval = interval_left_;
     }
-    
+
     interval_left_ -= interval;
-    rtimer_.After(iStatus, interval * 1000);
+    rtimer_.After (iStatus, interval * 1000);
     SetActive();
 }
 
-void CPjTimerEntry::ConstructL(const pj_time_val *delay) 
+void CPjTimerEntry::ConstructL (const pj_time_val *delay)
 {
     rtimer_.CreateLocal();
-    CActiveScheduler::Add(this);
-    
-    interval_left_ = PJ_TIME_VAL_MSEC(*delay);
+    CActiveScheduler::Add (this);
+
+    interval_left_ = PJ_TIME_VAL_MSEC (*delay);
     Schedule();
 }
 
-CPjTimerEntry* CPjTimerEntry::NewL(pj_timer_heap_t *timer_heap,
-				   pj_timer_entry *entry,
-				   const pj_time_val *delay) 
+CPjTimerEntry* CPjTimerEntry::NewL (pj_timer_heap_t *timer_heap,
+                                    pj_timer_entry *entry,
+                                    const pj_time_val *delay)
 {
-    CPjTimerEntry *self = new CPjTimerEntry(timer_heap, entry);
-    CleanupStack::PushL(self);
-    self->ConstructL(delay);
-    CleanupStack::Pop(self);
+    CPjTimerEntry *self = new CPjTimerEntry (timer_heap, entry);
+    CleanupStack::PushL (self);
+    self->ConstructL (delay);
+    CleanupStack::Pop (self);
 
     return self;
 }
 
-void CPjTimerEntry::RunL() 
+void CPjTimerEntry::RunL()
 {
     if (interval_left_ > 0) {
-	Schedule();
-	return;
+        Schedule();
+        return;
     }
-    
-    remove_entry(timer_heap_, this);
-    entry_->cb(timer_heap_, entry_);
-    
+
+    remove_entry (timer_heap_, this);
+    entry_->cb (timer_heap_, entry_);
+
     // Finger's crossed!
     delete this;
 }
 
-void CPjTimerEntry::DoCancel() 
+void CPjTimerEntry::DoCancel()
 {
     /* It's possible that _timer_id is -1, see schedule(). In this case,
      * the entry has not been added to the timer heap, so don't remove
      * it.
      */
     if (entry_ && entry_->_timer_id != -1)
-	remove_entry(timer_heap_, this);
-    
+        remove_entry (timer_heap_, this);
+
     rtimer_.Cancel();
 }
 
@@ -284,89 +290,93 @@ void CPjTimerEntry::DoCancel()
 /*
  * Calculate memory size required to create a timer heap.
  */
-PJ_DEF(pj_size_t) pj_timer_heap_mem_size(pj_size_t count)
+PJ_DEF (pj_size_t) pj_timer_heap_mem_size (pj_size_t count)
 {
     return /* size of the timer heap itself: */
-           sizeof(pj_timer_heap_t) + 
-           /* size of each entry: */
-           (count+2) * (sizeof(void*)+sizeof(int)) +
-           /* lock, pool etc: */
-           132;
+        sizeof (pj_timer_heap_t) +
+        /* size of each entry: */
+        (count+2) * (sizeof (void*) +sizeof (int)) +
+        /* lock, pool etc: */
+        132;
 }
 
 /*
  * Create a new timer heap.
  */
-PJ_DEF(pj_status_t) pj_timer_heap_create( pj_pool_t *pool,
-					  pj_size_t size,
-                                          pj_timer_heap_t **p_heap)
+PJ_DEF (pj_status_t) pj_timer_heap_create (pj_pool_t *pool,
+        pj_size_t size,
+        pj_timer_heap_t **p_heap)
 {
     pj_timer_heap_t *ht;
     pj_status_t status;
 
-    PJ_ASSERT_RETURN(pool && p_heap, PJ_EINVAL);
+    PJ_ASSERT_RETURN (pool && p_heap, PJ_EINVAL);
 
     *p_heap = NULL;
 
     /* Allocate timer heap data structure from the pool */
-    ht = PJ_POOL_ZALLOC_T(pool, pj_timer_heap_t);
+    ht = PJ_POOL_ZALLOC_T (pool, pj_timer_heap_t);
+
     if (!ht)
         return PJ_ENOMEM;
 
     /* Allocate slots */
-    status = realloc_timer_heap(ht, size);
+    status = realloc_timer_heap (ht, size);
+
     if (status != PJ_SUCCESS)
-	return status;
+        return status;
 
     *p_heap = ht;
     return PJ_SUCCESS;
 }
 
-PJ_DEF(void) pj_timer_heap_destroy( pj_timer_heap_t *ht )
+PJ_DEF (void) pj_timer_heap_destroy (pj_timer_heap_t *ht)
 {
     /* Cancel and delete pending active objects */
     if (ht->entries) {
-	unsigned i;
-	for (i=0; i<ht->max_size; ++i) {
-	    if (ht->entries[i]) {
-		ht->entries[i]->Cancel();
-		delete ht->entries[i];
-		ht->entries[i] = NULL;
-	    }
-	}
+        unsigned i;
+
+        for (i=0; i<ht->max_size; ++i) {
+            if (ht->entries[i]) {
+                ht->entries[i]->Cancel();
+                delete ht->entries[i];
+                ht->entries[i] = NULL;
+            }
+        }
     }
-    
+
     delete [] ht->entries;
     delete [] ht->free_slots;
-    
+
     ht->entries = NULL;
     ht->free_slots = NULL;
 }
 
-PJ_DEF(void) pj_timer_heap_set_lock(  pj_timer_heap_t *ht,
+PJ_DEF (void) pj_timer_heap_set_lock (pj_timer_heap_t *ht,
                                       pj_lock_t *lock,
-                                      pj_bool_t auto_del )
+                                      pj_bool_t auto_del)
 {
-    PJ_UNUSED_ARG(ht);
+    PJ_UNUSED_ARG (ht);
+
     if (auto_del)
-    	pj_lock_destroy(lock);
+        pj_lock_destroy (lock);
 }
 
 
-PJ_DEF(unsigned) pj_timer_heap_set_max_timed_out_per_poll(pj_timer_heap_t *ht,
-                                                          unsigned count )
+PJ_DEF (unsigned) pj_timer_heap_set_max_timed_out_per_poll (pj_timer_heap_t *ht,
+        unsigned count)
 {
     /* Not applicable */
-    PJ_UNUSED_ARG(count);
+    PJ_UNUSED_ARG (count);
     return ht->max_size;
 }
 
-PJ_DEF(pj_timer_entry*) pj_timer_entry_init( pj_timer_entry *entry,
-                                             int id,
-                                             void *user_data,
-                                             pj_timer_heap_callback *cb )
+PJ_DEF (pj_timer_entry*) pj_timer_entry_init (pj_timer_entry *entry,
+        int id,
+        void *user_data,
+        pj_timer_heap_callback *cb)
 {
-    pj_assert(entry && cb);
+    pj_assert (entry && cb);
 
     entry->_timer_id = -1;
     entry->id = id;
@@ -376,81 +386,85 @@ PJ_DEF(pj_timer_entry*) pj_timer_entry_init( pj_timer_entry *entry,
     return entry;
 }
 
-PJ_DEF(pj_status_t) pj_timer_heap_schedule( pj_timer_heap_t *ht,
-					    pj_timer_entry *entry, 
-					    const pj_time_val *delay)
+PJ_DEF (pj_status_t) pj_timer_heap_schedule (pj_timer_heap_t *ht,
+        pj_timer_entry *entry,
+        const pj_time_val *delay)
 {
     CPjTimerEntry *timerObj;
     pj_status_t status;
-    
-    PJ_ASSERT_RETURN(ht && entry && delay, PJ_EINVAL);
-    PJ_ASSERT_RETURN(entry->cb != NULL, PJ_EINVAL);
+
+    PJ_ASSERT_RETURN (ht && entry && delay, PJ_EINVAL);
+    PJ_ASSERT_RETURN (entry->cb != NULL, PJ_EINVAL);
 
     /* Prevent same entry from being scheduled more than once */
-    PJ_ASSERT_RETURN(entry->_timer_id < 1, PJ_EINVALIDOP);
+    PJ_ASSERT_RETURN (entry->_timer_id < 1, PJ_EINVALIDOP);
 
     entry->_timer_id = -1;
-    
-    timerObj = CPjTimerEntry::NewL(ht, entry, delay);
-    status = add_entry(ht, timerObj);
+
+    timerObj = CPjTimerEntry::NewL (ht, entry, delay);
+    status = add_entry (ht, timerObj);
+
     if (status != PJ_SUCCESS) {
-	timerObj->Cancel();
-	delete timerObj;
-	return status;
+        timerObj->Cancel();
+        delete timerObj;
+        return status;
     }
-    
+
     return PJ_SUCCESS;
 }
 
-PJ_DEF(int) pj_timer_heap_cancel( pj_timer_heap_t *ht,
-				  pj_timer_entry *entry)
+PJ_DEF (int) pj_timer_heap_cancel (pj_timer_heap_t *ht,
+                                   pj_timer_entry *entry)
 {
-    PJ_ASSERT_RETURN(ht && entry, PJ_EINVAL);
-    
-    if (entry->_timer_id >= 0 && entry->_timer_id < (int)ht->max_size) {
-    	CPjTimerEntry *timerObj = ht->entries[entry->_timer_id];
-    	if (timerObj) {
-    	    timerObj->Cancel();
-    	    delete timerObj;
-    	    return 1;
-    	} else {
-    	    return 0;
-    	}
+    PJ_ASSERT_RETURN (ht && entry, PJ_EINVAL);
+
+    if (entry->_timer_id >= 0 && entry->_timer_id < (int) ht->max_size) {
+        CPjTimerEntry *timerObj = ht->entries[entry->_timer_id];
+
+        if (timerObj) {
+            timerObj->Cancel();
+            delete timerObj;
+            return 1;
+        } else {
+            return 0;
+        }
     } else {
-    	return 0;
+        return 0;
     }
 }
 
-PJ_DEF(unsigned) pj_timer_heap_poll( pj_timer_heap_t *ht, 
-                                     pj_time_val *next_delay )
+PJ_DEF (unsigned) pj_timer_heap_poll (pj_timer_heap_t *ht,
+                                      pj_time_val *next_delay)
 {
     /* Polling is not necessary on Symbian, since all async activities
      * are registered to active scheduler.
      */
-    PJ_UNUSED_ARG(ht);
+    PJ_UNUSED_ARG (ht);
+
     if (next_delay) {
-    	next_delay->sec = 1;
-    	next_delay->msec = 0;
+        next_delay->sec = 1;
+        next_delay->msec = 0;
     }
+
     return 0;
 }
 
-PJ_DEF(pj_size_t) pj_timer_heap_count( pj_timer_heap_t *ht )
+PJ_DEF (pj_size_t) pj_timer_heap_count (pj_timer_heap_t *ht)
 {
-    PJ_ASSERT_RETURN(ht, 0);
+    PJ_ASSERT_RETURN (ht, 0);
 
     return ht->cur_size;
 }
 
-PJ_DEF(pj_status_t) pj_timer_heap_earliest_time( pj_timer_heap_t * ht,
-					         pj_time_val *timeval)
+PJ_DEF (pj_status_t) pj_timer_heap_earliest_time (pj_timer_heap_t * ht,
+        pj_time_val *timeval)
 {
     /* We don't support this! */
-    PJ_UNUSED_ARG(ht);
-    
+    PJ_UNUSED_ARG (ht);
+
     timeval->sec = 1;
     timeval->msec = 0;
-    
+
     return PJ_SUCCESS;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp
index 2665565c2fb2e79d6c46fcff6598c26675522b51..474c5673e719e6d959d800c03a92cdefc6ef95b6 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pj/unicode_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: unicode_symbian.cpp 3047 2010-01-06 14:35:13Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -36,23 +36,23 @@
 /*
  * Convert ANSI strings to Unicode strings.
  */
-PJ_DEF(wchar_t*) pj_ansi_to_unicode( const char *str, pj_size_t len,
-				     wchar_t *wbuf, pj_size_t wbuf_count)
+PJ_DEF (wchar_t*) pj_ansi_to_unicode (const char *str, pj_size_t len,
+                                      wchar_t *wbuf, pj_size_t wbuf_count)
 {
-    TPtrC8 aForeign((const TUint8*)str, (TInt)len);
-    TPtr16 aUnicode((TUint16*)wbuf, (TInt)(wbuf_count-1));
+    TPtrC8 aForeign ( (const TUint8*) str, (TInt) len);
+    TPtr16 aUnicode ( (TUint16*) wbuf, (TInt) (wbuf_count-1));
     TInt left;
 
-    left = PjSymbianOS::Instance()->ConvertToUnicode(aUnicode, aForeign);
+    left = PjSymbianOS::Instance()->ConvertToUnicode (aUnicode, aForeign);
 
     if (left != 0) {
-	// Error, or there are unconvertable characters
-	*wbuf = 0;
+        // Error, or there are unconvertable characters
+        *wbuf = 0;
     } else {
-	if (len < wbuf_count)
-	    wbuf[len] = 0;
-	else
-	    wbuf[len-1] = 0;
+        if (len < wbuf_count)
+            wbuf[len] = 0;
+        else
+            wbuf[len-1] = 0;
     }
 
     return wbuf;
@@ -62,23 +62,23 @@ PJ_DEF(wchar_t*) pj_ansi_to_unicode( const char *str, pj_size_t len,
 /*
  * Convert Unicode string to ANSI string.
  */
-PJ_DEF(char*) pj_unicode_to_ansi( const wchar_t *wstr, pj_size_t len,
-				  char *buf, pj_size_t buf_size)
+PJ_DEF (char*) pj_unicode_to_ansi (const wchar_t *wstr, pj_size_t len,
+                                   char *buf, pj_size_t buf_size)
 {
-    TPtrC16 aUnicode((const TUint16*)wstr, (TInt)len);
-    TPtr8 aForeign((TUint8*)buf, (TInt)(buf_size-1));
+    TPtrC16 aUnicode ( (const TUint16*) wstr, (TInt) len);
+    TPtr8 aForeign ( (TUint8*) buf, (TInt) (buf_size-1));
     TInt left;
 
-    left = PjSymbianOS::Instance()->ConvertFromUnicode(aForeign, aUnicode);
+    left = PjSymbianOS::Instance()->ConvertFromUnicode (aForeign, aUnicode);
 
     if (left != 0) {
-	// Error, or there are unconvertable characters
-	buf[0] = '\0';
+        // Error, or there are unconvertable characters
+        buf[0] = '\0';
     } else {
-	if (len < buf_size)
-	    buf[len] = '\0';
-	else
-	    buf[len-1] = '\0';
+        if (len < buf_size)
+            buf[len] = '\0';
+        else
+            buf[len-1] = '\0';
     }
 
     return buf;
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp
index d0e204c63b40b0eb9af9cad278ae8f2f86d004cb..776ce86afe3c3ce6297199c9c9a8eccedbba605e 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib++-test/main.cpp
@@ -1,5 +1,5 @@
 /* $Id */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -53,20 +53,20 @@ int main()
     Pj_Caching_Pool mem;
     Pj_Pool the_pool;
     Pj_Pool *pool = &the_pool;
-    
-    the_pool.attach(mem.create_pool(4000,4000));
 
-    Pj_Semaphore_Lock lsem(pool);
+    the_pool.attach (mem.create_pool (4000,4000));
+
+    Pj_Semaphore_Lock lsem (pool);
     Pj_Semaphore_Lock *plsem;
 
-    plsem = new(pool) Pj_Semaphore_Lock(pool);
+    plsem = new (pool) Pj_Semaphore_Lock (pool);
     delete plsem;
 
-    Pj_Proactor proactor(pool, 100, 100);
+    Pj_Proactor proactor (pool, 100, 100);
 
-    My_Event_Handler *event_handler = new(the_pool) My_Event_Handler;
-    proactor.register_socket_handler(pool, event_handler);
-    proactor.unregister_handler(event_handler);
+    My_Event_Handler *event_handler = new (the_pool) My_Event_Handler;
+    proactor.register_socket_handler (pool, event_handler);
+    proactor.unregister_handler (event_handler);
 
     return 0;
 }
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp
index 8562c0ed950636e72869e9bb15b3e6da020f007b..aa958645a1048a24b6f3257a4a2200762feea49a 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/exception_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: exception_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp
index a91b671f2cb11adf3d02369bb100a42dfa5e79fe..79183c395d3aef1f0520a48be7037e2d314f96d9 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/main_symbian.cpp
@@ -25,7 +25,8 @@ int main()
     //err = test_main();
 
     if (err)
-	return err;
+        return err;
+
     return exp;
     //return 0;
 }
@@ -46,31 +47,30 @@ LOCAL_D CConsoleBase* console;  // write all messages to this
 
 class MyScheduler : public CActiveScheduler
 {
-public:
-    MyScheduler()
-    {}
+    public:
+        MyScheduler() {}
 
-    void Error(TInt aError) const;
+        void Error (TInt aError) const;
 };
 
-void MyScheduler::Error(TInt aError) const
+void MyScheduler::Error (TInt aError) const
 {
-    PJ_UNUSED_ARG(aError);
+    PJ_UNUSED_ARG (aError);
 }
 
 LOCAL_C void DoStartL()
-    {
+{
     // Create active scheduler (to run active objects)
     CActiveScheduler* scheduler = new (ELeave) MyScheduler;
-    CleanupStack::PushL(scheduler);
-    CActiveScheduler::Install(scheduler);
+    CleanupStack::PushL (scheduler);
+    CActiveScheduler::Install (scheduler);
 
     test_main();
 
-    CActiveScheduler::Install(NULL);
-    CleanupStack::Pop(scheduler);
+    CActiveScheduler::Install (NULL);
+    CleanupStack::Pop (scheduler);
     delete scheduler;
-    }
+}
 
 #define WRITE_TO_DEBUG_CONSOLE
 
@@ -79,55 +79,57 @@ LOCAL_C void DoStartL()
 #endif
 
 //  Global Functions
-static void log_writer(int level, const char *buf, int len)
+static void log_writer (int level, const char *buf, int len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG(level);
-    
-    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
+    PJ_UNUSED_ARG (level);
+
+    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
     buf16[len] = 0;
     buf16[len+1] = 0;
-    
-    TPtrC16 aBuf((const TUint16*)buf16, (TInt)len);
-    console->Write(aBuf);
-    
+
+    TPtrC16 aBuf ( (const TUint16*) buf16, (TInt) len);
+    console->Write (aBuf);
+
 #ifdef WRITE_TO_DEBUG_CONSOLE
-    RDebug::Print(aBuf);
+    RDebug::Print (aBuf);
 #endif
 }
 
 
 GLDEF_C TInt E32Main()
-    {
+{
     // Create cleanup stack
     __UHEAP_MARK;
     CTrapCleanup* cleanup = CTrapCleanup::New();
 
     // Create output console
-    TRAPD(createError, console = Console::NewL(_L("Console"), TSize(KConsFullScreen,KConsFullScreen)));
+    TRAPD (createError, console = Console::NewL (_L ("Console"), TSize (KConsFullScreen,KConsFullScreen)));
+
     if (createError)
         return createError;
 
-    pj_log_set_log_func(&log_writer);
+    pj_log_set_log_func (&log_writer);
 
     // Run application code inside TRAP harness, wait keypress when terminated
-    TRAPD(mainError, DoStartL());
+    TRAPD (mainError, DoStartL());
+
     if (mainError)
-        console->Printf(_L(" failed, leave code = %d"), mainError);
-    
-    console->Printf(_L(" [press any key]\n"));
+        console->Printf (_L (" failed, leave code = %d"), mainError);
+
+    console->Printf (_L (" [press any key]\n"));
     console->Getch();
-    
+
     delete console;
     delete cleanup;
-    
-    CloseSTDLIB(); 
-    
+
+    CloseSTDLIB();
+
     __UHEAP_MARKEND;
-    
+
     return KErrNone;
-    }
+}
 
 #endif	/* if 0 */
 
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp
index 0158e3bf0aac91599527933514fbef46953aae07..09f3b71fe95ceb20b05ccc028257414dd2b7373e 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/pool_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: pool_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp
index 2572e91d126220196b75e4a6565552d0a65b4d05..c01f5230ab3cda4b0b8faeac4f9b1855e0bba9a8 100644
--- a/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjlib/src/pjlib-test/test_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: test_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h
index 276e4cd7b04be42f127efa58f73d81b1dc723367..6b4575f11029d3cda6051a1cb3911941ae847799 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-audiodev/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2977 2009-10-29 09:39:17Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -104,7 +104,7 @@ PJ_BEGIN_DECL
 
 
 /**
- * This setting controls whether Symbian audio (using built-in multimedia 
+ * This setting controls whether Symbian audio (using built-in multimedia
  * framework) support should be included.
  */
 #ifndef PJMEDIA_AUDIO_DEV_HAS_SYMB_MDA
@@ -115,7 +115,7 @@ PJ_BEGIN_DECL
 /**
  * This setting controls whether the Audio Device API should support
  * device implementation that is based on the old sound device API
- * (sound.h). 
+ * (sound.h).
  *
  * Enable this API if:
  *  - you have implemented your own sound device using the old sound
@@ -149,7 +149,7 @@ PJ_END_DECL
  * @{
 
 PJMEDIA Audio Device API is a cross-platform audio API appropriate for use with
-VoIP applications and many other types of audio streaming applications. 
+VoIP applications and many other types of audio streaming applications.
 
 The API abstracts many different audio API's on various platforms, such as:
  - PortAudio back-end for Win32, Windows Mobile, Linux, Unix, dan MacOS X.
@@ -159,45 +159,45 @@ The API abstracts many different audio API's on various platforms, such as:
  - null-audio implementation
  - and more to be implemented in the future
 
-The Audio Device API/library is an evolution from PJMEDIA @ref PJMED_SND and 
+The Audio Device API/library is an evolution from PJMEDIA @ref PJMED_SND and
 contains many enhancements:
 
  - Forward compatibility:
 \n
-   The new API has been designed to be extensible, it will support new API's as 
-   well as new features that may be introduced in the future without breaking 
-   compatibility with applications that use this API as well as compatibility 
-   with existing device implementations. 
+   The new API has been designed to be extensible, it will support new API's as
+   well as new features that may be introduced in the future without breaking
+   compatibility with applications that use this API as well as compatibility
+   with existing device implementations.
 
  - Device capabilities:
 \n
    At the heart of the API is device capabilities management, where all possible
    audio capabilities of audio devices should be able to be handled in a generic
-   manner. With this framework, new capabilities that may be discovered in the 
-   future can be handled in manner without breaking existing applications. 
+   manner. With this framework, new capabilities that may be discovered in the
+   future can be handled in manner without breaking existing applications.
 
  - Built-in features:
 \n
-   The device capabilities framework enables applications to use and control 
+   The device capabilities framework enables applications to use and control
    audio features built-in in the device, such as:
-    - echo cancellation, 
-    - built-in codecs, 
+    - echo cancellation,
+    - built-in codecs,
     - audio routing (e.g. to earpiece or loudspeaker),
     - volume control,
     - etc.
 
  - Codec support:
 \n
-   Some audio devices such as Nokia/Symbian Audio Proxy Server (APS) and Nokia 
+   Some audio devices such as Nokia/Symbian Audio Proxy Server (APS) and Nokia
    VoIP Audio Services (VAS) support built-in hardware audio codecs (e.g. G.729,
    iLBC, and AMR), and application can use the sound device in encoded mode to
-   make use of these hardware codecs. 
+   make use of these hardware codecs.
 
  - Multiple backends:
 \n
-   The new API supports multiple audio backends (called factories or drivers in 
-   the code) to be active simultaneously, and audio backends may be added or 
-   removed during run-time. 
+   The new API supports multiple audio backends (called factories or drivers in
+   the code) to be active simultaneously, and audio backends may be added or
+   removed during run-time.
 
 
 @section using Overview on using the API
@@ -205,11 +205,11 @@ contains many enhancements:
 @subsection getting_started Getting started
 
  -# <b>Configure the application's project settings</b>.\n
-    Add the following 
+    Add the following
     include:
     \code
     #include <pjmedia_audiodev.h>\endcode\n
-    And add <b>pjmedia-audiodev</b> library to your application link 
+    And add <b>pjmedia-audiodev</b> library to your application link
     specifications.\n
  -# <b>Compile time settings</b>.\n
     Use the compile time settings to enable or
@@ -240,7 +240,7 @@ contains many enhancements:
 
 	status = pjmedia_aud_dev_get_info(dev_idx, &info);
 	printf("%d. %s (in=%d, out=%d)\n",
-	       dev_idx, info.name, 
+	       dev_idx, info.name,
 	       info.input_count, info.output_count);
     }
     \endcode\n
@@ -285,7 +285,7 @@ Capabilities are encoded as #pjmedia_aud_dev_cap enumeration. Please see
  -# Info: You can set the device settings when opening audio stream by setting
     the flags and the appropriate setting in #pjmedia_aud_param when calling
     #pjmedia_aud_stream_create()\n
- -# Info: Once the audio stream is running, you can retrieve or change the stream 
+ -# Info: Once the audio stream is running, you can retrieve or change the stream
     setting by specifying the capability in #pjmedia_aud_stream_get_cap()
     and #pjmedia_aud_stream_set_cap() respectively.
 
@@ -340,12 +340,12 @@ or both.
     param.ext_fmt.vad = PJ_FALSE;
     \endcode\n
  -# Note that if non-PCM format is configured on the audio stream, the
-    capture and/or playback functions (#pjmedia_aud_rec_cb and 
+    capture and/or playback functions (#pjmedia_aud_rec_cb and
     #pjmedia_aud_play_cb respectively) will report the audio frame as
     #pjmedia_frame_ext structure instead of the #pjmedia_frame.
  -# Optionally configure other device's capabilities. The following snippet
     shows how to enable echo cancellation on the device (note that this
-    snippet may not be necessary since the setting may have been enabled 
+    snippet may not be necessary since the setting may have been enabled
     when calling #pjmedia_aud_dev_default_param() above):
     \code
     if (info.caps & PJMEDIA_AUD_DEV_CAP_EC) {
@@ -358,7 +358,7 @@ or both.
     \code
        pjmedia_aud_stream *stream;
 
-       status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb, 
+       status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb,
                                           user_data, &stream);
     \endcode
 
@@ -381,7 +381,7 @@ or both.
     \code
     // Volume setting is an unsigned integer showing the level in percent.
     unsigned vol;
-    status = pjmedia_aud_stream_get_cap(stream, 
+    status = pjmedia_aud_stream_get_cap(stream,
 					PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
 					&vol);
     \endcode
@@ -390,7 +390,7 @@ or both.
     \code
     // Volume setting is an unsigned integer showing the level in percent.
     unsigned vol = 50;
-    status = pjmedia_aud_stream_set_cap(stream, 
+    status = pjmedia_aud_stream_set_cap(stream,
 					PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
 					&vol);
     \endcode
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h
index d8de2fed07f3efaa6bbb2c58dee23133ebffbffa..bdcf8e5cfaa4261cf3711e88a14ae4aab2c5e476 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia-codec/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2875 2009-08-13 15:57:26Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -142,7 +142,7 @@
 
 /**
  * Enable Intel IPP AMR codec. This also needs to be enabled when AMR WB
- * codec is enabled. This option is only used when PJMEDIA_HAS_INTEL_IPP 
+ * codec is enabled. This option is only used when PJMEDIA_HAS_INTEL_IPP
  * is enabled.
  *
  * Default: 1
@@ -154,7 +154,7 @@
 
 /**
  * Enable Intel IPP AMR wideband codec. The PJMEDIA_HAS_INTEL_IPP_CODEC_AMR
- * option must also be enabled to use this codec. This option is only used 
+ * option must also be enabled to use this codec. This option is only used
  * when PJMEDIA_HAS_INTEL_IPP is enabled.
  *
  * Default: 1
@@ -290,8 +290,8 @@
 #endif
 
 /**
- * Default G.722.1 codec encoder and decoder level adjustment. 
- * If the value is non-zero, then PCM input samples to the encoder will 
+ * Default G.722.1 codec encoder and decoder level adjustment.
+ * If the value is non-zero, then PCM input samples to the encoder will
  * be shifted right by this value, and similarly PCM output samples from
  * the decoder will be shifted left by this value.
  *
@@ -305,7 +305,7 @@
 
 /**
  * Enabling both G.722.1 codec implementations, internal PJMEDIA and IPP,
- * may cause problem in SDP, i.e: payload types duplications. So, let's 
+ * may cause problem in SDP, i.e: payload types duplications. So, let's
  * just trap such case here at compile time.
  *
  * Application can control which implementation to be used by manipulating
diff --git a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h
index a929b867cb2d2c63bfa8500615dcfc09d48a1c17..52865e821af64fb0ce33d79577380754605939d0 100644
--- a/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h
+++ b/sflphone-common/libs/pjproject/pjmedia/include/pjmedia/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2977 2009-10-29 09:39:17Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -56,11 +56,11 @@
 #endif
 
 /**
- * Specify whether we prefer to use audio switch board rather than 
+ * Specify whether we prefer to use audio switch board rather than
  * conference bridge.
  *
- * Audio switch board is a kind of simplified version of conference 
- * bridge, but not really the subset of conference bridge. It has 
+ * Audio switch board is a kind of simplified version of conference
+ * bridge, but not really the subset of conference bridge. It has
  * stricter rules on audio routing among the pjmedia ports and has
  * no audio mixing capability. The power of it is it could work with
  * encoded audio frames where conference brigde couldn't.
@@ -114,7 +114,7 @@
 #endif
 
 /**
- * Specify default sound device latency, in milisecond. 
+ * Specify default sound device latency, in milisecond.
  *
  * Default is 160ms for Windows Mobile and 140ms for other platforms.
  */
@@ -144,21 +144,21 @@
 /**
  * This denotes implementation of WSOLA using fixed or floating point WSOLA
  * algorithm. This implementation provides the best quality of the result,
- * at the expense of one frame delay and intensive processing power 
+ * at the expense of one frame delay and intensive processing power
  * requirement.
  */
 #define PJMEDIA_WSOLA_IMP_WSOLA		    1
 
 /**
- * This denotes implementation of WSOLA algorithm with faster waveform 
- * similarity calculation. This implementation provides fair quality of 
+ * This denotes implementation of WSOLA algorithm with faster waveform
+ * similarity calculation. This implementation provides fair quality of
  * the result with the main advantage of low processing power requirement.
  */
 #define PJMEDIA_WSOLA_IMP_WSOLA_LITE	    2
 
 /**
  * Specify type of Waveform based Similarity Overlap and Add (WSOLA) backend
- * implementation to be used. WSOLA is an algorithm to expand and/or compress 
+ * implementation to be used. WSOLA is an algorithm to expand and/or compress
  * audio frames without changing the pitch, and used by the delaybuf and as PLC
  * backend algorithm.
  *
@@ -171,8 +171,8 @@
 
 /**
  * Specify the default maximum duration of synthetic audio that is generated
- * by WSOLA. This value should be long enough to cover burst of packet losses. 
- * but not too long, because as the duration increases the quality would 
+ * by WSOLA. This value should be long enough to cover burst of packet losses.
+ * but not too long, because as the duration increases the quality would
  * degrade considerably.
  *
  * Note that this limit is only applied when fading is enabled in the WSOLA
@@ -201,7 +201,7 @@
 /**
  * Specify WSOLA algorithm delay, in milliseconds. The algorithm delay is
  * used to merge synthetic samples with real samples in the transition
- * between real to synthetic and vice versa. The longer the delay, the 
+ * between real to synthetic and vice versa. The longer the delay, the
  * smoother signal to be generated, at the expense of longer latency and
  * a slighty more computation.
  *
@@ -230,7 +230,7 @@
 /**
  * Specify number of sound buffers. Larger number is better for sound
  * stability and to accommodate sound devices that are unable to send frames
- * in timely manner, however it would probably cause more audio delay (and 
+ * in timely manner, however it would probably cause more audio delay (and
  * definitely will take more memory). One individual buffer is normally 10ms
  * or 20 ms long, depending on ptime settings (samples_per_frame value).
  *
@@ -313,13 +313,13 @@
  */
 #define PJMEDIA_RESAMPLE_NONE		    1	/**< No resampling.	    */
 #define PJMEDIA_RESAMPLE_LIBRESAMPLE	    2	/**< Sample rate conversion 
-						     using libresample.  */
+using libresample.  */
 #define PJMEDIA_RESAMPLE_SPEEX		    3	/**< Sample rate conversion 
-						     using Speex. */
+using Speex. */
 #define PJMEDIA_RESAMPLE_LIBSAMPLERATE	    4	/**< Sample rate conversion 
-						     using libsamplerate 
-						     (a.k.a Secret Rabbit Code)
-						 */
+using libsamplerate
+(a.k.a Secret Rabbit Code)
+*/
 
 /**
  * Select which resample implementation to use. Currently pjmedia supports:
@@ -359,7 +359,7 @@
  * This (among other thing) will affect the size of buffers to be allocated
  * for outgoing packets.
  */
-#ifndef PJMEDIA_MAX_FRAME_DURATION_MS   
+#ifndef PJMEDIA_MAX_FRAME_DURATION_MS
 #   define PJMEDIA_MAX_FRAME_DURATION_MS   	200
 #endif
 
@@ -367,7 +367,7 @@
 /**
  * Max packet size to support.
  */
-#ifndef PJMEDIA_MAX_MTU			
+#ifndef PJMEDIA_MAX_MTU
 #  define PJMEDIA_MAX_MTU			1500
 #endif
 
@@ -375,7 +375,7 @@
 /**
  * DTMF/telephone-event duration, in timestamp.
  */
-#ifndef PJMEDIA_DTMF_DURATION		
+#ifndef PJMEDIA_DTMF_DURATION
 #  define PJMEDIA_DTMF_DURATION			1600	/* in timestamp */
 #endif
 
@@ -385,7 +385,7 @@
  * remote address required to make the stream switch transmission
  * to the source address.
  */
-#ifndef PJMEDIA_RTP_NAT_PROBATION_CNT	
+#ifndef PJMEDIA_RTP_NAT_PROBATION_CNT
 #  define PJMEDIA_RTP_NAT_PROBATION_CNT		10
 #endif
 
@@ -426,9 +426,9 @@
 
 /**
  * Specify whether RTCP XR support should be built into PJMEDIA. Disabling
- * this feature will reduce footprint slightly. Note that even when this 
- * setting is enabled, RTCP XR processing will only be performed in stream 
- * if it is enabled on run-time on per stream basis. See  
+ * this feature will reduce footprint slightly. Note that even when this
+ * setting is enabled, RTCP XR processing will only be performed in stream
+ * if it is enabled on run-time on per stream basis. See
  * PJMEDIA_STREAM_ENABLE_XR setting for more info.
  *
  * Default: 1 (yes).
@@ -440,7 +440,7 @@
 
 /**
  * The RTCP XR feature is activated and used by stream if \a enable_rtcp_xr
- * field of \a pjmedia_stream_info structure is non-zero. This setting 
+ * field of \a pjmedia_stream_info structure is non-zero. This setting
  * controls the default value of this field.
  *
  * Default: 0 (disabled)
@@ -459,7 +459,7 @@
  *
  * Specify zero to disable this feature.
  *
- * Default: 600 msec (which gives good probability that some RTP 
+ * Default: 600 msec (which gives good probability that some RTP
  *                    packets will reach the destination, but without
  *                    filling up the jitter buffer on the remote end).
  */
@@ -469,13 +469,13 @@
 
 
 /**
- * Specify the maximum duration of silence period in the codec, in msec. 
+ * Specify the maximum duration of silence period in the codec, in msec.
  * This is useful for example to keep NAT binding open in the firewall
- * and to prevent server from disconnecting the call because no 
+ * and to prevent server from disconnecting the call because no
  * RTP packet is received.
  *
  * This only applies to codecs that use PJMEDIA's VAD (pretty much
- * everything including iLBC, except Speex, which has its own DTX 
+ * everything including iLBC, except Speex, which has its own DTX
  * mechanism).
  *
  * Use (-1) to disable this feature.
@@ -527,7 +527,7 @@
  * remote, or should it rather use the codec preference as specified by
  * local endpoint.
  *
- * For example, suppose incoming call has codec order "8 0 3", while 
+ * For example, suppose incoming call has codec order "8 0 3", while
  * local codec order is "3 0 8". If remote codec order is preferable,
  * the selected codec will be 8, while if local codec order is preferable,
  * the selected codec will be 3.
@@ -555,7 +555,7 @@
 
 
 /**
- * This macro controls whether pjmedia should include SDP rtpmap 
+ * This macro controls whether pjmedia should include SDP rtpmap
  * attribute for static payload types. SDP rtpmap for static
  * payload types are optional, although they are normally included
  * for interoperability reason.
@@ -609,12 +609,12 @@
 #endif
 
 
-/* 
+/*
  * Below specifies the various tone generator backend algorithm.
  */
 
-/** 
- * The math's sine(), floating point. This has very good precision 
+/**
+ * The math's sine(), floating point. This has very good precision
  * but it's the slowest and requires floating point support and
  * linking with the math library.
  */
@@ -630,7 +630,7 @@
 /**
  * Fixed point using sine signal generated by Cordic algorithm. This
  * algorithm can be tuned to provide balance between precision and
- * performance by tuning the PJMEDIA_TONEGEN_FIXED_POINT_CORDIC_LOOP 
+ * performance by tuning the PJMEDIA_TONEGEN_FIXED_POINT_CORDIC_LOOP
  * setting, and may be suitable for platforms that lack floating-point
  * support.
  */
@@ -645,7 +645,7 @@
 
 
 /**
- * Specify the tone generator algorithm to be used. Please see 
+ * Specify the tone generator algorithm to be used. Please see
  * http://trac.pjsip.org/repos/wiki/Tone_Generator for the performance
  * analysis results of the various tone generator algorithms.
  *
@@ -665,7 +665,7 @@
 /**
  * Specify the number of calculation loops to generate the tone, when
  * PJMEDIA_TONEGEN_FIXED_POINT_CORDIC algorithm is used. With more calculation
- * loops, the tone signal gets more precise, but this will add more 
+ * loops, the tone signal gets more precise, but this will add more
  * processing.
  *
  * Valid values are 1 to 28.
@@ -753,8 +753,8 @@
 
 /**
  * Transport info (pjmedia_transport_info) contains a socket info and list
- * of transport specific info, since transports can be chained together 
- * (for example, SRTP transport uses UDP transport as the underlying 
+ * of transport specific info, since transports can be chained together
+ * (for example, SRTP transport uses UDP transport as the underlying
  * transport). This constant specifies maximum number of transport specific
  * infos that can be held in a transport info.
  */
@@ -797,22 +797,22 @@
 #endif
 
 /**
- * Specify another type of keep-alive and NAT hole punching 
+ * Specify another type of keep-alive and NAT hole punching
  * mechanism (the other type is PJMEDIA_STREAM_VAD_SUSPEND_MSEC
- * and PJMEDIA_CODEC_MAX_SILENCE_PERIOD) to be used by stream. 
- * When this feature is enabled, the stream will initially 
+ * and PJMEDIA_CODEC_MAX_SILENCE_PERIOD) to be used by stream.
+ * When this feature is enabled, the stream will initially
  * transmit one packet to punch a hole in NAT, and periodically
  * transmit keep-alive packets.
  *
  * When this alternative keep-alive mechanism is used, application
- * may disable the other keep-alive mechanisms, i.e: by setting 
- * PJMEDIA_STREAM_VAD_SUSPEND_MSEC to zero and 
+ * may disable the other keep-alive mechanisms, i.e: by setting
+ * PJMEDIA_STREAM_VAD_SUSPEND_MSEC to zero and
  * PJMEDIA_CODEC_MAX_SILENCE_PERIOD to -1.
  *
  * The value of this macro specifies the type of packet used
  * for the keep-alive mechanism. Valid values are
  * PJMEDIA_STREAM_KA_EMPTY_RTP and PJMEDIA_STREAM_KA_USER.
- * 
+ *
  * The duration of the keep-alive interval further can be set
  * with PJMEDIA_STREAM_KA_INTERVAL setting.
  *
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
index a807a3d3507855f90882d85c9875074b4a24ad39..b812147010d595fa866329a4e6258c9eb84da7f1 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp
@@ -1,5 +1,5 @@
 /* $Id: symb_aps_dev.cpp 2958 2009-10-20 14:54:57Z nanang $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -46,7 +46,7 @@
 #include <APSClientSession.h>
 #include <pjmedia-codec/amr_helper.h>
 
-/* Pack/unpack G.729 frame of S60 DSP codec, taken from:  
+/* Pack/unpack G.729 frame of S60 DSP codec, taken from:
  * http://wiki.forum.nokia.com/index.php/TSS000776_-_Payload_conversion_for_G.729_audio_format
  */
 #include "s60_g729_bitstream.h"
@@ -70,8 +70,7 @@ static pj_uint8_t aps_g711_frame_len;
 
 
 /* APS factory */
-struct aps_factory
-{
+struct aps_factory {
     pjmedia_aud_dev_factory	 base;
     pj_pool_t			*pool;
     pj_pool_factory		*pf;
@@ -84,11 +83,10 @@ class CPjAudioEngine;
 
 
 /* APS stream. */
-struct aps_stream
-{
+struct aps_stream {
     // Base
     pjmedia_aud_stream	 base;			/**< Base class.	*/
-    
+
     // Pool
     pj_pool_t		*pool;			/**< Memory pool.       */
 
@@ -111,7 +109,7 @@ struct aps_stream
     pj_uint16_t		 rec_buf_len;		/**< Record buffer length. */
     void                *strm_data;		/**< Stream data.	*/
 
-    /* Resampling is needed, in case audio device is opened with clock rate 
+    /* Resampling is needed, in case audio device is opened with clock rate
      * other than 8kHz (only for PCM format).
      */
     pjmedia_resample	*play_resample;		/**< Resampler for playback. */
@@ -128,38 +126,37 @@ struct aps_stream
 
 
 /* Prototypes */
-static pj_status_t factory_init(pjmedia_aud_dev_factory *f);
-static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f);
-static unsigned    factory_get_dev_count(pjmedia_aud_dev_factory *f);
-static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
-					unsigned index,
-					pjmedia_aud_dev_info *info);
-static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
-					 unsigned index,
-					 pjmedia_aud_param *param);
-static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
-					 const pjmedia_aud_param *param,
-					 pjmedia_aud_rec_cb rec_cb,
-					 pjmedia_aud_play_cb play_cb,
-					 void *user_data,
-					 pjmedia_aud_stream **p_aud_strm);
-
-static pj_status_t stream_get_param(pjmedia_aud_stream *strm,
-				    pjmedia_aud_param *param);
-static pj_status_t stream_get_cap(pjmedia_aud_stream *strm,
-				  pjmedia_aud_dev_cap cap,
-				  void *value);
-static pj_status_t stream_set_cap(pjmedia_aud_stream *strm,
-				  pjmedia_aud_dev_cap cap,
-				  const void *value);
-static pj_status_t stream_start(pjmedia_aud_stream *strm);
-static pj_status_t stream_stop(pjmedia_aud_stream *strm);
-static pj_status_t stream_destroy(pjmedia_aud_stream *strm);
+static pj_status_t factory_init (pjmedia_aud_dev_factory *f);
+static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f);
+static unsigned    factory_get_dev_count (pjmedia_aud_dev_factory *f);
+static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_dev_info *info);
+static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_param *param);
+static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
+        const pjmedia_aud_param *param,
+        pjmedia_aud_rec_cb rec_cb,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data,
+        pjmedia_aud_stream **p_aud_strm);
+
+static pj_status_t stream_get_param (pjmedia_aud_stream *strm,
+                                     pjmedia_aud_param *param);
+static pj_status_t stream_get_cap (pjmedia_aud_stream *strm,
+                                   pjmedia_aud_dev_cap cap,
+                                   void *value);
+static pj_status_t stream_set_cap (pjmedia_aud_stream *strm,
+                                   pjmedia_aud_dev_cap cap,
+                                   const void *value);
+static pj_status_t stream_start (pjmedia_aud_stream *strm);
+static pj_status_t stream_stop (pjmedia_aud_stream *strm);
+static pj_status_t stream_destroy (pjmedia_aud_stream *strm);
 
 
 /* Operations */
-static pjmedia_aud_dev_factory_op factory_op =
-{
+static pjmedia_aud_dev_factory_op factory_op = {
     &factory_init,
     &factory_destroy,
     &factory_get_dev_count,
@@ -168,8 +165,7 @@ static pjmedia_aud_dev_factory_op factory_op =
     &factory_create_stream
 };
 
-static pjmedia_aud_stream_op stream_op = 
-{
+static pjmedia_aud_stream_op stream_op = {
     &stream_get_param,
     &stream_get_cap,
     &stream_set_cap,
@@ -186,32 +182,31 @@ static pjmedia_aud_stream_op stream_op =
 /*
  * Utility: print sound device error
  */
-static void snd_perror(const char *title, TInt rc)
+static void snd_perror (const char *title, TInt rc)
 {
-    PJ_LOG(1,(THIS_FILE, "%s (error code=%d)", title, rc));
+    PJ_LOG (1, (THIS_FILE, "%s (error code=%d)", title, rc));
 }
 
-typedef void(*PjAudioCallback)(TAPSCommBuffer &buf, void *user_data);
+typedef void (*PjAudioCallback) (TAPSCommBuffer &buf, void *user_data);
 
 /**
  * Abstract class for handler of callbacks from APS client.
  */
 class MQueueHandlerObserver
 {
-public:
-    MQueueHandlerObserver(PjAudioCallback RecCb_, PjAudioCallback PlayCb_,
-			  void *UserData_)
-    : RecCb(RecCb_), PlayCb(PlayCb_), UserData(UserData_)
-    {}
-
-    virtual void InputStreamInitialized(const TInt aStatus) = 0;
-    virtual void OutputStreamInitialized(const TInt aStatus) = 0;
-    virtual void NotifyError(const TInt aError) = 0;
-
-public:
-    PjAudioCallback RecCb;
-    PjAudioCallback PlayCb;
-    void *UserData;
+    public:
+        MQueueHandlerObserver (PjAudioCallback RecCb_, PjAudioCallback PlayCb_,
+                               void *UserData_)
+                : RecCb (RecCb_), PlayCb (PlayCb_), UserData (UserData_) {}
+
+        virtual void InputStreamInitialized (const TInt aStatus) = 0;
+        virtual void OutputStreamInitialized (const TInt aStatus) = 0;
+        virtual void NotifyError (const TInt aError) = 0;
+
+    public:
+        PjAudioCallback RecCb;
+        PjAudioCallback PlayCb;
+        void *UserData;
 };
 
 /**
@@ -219,148 +214,158 @@ public:
  */
 class CQueueHandler : public CActive
 {
-public:
-    // Types of queue handler
-    enum TQueueHandlerType {
-        ERecordCommQueue,
-        EPlayCommQueue,
-        ERecordQueue,
-        EPlayQueue
-    };
-
-    // The order corresponds to the APS Server state, do not change!
-    enum TState {
-    	EAPSPlayerInitialize        = 1,
-    	EAPSRecorderInitialize      = 2,
-    	EAPSPlayData                = 3,
-    	EAPSRecordData              = 4,
-    	EAPSPlayerInitComplete      = 5,
-    	EAPSRecorderInitComplete    = 6
-    };
-
-    static CQueueHandler* NewL(MQueueHandlerObserver* aObserver,
-			       RMsgQueue<TAPSCommBuffer>* aQ,
-			       RMsgQueue<TAPSCommBuffer>* aWriteQ,
-			       TQueueHandlerType aType)
-    {
-	CQueueHandler* self = new (ELeave) CQueueHandler(aObserver, aQ, aWriteQ,
-							 aType);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-    }
-
-    // Destructor
-    ~CQueueHandler() { Cancel(); }
+    public:
+        // Types of queue handler
+        enum TQueueHandlerType {
+            ERecordCommQueue,
+            EPlayCommQueue,
+            ERecordQueue,
+            EPlayQueue
+        };
+
+        // The order corresponds to the APS Server state, do not change!
+        enum TState {
+            EAPSPlayerInitialize        = 1,
+            EAPSRecorderInitialize      = 2,
+            EAPSPlayData                = 3,
+            EAPSRecordData              = 4,
+            EAPSPlayerInitComplete      = 5,
+            EAPSRecorderInitComplete    = 6
+        };
+
+        static CQueueHandler* NewL (MQueueHandlerObserver* aObserver,
+                                    RMsgQueue<TAPSCommBuffer>* aQ,
+                                    RMsgQueue<TAPSCommBuffer>* aWriteQ,
+                                    TQueueHandlerType aType) {
+            CQueueHandler* self = new (ELeave) CQueueHandler (aObserver, aQ, aWriteQ,
+                    aType);
+            CleanupStack::PushL (self);
+            self->ConstructL();
+            CleanupStack::Pop (self);
+            return self;
+        }
 
-    // Start listening queue event
-    void Start() {
-	iQ->NotifyDataAvailable(iStatus);
-	SetActive();
-    }
+        // Destructor
+        ~CQueueHandler() {
+            Cancel();
+        }
 
-private:
-    // Constructor
-    CQueueHandler(MQueueHandlerObserver* aObserver,
-		  RMsgQueue<TAPSCommBuffer>* aQ,
-		  RMsgQueue<TAPSCommBuffer>* aWriteQ,
-		  TQueueHandlerType aType)
-	: CActive(CActive::EPriorityHigh),
-	  iQ(aQ), iWriteQ(aWriteQ), iObserver(aObserver), iType(aType)
-    {
-	CActiveScheduler::Add(this);
-
-	// use lower priority for comm queues
-	if ((iType == ERecordCommQueue) || (iType == EPlayCommQueue))
-	    SetPriority(CActive::EPriorityStandard);
-    }
+        // Start listening queue event
+        void Start() {
+            iQ->NotifyDataAvailable (iStatus);
+            SetActive();
+        }
 
-    // Second phase constructor
-    void ConstructL() {}
+    private:
+        // Constructor
+        CQueueHandler (MQueueHandlerObserver* aObserver,
+                       RMsgQueue<TAPSCommBuffer>* aQ,
+                       RMsgQueue<TAPSCommBuffer>* aWriteQ,
+                       TQueueHandlerType aType)
+                : CActive (CActive::EPriorityHigh),
+                iQ (aQ), iWriteQ (aWriteQ), iObserver (aObserver), iType (aType) {
+            CActiveScheduler::Add (this);
+
+            // use lower priority for comm queues
+            if ( (iType == ERecordCommQueue) || (iType == EPlayCommQueue))
+                SetPriority (CActive::EPriorityStandard);
+        }
 
-    // Inherited from CActive
-    void DoCancel() { iQ->CancelDataAvailable(); }
+        // Second phase constructor
+        void ConstructL() {}
 
-    void RunL() {
-	if (iStatus != KErrNone) {
-	    iObserver->NotifyError(iStatus.Int());
-	    return;
+        // Inherited from CActive
+        void DoCancel() {
+            iQ->CancelDataAvailable();
         }
 
-	TAPSCommBuffer buffer;
-	TInt ret = iQ->Receive(buffer);
-
-	if (ret != KErrNone) {
-	    iObserver->NotifyError(ret);
-	    return;
-	}
-
-	switch (iType) {
-	case ERecordQueue:
-	    if (buffer.iCommand == EAPSRecordData) {
-		iObserver->RecCb(buffer, iObserver->UserData);
-	    } else {
-		iObserver->NotifyError(buffer.iStatus);
-	    }
-	    break;
-
-	// Callbacks from the APS main thread
-	case EPlayCommQueue:
-	    switch (buffer.iCommand) {
-		case EAPSPlayData:
-		    if (buffer.iStatus == KErrUnderflow) {
-			iObserver->PlayCb(buffer, iObserver->UserData);
-			iWriteQ->Send(buffer);
-		    }
-		    break;
-		case EAPSPlayerInitialize:
-		    iObserver->NotifyError(buffer.iStatus);
-		    break;
-		case EAPSPlayerInitComplete:
-		    iObserver->OutputStreamInitialized(buffer.iStatus);
-		    break;
-		case EAPSRecorderInitComplete:
-		    iObserver->InputStreamInitialized(buffer.iStatus);
-		    break;
-		default:
-		    iObserver->NotifyError(buffer.iStatus);
-		    break;
-	    }
-	    break;
-
-	// Callbacks from the APS recorder thread
-	case ERecordCommQueue:
-	    switch (buffer.iCommand) {
-		// The APS recorder thread will only report errors
-		// through this handler. All other callbacks will be
-		// sent from the APS main thread through EPlayCommQueue
-		case EAPSRecorderInitialize:
-		case EAPSRecordData:
-		default:
-		    iObserver->NotifyError(buffer.iStatus);
-		    break;
-	    }
-	    break;
-
-	default:
-	    break;
+        void RunL() {
+            if (iStatus != KErrNone) {
+                iObserver->NotifyError (iStatus.Int());
+                return;
+            }
+
+            TAPSCommBuffer buffer;
+            TInt ret = iQ->Receive (buffer);
+
+            if (ret != KErrNone) {
+                iObserver->NotifyError (ret);
+                return;
+            }
+
+            switch (iType) {
+                case ERecordQueue:
+
+                    if (buffer.iCommand == EAPSRecordData) {
+                        iObserver->RecCb (buffer, iObserver->UserData);
+                    } else {
+                        iObserver->NotifyError (buffer.iStatus);
+                    }
+
+                    break;
+
+                    // Callbacks from the APS main thread
+                case EPlayCommQueue:
+
+                    switch (buffer.iCommand) {
+                        case EAPSPlayData:
+
+                            if (buffer.iStatus == KErrUnderflow) {
+                                iObserver->PlayCb (buffer, iObserver->UserData);
+                                iWriteQ->Send (buffer);
+                            }
+
+                            break;
+                        case EAPSPlayerInitialize:
+                            iObserver->NotifyError (buffer.iStatus);
+                            break;
+                        case EAPSPlayerInitComplete:
+                            iObserver->OutputStreamInitialized (buffer.iStatus);
+                            break;
+                        case EAPSRecorderInitComplete:
+                            iObserver->InputStreamInitialized (buffer.iStatus);
+                            break;
+                        default:
+                            iObserver->NotifyError (buffer.iStatus);
+                            break;
+                    }
+
+                    break;
+
+                    // Callbacks from the APS recorder thread
+                case ERecordCommQueue:
+
+                    switch (buffer.iCommand) {
+                            // The APS recorder thread will only report errors
+                            // through this handler. All other callbacks will be
+                            // sent from the APS main thread through EPlayCommQueue
+                        case EAPSRecorderInitialize:
+                        case EAPSRecordData:
+                        default:
+                            iObserver->NotifyError (buffer.iStatus);
+                            break;
+                    }
+
+                    break;
+
+                default:
+                    break;
+            }
+
+            // issue next request
+            iQ->NotifyDataAvailable (iStatus);
+            SetActive();
         }
 
-        // issue next request
-        iQ->NotifyDataAvailable(iStatus);
-        SetActive();
-    }
-
-    TInt RunError(TInt) {
-	return 0;
-    }
+        TInt RunError (TInt) {
+            return 0;
+        }
 
-    // Data
-    RMsgQueue<TAPSCommBuffer>	*iQ;   // (not owned)
-    RMsgQueue<TAPSCommBuffer>	*iWriteQ;   // (not owned)
-    MQueueHandlerObserver	*iObserver; // (not owned)
-    TQueueHandlerType            iType;
+        // Data
+        RMsgQueue<TAPSCommBuffer>	*iQ;   // (not owned)
+        RMsgQueue<TAPSCommBuffer>	*iWriteQ;   // (not owned)
+        MQueueHandlerObserver	*iObserver; // (not owned)
+        TQueueHandlerType            iType;
 };
 
 /*
@@ -368,13 +373,13 @@ private:
  */
 class CPjAudioSetting
 {
-public:
-    TFourCC		 fourcc;
-    TAPSCodecMode	 mode;
-    TBool		 plc;
-    TBool		 vad;
-    TBool		 cng;
-    TBool		 loudspk;
+    public:
+        TFourCC		 fourcc;
+        TAPSCodecMode	 mode;
+        TBool		 plc;
+        TBool		 vad;
+        TBool		 cng;
+        TBool		 loudspk;
 };
 
 /*
@@ -382,101 +387,112 @@ public:
  */
 class CPjAudioEngine : public CBase, MQueueHandlerObserver
 {
-public:
-    enum State
-    {
-	STATE_NULL,
-	STATE_INITIALIZING,
-	STATE_READY,
-	STATE_STREAMING,
-	STATE_PENDING_STOP
-    };
-
-    ~CPjAudioEngine();
-
-    static CPjAudioEngine *NewL(struct aps_stream *parent_strm,
-			        PjAudioCallback rec_cb,
-				PjAudioCallback play_cb,
-				void *user_data,
-				const CPjAudioSetting &setting);
-
-    TInt StartL();
-    void Stop();
-
-    TInt ActivateSpeaker(TBool active);
-    
-    TInt SetVolume(TInt vol) { return iSession.SetVolume(vol); }
-    TInt GetVolume() { return iSession.Volume(); }
-    TInt GetMaxVolume() { return iSession.MaxVolume(); }
-    
-    TInt SetGain(TInt gain) { return iSession.SetGain(gain); }
-    TInt GetGain() { return iSession.Gain(); }
-    TInt GetMaxGain() { return iSession.MaxGain(); }
-
-private:
-    CPjAudioEngine(struct aps_stream *parent_strm,
-		   PjAudioCallback rec_cb,
-		   PjAudioCallback play_cb,
-		   void *user_data,
-		   const CPjAudioSetting &setting);
-    void ConstructL();
-
-    TInt InitPlayL();
-    TInt InitRecL();
-    TInt StartStreamL();
-
-    // Inherited from MQueueHandlerObserver
-    virtual void InputStreamInitialized(const TInt aStatus);
-    virtual void OutputStreamInitialized(const TInt aStatus);
-    virtual void NotifyError(const TInt aError);
-
-    State			 state_;
-    struct aps_stream		*parentStrm_;
-    CPjAudioSetting		 setting_;
-
-    RAPSSession                  iSession;
-    TAPSInitSettings             iPlaySettings;
-    TAPSInitSettings             iRecSettings;
-
-    RMsgQueue<TAPSCommBuffer>    iReadQ;
-    RMsgQueue<TAPSCommBuffer>    iReadCommQ;
-    RMsgQueue<TAPSCommBuffer>    iWriteQ;
-    RMsgQueue<TAPSCommBuffer>    iWriteCommQ;
-
-    CQueueHandler		*iPlayCommHandler;
-    CQueueHandler		*iRecCommHandler;
-    CQueueHandler		*iRecHandler;
+    public:
+        enum State {
+            STATE_NULL,
+            STATE_INITIALIZING,
+            STATE_READY,
+            STATE_STREAMING,
+            STATE_PENDING_STOP
+        };
+
+        ~CPjAudioEngine();
+
+        static CPjAudioEngine *NewL (struct aps_stream *parent_strm,
+                                     PjAudioCallback rec_cb,
+                                     PjAudioCallback play_cb,
+                                     void *user_data,
+                                     const CPjAudioSetting &setting);
+
+        TInt StartL();
+        void Stop();
+
+        TInt ActivateSpeaker (TBool active);
+
+        TInt SetVolume (TInt vol) {
+            return iSession.SetVolume (vol);
+        }
+        TInt GetVolume() {
+            return iSession.Volume();
+        }
+        TInt GetMaxVolume() {
+            return iSession.MaxVolume();
+        }
+
+        TInt SetGain (TInt gain) {
+            return iSession.SetGain (gain);
+        }
+        TInt GetGain() {
+            return iSession.Gain();
+        }
+        TInt GetMaxGain() {
+            return iSession.MaxGain();
+        }
+
+    private:
+        CPjAudioEngine (struct aps_stream *parent_strm,
+                        PjAudioCallback rec_cb,
+                        PjAudioCallback play_cb,
+                        void *user_data,
+                        const CPjAudioSetting &setting);
+        void ConstructL();
+
+        TInt InitPlayL();
+        TInt InitRecL();
+        TInt StartStreamL();
+
+        // Inherited from MQueueHandlerObserver
+        virtual void InputStreamInitialized (const TInt aStatus);
+        virtual void OutputStreamInitialized (const TInt aStatus);
+        virtual void NotifyError (const TInt aError);
+
+        State			 state_;
+        struct aps_stream		*parentStrm_;
+        CPjAudioSetting		 setting_;
+
+        RAPSSession                  iSession;
+        TAPSInitSettings             iPlaySettings;
+        TAPSInitSettings             iRecSettings;
+
+        RMsgQueue<TAPSCommBuffer>    iReadQ;
+        RMsgQueue<TAPSCommBuffer>    iReadCommQ;
+        RMsgQueue<TAPSCommBuffer>    iWriteQ;
+        RMsgQueue<TAPSCommBuffer>    iWriteCommQ;
+
+        CQueueHandler		*iPlayCommHandler;
+        CQueueHandler		*iRecCommHandler;
+        CQueueHandler		*iRecHandler;
 };
 
 
-CPjAudioEngine* CPjAudioEngine::NewL(struct aps_stream *parent_strm,
-				     PjAudioCallback rec_cb,
-				     PjAudioCallback play_cb,
-				     void *user_data,
-				     const CPjAudioSetting &setting)
+CPjAudioEngine* CPjAudioEngine::NewL (struct aps_stream *parent_strm,
+                                      PjAudioCallback rec_cb,
+                                      PjAudioCallback play_cb,
+                                      void *user_data,
+                                      const CPjAudioSetting &setting)
 {
-    CPjAudioEngine* self = new (ELeave) CPjAudioEngine(parent_strm,
-						       rec_cb, play_cb,
-						       user_data,
-						       setting);
-    CleanupStack::PushL(self);
+    CPjAudioEngine* self = new (ELeave) CPjAudioEngine (parent_strm,
+            rec_cb, play_cb,
+            user_data,
+            setting);
+    CleanupStack::PushL (self);
     self->ConstructL();
-    CleanupStack::Pop(self);
+    CleanupStack::Pop (self);
     return self;
 }
 
-CPjAudioEngine::CPjAudioEngine(struct aps_stream *parent_strm,
-			       PjAudioCallback rec_cb,
-			       PjAudioCallback play_cb,
-			       void *user_data,
-			       const CPjAudioSetting &setting)
-      : MQueueHandlerObserver(rec_cb, play_cb, user_data),
-	state_(STATE_NULL),
-	parentStrm_(parent_strm),
-	setting_(setting),
-	iPlayCommHandler(0),
-	iRecCommHandler(0),
-	iRecHandler(0)
+CPjAudioEngine::CPjAudioEngine (struct aps_stream *parent_strm,
+                                PjAudioCallback rec_cb,
+                                PjAudioCallback play_cb,
+                                void *user_data,
+                                const CPjAudioSetting &setting)
+        : MQueueHandlerObserver (rec_cb, play_cb, user_data),
+        state_ (STATE_NULL),
+        parentStrm_ (parent_strm),
+        setting_ (setting),
+        iPlayCommHandler (0),
+        iRecCommHandler (0),
+        iRecHandler (0)
 {
 }
 
@@ -493,49 +509,53 @@ CPjAudioEngine::~CPjAudioEngine()
     // the client session.
     TTime start, now;
     enum { APS_CLOSE_WAIT_TIME = 200 }; /* in msecs */
-    
+
     start.UniversalTime();
+
     do {
-	pj_symbianos_poll(-1, APS_CLOSE_WAIT_TIME);
-	now.UniversalTime();
-    } while (now.MicroSecondsFrom(start) < APS_CLOSE_WAIT_TIME * 1000);
+        pj_symbianos_poll (-1, APS_CLOSE_WAIT_TIME);
+        now.UniversalTime();
+    } while (now.MicroSecondsFrom (start) < APS_CLOSE_WAIT_TIME * 1000);
 
     iSession.Close();
 
     if (state_ == STATE_READY) {
-	if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
-	    iReadQ.Close();
-	    iReadCommQ.Close();
-	}
-	iWriteQ.Close();
-	iWriteCommQ.Close();
+        if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
+            iReadQ.Close();
+            iReadCommQ.Close();
+        }
+
+        iWriteQ.Close();
+        iWriteCommQ.Close();
     }
-    
-    TRACE_((THIS_FILE, "Sound device destroyed"));
+
+    TRACE_ ( (THIS_FILE, "Sound device destroyed"));
 }
 
 TInt CPjAudioEngine::InitPlayL()
 {
-    TInt err = iSession.InitializePlayer(iPlaySettings);
+    TInt err = iSession.InitializePlayer (iPlaySettings);
+
     if (err != KErrNone) {
-	snd_perror("Failed to initialize player", err);
-	return err;
+        snd_perror ("Failed to initialize player", err);
+        return err;
     }
 
     // Open message queues for the output stream
     TBuf<128> buf2 = iPlaySettings.iGlobal;
-    buf2.Append(_L("PlayQueue"));
+    buf2.Append (_L ("PlayQueue"));
     TBuf<128> buf3 = iPlaySettings.iGlobal;
-    buf3.Append(_L("PlayCommQueue"));
+    buf3.Append (_L ("PlayCommQueue"));
 
-    while (iWriteQ.OpenGlobal(buf2))
-	User::After(10);
-    while (iWriteCommQ.OpenGlobal(buf3))
-	User::After(10);
+    while (iWriteQ.OpenGlobal (buf2))
+        User::After (10);
+
+    while (iWriteCommQ.OpenGlobal (buf3))
+        User::After (10);
 
     // Construct message queue handler
-    iPlayCommHandler = CQueueHandler::NewL(this, &iWriteCommQ, &iWriteQ,
-					   CQueueHandler::EPlayCommQueue);
+    iPlayCommHandler = CQueueHandler::NewL (this, &iWriteCommQ, &iWriteQ,
+                                            CQueueHandler::EPlayCommQueue);
 
     // Start observing APS callbacks on output stream message queue
     iPlayCommHandler->Start();
@@ -546,29 +566,31 @@ TInt CPjAudioEngine::InitPlayL()
 TInt CPjAudioEngine::InitRecL()
 {
     // Initialize input stream device
-    TInt err = iSession.InitializeRecorder(iRecSettings);
+    TInt err = iSession.InitializeRecorder (iRecSettings);
+
     if (err != KErrNone && err != KErrAlreadyExists) {
-	snd_perror("Failed to initialize recorder", err);
-	return err;
+        snd_perror ("Failed to initialize recorder", err);
+        return err;
     }
 
     TBuf<128> buf1 = iRecSettings.iGlobal;
-    buf1.Append(_L("RecordQueue"));
+    buf1.Append (_L ("RecordQueue"));
     TBuf<128> buf4 = iRecSettings.iGlobal;
-    buf4.Append(_L("RecordCommQueue"));
+    buf4.Append (_L ("RecordCommQueue"));
 
     // Must wait for APS thread to finish creating message queues
     // before we can open and use them.
-    while (iReadQ.OpenGlobal(buf1))
-	User::After(10);
-    while (iReadCommQ.OpenGlobal(buf4))
-	User::After(10);
+    while (iReadQ.OpenGlobal (buf1))
+        User::After (10);
+
+    while (iReadCommQ.OpenGlobal (buf4))
+        User::After (10);
 
     // Construct message queue handlers
-    iRecHandler = CQueueHandler::NewL(this, &iReadQ, NULL,
-				      CQueueHandler::ERecordQueue);
-    iRecCommHandler = CQueueHandler::NewL(this, &iReadCommQ, NULL,
-					  CQueueHandler::ERecordCommQueue);
+    iRecHandler = CQueueHandler::NewL (this, &iReadQ, NULL,
+                                       CQueueHandler::ERecordQueue);
+    iRecCommHandler = CQueueHandler::NewL (this, &iReadCommQ, NULL,
+                                           CQueueHandler::ERecordCommQueue);
 
     // Start observing APS callbacks from on input stream message queue
     iRecHandler->Start();
@@ -580,10 +602,10 @@ TInt CPjAudioEngine::InitRecL()
 TInt CPjAudioEngine::StartL()
 {
     if (state_ == STATE_READY)
-	return StartStreamL();
+        return StartStreamL();
+
+    PJ_ASSERT_RETURN (state_ == STATE_NULL, PJMEDIA_EAUD_INVOP);
 
-    PJ_ASSERT_RETURN(state_ == STATE_NULL, PJMEDIA_EAUD_INVOP);
-    
     // Even if only capturer are opened, playback thread of APS Server need
     // to be run(?). Since some messages will be delivered via play comm queue.
     state_ = STATE_INITIALIZING;
@@ -594,17 +616,17 @@ TInt CPjAudioEngine::StartL()
 void CPjAudioEngine::Stop()
 {
     if (state_ == STATE_STREAMING) {
-	iSession.Stop();
-	state_ = STATE_READY;
-	TRACE_((THIS_FILE, "Sound device stopped"));
+        iSession.Stop();
+        state_ = STATE_READY;
+        TRACE_ ( (THIS_FILE, "Sound device stopped"));
     } else if (state_ == STATE_INITIALIZING) {
-	// Initialization is on progress, so let's set the state to 
-	// STATE_PENDING_STOP to prevent it starting the stream.
-	state_ = STATE_PENDING_STOP;
-	
-	// Then wait until initialization done.
-	while (state_ != STATE_READY)
-	    pj_symbianos_poll(-1, 100);
+        // Initialization is on progress, so let's set the state to
+        // STATE_PENDING_STOP to prevent it starting the stream.
+        state_ = STATE_PENDING_STOP;
+
+        // Then wait until initialization done.
+        while (state_ != STATE_READY)
+            pj_symbianos_poll (-1, 100);
     }
 }
 
@@ -613,94 +635,95 @@ void CPjAudioEngine::ConstructL()
     // Recorder settings
     iRecSettings.iFourCC		= setting_.fourcc;
     iRecSettings.iGlobal		= APP_UID;
-    iRecSettings.iPriority		= TMdaPriority(100);
-    iRecSettings.iPreference		= TMdaPriorityPreference(0x05210001);
+    iRecSettings.iPriority		= TMdaPriority (100);
+    iRecSettings.iPreference		= TMdaPriorityPreference (0x05210001);
     iRecSettings.iSettings.iChannels	= EMMFMono;
     iRecSettings.iSettings.iSampleRate	= EMMFSampleRate8000Hz;
 
     // Player settings
     iPlaySettings.iFourCC		= setting_.fourcc;
     iPlaySettings.iGlobal		= APP_UID;
-    iPlaySettings.iPriority		= TMdaPriority(100);
-    iPlaySettings.iPreference		= TMdaPriorityPreference(0x05220001);
+    iPlaySettings.iPriority		= TMdaPriority (100);
+    iPlaySettings.iPreference		= TMdaPriorityPreference (0x05220001);
     iPlaySettings.iSettings.iChannels	= EMMFMono;
     iPlaySettings.iSettings.iSampleRate = EMMFSampleRate8000Hz;
     iPlaySettings.iSettings.iVolume	= 0;
 
-    User::LeaveIfError(iSession.Connect());
+    User::LeaveIfError (iSession.Connect());
 }
 
 TInt CPjAudioEngine::StartStreamL()
 {
-    pj_assert(state_==STATE_READY || state_==STATE_INITIALIZING); 
-    
-    iSession.SetCng(setting_.cng);
-    iSession.SetVadMode(setting_.vad);
-    iSession.SetPlc(setting_.plc);
-    iSession.SetEncoderMode(setting_.mode);
-    iSession.SetDecoderMode(setting_.mode);
-    iSession.ActivateLoudspeaker(setting_.loudspk);
+    pj_assert (state_==STATE_READY || state_==STATE_INITIALIZING);
+
+    iSession.SetCng (setting_.cng);
+    iSession.SetVadMode (setting_.vad);
+    iSession.SetPlc (setting_.plc);
+    iSession.SetEncoderMode (setting_.mode);
+    iSession.SetDecoderMode (setting_.mode);
+    iSession.ActivateLoudspeaker (setting_.loudspk);
 
     // Not only capture
     if (parentStrm_->param.dir != PJMEDIA_DIR_CAPTURE) {
-	iSession.Write();
-	TRACE_((THIS_FILE, "Player started"));
+        iSession.Write();
+        TRACE_ ( (THIS_FILE, "Player started"));
     }
 
     // Not only playback
     if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
-	iSession.Read();
-	TRACE_((THIS_FILE, "Recorder started"));
+        iSession.Read();
+        TRACE_ ( (THIS_FILE, "Recorder started"));
     }
 
     state_ = STATE_STREAMING;
-    
+
     return 0;
 }
 
-void CPjAudioEngine::InputStreamInitialized(const TInt aStatus)
+void CPjAudioEngine::InputStreamInitialized (const TInt aStatus)
 {
-    TRACE_((THIS_FILE, "Recorder initialized, err=%d", aStatus));
+    TRACE_ ( (THIS_FILE, "Recorder initialized, err=%d", aStatus));
 
     if (aStatus == KErrNone) {
-	// Don't start the stream since Stop() has been requested. 
-	if (state_ != STATE_PENDING_STOP) {
-	    StartStreamL();
-	} else {
-	    state_ = STATE_READY;
-	}
+        // Don't start the stream since Stop() has been requested.
+        if (state_ != STATE_PENDING_STOP) {
+            StartStreamL();
+        } else {
+            state_ = STATE_READY;
+        }
     }
 }
 
-void CPjAudioEngine::OutputStreamInitialized(const TInt aStatus)
+void CPjAudioEngine::OutputStreamInitialized (const TInt aStatus)
 {
-    TRACE_((THIS_FILE, "Player initialized, err=%d", aStatus));
+    TRACE_ ( (THIS_FILE, "Player initialized, err=%d", aStatus));
 
     if (aStatus == KErrNone) {
-	if (parentStrm_->param.dir == PJMEDIA_DIR_PLAYBACK) {
-	    // Don't start the stream since Stop() has been requested.
-	    if (state_ != STATE_PENDING_STOP) {
-		StartStreamL();
-	    } else {
-		state_ = STATE_READY;
-	    }
-	} else
-	    InitRecL();
+        if (parentStrm_->param.dir == PJMEDIA_DIR_PLAYBACK) {
+            // Don't start the stream since Stop() has been requested.
+            if (state_ != STATE_PENDING_STOP) {
+                StartStreamL();
+            } else {
+                state_ = STATE_READY;
+            }
+        } else
+            InitRecL();
     }
 }
 
-void CPjAudioEngine::NotifyError(const TInt aError)
+void CPjAudioEngine::NotifyError (const TInt aError)
 {
-    snd_perror("Error from CQueueHandler", aError);
+    snd_perror ("Error from CQueueHandler", aError);
 }
 
-TInt CPjAudioEngine::ActivateSpeaker(TBool active)
+TInt CPjAudioEngine::ActivateSpeaker (TBool active)
 {
     if (state_ == STATE_READY || state_ == STATE_STREAMING) {
-        iSession.ActivateLoudspeaker(active);
-        TRACE_((THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
-	return KErrNone;
+        iSession.ActivateLoudspeaker (active);
+        TRACE_ ( (THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
+        return KErrNone;
     }
+
     return KErrNotReady;
 }
 
@@ -708,20 +731,20 @@ TInt CPjAudioEngine::ActivateSpeaker(TBool active)
  * Internal APS callbacks for PCM format
  */
 
-static void RecCbPcm(TAPSCommBuffer &buf, void *user_data)
+static void RecCbPcm (TAPSCommBuffer &buf, void *user_data)
 {
     struct aps_stream *strm = (struct aps_stream*) user_data;
 
     /* Buffer has to contain normal speech. */
-    pj_assert(buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
+    pj_assert (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
 
     /* Detect the recorder G.711 frame size, player frame size will follow
      * this recorder frame size.
      */
     if (aps_g711_frame_len == 0) {
-	aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
-	TRACE_((THIS_FILE, "Detected APS G.711 frame size = %u samples",
-		aps_g711_frame_len));
+        aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
+        TRACE_ ( (THIS_FILE, "Detected APS G.711 frame size = %u samples",
+                  aps_g711_frame_len));
     }
 
     /* Decode APS buffer (coded in G.711) and put the PCM result into rec_buf.
@@ -730,67 +753,68 @@ static void RecCbPcm(TAPSCommBuffer &buf, void *user_data)
     unsigned samples_processed = 0;
 
     while (samples_processed < aps_g711_frame_len) {
-	unsigned samples_to_process;
-	unsigned samples_req;
-
-	samples_to_process = aps_g711_frame_len - samples_processed;
-	samples_req = (strm->param.samples_per_frame /
-		       strm->param.channel_count /
-		       strm->resample_factor) -
-		      strm->rec_buf_len;
-	if (samples_to_process > samples_req)
-	    samples_to_process = samples_req;
-
-	pjmedia_ulaw_decode(&strm->rec_buf[strm->rec_buf_len],
-			    buf.iBuffer.Ptr() + 2 + samples_processed,
-			    samples_to_process);
-
-	strm->rec_buf_len += samples_to_process;
-	samples_processed += samples_to_process;
-
-	/* Buffer is full, time to call parent callback */
-	if (strm->rec_buf_len == strm->param.samples_per_frame / 
-				 strm->param.channel_count /
-				 strm->resample_factor) 
-	{
-	    pjmedia_frame f;
-
-	    /* Need to resample clock rate? */
-	    if (strm->rec_resample) {
-		unsigned resampled = 0;
-		
-		while (resampled < strm->rec_buf_len) {
-		    pjmedia_resample_run(strm->rec_resample, 
-				&strm->rec_buf[resampled],
-				strm->pcm_buf + 
-				resampled * strm->resample_factor);
-		    resampled += 80;
-		}
-		f.buf = strm->pcm_buf;
-	    } else {
-		f.buf = strm->rec_buf;
-	    }
-
-	    /* Need to convert channel count? */
-	    if (strm->param.channel_count != 1) {
-		pjmedia_convert_channel_1ton((pj_int16_t*)f.buf,
-					     (pj_int16_t*)f.buf,
-					     strm->param.channel_count,
-					     strm->param.samples_per_frame /
-					     strm->param.channel_count,
-					     0);
-	    }
-
-	    /* Call parent callback */
-	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-	    f.size = strm->param.samples_per_frame << 1;
-	    strm->rec_cb(strm->user_data, &f);
-	    strm->rec_buf_len = 0;
-	}
+        unsigned samples_to_process;
+        unsigned samples_req;
+
+        samples_to_process = aps_g711_frame_len - samples_processed;
+        samples_req = (strm->param.samples_per_frame /
+                       strm->param.channel_count /
+                       strm->resample_factor) -
+                      strm->rec_buf_len;
+
+        if (samples_to_process > samples_req)
+            samples_to_process = samples_req;
+
+        pjmedia_ulaw_decode (&strm->rec_buf[strm->rec_buf_len],
+                             buf.iBuffer.Ptr() + 2 + samples_processed,
+                             samples_to_process);
+
+        strm->rec_buf_len += samples_to_process;
+        samples_processed += samples_to_process;
+
+        /* Buffer is full, time to call parent callback */
+        if (strm->rec_buf_len == strm->param.samples_per_frame /
+                strm->param.channel_count /
+                strm->resample_factor) {
+            pjmedia_frame f;
+
+            /* Need to resample clock rate? */
+            if (strm->rec_resample) {
+                unsigned resampled = 0;
+
+                while (resampled < strm->rec_buf_len) {
+                    pjmedia_resample_run (strm->rec_resample,
+                                          &strm->rec_buf[resampled],
+                                          strm->pcm_buf +
+                                          resampled * strm->resample_factor);
+                    resampled += 80;
+                }
+
+                f.buf = strm->pcm_buf;
+            } else {
+                f.buf = strm->rec_buf;
+            }
+
+            /* Need to convert channel count? */
+            if (strm->param.channel_count != 1) {
+                pjmedia_convert_channel_1ton ( (pj_int16_t*) f.buf,
+                                               (pj_int16_t*) f.buf,
+                                               strm->param.channel_count,
+                                               strm->param.samples_per_frame /
+                                               strm->param.channel_count,
+                                               0);
+            }
+
+            /* Call parent callback */
+            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+            f.size = strm->param.samples_per_frame << 1;
+            strm->rec_cb (strm->user_data, &f);
+            strm->rec_buf_len = 0;
+        }
     }
 }
 
-static void PlayCbPcm(TAPSCommBuffer &buf, void *user_data)
+static void PlayCbPcm (TAPSCommBuffer &buf, void *user_data)
 {
     struct aps_stream *strm = (struct aps_stream*) user_data;
     unsigned g711_frame_len = aps_g711_frame_len;
@@ -799,79 +823,80 @@ static void PlayCbPcm(TAPSCommBuffer &buf, void *user_data)
     buf.iCommand = CQueueHandler::EAPSPlayData;
     buf.iStatus = 0;
     buf.iBuffer.Zero();
-    buf.iBuffer.Append(1);
-    buf.iBuffer.Append(0);
+    buf.iBuffer.Append (1);
+    buf.iBuffer.Append (0);
 
     /* Assume frame size is 10ms if frame size hasn't been known. */
     if (g711_frame_len == 0)
-	g711_frame_len = 80;
+        g711_frame_len = 80;
 
     /* Call parent stream callback to get PCM samples to play,
      * encode the PCM samples into G.711 and put it into APS buffer.
      */
     unsigned samples_processed = 0;
-    
+
     while (samples_processed < g711_frame_len) {
-	/* Need more samples to play, time to call parent callback */
-	if (strm->play_buf_len == 0) {
-	    pjmedia_frame f;
-	    unsigned samples_got;
-	    
-	    f.size = strm->param.samples_per_frame << 1;
-	    if (strm->play_resample || strm->param.channel_count != 1)
-		f.buf = strm->pcm_buf;
-	    else
-		f.buf = strm->play_buf;
-
-	    /* Call parent callback */
-	    strm->play_cb(strm->user_data, &f);
-	    if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
-		pjmedia_zero_samples((pj_int16_t*)f.buf, 
-				     strm->param.samples_per_frame);
-	    }
-	    
-	    samples_got = strm->param.samples_per_frame / 
-			  strm->param.channel_count /
-			  strm->resample_factor;
-
-	    /* Need to convert channel count? */
-	    if (strm->param.channel_count != 1) {
-		pjmedia_convert_channel_nto1((pj_int16_t*)f.buf,
-					     (pj_int16_t*)f.buf,
-					     strm->param.channel_count,
-					     strm->param.samples_per_frame,
-					     PJ_FALSE,
-					     0);
-	    }
-
-	    /* Need to resample clock rate? */
-	    if (strm->play_resample) {
-		unsigned resampled = 0;
-		
-		while (resampled < samples_got) 
-		{
-		    pjmedia_resample_run(strm->play_resample, 
-				strm->pcm_buf + 
-				resampled * strm->resample_factor,
-				&strm->play_buf[resampled]);
-		    resampled += 80;
-		}
-	    }
-	    
-	    strm->play_buf_len = samples_got;
-	    strm->play_buf_start = 0;
-	}
-
-	unsigned tmp;
-
-	tmp = PJ_MIN(strm->play_buf_len, g711_frame_len - samples_processed);
-	pjmedia_ulaw_encode((pj_uint8_t*)&strm->play_buf[strm->play_buf_start],
-			    &strm->play_buf[strm->play_buf_start],
-			    tmp);
-	buf.iBuffer.Append((TUint8*)&strm->play_buf[strm->play_buf_start], tmp);
-	samples_processed += tmp;
-	strm->play_buf_len -= tmp;
-	strm->play_buf_start += tmp;
+        /* Need more samples to play, time to call parent callback */
+        if (strm->play_buf_len == 0) {
+            pjmedia_frame f;
+            unsigned samples_got;
+
+            f.size = strm->param.samples_per_frame << 1;
+
+            if (strm->play_resample || strm->param.channel_count != 1)
+                f.buf = strm->pcm_buf;
+            else
+                f.buf = strm->play_buf;
+
+            /* Call parent callback */
+            strm->play_cb (strm->user_data, &f);
+
+            if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
+                pjmedia_zero_samples ( (pj_int16_t*) f.buf,
+                                       strm->param.samples_per_frame);
+            }
+
+            samples_got = strm->param.samples_per_frame /
+                          strm->param.channel_count /
+                          strm->resample_factor;
+
+            /* Need to convert channel count? */
+            if (strm->param.channel_count != 1) {
+                pjmedia_convert_channel_nto1 ( (pj_int16_t*) f.buf,
+                                               (pj_int16_t*) f.buf,
+                                               strm->param.channel_count,
+                                               strm->param.samples_per_frame,
+                                               PJ_FALSE,
+                                               0);
+            }
+
+            /* Need to resample clock rate? */
+            if (strm->play_resample) {
+                unsigned resampled = 0;
+
+                while (resampled < samples_got) {
+                    pjmedia_resample_run (strm->play_resample,
+                                          strm->pcm_buf +
+                                          resampled * strm->resample_factor,
+                                          &strm->play_buf[resampled]);
+                    resampled += 80;
+                }
+            }
+
+            strm->play_buf_len = samples_got;
+            strm->play_buf_start = 0;
+        }
+
+        unsigned tmp;
+
+        tmp = PJ_MIN (strm->play_buf_len, g711_frame_len - samples_processed);
+        pjmedia_ulaw_encode ( (pj_uint8_t*) &strm->play_buf[strm->play_buf_start],
+                              &strm->play_buf[strm->play_buf_start],
+                              tmp);
+        buf.iBuffer.Append ( (TUint8*) &strm->play_buf[strm->play_buf_start], tmp);
+        samples_processed += tmp;
+        strm->play_buf_len -= tmp;
+        strm->play_buf_start += tmp;
     }
 }
 
@@ -879,130 +904,127 @@ static void PlayCbPcm(TAPSCommBuffer &buf, void *user_data)
  * Internal APS callbacks for non-PCM format
  */
 
-static void RecCb(TAPSCommBuffer &buf, void *user_data)
+static void RecCb (TAPSCommBuffer &buf, void *user_data)
 {
     struct aps_stream *strm = (struct aps_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->rec_buf;
-    
-    switch(strm->param.ext_fmt.id) {
-    case PJMEDIA_FORMAT_AMR:
-	{
-	    const pj_uint8_t *p = (const pj_uint8_t*)buf.iBuffer.Ptr() + 1;
-	    unsigned len = buf.iBuffer.Length() - 1;
-	    
-	    pjmedia_frame_ext_append_subframe(frame, p, len << 3, 160);
-	    if (frame->samples_cnt == strm->param.samples_per_frame) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_G729:
-	{
-	    /* Check if we got a normal or SID frame. */
-	    if (buf.iBuffer[0] != 0 || buf.iBuffer[1] != 0) {
-		enum { NORMAL_LEN = 22, SID_LEN = 8 };
-		TBitStream *bitstream = (TBitStream*)strm->strm_data;
-		unsigned src_len = buf.iBuffer.Length()- 2;
-		
-		pj_assert(src_len == NORMAL_LEN || src_len == SID_LEN);
-
-		const TDesC8& p = bitstream->CompressG729Frame(
-					    buf.iBuffer.Right(src_len), 
-					    src_len == SID_LEN);
-		
-		pjmedia_frame_ext_append_subframe(frame, p.Ptr(), 
-						  p.Length() << 3, 80);
-	    } else { /* We got null frame. */
-		pjmedia_frame_ext_append_subframe(frame, NULL, 0, 80);
-	    }
-	    
-	    if (frame->samples_cnt == strm->param.samples_per_frame) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-
-    case PJMEDIA_FORMAT_ILBC:
-	{
-	    unsigned samples_got;
-	    
-	    samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
-	    
-	    /* Check if we got a normal frame. */
-	    if (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0) {
-		const pj_uint8_t *p = (const pj_uint8_t*)buf.iBuffer.Ptr() + 2;
-		unsigned len = buf.iBuffer.Length() - 2;
-		
-		pjmedia_frame_ext_append_subframe(frame, p, len << 3,
-						  samples_got);
-	    } else { /* We got null frame. */
-		pjmedia_frame_ext_append_subframe(frame, NULL, 0, samples_got);
-	    }
-	    
-	    if (frame->samples_cnt == strm->param.samples_per_frame) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_PCMU:
-    case PJMEDIA_FORMAT_PCMA:
-	{
-	    unsigned samples_processed = 0;
-	    
-	    /* Make sure it is normal frame. */
-	    pj_assert(buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
-
-	    /* Detect the recorder G.711 frame size, player frame size will 
-	     * follow this recorder frame size.
-	     */
-	    if (aps_g711_frame_len == 0) {
-		aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
-		TRACE_((THIS_FILE, "Detected APS G.711 frame size = %u samples",
-			aps_g711_frame_len));
-	    }
-	    
-	    /* Convert APS buffer format into pjmedia_frame_ext. Whenever 
-	     * samples count in the frame is equal to stream's samples per 
-	     * frame, call parent stream callback.
-	     */
-	    while (samples_processed < aps_g711_frame_len) {
-		unsigned tmp;
-		const pj_uint8_t *pb = (const pj_uint8_t*)buf.iBuffer.Ptr() +
-				       2 + samples_processed;
-    
-		tmp = PJ_MIN(strm->param.samples_per_frame - frame->samples_cnt,
-			     aps_g711_frame_len - samples_processed);
-		
-		pjmedia_frame_ext_append_subframe(frame, pb, tmp << 3, tmp);
-		samples_processed += tmp;
-    
-		if (frame->samples_cnt == strm->param.samples_per_frame) {
-		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		    strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		    frame->samples_cnt = 0;
-		    frame->subframe_cnt = 0;
-		}
-	    }
-	}
-	break;
-	
-    default:
-	break;
+
+    switch (strm->param.ext_fmt.id) {
+        case PJMEDIA_FORMAT_AMR: {
+            const pj_uint8_t *p = (const pj_uint8_t*) buf.iBuffer.Ptr() + 1;
+            unsigned len = buf.iBuffer.Length() - 1;
+
+            pjmedia_frame_ext_append_subframe (frame, p, len << 3, 160);
+
+            if (frame->samples_cnt == strm->param.samples_per_frame) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_G729: {
+            /* Check if we got a normal or SID frame. */
+            if (buf.iBuffer[0] != 0 || buf.iBuffer[1] != 0) {
+                enum { NORMAL_LEN = 22, SID_LEN = 8 };
+                TBitStream *bitstream = (TBitStream*) strm->strm_data;
+                unsigned src_len = buf.iBuffer.Length()- 2;
+
+                pj_assert (src_len == NORMAL_LEN || src_len == SID_LEN);
+
+                const TDesC8& p = bitstream->CompressG729Frame (
+                                      buf.iBuffer.Right (src_len),
+                                      src_len == SID_LEN);
+
+                pjmedia_frame_ext_append_subframe (frame, p.Ptr(),
+                                                   p.Length() << 3, 80);
+            } else { /* We got null frame. */
+                pjmedia_frame_ext_append_subframe (frame, NULL, 0, 80);
+            }
+
+            if (frame->samples_cnt == strm->param.samples_per_frame) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_ILBC: {
+            unsigned samples_got;
+
+            samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
+
+            /* Check if we got a normal frame. */
+            if (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0) {
+                const pj_uint8_t *p = (const pj_uint8_t*) buf.iBuffer.Ptr() + 2;
+                unsigned len = buf.iBuffer.Length() - 2;
+
+                pjmedia_frame_ext_append_subframe (frame, p, len << 3,
+                                                   samples_got);
+            } else { /* We got null frame. */
+                pjmedia_frame_ext_append_subframe (frame, NULL, 0, samples_got);
+            }
+
+            if (frame->samples_cnt == strm->param.samples_per_frame) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_PCMU:
+        case PJMEDIA_FORMAT_PCMA: {
+            unsigned samples_processed = 0;
+
+            /* Make sure it is normal frame. */
+            pj_assert (buf.iBuffer[0] == 1 && buf.iBuffer[1] == 0);
+
+            /* Detect the recorder G.711 frame size, player frame size will
+             * follow this recorder frame size.
+             */
+            if (aps_g711_frame_len == 0) {
+                aps_g711_frame_len = buf.iBuffer.Length() < 160? 80 : 160;
+                TRACE_ ( (THIS_FILE, "Detected APS G.711 frame size = %u samples",
+                          aps_g711_frame_len));
+            }
+
+            /* Convert APS buffer format into pjmedia_frame_ext. Whenever
+             * samples count in the frame is equal to stream's samples per
+             * frame, call parent stream callback.
+             */
+            while (samples_processed < aps_g711_frame_len) {
+                unsigned tmp;
+                const pj_uint8_t *pb = (const pj_uint8_t*) buf.iBuffer.Ptr() +
+                                       2 + samples_processed;
+
+                tmp = PJ_MIN (strm->param.samples_per_frame - frame->samples_cnt,
+                              aps_g711_frame_len - samples_processed);
+
+                pjmedia_frame_ext_append_subframe (frame, pb, tmp << 3, tmp);
+                samples_processed += tmp;
+
+                if (frame->samples_cnt == strm->param.samples_per_frame) {
+                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                    strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                    frame->samples_cnt = 0;
+                    frame->subframe_cnt = 0;
+                }
+            }
+        }
+        break;
+
+        default:
+            break;
     }
 }
 
-static void PlayCb(TAPSCommBuffer &buf, void *user_data)
+static void PlayCb (TAPSCommBuffer &buf, void *user_data)
 {
     struct aps_stream *strm = (struct aps_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->play_buf;
@@ -1012,202 +1034,202 @@ static void PlayCb(TAPSCommBuffer &buf, void *user_data)
     buf.iStatus = 0;
     buf.iBuffer.Zero();
 
-    switch(strm->param.ext_fmt.id) {
-    case PJMEDIA_FORMAT_AMR:
-	{
-	    if (frame->samples_cnt == 0) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-	    }
-
-	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		pjmedia_frame_ext_subframe *sf;
-		unsigned samples_cnt;
-		
-		sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		
-		if (sf->data && sf->bitlen) {
-		    /* AMR header for APS is one byte, the format (may be!):
-		     * 0xxxxy00, where xxxx:frame type, y:not sure. 
-		     */
-		    unsigned len = (sf->bitlen+7)>>3;
-		    enum {SID_FT = 8 };
-		    pj_uint8_t amr_header = 4, ft = SID_FT;
-
-		    if (len >= pjmedia_codec_amrnb_framelen[0])
-			ft = pjmedia_codec_amr_get_mode2(PJ_TRUE, len);
-		    
-		    amr_header |= ft << 3;
-		    buf.iBuffer.Append(amr_header);
-		    
-		    buf.iBuffer.Append((TUint8*)sf->data, len);
-		} else {
-		    buf.iBuffer.Append(0);
-		}
-
-		pjmedia_frame_ext_pop_subframes(frame, 1);
-	    
-	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
-		buf.iBuffer.Append(0);
-		
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_G729:
-	{
-	    if (frame->samples_cnt == 0) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-	    }
-
-	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		pjmedia_frame_ext_subframe *sf;
-		unsigned samples_cnt;
-		
-		sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		
-		if (sf->data && sf->bitlen) {
-		    enum { NORMAL_LEN = 10, SID_LEN = 2 };
-		    pj_bool_t sid_frame = ((sf->bitlen >> 3) == SID_LEN);
-		    TBitStream *bitstream = (TBitStream*)strm->strm_data;
-		    const TPtrC8 src(sf->data, sf->bitlen>>3);
-		    const TDesC8 &dst = bitstream->ExpandG729Frame(src,
-								   sid_frame); 
-		    if (sid_frame) {
-			buf.iBuffer.Append(2);
-			buf.iBuffer.Append(0);
-		    } else {
-			buf.iBuffer.Append(1);
-			buf.iBuffer.Append(0);
-		    }
-		    buf.iBuffer.Append(dst);
-		} else {
-		    buf.iBuffer.Append(2);
-		    buf.iBuffer.Append(0);
-		    buf.iBuffer.AppendFill(0, 22);
-		}
-
-		pjmedia_frame_ext_pop_subframes(frame, 1);
-	    
-	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
-	        buf.iBuffer.Append(2);
-	        buf.iBuffer.Append(0);
-	        buf.iBuffer.AppendFill(0, 22);
-		
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_ILBC:
-	{
-	    if (frame->samples_cnt == 0) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-	    }
-
-	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		pjmedia_frame_ext_subframe *sf;
-		unsigned samples_cnt;
-		
-		sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		
-		pj_assert((strm->param.ext_fmt.bitrate == 15200 && 
-			   samples_cnt == 160) ||
-			  (strm->param.ext_fmt.bitrate != 15200 &&
-			   samples_cnt == 240));
-		
-		if (sf->data && sf->bitlen) {
-		    buf.iBuffer.Append(1);
-		    buf.iBuffer.Append(0);
-		    buf.iBuffer.Append((TUint8*)sf->data, sf->bitlen>>3);
-		} else {
-		    buf.iBuffer.Append(0);
-		    buf.iBuffer.Append(0);
-		}
-
-		pjmedia_frame_ext_pop_subframes(frame, 1);
-	    
-	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
-		buf.iBuffer.Append(0);
-		buf.iBuffer.Append(0);
-		
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_PCMU:
-    case PJMEDIA_FORMAT_PCMA:
-	{
-	    unsigned samples_ready = 0;
-	    unsigned samples_req = aps_g711_frame_len;
-	    
-	    /* Assume frame size is 10ms if frame size hasn't been known. */
-	    if (samples_req == 0)
-		samples_req = 80;
-	    
-	    buf.iBuffer.Append(1);
-	    buf.iBuffer.Append(0);
-	    
-	    /* Call parent stream callback to get samples to play. */
-	    while (samples_ready < samples_req) {
-		if (frame->samples_cnt == 0) {
-		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		    strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		    pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			      frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-		}
-    
-		if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		    pjmedia_frame_ext_subframe *sf;
-		    unsigned samples_cnt;
-		    
-		    sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		    if (sf->data && sf->bitlen) {
-			buf.iBuffer.Append((TUint8*)sf->data, sf->bitlen>>3);
-		    } else {
-			pj_uint8_t silc;
-			silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
-				pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
-			buf.iBuffer.AppendFill(silc, samples_cnt);
-		    }
-		    samples_ready += samples_cnt;
-		    
-		    pjmedia_frame_ext_pop_subframes(frame, 1);
-		
-		} else { /* PJMEDIA_FRAME_TYPE_NONE */
-		    pj_uint8_t silc;
-		    
-		    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
-			    pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
-		    buf.iBuffer.AppendFill(silc, samples_req - samples_ready);
-
-		    samples_ready = samples_req;
-		    frame->samples_cnt = 0;
-		    frame->subframe_cnt = 0;
-		}
-	    }
-	}
-	break;
-	
-    default:
-	break;
+    switch (strm->param.ext_fmt.id) {
+        case PJMEDIA_FORMAT_AMR: {
+            if (frame->samples_cnt == 0) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+            }
+
+            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                pjmedia_frame_ext_subframe *sf;
+                unsigned samples_cnt;
+
+                sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                if (sf->data && sf->bitlen) {
+                    /* AMR header for APS is one byte, the format (may be!):
+                     * 0xxxxy00, where xxxx:frame type, y:not sure.
+                     */
+                    unsigned len = (sf->bitlen+7) >>3;
+                    enum {SID_FT = 8 };
+                    pj_uint8_t amr_header = 4, ft = SID_FT;
+
+                    if (len >= pjmedia_codec_amrnb_framelen[0])
+                        ft = pjmedia_codec_amr_get_mode2 (PJ_TRUE, len);
+
+                    amr_header |= ft << 3;
+                    buf.iBuffer.Append (amr_header);
+
+                    buf.iBuffer.Append ( (TUint8*) sf->data, len);
+                } else {
+                    buf.iBuffer.Append (0);
+                }
+
+                pjmedia_frame_ext_pop_subframes (frame, 1);
+
+            } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                buf.iBuffer.Append (0);
+
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_G729: {
+            if (frame->samples_cnt == 0) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+            }
+
+            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                pjmedia_frame_ext_subframe *sf;
+                unsigned samples_cnt;
+
+                sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                if (sf->data && sf->bitlen) {
+                    enum { NORMAL_LEN = 10, SID_LEN = 2 };
+                    pj_bool_t sid_frame = ( (sf->bitlen >> 3) == SID_LEN);
+                    TBitStream *bitstream = (TBitStream*) strm->strm_data;
+                    const TPtrC8 src (sf->data, sf->bitlen>>3);
+                    const TDesC8 &dst = bitstream->ExpandG729Frame (src,
+                                        sid_frame);
+
+                    if (sid_frame) {
+                        buf.iBuffer.Append (2);
+                        buf.iBuffer.Append (0);
+                    } else {
+                        buf.iBuffer.Append (1);
+                        buf.iBuffer.Append (0);
+                    }
+
+                    buf.iBuffer.Append (dst);
+                } else {
+                    buf.iBuffer.Append (2);
+                    buf.iBuffer.Append (0);
+                    buf.iBuffer.AppendFill (0, 22);
+                }
+
+                pjmedia_frame_ext_pop_subframes (frame, 1);
+
+            } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                buf.iBuffer.Append (2);
+                buf.iBuffer.Append (0);
+                buf.iBuffer.AppendFill (0, 22);
+
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_ILBC: {
+            if (frame->samples_cnt == 0) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+            }
+
+            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                pjmedia_frame_ext_subframe *sf;
+                unsigned samples_cnt;
+
+                sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                pj_assert ( (strm->param.ext_fmt.bitrate == 15200 &&
+                             samples_cnt == 160) ||
+                            (strm->param.ext_fmt.bitrate != 15200 &&
+                             samples_cnt == 240));
+
+                if (sf->data && sf->bitlen) {
+                    buf.iBuffer.Append (1);
+                    buf.iBuffer.Append (0);
+                    buf.iBuffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
+                } else {
+                    buf.iBuffer.Append (0);
+                    buf.iBuffer.Append (0);
+                }
+
+                pjmedia_frame_ext_pop_subframes (frame, 1);
+
+            } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                buf.iBuffer.Append (0);
+                buf.iBuffer.Append (0);
+
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_PCMU:
+        case PJMEDIA_FORMAT_PCMA: {
+            unsigned samples_ready = 0;
+            unsigned samples_req = aps_g711_frame_len;
+
+            /* Assume frame size is 10ms if frame size hasn't been known. */
+            if (samples_req == 0)
+                samples_req = 80;
+
+            buf.iBuffer.Append (1);
+            buf.iBuffer.Append (0);
+
+            /* Call parent stream callback to get samples to play. */
+            while (samples_ready < samples_req) {
+                if (frame->samples_cnt == 0) {
+                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                    strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                    pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                               frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+                }
+
+                if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                    pjmedia_frame_ext_subframe *sf;
+                    unsigned samples_cnt;
+
+                    sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                    if (sf->data && sf->bitlen) {
+                        buf.iBuffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
+                    } else {
+                        pj_uint8_t silc;
+                        silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
+                               pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
+                        buf.iBuffer.AppendFill (silc, samples_cnt);
+                    }
+
+                    samples_ready += samples_cnt;
+
+                    pjmedia_frame_ext_pop_subframes (frame, 1);
+
+                } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                    pj_uint8_t silc;
+
+                    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
+                           pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
+                    buf.iBuffer.AppendFill (silc, samples_req - samples_ready);
+
+                    samples_ready = samples_req;
+                    frame->samples_cnt = 0;
+                    frame->subframe_cnt = 0;
+                }
+            }
+        }
+        break;
+
+        default:
+            break;
     }
 }
 
@@ -1220,19 +1242,19 @@ static void PlayCb(TAPSCommBuffer &buf, void *user_data)
  * C compatible declaration of APS factory.
  */
 PJ_BEGIN_DECL
-PJ_DECL(pjmedia_aud_dev_factory*) pjmedia_aps_factory(pj_pool_factory *pf);
+PJ_DECL (pjmedia_aud_dev_factory*) pjmedia_aps_factory (pj_pool_factory *pf);
 PJ_END_DECL
 
 /*
  * Init APS audio driver.
  */
-PJ_DEF(pjmedia_aud_dev_factory*) pjmedia_aps_factory(pj_pool_factory *pf)
+PJ_DEF (pjmedia_aud_dev_factory*) pjmedia_aps_factory (pj_pool_factory *pf)
 {
     struct aps_factory *f;
     pj_pool_t *pool;
 
-    pool = pj_pool_create(pf, "APS", 1000, 1000, NULL);
-    f = PJ_POOL_ZALLOC_T(pool, struct aps_factory);
+    pool = pj_pool_create (pf, "APS", 1000, 1000, NULL);
+    f = PJ_POOL_ZALLOC_T (pool, struct aps_factory);
     f->pf = pf;
     f->pool = pool;
     f->base.op = &factory_op;
@@ -1241,20 +1263,20 @@ PJ_DEF(pjmedia_aud_dev_factory*) pjmedia_aps_factory(pj_pool_factory *pf)
 }
 
 /* API: init factory */
-static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
+static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
 {
-    struct aps_factory *af = (struct aps_factory*)f;
+    struct aps_factory *af = (struct aps_factory*) f;
 
-    pj_ansi_strcpy(af->dev_info.name, "S60 APS");
+    pj_ansi_strcpy (af->dev_info.name, "S60 APS");
     af->dev_info.default_samples_per_sec = 8000;
     af->dev_info.caps = PJMEDIA_AUD_DEV_CAP_EXT_FORMAT |
-			//PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
-			PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
-			PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
-			PJMEDIA_AUD_DEV_CAP_VAD |
-			PJMEDIA_AUD_DEV_CAP_CNG;
-    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE | 
-			  PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+                        //PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
+                        PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
+                        PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
+                        PJMEDIA_AUD_DEV_CAP_VAD |
+                        PJMEDIA_AUD_DEV_CAP_CNG;
+    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE |
+                          PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
     af->dev_info.input_count = 1;
     af->dev_info.output_count = 1;
 
@@ -1279,57 +1301,57 @@ static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
     af->dev_info.ext_fmt[4].id = PJMEDIA_FORMAT_PCMA;
     af->dev_info.ext_fmt[4].bitrate = 64000;
     af->dev_info.ext_fmt[4].vad = PJ_FALSE;
-    
-    PJ_LOG(4, (THIS_FILE, "APS initialized"));
+
+    PJ_LOG (4, (THIS_FILE, "APS initialized"));
 
     return PJ_SUCCESS;
 }
 
 /* API: destroy factory */
-static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f)
+static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f)
 {
-    struct aps_factory *af = (struct aps_factory*)f;
+    struct aps_factory *af = (struct aps_factory*) f;
     pj_pool_t *pool = af->pool;
 
     af->pool = NULL;
-    pj_pool_release(pool);
+    pj_pool_release (pool);
+
+    PJ_LOG (4, (THIS_FILE, "APS destroyed"));
 
-    PJ_LOG(4, (THIS_FILE, "APS destroyed"));
-    
     return PJ_SUCCESS;
 }
 
 /* API: get number of devices */
-static unsigned factory_get_dev_count(pjmedia_aud_dev_factory *f)
+static unsigned factory_get_dev_count (pjmedia_aud_dev_factory *f)
 {
-    PJ_UNUSED_ARG(f);
+    PJ_UNUSED_ARG (f);
     return 1;
 }
 
 /* API: get device info */
-static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
-					unsigned index,
-					pjmedia_aud_dev_info *info)
+static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_dev_info *info)
 {
-    struct aps_factory *af = (struct aps_factory*)f;
+    struct aps_factory *af = (struct aps_factory*) f;
 
-    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_memcpy(info, &af->dev_info, sizeof(*info));
+    pj_memcpy (info, &af->dev_info, sizeof (*info));
 
     return PJ_SUCCESS;
 }
 
 /* API: create default device parameter */
-static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
-					 unsigned index,
-					 pjmedia_aud_param *param)
+static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_param *param)
 {
-    struct aps_factory *af = (struct aps_factory*)f;
+    struct aps_factory *af = (struct aps_factory*) f;
 
-    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_bzero(param, sizeof(*param));
+    pj_bzero (param, sizeof (*param));
     param->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
     param->rec_id = index;
     param->play_id = index;
@@ -1345,14 +1367,14 @@ static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
 
 
 /* API: create stream */
-static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
-					 const pjmedia_aud_param *param,
-					 pjmedia_aud_rec_cb rec_cb,
-					 pjmedia_aud_play_cb play_cb,
-					 void *user_data,
-					 pjmedia_aud_stream **p_aud_strm)
+static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
+        const pjmedia_aud_param *param,
+        pjmedia_aud_rec_cb rec_cb,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data,
+        pjmedia_aud_stream **p_aud_strm)
 {
-    struct aps_factory *af = (struct aps_factory*)f;
+    struct aps_factory *af = (struct aps_factory*) f;
     pj_pool_t *pool;
     struct aps_stream *strm;
 
@@ -1361,103 +1383,97 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
     PjAudioCallback aps_play_cb;
 
     /* Can only support 16bits per sample */
-    PJ_ASSERT_RETURN(param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
 
     /* Supported clock rates:
-     * - for non-PCM format: 8kHz  
-     * - for PCM format: 8kHz and 16kHz  
+     * - for non-PCM format: 8kHz
+     * - for PCM format: 8kHz and 16kHz
      */
-    PJ_ASSERT_RETURN(param->clock_rate == 8000 ||
-		     (param->clock_rate == 16000 && 
-		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-		     PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->clock_rate == 8000 ||
+                      (param->clock_rate == 16000 &&
+                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+                      PJ_EINVAL);
 
     /* Supported channels number:
      * - for non-PCM format: mono
-     * - for PCM format: mono and stereo  
+     * - for PCM format: mono and stereo
      */
-    PJ_ASSERT_RETURN(param->channel_count == 1 || 
-		     (param->channel_count == 2 &&
-		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-		     PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->channel_count == 1 ||
+                      (param->channel_count == 2 &&
+                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+                      PJ_EINVAL);
 
     /* Create and Initialize stream descriptor */
-    pool = pj_pool_create(af->pf, "aps-dev", 1000, 1000, NULL);
-    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
+    pool = pj_pool_create (af->pf, "aps-dev", 1000, 1000, NULL);
+    PJ_ASSERT_RETURN (pool, PJ_ENOMEM);
 
-    strm = PJ_POOL_ZALLOC_T(pool, struct aps_stream);
+    strm = PJ_POOL_ZALLOC_T (pool, struct aps_stream);
     strm->pool = pool;
     strm->param = *param;
 
     if (strm->param.flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT == 0)
-	strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
-	
+        strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
+
     /* Set audio engine fourcc. */
-    switch(strm->param.ext_fmt.id) {
-    case PJMEDIA_FORMAT_L16:
-    case PJMEDIA_FORMAT_PCMU:
-    case PJMEDIA_FORMAT_PCMA:
-	aps_setting.fourcc = TFourCC(KMCPFourCCIdG711);
-	break;
-    case PJMEDIA_FORMAT_AMR:
-	aps_setting.fourcc = TFourCC(KMCPFourCCIdAMRNB);
-	break;
-    case PJMEDIA_FORMAT_G729:
-	aps_setting.fourcc = TFourCC(KMCPFourCCIdG729);
-	break;
-    case PJMEDIA_FORMAT_ILBC:
-	aps_setting.fourcc = TFourCC(KMCPFourCCIdILBC);
-	break;
-    default:
-	aps_setting.fourcc = 0;
-	break;
+    switch (strm->param.ext_fmt.id) {
+        case PJMEDIA_FORMAT_L16:
+        case PJMEDIA_FORMAT_PCMU:
+        case PJMEDIA_FORMAT_PCMA:
+            aps_setting.fourcc = TFourCC (KMCPFourCCIdG711);
+            break;
+        case PJMEDIA_FORMAT_AMR:
+            aps_setting.fourcc = TFourCC (KMCPFourCCIdAMRNB);
+            break;
+        case PJMEDIA_FORMAT_G729:
+            aps_setting.fourcc = TFourCC (KMCPFourCCIdG729);
+            break;
+        case PJMEDIA_FORMAT_ILBC:
+            aps_setting.fourcc = TFourCC (KMCPFourCCIdILBC);
+            break;
+        default:
+            aps_setting.fourcc = 0;
+            break;
     }
 
     /* Set audio engine mode. */
-    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR)
-    {
-	aps_setting.mode = (TAPSCodecMode)strm->param.ext_fmt.bitrate;
-    } 
-    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
-	     strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
-	    (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC  &&
-	     strm->param.ext_fmt.bitrate != 15200))
-    {
-	aps_setting.mode = EULawOr30ms;
-    } 
-    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
-	    (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC &&
-	     strm->param.ext_fmt.bitrate == 15200))
-    {
-	aps_setting.mode = EALawOr20ms;
+    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR) {
+        aps_setting.mode = (TAPSCodecMode) strm->param.ext_fmt.bitrate;
+    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
+               strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
+               (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC  &&
+                strm->param.ext_fmt.bitrate != 15200)) {
+        aps_setting.mode = EULawOr30ms;
+    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
+               (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC &&
+                strm->param.ext_fmt.bitrate == 15200)) {
+        aps_setting.mode = EALawOr20ms;
     }
 
-    /* Disable VAD on L16, G711, and also G729 (G729's VAD potentially 
+    /* Disable VAD on L16, G711, and also G729 (G729's VAD potentially
      * causes noise?).
      */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729)
-    {
-	aps_setting.vad = EFalse;
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
+        aps_setting.vad = EFalse;
     } else {
-	aps_setting.vad = strm->param.ext_fmt.vad;
+        aps_setting.vad = strm->param.ext_fmt.vad;
     }
-    
+
     /* Set other audio engine attributes. */
     aps_setting.plc = strm->param.plc_enabled;
     aps_setting.cng = aps_setting.vad;
-    aps_setting.loudspk = 
-		strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+    aps_setting.loudspk =
+        strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
 
     /* Set audio engine callbacks. */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
-	aps_play_cb = &PlayCbPcm;
-	aps_rec_cb  = &RecCbPcm;
+        aps_play_cb = &PlayCbPcm;
+        aps_rec_cb  = &RecCbPcm;
     } else {
-	aps_play_cb = &PlayCb;
-	aps_rec_cb  = &RecCb;
+        aps_play_cb = &PlayCb;
+        aps_rec_cb  = &RecCb;
     }
 
     strm->rec_cb = rec_cb;
@@ -1466,80 +1482,81 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
     strm->resample_factor = strm->param.clock_rate / 8000;
 
     /* play_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->play_buf = (pj_int16_t*)pj_pool_zalloc(
-					pool, 
-					(strm->param.samples_per_frame / 
-					strm->resample_factor /
-					strm->param.channel_count) << 1);
+    strm->play_buf = (pj_int16_t*) pj_pool_zalloc (
+                         pool,
+                         (strm->param.samples_per_frame /
+                          strm->resample_factor /
+                          strm->param.channel_count) << 1);
     strm->play_buf_len = 0;
     strm->play_buf_start = 0;
 
     /* rec_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->rec_buf  = (pj_int16_t*)pj_pool_zalloc(
-					pool, 
-					(strm->param.samples_per_frame / 
-					strm->resample_factor /
-					strm->param.channel_count) << 1);
+    strm->rec_buf  = (pj_int16_t*) pj_pool_zalloc (
+                         pool,
+                         (strm->param.samples_per_frame /
+                          strm->resample_factor /
+                          strm->param.channel_count) << 1);
     strm->rec_buf_len = 0;
 
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-	TBitStream *g729_bitstream = new TBitStream;
-	
-	PJ_ASSERT_RETURN(g729_bitstream, PJ_ENOMEM);
-	strm->strm_data = (void*)g729_bitstream;
+        TBitStream *g729_bitstream = new TBitStream;
+
+        PJ_ASSERT_RETURN (g729_bitstream, PJ_ENOMEM);
+        strm->strm_data = (void*) g729_bitstream;
     }
-	
+
     /* Init resampler when format is PCM and clock rate is not 8kHz */
-    if (strm->param.clock_rate != 8000 && 
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16)
-    {
-	pj_status_t status;
-	
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    /* Create resample for recorder */
-	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
-					      8000,
-					      strm->param.clock_rate,
-					      80,
-					      &strm->rec_resample);
-	    if (status != PJ_SUCCESS)
-		return status;
-	}
-    
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    /* Create resample for player */
-	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
-					      strm->param.clock_rate,
-					      8000,
-					      80 * strm->resample_factor,
-					      &strm->play_resample);
-	    if (status != PJ_SUCCESS)
-		return status;
-	}
+    if (strm->param.clock_rate != 8000 &&
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
+        pj_status_t status;
+
+        if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+            /* Create resample for recorder */
+            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
+                                              8000,
+                                              strm->param.clock_rate,
+                                              80,
+                                              &strm->rec_resample);
+
+            if (status != PJ_SUCCESS)
+                return status;
+        }
+
+        if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+            /* Create resample for player */
+            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
+                                              strm->param.clock_rate,
+                                              8000,
+                                              80 * strm->resample_factor,
+                                              &strm->play_resample);
+
+            if (status != PJ_SUCCESS)
+                return status;
+        }
     }
 
     /* Create PCM buffer, when the clock rate is not 8kHz or not mono */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 &&
-	(strm->resample_factor > 1 || strm->param.channel_count != 1)) 
-    {
-	strm->pcm_buf = (pj_int16_t*)pj_pool_zalloc(pool, 
-					strm->param.samples_per_frame << 1);
+            (strm->resample_factor > 1 || strm->param.channel_count != 1)) {
+        strm->pcm_buf = (pj_int16_t*) pj_pool_zalloc (pool,
+                        strm->param.samples_per_frame << 1);
     }
 
-    
+
     /* Create the audio engine. */
-    TRAPD(err, strm->engine = CPjAudioEngine::NewL(strm,
-						   aps_rec_cb, aps_play_cb,
-						   strm, aps_setting));
+    TRAPD (err, strm->engine = CPjAudioEngine::NewL (strm,
+                               aps_rec_cb, aps_play_cb,
+                               strm, aps_setting));
+
     if (err != KErrNone) {
-    	pj_pool_release(pool);
-	return PJ_RETURN_OS_ERROR(err);
+        pj_pool_release (pool);
+        return PJ_RETURN_OS_ERROR (err);
     }
 
     /* Apply output volume setting if specified */
     if (param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING) {
-	stream_set_cap(&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, 
-		       &param->output_vol);
+        stream_set_cap (&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+                        &param->output_vol);
     }
 
     /* Done */
@@ -1550,193 +1567,204 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
 }
 
 /* API: Get stream info. */
-static pj_status_t stream_get_param(pjmedia_aud_stream *s,
-				    pjmedia_aud_param *pi)
+static pj_status_t stream_get_param (pjmedia_aud_stream *s,
+                                     pjmedia_aud_param *pi)
 {
-    struct aps_stream *strm = (struct aps_stream*)s;
+    struct aps_stream *strm = (struct aps_stream*) s;
 
-    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
+    PJ_ASSERT_RETURN (strm && pi, PJ_EINVAL);
 
-    pj_memcpy(pi, &strm->param, sizeof(*pi));
+    pj_memcpy (pi, &strm->param, sizeof (*pi));
 
     /* Update the output volume setting */
-    if (stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-		       &pi->output_vol) == PJ_SUCCESS)
-    {
-	pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
+    if (stream_get_cap (s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+                        &pi->output_vol) == PJ_SUCCESS) {
+        pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
     }
-    
+
     return PJ_SUCCESS;
 }
 
 /* API: get capability */
-static pj_status_t stream_get_cap(pjmedia_aud_stream *s,
-				  pjmedia_aud_dev_cap cap,
-				  void *pval)
+static pj_status_t stream_get_cap (pjmedia_aud_stream *s,
+                                   pjmedia_aud_dev_cap cap,
+                                   void *pval)
 {
-    struct aps_stream *strm = (struct aps_stream*)s;
+    struct aps_stream *strm = (struct aps_stream*) s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
 
     switch (cap) {
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    *(pjmedia_aud_dev_route*)pval = strm->param.output_route;
-	    status = PJ_SUCCESS;
-	}
-	break;
-    
-    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
-    /*
-    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_gain = strm->engine->GetMaxGain();
-	    TInt gain = strm->engine->GetGain();
-	    
-	    if (max_gain > 0 && gain >= 0) {
-		*(unsigned*)pval = gain * 100 / max_gain; 
-		status = PJ_SUCCESS;
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    */
-
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_vol = strm->engine->GetMaxVolume();
-	    TInt vol = strm->engine->GetVolume();
-	    
-	    if (max_vol > 0 && vol >= 0) {
-		*(unsigned*)pval = vol * 100 / max_vol; 
-		status = PJ_SUCCESS;
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    default:
-	break;
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                * (pjmedia_aud_dev_route*) pval = strm->param.output_route;
+                status = PJ_SUCCESS;
+            }
+
+            break;
+
+            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
+            /*
+            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+
+                TInt max_gain = strm->engine->GetMaxGain();
+                TInt gain = strm->engine->GetGain();
+
+                if (max_gain > 0 && gain >= 0) {
+            	*(unsigned*)pval = gain * 100 / max_gain;
+            	status = PJ_SUCCESS;
+                } else {
+            	status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+            break;
+            */
+
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
+
+                TInt max_vol = strm->engine->GetMaxVolume();
+                TInt vol = strm->engine->GetVolume();
+
+                if (max_vol > 0 && vol >= 0) {
+                    * (unsigned*) pval = vol * 100 / max_vol;
+                    status = PJ_SUCCESS;
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+
+            break;
+        default:
+            break;
     }
-    
+
     return status;
 }
 
 /* API: set capability */
-static pj_status_t stream_set_cap(pjmedia_aud_stream *s,
-				  pjmedia_aud_dev_cap cap,
-				  const void *pval)
+static pj_status_t stream_set_cap (pjmedia_aud_stream *s,
+                                   pjmedia_aud_dev_cap cap,
+                                   const void *pval)
 {
-    struct aps_stream *strm = (struct aps_stream*)s;
+    struct aps_stream *strm = (struct aps_stream*) s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
 
     switch (cap) {
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    pjmedia_aud_dev_route r = *(const pjmedia_aud_dev_route*)pval;
-	    TInt err;
-
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    switch (r) {
-	    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
-	    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
-		err = strm->engine->ActivateSpeaker(EFalse);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-		break;
-	    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
-		err = strm->engine->ActivateSpeaker(ETrue);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-		break;
-	    default:
-		status = PJ_EINVAL;
-		break;
-	    }
-	    if (status == PJ_SUCCESS)
-		strm->param.output_route = r; 
-	}
-	break;
-
-    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
-    /*
-    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_gain = strm->engine->GetMaxGain();
-	    if (max_gain > 0) {
-		TInt gain, err;
-		
-		gain = *(unsigned*)pval * max_gain / 100;
-		err = strm->engine->SetGain(gain);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	    if (status == PJ_SUCCESS)
-		strm->param.input_vol = *(unsigned*)pval;
-	}
-	break;
-    */
-
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_vol = strm->engine->GetMaxVolume();
-	    if (max_vol > 0) {
-		TInt vol, err;
-		
-		vol = *(unsigned*)pval * max_vol / 100;
-		err = strm->engine->SetVolume(vol);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	    if (status == PJ_SUCCESS)
-		strm->param.output_vol = *(unsigned*)pval;
-	}
-	break;
-    default:
-	break;
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                pjmedia_aud_dev_route r = * (const pjmedia_aud_dev_route*) pval;
+                TInt err;
+
+                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
+
+                switch (r) {
+                    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
+                    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
+                        err = strm->engine->ActivateSpeaker (EFalse);
+                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
+                        break;
+                    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
+                        err = strm->engine->ActivateSpeaker (ETrue);
+                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
+                        break;
+                    default:
+                        status = PJ_EINVAL;
+                        break;
+                }
+
+                if (status == PJ_SUCCESS)
+                    strm->param.output_route = r;
+            }
+
+            break;
+
+            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
+            /*
+            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+
+                TInt max_gain = strm->engine->GetMaxGain();
+                if (max_gain > 0) {
+            	TInt gain, err;
+
+            	gain = *(unsigned*)pval * max_gain / 100;
+            	err = strm->engine->SetGain(gain);
+            	status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+                } else {
+            	status = PJMEDIA_EAUD_NOTREADY;
+                }
+                if (status == PJ_SUCCESS)
+            	strm->param.input_vol = *(unsigned*)pval;
+            }
+            break;
+            */
+
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
+
+                TInt max_vol = strm->engine->GetMaxVolume();
+
+                if (max_vol > 0) {
+                    TInt vol, err;
+
+                    vol = * (unsigned*) pval * max_vol / 100;
+                    err = strm->engine->SetVolume (vol);
+                    status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+
+                if (status == PJ_SUCCESS)
+                    strm->param.output_vol = * (unsigned*) pval;
+            }
+
+            break;
+        default:
+            break;
     }
-    
+
     return status;
 }
 
 /* API: Start stream. */
-static pj_status_t stream_start(pjmedia_aud_stream *strm)
+static pj_status_t stream_start (pjmedia_aud_stream *strm)
 {
-    struct aps_stream *stream = (struct aps_stream*)strm;
+    struct aps_stream *stream = (struct aps_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
     if (stream->engine) {
-	TInt err = stream->engine->StartL();
-    	if (err != KErrNone)
-    	    return PJ_RETURN_OS_ERROR(err);
+        TInt err = stream->engine->StartL();
+
+        if (err != KErrNone)
+            return PJ_RETURN_OS_ERROR (err);
     }
 
     return PJ_SUCCESS;
 }
 
 /* API: Stop stream. */
-static pj_status_t stream_stop(pjmedia_aud_stream *strm)
+static pj_status_t stream_stop (pjmedia_aud_stream *strm)
 {
-    struct aps_stream *stream = (struct aps_stream*)strm;
+    struct aps_stream *stream = (struct aps_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
     if (stream->engine) {
-    	stream->engine->Stop();
+        stream->engine->Stop();
     }
 
     return PJ_SUCCESS;
@@ -1744,28 +1772,29 @@ static pj_status_t stream_stop(pjmedia_aud_stream *strm)
 
 
 /* API: Destroy stream. */
-static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
+static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
 {
-    struct aps_stream *stream = (struct aps_stream*)strm;
+    struct aps_stream *stream = (struct aps_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
-    stream_stop(strm);
+    stream_stop (strm);
 
     delete stream->engine;
     stream->engine = NULL;
 
     if (stream->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-	TBitStream *g729_bitstream = (TBitStream*)stream->strm_data;
-	stream->strm_data = NULL;
-	delete g729_bitstream;
+        TBitStream *g729_bitstream = (TBitStream*) stream->strm_data;
+        stream->strm_data = NULL;
+        delete g729_bitstream;
     }
 
     pj_pool_t *pool;
     pool = stream->pool;
+
     if (pool) {
-    	stream->pool = NULL;
-    	pj_pool_release(pool);
+        stream->pool = NULL;
+        pj_pool_release (pool);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
index 809604ccb5bffaafc62a059130cebb7c4a34af0d..98bcde55579e6389da7118bbdc5db64357a41ad7 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_mda_dev.cpp
@@ -1,5 +1,5 @@
 /* $Id: symb_mda_dev.cpp 2777 2009-06-19 09:15:59Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -43,7 +43,7 @@
  * This file provides sound implementation for Symbian Audio Streaming
  * device. Application using this sound abstraction must link with:
  *  - mediaclientaudiostream.lib, and
- *  - mediaclientaudioinputstream.lib 
+ *  - mediaclientaudioinputstream.lib
  */
 #include <mda/common/audio.h>
 #include <mdaaudiooutputstream.h>
@@ -63,8 +63,7 @@
 
 
 /* MDA factory */
-struct mda_factory
-{
+struct mda_factory {
     pjmedia_aud_dev_factory	 base;
     pj_pool_t			*pool;
     pj_pool_factory		*pf;
@@ -76,11 +75,10 @@ class CPjAudioInputEngine;
 class CPjAudioOutputEngine;
 
 /* MDA stream. */
-struct mda_stream
-{
+struct mda_stream {
     // Base
     pjmedia_aud_stream	 base;			/**< Base class.	*/
-    
+
     // Pool
     pj_pool_t		*pool;			/**< Memory pool.       */
 
@@ -94,38 +92,37 @@ struct mda_stream
 
 
 /* Prototypes */
-static pj_status_t factory_init(pjmedia_aud_dev_factory *f);
-static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f);
-static unsigned    factory_get_dev_count(pjmedia_aud_dev_factory *f);
-static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
-					unsigned index,
-					pjmedia_aud_dev_info *info);
-static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
-					 unsigned index,
-					 pjmedia_aud_param *param);
-static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
-					 const pjmedia_aud_param *param,
-					 pjmedia_aud_rec_cb rec_cb,
-					 pjmedia_aud_play_cb play_cb,
-					 void *user_data,
-					 pjmedia_aud_stream **p_aud_strm);
-
-static pj_status_t stream_get_param(pjmedia_aud_stream *strm,
-				    pjmedia_aud_param *param);
-static pj_status_t stream_get_cap(pjmedia_aud_stream *strm,
-				  pjmedia_aud_dev_cap cap,
-				  void *value);
-static pj_status_t stream_set_cap(pjmedia_aud_stream *strm,
-				  pjmedia_aud_dev_cap cap,
-				  const void *value);
-static pj_status_t stream_start(pjmedia_aud_stream *strm);
-static pj_status_t stream_stop(pjmedia_aud_stream *strm);
-static pj_status_t stream_destroy(pjmedia_aud_stream *strm);
+static pj_status_t factory_init (pjmedia_aud_dev_factory *f);
+static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f);
+static unsigned    factory_get_dev_count (pjmedia_aud_dev_factory *f);
+static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_dev_info *info);
+static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_param *param);
+static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
+        const pjmedia_aud_param *param,
+        pjmedia_aud_rec_cb rec_cb,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data,
+        pjmedia_aud_stream **p_aud_strm);
+
+static pj_status_t stream_get_param (pjmedia_aud_stream *strm,
+                                     pjmedia_aud_param *param);
+static pj_status_t stream_get_cap (pjmedia_aud_stream *strm,
+                                   pjmedia_aud_dev_cap cap,
+                                   void *value);
+static pj_status_t stream_set_cap (pjmedia_aud_stream *strm,
+                                   pjmedia_aud_dev_cap cap,
+                                   const void *value);
+static pj_status_t stream_start (pjmedia_aud_stream *strm);
+static pj_status_t stream_stop (pjmedia_aud_stream *strm);
+static pj_status_t stream_destroy (pjmedia_aud_stream *strm);
 
 
 /* Operations */
-static pjmedia_aud_dev_factory_op factory_op =
-{
+static pjmedia_aud_dev_factory_op factory_op = {
     &factory_init,
     &factory_destroy,
     &factory_get_dev_count,
@@ -134,8 +131,7 @@ static pjmedia_aud_dev_factory_op factory_op =
     &factory_create_stream
 };
 
-static pjmedia_aud_stream_op stream_op = 
-{
+static pjmedia_aud_stream_op stream_op = {
     &stream_get_param,
     &stream_get_cap,
     &stream_set_cap,
@@ -148,46 +144,59 @@ static pjmedia_aud_stream_op stream_op =
 /*
  * Convert clock rate to Symbian's TMdaAudioDataSettings capability.
  */
-static TInt get_clock_rate_cap(unsigned clock_rate)
+static TInt get_clock_rate_cap (unsigned clock_rate)
 {
     switch (clock_rate) {
-    case 8000:  return TMdaAudioDataSettings::ESampleRate8000Hz;
-    case 11025: return TMdaAudioDataSettings::ESampleRate11025Hz;
-    case 12000: return TMdaAudioDataSettings::ESampleRate12000Hz;
-    case 16000: return TMdaAudioDataSettings::ESampleRate16000Hz;
-    case 22050: return TMdaAudioDataSettings::ESampleRate22050Hz;
-    case 24000: return TMdaAudioDataSettings::ESampleRate24000Hz;
-    case 32000: return TMdaAudioDataSettings::ESampleRate32000Hz;
-    case 44100: return TMdaAudioDataSettings::ESampleRate44100Hz;
-    case 48000: return TMdaAudioDataSettings::ESampleRate48000Hz;
-    case 64000: return TMdaAudioDataSettings::ESampleRate64000Hz;
-    case 96000: return TMdaAudioDataSettings::ESampleRate96000Hz;
-    default:
-	return 0;
+        case 8000:
+            return TMdaAudioDataSettings::ESampleRate8000Hz;
+        case 11025:
+            return TMdaAudioDataSettings::ESampleRate11025Hz;
+        case 12000:
+            return TMdaAudioDataSettings::ESampleRate12000Hz;
+        case 16000:
+            return TMdaAudioDataSettings::ESampleRate16000Hz;
+        case 22050:
+            return TMdaAudioDataSettings::ESampleRate22050Hz;
+        case 24000:
+            return TMdaAudioDataSettings::ESampleRate24000Hz;
+        case 32000:
+            return TMdaAudioDataSettings::ESampleRate32000Hz;
+        case 44100:
+            return TMdaAudioDataSettings::ESampleRate44100Hz;
+        case 48000:
+            return TMdaAudioDataSettings::ESampleRate48000Hz;
+        case 64000:
+            return TMdaAudioDataSettings::ESampleRate64000Hz;
+        case 96000:
+            return TMdaAudioDataSettings::ESampleRate96000Hz;
+        default:
+            return 0;
     }
 }
 
 /*
  * Convert number of channels into Symbian's TMdaAudioDataSettings capability.
  */
-static TInt get_channel_cap(unsigned channel_count)
+static TInt get_channel_cap (unsigned channel_count)
 {
     switch (channel_count) {
-    case 1: return TMdaAudioDataSettings::EChannelsMono;
-    case 2: return TMdaAudioDataSettings::EChannelsStereo;
-    default:
-	return 0;
+        case 1:
+            return TMdaAudioDataSettings::EChannelsMono;
+        case 2:
+            return TMdaAudioDataSettings::EChannelsStereo;
+        default:
+            return 0;
     }
 }
 
 /*
  * Utility: print sound device error
  */
-static void snd_perror(const char *title, TInt rc) 
+static void snd_perror (const char *title, TInt rc)
 {
-    PJ_LOG(1,(THIS_FILE, "%s: error code %d", title, rc));
+    PJ_LOG (1, (THIS_FILE, "%s: error code %d", title, rc));
 }
- 
+
 //////////////////////////////////////////////////////////////////////////////
 //
 
@@ -196,93 +205,92 @@ static void snd_perror(const char *title, TInt rc)
  */
 class CPjAudioInputEngine : public CBase, MMdaAudioInputStreamCallback
 {
-public:
-    enum State
-    {
-	STATE_INACTIVE,
-	STATE_ACTIVE,
-    };
-
-    ~CPjAudioInputEngine();
-
-    static CPjAudioInputEngine *NewL(struct mda_stream *parent_strm,
-				     pjmedia_aud_rec_cb rec_cb,
-				     void *user_data);
-
-    static CPjAudioInputEngine *NewLC(struct mda_stream *parent_strm,
-				      pjmedia_aud_rec_cb rec_cb,
-				      void *user_data);
-
-    pj_status_t StartRecord();
-    void Stop();
-
-    pj_status_t SetGain(TInt gain) { 
-	if (iInputStream_) { 
-	    iInputStream_->SetGain(gain);
-	    return PJ_SUCCESS;
-	} else
-	    return PJ_EINVALIDOP;
-    }
-    
-    TInt GetGain() { 
-	if (iInputStream_) { 
-	    return iInputStream_->Gain();
-	} else
-	    return PJ_EINVALIDOP;
-    }
-
-    TInt GetMaxGain() { 
-	if (iInputStream_) { 
-	    return iInputStream_->MaxGain();
-	} else
-	    return PJ_EINVALIDOP;
-    }
-    
-private:
-    State		     state_;
-    struct mda_stream	    *parentStrm_;
-    pjmedia_aud_rec_cb	     recCb_;
-    void		    *userData_;
-    CMdaAudioInputStream    *iInputStream_;
-    HBufC8		    *iStreamBuffer_;
-    TPtr8		     iFramePtr_;
-    TInt		     lastError_;
-    pj_uint32_t		     timeStamp_;
-
-    // cache variable
-    // to avoid calculating frame length repeatedly
-    TInt		     frameLen_;
-    
-    // sometimes recorded size != requested framesize, so let's
-    // provide a buffer to make sure the rec callback returning
-    // framesize as requested.
-    TUint8		    *frameRecBuf_;
-    TInt		     frameRecBufLen_;
-
-    CPjAudioInputEngine(struct mda_stream *parent_strm,
-	    pjmedia_aud_rec_cb rec_cb,
-			void *user_data);
-    void ConstructL();
-    TPtr8 & GetFrame();
-    
-public:
-    virtual void MaiscOpenComplete(TInt aError);
-    virtual void MaiscBufferCopied(TInt aError, const TDesC8 &aBuffer);
-    virtual void MaiscRecordComplete(TInt aError);
+    public:
+        enum State {
+            STATE_INACTIVE,
+            STATE_ACTIVE,
+        };
+
+        ~CPjAudioInputEngine();
+
+        static CPjAudioInputEngine *NewL (struct mda_stream *parent_strm,
+                                          pjmedia_aud_rec_cb rec_cb,
+                                          void *user_data);
+
+        static CPjAudioInputEngine *NewLC (struct mda_stream *parent_strm,
+                                           pjmedia_aud_rec_cb rec_cb,
+                                           void *user_data);
+
+        pj_status_t StartRecord();
+        void Stop();
+
+        pj_status_t SetGain (TInt gain) {
+            if (iInputStream_) {
+                iInputStream_->SetGain (gain);
+                return PJ_SUCCESS;
+            } else
+                return PJ_EINVALIDOP;
+        }
+
+        TInt GetGain() {
+            if (iInputStream_) {
+                return iInputStream_->Gain();
+            } else
+                return PJ_EINVALIDOP;
+        }
+
+        TInt GetMaxGain() {
+            if (iInputStream_) {
+                return iInputStream_->MaxGain();
+            } else
+                return PJ_EINVALIDOP;
+        }
+
+    private:
+        State		     state_;
+        struct mda_stream	    *parentStrm_;
+        pjmedia_aud_rec_cb	     recCb_;
+        void		    *userData_;
+        CMdaAudioInputStream    *iInputStream_;
+        HBufC8		    *iStreamBuffer_;
+        TPtr8		     iFramePtr_;
+        TInt		     lastError_;
+        pj_uint32_t		     timeStamp_;
+
+        // cache variable
+        // to avoid calculating frame length repeatedly
+        TInt		     frameLen_;
+
+        // sometimes recorded size != requested framesize, so let's
+        // provide a buffer to make sure the rec callback returning
+        // framesize as requested.
+        TUint8		    *frameRecBuf_;
+        TInt		     frameRecBufLen_;
+
+        CPjAudioInputEngine (struct mda_stream *parent_strm,
+                             pjmedia_aud_rec_cb rec_cb,
+                             void *user_data);
+        void ConstructL();
+        TPtr8 & GetFrame();
+
+    public:
+        virtual void MaiscOpenComplete (TInt aError);
+        virtual void MaiscBufferCopied (TInt aError, const TDesC8 &aBuffer);
+        virtual void MaiscRecordComplete (TInt aError);
 
 };
 
 
-CPjAudioInputEngine::CPjAudioInputEngine(struct mda_stream *parent_strm,
-					 pjmedia_aud_rec_cb rec_cb,
-					 void *user_data)
-    : state_(STATE_INACTIVE), parentStrm_(parent_strm), 
-      recCb_(rec_cb), userData_(user_data), 
-      iInputStream_(NULL), iStreamBuffer_(NULL), iFramePtr_(0, 0),
-      lastError_(KErrNone), timeStamp_(0),
-      frameLen_(parent_strm->param.samples_per_frame * 
-	        BYTES_PER_SAMPLE),
-      frameRecBuf_(NULL), frameRecBufLen_(0)
+CPjAudioInputEngine::CPjAudioInputEngine (struct mda_stream *parent_strm,
+        pjmedia_aud_rec_cb rec_cb,
+        void *user_data)
+        : state_ (STATE_INACTIVE), parentStrm_ (parent_strm),
+        recCb_ (rec_cb), userData_ (user_data),
+        iInputStream_ (NULL), iStreamBuffer_ (NULL), iFramePtr_ (0, 0),
+        lastError_ (KErrNone), timeStamp_ (0),
+        frameLen_ (parent_strm->param.samples_per_frame *
+                   BYTES_PER_SAMPLE),
+        frameRecBuf_ (NULL), frameRecBufLen_ (0)
 {
 }
 
@@ -292,7 +300,7 @@ CPjAudioInputEngine::~CPjAudioInputEngine()
 
     delete iStreamBuffer_;
     iStreamBuffer_ = NULL;
-    
+
     delete [] frameRecBuf_;
     frameRecBuf_ = NULL;
     frameRecBufLen_ = 0;
@@ -300,33 +308,33 @@ CPjAudioInputEngine::~CPjAudioInputEngine()
 
 void CPjAudioInputEngine::ConstructL()
 {
-    iStreamBuffer_ = HBufC8::NewL(frameLen_);
-    CleanupStack::PushL(iStreamBuffer_);
+    iStreamBuffer_ = HBufC8::NewL (frameLen_);
+    CleanupStack::PushL (iStreamBuffer_);
 
     frameRecBuf_ = new TUint8[frameLen_*2];
-    CleanupStack::PushL(frameRecBuf_);
+    CleanupStack::PushL (frameRecBuf_);
 }
 
-CPjAudioInputEngine *CPjAudioInputEngine::NewLC(struct mda_stream *parent,
-						pjmedia_aud_rec_cb rec_cb,
-					        void *user_data)
+CPjAudioInputEngine *CPjAudioInputEngine::NewLC (struct mda_stream *parent,
+        pjmedia_aud_rec_cb rec_cb,
+        void *user_data)
 {
-    CPjAudioInputEngine* self = new (ELeave) CPjAudioInputEngine(parent,
-								 rec_cb, 
-								 user_data);
-    CleanupStack::PushL(self);
+    CPjAudioInputEngine* self = new (ELeave) CPjAudioInputEngine (parent,
+            rec_cb,
+            user_data);
+    CleanupStack::PushL (self);
     self->ConstructL();
     return self;
 }
 
-CPjAudioInputEngine *CPjAudioInputEngine::NewL(struct mda_stream *parent,
-					       pjmedia_aud_rec_cb rec_cb,
-					       void *user_data)
+CPjAudioInputEngine *CPjAudioInputEngine::NewL (struct mda_stream *parent,
+        pjmedia_aud_rec_cb rec_cb,
+        void *user_data)
 {
-    CPjAudioInputEngine *self = NewLC(parent, rec_cb, user_data);
-    CleanupStack::Pop(self->frameRecBuf_);
-    CleanupStack::Pop(self->iStreamBuffer_);
-    CleanupStack::Pop(self);
+    CPjAudioInputEngine *self = NewLC (parent, rec_cb, user_data);
+    CleanupStack::Pop (self->frameRecBuf_);
+    CleanupStack::Pop (self->iStreamBuffer_);
+    CleanupStack::Pop (self);
     return self;
 }
 
@@ -336,44 +344,46 @@ pj_status_t CPjAudioInputEngine::StartRecord()
 
     // Ignore command if recording is in progress.
     if (state_ == STATE_ACTIVE)
-	return PJ_SUCCESS;
+        return PJ_SUCCESS;
 
     // According to Nokia's AudioStream example, some 2nd Edition, FP2 devices
-    // (such as Nokia 6630) require the stream to be reconstructed each time 
+    // (such as Nokia 6630) require the stream to be reconstructed each time
     // before calling Open() - otherwise the callback never gets called.
     // For uniform behavior, lets just delete/re-create the stream for all
     // devices.
 
     // Destroy existing stream.
     if (iInputStream_) delete iInputStream_;
+
     iInputStream_ = NULL;
 
     // Create the stream.
-    TRAPD(err, iInputStream_ = CMdaAudioInputStream::NewL(*this));
+    TRAPD (err, iInputStream_ = CMdaAudioInputStream::NewL (*this));
+
     if (err != KErrNone)
-	return PJ_RETURN_OS_ERROR(err);
+        return PJ_RETURN_OS_ERROR (err);
 
     // Initialize settings.
     TMdaAudioDataSettings iStreamSettings;
-    iStreamSettings.iChannels = 
-			    get_channel_cap(parentStrm_->param.channel_count);
-    iStreamSettings.iSampleRate = 
-			    get_clock_rate_cap(parentStrm_->param.clock_rate);
-
-    pj_assert(iStreamSettings.iChannels != 0 && 
-	      iStreamSettings.iSampleRate != 0);
-
-    PJ_LOG(4,(THIS_FILE, "Opening sound device for capture, "
-    		         "clock rate=%d, channel count=%d..",
-    		         parentStrm_->param.clock_rate, 
-    		         parentStrm_->param.channel_count));
-    
+    iStreamSettings.iChannels =
+        get_channel_cap (parentStrm_->param.channel_count);
+    iStreamSettings.iSampleRate =
+        get_clock_rate_cap (parentStrm_->param.clock_rate);
+
+    pj_assert (iStreamSettings.iChannels != 0 &&
+               iStreamSettings.iSampleRate != 0);
+
+    PJ_LOG (4, (THIS_FILE, "Opening sound device for capture, "
+                "clock rate=%d, channel count=%d..",
+                parentStrm_->param.clock_rate,
+                parentStrm_->param.channel_count));
+
     // Open stream.
     lastError_ = KRequestPending;
-    iInputStream_->Open(&iStreamSettings);
-    
+    iInputStream_->Open (&iStreamSettings);
+
     // Success
-    PJ_LOG(4,(THIS_FILE, "Sound capture started."));
+    PJ_LOG (4, (THIS_FILE, "Sound capture started."));
     return PJ_SUCCESS;
 }
 
@@ -382,113 +392,118 @@ void CPjAudioInputEngine::Stop()
 {
     // If capture is in progress, stop it.
     if (iInputStream_ && state_ == STATE_ACTIVE) {
-    	lastError_ = KRequestPending;
-    	iInputStream_->Stop();
+        lastError_ = KRequestPending;
+        iInputStream_->Stop();
 
-	// Wait until it's actually stopped
-    	while (lastError_ == KRequestPending)
-	    pj_symbianos_poll(-1, 100);
+        // Wait until it's actually stopped
+        while (lastError_ == KRequestPending)
+            pj_symbianos_poll (-1, 100);
     }
 
     if (iInputStream_) {
-	delete iInputStream_;
-	iInputStream_ = NULL;
+        delete iInputStream_;
+        iInputStream_ = NULL;
     }
-    
+
     state_ = STATE_INACTIVE;
 }
 
 
-TPtr8 & CPjAudioInputEngine::GetFrame() 
+TPtr8 & CPjAudioInputEngine::GetFrame()
 {
     //iStreamBuffer_->Des().FillZ(frameLen_);
-    iFramePtr_.Set((TUint8*)(iStreamBuffer_->Ptr()), frameLen_, frameLen_);
+    iFramePtr_.Set ( (TUint8*) (iStreamBuffer_->Ptr()), frameLen_, frameLen_);
     return iFramePtr_;
 }
 
-void CPjAudioInputEngine::MaiscOpenComplete(TInt aError)
+void CPjAudioInputEngine::MaiscOpenComplete (TInt aError)
 {
     lastError_ = aError;
+
     if (aError != KErrNone) {
-        snd_perror("Error in MaiscOpenComplete()", aError);
-    	return;
+        snd_perror ("Error in MaiscOpenComplete()", aError);
+        return;
     }
 
     // set stream priority to normal and time sensitive
-    iInputStream_->SetPriority(EPriorityNormal, 
-    			       EMdaPriorityPreferenceTime);				
+    iInputStream_->SetPriority (EPriorityNormal,
+                                EMdaPriorityPreferenceTime);
 
     // Read the first frame.
     TPtr8 & frm = GetFrame();
-    TRAPD(err2, iInputStream_->ReadL(frm));
+    TRAPD (err2, iInputStream_->ReadL (frm));
+
     if (err2) {
-    	PJ_LOG(4,(THIS_FILE, "Exception in iInputStream_->ReadL()"));
+        PJ_LOG (4, (THIS_FILE, "Exception in iInputStream_->ReadL()"));
     }
 }
 
-void CPjAudioInputEngine::MaiscBufferCopied(TInt aError, 
-					    const TDesC8 &aBuffer)
+void CPjAudioInputEngine::MaiscBufferCopied (TInt aError,
+        const TDesC8 &aBuffer)
 {
     lastError_ = aError;
+
     if (aError != KErrNone) {
-    	snd_perror("Error in MaiscBufferCopied()", aError);
-	return;
+        snd_perror ("Error in MaiscBufferCopied()", aError);
+        return;
     }
 
     if (frameRecBufLen_ || aBuffer.Length() < frameLen_) {
-	pj_memcpy(frameRecBuf_ + frameRecBufLen_, (void*) aBuffer.Ptr(), aBuffer.Length());
-	frameRecBufLen_ += aBuffer.Length();
+        pj_memcpy (frameRecBuf_ + frameRecBufLen_, (void*) aBuffer.Ptr(), aBuffer.Length());
+        frameRecBufLen_ += aBuffer.Length();
     }
 
     if (frameRecBufLen_) {
-    	while (frameRecBufLen_ >= frameLen_) {
-    	    pjmedia_frame f;
-    	    
-    	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-    	    f.buf = frameRecBuf_;
-    	    f.size = frameLen_;
-    	    f.timestamp.u32.lo = timeStamp_;
-    	    f.bit_info = 0;
-    	    
-    	    // Call the callback.
-	    recCb_(userData_, &f);
-	    // Increment timestamp.
-	    timeStamp_ += parentStrm_->param.samples_per_frame;
-
-	    frameRecBufLen_ -= frameLen_;
-	    pj_memmove(frameRecBuf_, frameRecBuf_+frameLen_, frameRecBufLen_);
-    	}
+        while (frameRecBufLen_ >= frameLen_) {
+            pjmedia_frame f;
+
+            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+            f.buf = frameRecBuf_;
+            f.size = frameLen_;
+            f.timestamp.u32.lo = timeStamp_;
+            f.bit_info = 0;
+
+            // Call the callback.
+            recCb_ (userData_, &f);
+            // Increment timestamp.
+            timeStamp_ += parentStrm_->param.samples_per_frame;
+
+            frameRecBufLen_ -= frameLen_;
+            pj_memmove (frameRecBuf_, frameRecBuf_+frameLen_, frameRecBufLen_);
+        }
     } else {
-	pjmedia_frame f;
-	
-	f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-	f.buf = (void*)aBuffer.Ptr();
-	f.size = aBuffer.Length();
-	f.timestamp.u32.lo = timeStamp_;
-	f.bit_info = 0;
-	
-	// Call the callback.
-	recCb_(userData_, &f);
-	
-	// Increment timestamp.
-	timeStamp_ += parentStrm_->param.samples_per_frame;
+        pjmedia_frame f;
+
+        f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+        f.buf = (void*) aBuffer.Ptr();
+        f.size = aBuffer.Length();
+        f.timestamp.u32.lo = timeStamp_;
+        f.bit_info = 0;
+
+        // Call the callback.
+        recCb_ (userData_, &f);
+
+        // Increment timestamp.
+        timeStamp_ += parentStrm_->param.samples_per_frame;
     }
 
     // Record next frame
     TPtr8 & frm = GetFrame();
-    TRAPD(err2, iInputStream_->ReadL(frm));
+    TRAPD (err2, iInputStream_->ReadL (frm));
+
     if (err2) {
-    	PJ_LOG(4,(THIS_FILE, "Exception in iInputStream_->ReadL()"));
+        PJ_LOG (4, (THIS_FILE, "Exception in iInputStream_->ReadL()"));
     }
 }
 
 
-void CPjAudioInputEngine::MaiscRecordComplete(TInt aError)
+void CPjAudioInputEngine::MaiscRecordComplete (TInt aError)
 {
     lastError_ = aError;
     state_ = STATE_INACTIVE;
+
     if (aError != KErrNone && aError != KErrCancel) {
-    	snd_perror("Error in MaiscRecordComplete()", aError);
+        snd_perror ("Error in MaiscRecordComplete()", aError);
     }
 }
 
@@ -503,77 +518,76 @@ void CPjAudioInputEngine::MaiscRecordComplete(TInt aError)
 
 class CPjAudioOutputEngine : public CBase, MMdaAudioOutputStreamCallback
 {
-public:
-    enum State
-    {
-	STATE_INACTIVE,
-	STATE_ACTIVE,
-    };
-
-    ~CPjAudioOutputEngine();
-
-    static CPjAudioOutputEngine *NewL(struct mda_stream *parent_strm,
-				      pjmedia_aud_play_cb play_cb,
-				      void *user_data);
-
-    static CPjAudioOutputEngine *NewLC(struct mda_stream *parent_strm,
-				       pjmedia_aud_play_cb rec_cb,
-				       void *user_data);
-
-    pj_status_t StartPlay();
-    void Stop();
-
-    pj_status_t SetVolume(TInt vol) { 
-	if (iOutputStream_) { 
-	    iOutputStream_->SetVolume(vol);
-	    return PJ_SUCCESS;
-	} else
-	    return PJ_EINVALIDOP;
-    }
-    
-    TInt GetVolume() { 
-	if (iOutputStream_) { 
-	    return iOutputStream_->Volume();
-	} else
-	    return PJ_EINVALIDOP;
-    }
-
-    TInt GetMaxVolume() { 
-	if (iOutputStream_) { 
-	    return iOutputStream_->MaxVolume();
-	} else
-	    return PJ_EINVALIDOP;
-    }
-
-private:
-    State		     state_;
-    struct mda_stream	    *parentStrm_;
-    pjmedia_aud_play_cb	     playCb_;
-    void		    *userData_;
-    CMdaAudioOutputStream   *iOutputStream_;
-    TUint8		    *frameBuf_;
-    unsigned		     frameBufSize_;
-    TPtrC8		     frame_;
-    TInt		     lastError_;
-    unsigned		     timestamp_;
-
-    CPjAudioOutputEngine(struct mda_stream *parent_strm,
-			 pjmedia_aud_play_cb play_cb,
-			 void *user_data);
-    void ConstructL();
-
-    virtual void MaoscOpenComplete(TInt aError);
-    virtual void MaoscBufferCopied(TInt aError, const TDesC8& aBuffer);
-    virtual void MaoscPlayComplete(TInt aError);
+    public:
+        enum State {
+            STATE_INACTIVE,
+            STATE_ACTIVE,
+        };
+
+        ~CPjAudioOutputEngine();
+
+        static CPjAudioOutputEngine *NewL (struct mda_stream *parent_strm,
+                                           pjmedia_aud_play_cb play_cb,
+                                           void *user_data);
+
+        static CPjAudioOutputEngine *NewLC (struct mda_stream *parent_strm,
+                                            pjmedia_aud_play_cb rec_cb,
+                                            void *user_data);
+
+        pj_status_t StartPlay();
+        void Stop();
+
+        pj_status_t SetVolume (TInt vol) {
+            if (iOutputStream_) {
+                iOutputStream_->SetVolume (vol);
+                return PJ_SUCCESS;
+            } else
+                return PJ_EINVALIDOP;
+        }
+
+        TInt GetVolume() {
+            if (iOutputStream_) {
+                return iOutputStream_->Volume();
+            } else
+                return PJ_EINVALIDOP;
+        }
+
+        TInt GetMaxVolume() {
+            if (iOutputStream_) {
+                return iOutputStream_->MaxVolume();
+            } else
+                return PJ_EINVALIDOP;
+        }
+
+    private:
+        State		     state_;
+        struct mda_stream	    *parentStrm_;
+        pjmedia_aud_play_cb	     playCb_;
+        void		    *userData_;
+        CMdaAudioOutputStream   *iOutputStream_;
+        TUint8		    *frameBuf_;
+        unsigned		     frameBufSize_;
+        TPtrC8		     frame_;
+        TInt		     lastError_;
+        unsigned		     timestamp_;
+
+        CPjAudioOutputEngine (struct mda_stream *parent_strm,
+                              pjmedia_aud_play_cb play_cb,
+                              void *user_data);
+        void ConstructL();
+
+        virtual void MaoscOpenComplete (TInt aError);
+        virtual void MaoscBufferCopied (TInt aError, const TDesC8& aBuffer);
+        virtual void MaoscPlayComplete (TInt aError);
 };
 
 
-CPjAudioOutputEngine::CPjAudioOutputEngine(struct mda_stream *parent_strm,
-					   pjmedia_aud_play_cb play_cb,
-					   void *user_data) 
-: state_(STATE_INACTIVE), parentStrm_(parent_strm), playCb_(play_cb), 
-  userData_(user_data), iOutputStream_(NULL), frameBuf_(NULL),
-  lastError_(KErrNone), timestamp_(0)
+CPjAudioOutputEngine::CPjAudioOutputEngine (struct mda_stream *parent_strm,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data)
+        : state_ (STATE_INACTIVE), parentStrm_ (parent_strm), playCb_ (play_cb),
+        userData_ (user_data), iOutputStream_ (NULL), frameBuf_ (NULL),
+        lastError_ (KErrNone), timestamp_ (0)
 {
 }
 
@@ -581,36 +595,36 @@ CPjAudioOutputEngine::CPjAudioOutputEngine(struct mda_stream *parent_strm,
 void CPjAudioOutputEngine::ConstructL()
 {
     frameBufSize_ = parentStrm_->param.samples_per_frame *
-		    BYTES_PER_SAMPLE;
+                    BYTES_PER_SAMPLE;
     frameBuf_ = new TUint8[frameBufSize_];
 }
 
 CPjAudioOutputEngine::~CPjAudioOutputEngine()
 {
     Stop();
-    delete [] frameBuf_;	
+    delete [] frameBuf_;
 }
 
 CPjAudioOutputEngine *
-CPjAudioOutputEngine::NewLC(struct mda_stream *parent_strm,
-			    pjmedia_aud_play_cb play_cb,
-			    void *user_data)
+CPjAudioOutputEngine::NewLC (struct mda_stream *parent_strm,
+                             pjmedia_aud_play_cb play_cb,
+                             void *user_data)
 {
-    CPjAudioOutputEngine* self = new (ELeave) CPjAudioOutputEngine(parent_strm,
-								   play_cb, 
-								   user_data);
-    CleanupStack::PushL(self);
+    CPjAudioOutputEngine* self = new (ELeave) CPjAudioOutputEngine (parent_strm,
+            play_cb,
+            user_data);
+    CleanupStack::PushL (self);
     self->ConstructL();
     return self;
 }
 
 CPjAudioOutputEngine *
-CPjAudioOutputEngine::NewL(struct mda_stream *parent_strm,
-			   pjmedia_aud_play_cb play_cb,
-			   void *user_data)
+CPjAudioOutputEngine::NewL (struct mda_stream *parent_strm,
+                            pjmedia_aud_play_cb play_cb,
+                            void *user_data)
 {
-    CPjAudioOutputEngine *self = NewLC(parent_strm, play_cb, user_data);
-    CleanupStack::Pop(self);
+    CPjAudioOutputEngine *self = NewLC (parent_strm, play_cb, user_data);
+    CleanupStack::Pop (self);
     return self;
 }
 
@@ -618,38 +632,40 @@ pj_status_t CPjAudioOutputEngine::StartPlay()
 {
     // Ignore command if playing is in progress.
     if (state_ == STATE_ACTIVE)
-	return PJ_SUCCESS;
-    
+        return PJ_SUCCESS;
+
     // Destroy existing stream.
     if (iOutputStream_) delete iOutputStream_;
+
     iOutputStream_ = NULL;
-    
+
     // Create the stream
-    TRAPD(err, iOutputStream_ = CMdaAudioOutputStream::NewL(*this));
+    TRAPD (err, iOutputStream_ = CMdaAudioOutputStream::NewL (*this));
+
     if (err != KErrNone)
-	return PJ_RETURN_OS_ERROR(err);
-    
+        return PJ_RETURN_OS_ERROR (err);
+
     // Initialize settings.
     TMdaAudioDataSettings iStreamSettings;
-    iStreamSettings.iChannels = 
-			    get_channel_cap(parentStrm_->param.channel_count);
-    iStreamSettings.iSampleRate = 
-			    get_clock_rate_cap(parentStrm_->param.clock_rate);
-
-    pj_assert(iStreamSettings.iChannels != 0 && 
-	      iStreamSettings.iSampleRate != 0);
-    
-    PJ_LOG(4,(THIS_FILE, "Opening sound device for playback, "
-    		         "clock rate=%d, channel count=%d..",
-    		         parentStrm_->param.clock_rate, 
-    		         parentStrm_->param.channel_count));
+    iStreamSettings.iChannels =
+        get_channel_cap (parentStrm_->param.channel_count);
+    iStreamSettings.iSampleRate =
+        get_clock_rate_cap (parentStrm_->param.clock_rate);
+
+    pj_assert (iStreamSettings.iChannels != 0 &&
+               iStreamSettings.iSampleRate != 0);
+
+    PJ_LOG (4, (THIS_FILE, "Opening sound device for playback, "
+                "clock rate=%d, channel count=%d..",
+                parentStrm_->param.clock_rate,
+                parentStrm_->param.channel_count));
 
     // Open stream.
     lastError_ = KRequestPending;
-    iOutputStream_->Open(&iStreamSettings);
+    iOutputStream_->Open (&iStreamSettings);
 
     // Success
-    PJ_LOG(4,(THIS_FILE, "Sound playback started"));
+    PJ_LOG (4, (THIS_FILE, "Sound playback started"));
     return PJ_SUCCESS;
 
 }
@@ -658,131 +674,134 @@ void CPjAudioOutputEngine::Stop()
 {
     // Stop stream if it's playing
     if (iOutputStream_ && state_ != STATE_INACTIVE) {
-    	lastError_ = KRequestPending;
-    	iOutputStream_->Stop();
+        lastError_ = KRequestPending;
+        iOutputStream_->Stop();
 
-	// Wait until it's actually stopped
-    	while (lastError_ == KRequestPending)
-	    pj_symbianos_poll(-1, 100);
+        // Wait until it's actually stopped
+        while (lastError_ == KRequestPending)
+            pj_symbianos_poll (-1, 100);
     }
-    
-    if (iOutputStream_) {	
-	delete iOutputStream_;
-	iOutputStream_ = NULL;
+
+    if (iOutputStream_) {
+        delete iOutputStream_;
+        iOutputStream_ = NULL;
     }
-    
+
     state_ = STATE_INACTIVE;
 }
 
-void CPjAudioOutputEngine::MaoscOpenComplete(TInt aError)
+void CPjAudioOutputEngine::MaoscOpenComplete (TInt aError)
 {
     lastError_ = aError;
-    
+
     if (aError==KErrNone) {
-	// output stream opened succesfully, set status to Active
-	state_ = STATE_ACTIVE;
-
-	// set stream properties, 16bit 8KHz mono
-	TMdaAudioDataSettings iSettings;
-	iSettings.iChannels = 
-			get_channel_cap(parentStrm_->param.channel_count);
-	iSettings.iSampleRate = 
-			get_clock_rate_cap(parentStrm_->param.clock_rate);
-
-	iOutputStream_->SetAudioPropertiesL(iSettings.iSampleRate, 
-					    iSettings.iChannels);
-
-	// set volume to 1/2th of stream max volume
-	iOutputStream_->SetVolume(iOutputStream_->MaxVolume()/2);
-	
-	// set stream priority to normal and time sensitive
-	iOutputStream_->SetPriority(EPriorityNormal, 
-				    EMdaPriorityPreferenceTime);				
-
-	// Call callback to retrieve frame from upstream.
-	pjmedia_frame f;
-	pj_status_t status;
-	
-	f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-	f.buf = frameBuf_;
-	f.size = frameBufSize_;
-	f.timestamp.u32.lo = timestamp_;
-	f.bit_info = 0;
-
-	status = playCb_(this->userData_, &f);
-	if (status != PJ_SUCCESS) {
-	    this->Stop();
-	    return;
-	}
-
-	if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
-	    pj_bzero(frameBuf_, frameBufSize_);
-	
-	// Increment timestamp.
-	timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
-
-	// issue WriteL() to write the first audio data block, 
-	// subsequent calls to WriteL() will be issued in 
-	// MMdaAudioOutputStreamCallback::MaoscBufferCopied() 
-	// until whole data buffer is written.
-	frame_.Set(frameBuf_, frameBufSize_);
-	iOutputStream_->WriteL(frame_);
+        // output stream opened succesfully, set status to Active
+        state_ = STATE_ACTIVE;
+
+        // set stream properties, 16bit 8KHz mono
+        TMdaAudioDataSettings iSettings;
+        iSettings.iChannels =
+            get_channel_cap (parentStrm_->param.channel_count);
+        iSettings.iSampleRate =
+            get_clock_rate_cap (parentStrm_->param.clock_rate);
+
+        iOutputStream_->SetAudioPropertiesL (iSettings.iSampleRate,
+                                             iSettings.iChannels);
+
+        // set volume to 1/2th of stream max volume
+        iOutputStream_->SetVolume (iOutputStream_->MaxVolume() /2);
+
+        // set stream priority to normal and time sensitive
+        iOutputStream_->SetPriority (EPriorityNormal,
+                                     EMdaPriorityPreferenceTime);
+
+        // Call callback to retrieve frame from upstream.
+        pjmedia_frame f;
+        pj_status_t status;
+
+        f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+        f.buf = frameBuf_;
+        f.size = frameBufSize_;
+        f.timestamp.u32.lo = timestamp_;
+        f.bit_info = 0;
+
+        status = playCb_ (this->userData_, &f);
+
+        if (status != PJ_SUCCESS) {
+            this->Stop();
+            return;
+        }
+
+        if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
+            pj_bzero (frameBuf_, frameBufSize_);
+
+        // Increment timestamp.
+        timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
+
+        // issue WriteL() to write the first audio data block,
+        // subsequent calls to WriteL() will be issued in
+        // MMdaAudioOutputStreamCallback::MaoscBufferCopied()
+        // until whole data buffer is written.
+        frame_.Set (frameBuf_, frameBufSize_);
+        iOutputStream_->WriteL (frame_);
     } else {
-    	snd_perror("Error in MaoscOpenComplete()", aError);
+        snd_perror ("Error in MaoscOpenComplete()", aError);
     }
 }
 
-void CPjAudioOutputEngine::MaoscBufferCopied(TInt aError, 
-					     const TDesC8& aBuffer)
+void CPjAudioOutputEngine::MaoscBufferCopied (TInt aError,
+        const TDesC8& aBuffer)
 {
-    PJ_UNUSED_ARG(aBuffer);
+    PJ_UNUSED_ARG (aBuffer);
 
     if (aError==KErrNone) {
-    	// Buffer successfully written, feed another one.
-
-	// Call callback to retrieve frame from upstream.
-	pjmedia_frame f;
-	pj_status_t status;
-	
-	f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-	f.buf = frameBuf_;
-	f.size = frameBufSize_;
-	f.timestamp.u32.lo = timestamp_;
-	f.bit_info = 0;
-
-	status = playCb_(this->userData_, &f);
-	if (status != PJ_SUCCESS) {
-	    this->Stop();
-	    return;
-	}
-
-	if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
-	    pj_bzero(frameBuf_, frameBufSize_);
-	
-	// Increment timestamp.
-	timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
-
-	// Write to playback stream.
-	frame_.Set(frameBuf_, frameBufSize_);
-	iOutputStream_->WriteL(frame_);
+        // Buffer successfully written, feed another one.
+
+        // Call callback to retrieve frame from upstream.
+        pjmedia_frame f;
+        pj_status_t status;
+
+        f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+        f.buf = frameBuf_;
+        f.size = frameBufSize_;
+        f.timestamp.u32.lo = timestamp_;
+        f.bit_info = 0;
+
+        status = playCb_ (this->userData_, &f);
+
+        if (status != PJ_SUCCESS) {
+            this->Stop();
+            return;
+        }
+
+        if (f.type != PJMEDIA_FRAME_TYPE_AUDIO)
+            pj_bzero (frameBuf_, frameBufSize_);
+
+        // Increment timestamp.
+        timestamp_ += (frameBufSize_ / BYTES_PER_SAMPLE);
+
+        // Write to playback stream.
+        frame_.Set (frameBuf_, frameBufSize_);
+        iOutputStream_->WriteL (frame_);
 
     } else if (aError==KErrAbort) {
-	// playing was aborted, due to call to CMdaAudioOutputStream::Stop()
-	state_ = STATE_INACTIVE;
+        // playing was aborted, due to call to CMdaAudioOutputStream::Stop()
+        state_ = STATE_INACTIVE;
     } else  {
-	// error writing data to output
-	lastError_ = aError;
-	state_ = STATE_INACTIVE;
-	snd_perror("Error in MaoscBufferCopied()", aError);
+        // error writing data to output
+        lastError_ = aError;
+        state_ = STATE_INACTIVE;
+        snd_perror ("Error in MaoscBufferCopied()", aError);
     }
 }
 
-void CPjAudioOutputEngine::MaoscPlayComplete(TInt aError)
+void CPjAudioOutputEngine::MaoscPlayComplete (TInt aError)
 {
     lastError_ = aError;
     state_ = STATE_INACTIVE;
+
     if (aError != KErrNone && aError != KErrCancel) {
-    	snd_perror("Error in MaoscPlayComplete()", aError);
+        snd_perror ("Error in MaoscPlayComplete()", aError);
     }
 }
 
@@ -794,19 +813,19 @@ void CPjAudioOutputEngine::MaoscPlayComplete(TInt aError)
  * C compatible declaration of MDA factory.
  */
 PJ_BEGIN_DECL
-PJ_DECL(pjmedia_aud_dev_factory*) pjmedia_symb_mda_factory(pj_pool_factory *pf);
+PJ_DECL (pjmedia_aud_dev_factory*) pjmedia_symb_mda_factory (pj_pool_factory *pf);
 PJ_END_DECL
 
 /*
  * Init Symbian audio driver.
  */
-pjmedia_aud_dev_factory* pjmedia_symb_mda_factory(pj_pool_factory *pf)
+pjmedia_aud_dev_factory* pjmedia_symb_mda_factory (pj_pool_factory *pf)
 {
     struct mda_factory *f;
     pj_pool_t *pool;
 
-    pool = pj_pool_create(pf, "symb_aud", 1000, 1000, NULL);
-    f = PJ_POOL_ZALLOC_T(pool, struct mda_factory);
+    pool = pj_pool_create (pf, "symb_aud", 1000, 1000, NULL);
+    f = PJ_POOL_ZALLOC_T (pool, struct mda_factory);
     f->pf = pf;
     f->pool = pool;
     f->base.op = &factory_op;
@@ -815,67 +834,67 @@ pjmedia_aud_dev_factory* pjmedia_symb_mda_factory(pj_pool_factory *pf)
 }
 
 /* API: init factory */
-static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
+static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
 {
-    struct mda_factory *af = (struct mda_factory*)f;
+    struct mda_factory *af = (struct mda_factory*) f;
 
-    pj_ansi_strcpy(af->dev_info.name, "Symbian Audio");
+    pj_ansi_strcpy (af->dev_info.name, "Symbian Audio");
     af->dev_info.default_samples_per_sec = 8000;
     af->dev_info.caps = PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
-			PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
+                        PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
     af->dev_info.input_count = 1;
     af->dev_info.output_count = 1;
 
-    PJ_LOG(4, (THIS_FILE, "Symb Mda initialized"));
+    PJ_LOG (4, (THIS_FILE, "Symb Mda initialized"));
 
     return PJ_SUCCESS;
 }
 
 /* API: destroy factory */
-static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f)
+static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f)
 {
-    struct mda_factory *af = (struct mda_factory*)f;
+    struct mda_factory *af = (struct mda_factory*) f;
     pj_pool_t *pool = af->pool;
 
     af->pool = NULL;
-    pj_pool_release(pool);
+    pj_pool_release (pool);
+
+    PJ_LOG (4, (THIS_FILE, "Symbian Mda destroyed"));
 
-    PJ_LOG(4, (THIS_FILE, "Symbian Mda destroyed"));
-    
     return PJ_SUCCESS;
 }
 
 /* API: get number of devices */
-static unsigned factory_get_dev_count(pjmedia_aud_dev_factory *f)
+static unsigned factory_get_dev_count (pjmedia_aud_dev_factory *f)
 {
-    PJ_UNUSED_ARG(f);
+    PJ_UNUSED_ARG (f);
     return 1;
 }
 
 /* API: get device info */
-static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
-					unsigned index,
-					pjmedia_aud_dev_info *info)
+static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_dev_info *info)
 {
-    struct mda_factory *af = (struct mda_factory*)f;
+    struct mda_factory *af = (struct mda_factory*) f;
 
-    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_memcpy(info, &af->dev_info, sizeof(*info));
+    pj_memcpy (info, &af->dev_info, sizeof (*info));
 
     return PJ_SUCCESS;
 }
 
 /* API: create default device parameter */
-static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
-					 unsigned index,
-					 pjmedia_aud_param *param)
+static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_param *param)
 {
-    struct mda_factory *af = (struct mda_factory*)f;
+    struct mda_factory *af = (struct mda_factory*) f;
 
-    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_bzero(param, sizeof(*param));
+    pj_bzero (param, sizeof (*param));
     param->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
     param->rec_id = index;
     param->play_id = index;
@@ -890,57 +909,59 @@ static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
 
 
 /* API: create stream */
-static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
-					 const pjmedia_aud_param *param,
-					 pjmedia_aud_rec_cb rec_cb,
-					 pjmedia_aud_play_cb play_cb,
-					 void *user_data,
-					 pjmedia_aud_stream **p_aud_strm)
+static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
+        const pjmedia_aud_param *param,
+        pjmedia_aud_rec_cb rec_cb,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data,
+        pjmedia_aud_stream **p_aud_strm)
 {
-    struct mda_factory *mf = (struct mda_factory*)f;
+    struct mda_factory *mf = (struct mda_factory*) f;
     pj_pool_t *pool;
     struct mda_stream *strm;
 
     /* Can only support 16bits per sample raw PCM format. */
-    PJ_ASSERT_RETURN(param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
-    PJ_ASSERT_RETURN((param->flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT)==0 ||
-		     param->ext_fmt.id == PJMEDIA_FORMAT_L16,
-		     PJ_ENOTSUP);
-    
+    PJ_ASSERT_RETURN (param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
+    PJ_ASSERT_RETURN ( (param->flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT) ==0 ||
+                       param->ext_fmt.id == PJMEDIA_FORMAT_L16,
+                       PJ_ENOTSUP);
+
     /* It seems that MDA recorder only supports for mono channel. */
-    PJ_ASSERT_RETURN(param->channel_count == 1, PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->channel_count == 1, PJ_EINVAL);
 
     /* Create and Initialize stream descriptor */
-    pool = pj_pool_create(mf->pf, "symb_aud_dev", 1000, 1000, NULL);
-    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
+    pool = pj_pool_create (mf->pf, "symb_aud_dev", 1000, 1000, NULL);
+    PJ_ASSERT_RETURN (pool, PJ_ENOMEM);
 
-    strm = PJ_POOL_ZALLOC_T(pool, struct mda_stream);
+    strm = PJ_POOL_ZALLOC_T (pool, struct mda_stream);
     strm->pool = pool;
     strm->param = *param;
 
     // Create the output stream.
     if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	TRAPD(err, strm->out_engine = CPjAudioOutputEngine::NewL(strm, play_cb,
-								 user_data));
-	if (err != KErrNone) {
-	    pj_pool_release(pool);	
-	    return PJ_RETURN_OS_ERROR(err);
-	}
+        TRAPD (err, strm->out_engine = CPjAudioOutputEngine::NewL (strm, play_cb,
+                                       user_data));
+
+        if (err != KErrNone) {
+            pj_pool_release (pool);
+            return PJ_RETURN_OS_ERROR (err);
+        }
     }
 
     // Create the input stream.
     if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	TRAPD(err, strm->in_engine = CPjAudioInputEngine::NewL(strm, rec_cb, 
-							       user_data));
-	if (err != KErrNone) {
-	    strm->in_engine = NULL;
-	    delete strm->out_engine;
-	    strm->out_engine = NULL;
-	    pj_pool_release(pool);	
-	    return PJ_RETURN_OS_ERROR(err);
-	}
+        TRAPD (err, strm->in_engine = CPjAudioInputEngine::NewL (strm, rec_cb,
+                                      user_data));
+
+        if (err != KErrNone) {
+            strm->in_engine = NULL;
+            delete strm->out_engine;
+            strm->out_engine = NULL;
+            pj_pool_release (pool);
+            return PJ_RETURN_OS_ERROR (err);
+        }
     }
-	
+
     /* Done */
     strm->base.op = &stream_op;
     *p_aud_strm = &strm->base;
@@ -949,151 +970,163 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
 }
 
 /* API: Get stream info. */
-static pj_status_t stream_get_param(pjmedia_aud_stream *s,
-				    pjmedia_aud_param *pi)
+static pj_status_t stream_get_param (pjmedia_aud_stream *s,
+                                     pjmedia_aud_param *pi)
 {
-    struct mda_stream *strm = (struct mda_stream*)s;
+    struct mda_stream *strm = (struct mda_stream*) s;
 
-    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
+    PJ_ASSERT_RETURN (strm && pi, PJ_EINVAL);
+
+    pj_memcpy (pi, &strm->param, sizeof (*pi));
 
-    pj_memcpy(pi, &strm->param, sizeof(*pi));
-    
     return PJ_SUCCESS;
 }
 
 /* API: get capability */
-static pj_status_t stream_get_cap(pjmedia_aud_stream *s,
-				  pjmedia_aud_dev_cap cap,
-				  void *pval)
+static pj_status_t stream_get_cap (pjmedia_aud_stream *s,
+                                   pjmedia_aud_dev_cap cap,
+                                   void *pval)
 {
-    struct mda_stream *strm = (struct mda_stream*)s;
+    struct mda_stream *strm = (struct mda_stream*) s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
 
     switch (cap) {
-    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->in_engine, PJ_EINVAL);
-	    
-	    TInt max_gain = strm->in_engine->GetMaxGain();
-	    TInt gain = strm->in_engine->GetGain();
-	    
-	    if (max_gain > 0 && gain >= 0) {
-		*(unsigned*)pval = gain * 100 / max_gain; 
-		status = PJ_SUCCESS;
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    PJ_ASSERT_RETURN(strm->out_engine, PJ_EINVAL);
-	    
-	    TInt max_vol = strm->out_engine->GetMaxVolume();
-	    TInt vol = strm->out_engine->GetVolume();
-	    
-	    if (max_vol > 0 && vol >= 0) {
-		*(unsigned*)pval = vol * 100 / max_vol; 
-		status = PJ_SUCCESS;
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    default:
-	break;
+        case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN (strm->in_engine, PJ_EINVAL);
+
+                TInt max_gain = strm->in_engine->GetMaxGain();
+                TInt gain = strm->in_engine->GetGain();
+
+                if (max_gain > 0 && gain >= 0) {
+                    * (unsigned*) pval = gain * 100 / max_gain;
+                    status = PJ_SUCCESS;
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+
+            break;
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                PJ_ASSERT_RETURN (strm->out_engine, PJ_EINVAL);
+
+                TInt max_vol = strm->out_engine->GetMaxVolume();
+                TInt vol = strm->out_engine->GetVolume();
+
+                if (max_vol > 0 && vol >= 0) {
+                    * (unsigned*) pval = vol * 100 / max_vol;
+                    status = PJ_SUCCESS;
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+
+            break;
+        default:
+            break;
     }
-    
+
     return status;
 }
 
 /* API: set capability */
-static pj_status_t stream_set_cap(pjmedia_aud_stream *s,
-				  pjmedia_aud_dev_cap cap,
-				  const void *pval)
+static pj_status_t stream_set_cap (pjmedia_aud_stream *s,
+                                   pjmedia_aud_dev_cap cap,
+                                   const void *pval)
 {
-    struct mda_stream *strm = (struct mda_stream*)s;
+    struct mda_stream *strm = (struct mda_stream*) s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
 
     switch (cap) {
-    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->in_engine, PJ_EINVAL);
-	    
-	    TInt max_gain = strm->in_engine->GetMaxGain();
-	    if (max_gain > 0) {
-		TInt gain;
-		
-		gain = *(unsigned*)pval * max_gain / 100;
-		status = strm->in_engine->SetGain(gain);
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->out_engine, PJ_EINVAL);
-	    
-	    TInt max_vol = strm->out_engine->GetMaxVolume();
-	    if (max_vol > 0) {
-		TInt vol;
-		
-		vol = *(unsigned*)pval * max_vol / 100;
-		status = strm->out_engine->SetVolume(vol);
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    default:
-	break;
+        case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN (strm->in_engine, PJ_EINVAL);
+
+                TInt max_gain = strm->in_engine->GetMaxGain();
+
+                if (max_gain > 0) {
+                    TInt gain;
+
+                    gain = * (unsigned*) pval * max_gain / 100;
+                    status = strm->in_engine->SetGain (gain);
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+
+            break;
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN (strm->out_engine, PJ_EINVAL);
+
+                TInt max_vol = strm->out_engine->GetMaxVolume();
+
+                if (max_vol > 0) {
+                    TInt vol;
+
+                    vol = * (unsigned*) pval * max_vol / 100;
+                    status = strm->out_engine->SetVolume (vol);
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+
+            break;
+        default:
+            break;
     }
-    
+
     return status;
 }
 
 /* API: Start stream. */
-static pj_status_t stream_start(pjmedia_aud_stream *strm)
+static pj_status_t stream_start (pjmedia_aud_stream *strm)
 {
-    struct mda_stream *stream = (struct mda_stream*)strm;
+    struct mda_stream *stream = (struct mda_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
     if (stream->out_engine) {
-	pj_status_t status;
-    	status = stream->out_engine->StartPlay();
-    	if (status != PJ_SUCCESS)
-    	    return status;
+        pj_status_t status;
+        status = stream->out_engine->StartPlay();
+
+        if (status != PJ_SUCCESS)
+            return status;
     }
-    
+
     if (stream->in_engine) {
-	pj_status_t status;
-    	status = stream->in_engine->StartRecord();
-    	if (status != PJ_SUCCESS)
-    	    return status;
+        pj_status_t status;
+        status = stream->in_engine->StartRecord();
+
+        if (status != PJ_SUCCESS)
+            return status;
     }
 
     return PJ_SUCCESS;
 }
 
 /* API: Stop stream. */
-static pj_status_t stream_stop(pjmedia_aud_stream *strm)
+static pj_status_t stream_stop (pjmedia_aud_stream *strm)
 {
-    struct mda_stream *stream = (struct mda_stream*)strm;
+    struct mda_stream *stream = (struct mda_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
     if (stream->in_engine) {
-    	stream->in_engine->Stop();
+        stream->in_engine->Stop();
     }
-    	
+
     if (stream->out_engine) {
-    	stream->out_engine->Stop();
+        stream->out_engine->Stop();
     }
 
     return PJ_SUCCESS;
@@ -1101,13 +1134,13 @@ static pj_status_t stream_stop(pjmedia_aud_stream *strm)
 
 
 /* API: Destroy stream. */
-static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
+static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
 {
-    struct mda_stream *stream = (struct mda_stream*)strm;
+    struct mda_stream *stream = (struct mda_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
-    stream_stop(strm);
+    stream_stop (strm);
 
     delete stream->in_engine;
     stream->in_engine = NULL;
@@ -1117,9 +1150,10 @@ static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
 
     pj_pool_t *pool;
     pool = stream->pool;
+
     if (pool) {
-    	stream->pool = NULL;
-    	pj_pool_release(pool);
+        stream->pool = NULL;
+        pj_pool_release (pool);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
index 74dcc5451ac339a4f88de4889705a78b2ca4479f..793042dc19898e672bc4d7a3909b455c99c55a6e 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp
@@ -1,5 +1,5 @@
 /* $Id: symb_vas_dev.cpp 3025 2009-11-24 12:24:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -51,10 +51,10 @@
 #include <VoIPILBCDecoderIntfc.h>
 #include <VoIPILBCEncoderIntfc.h>
 
-/* AMR helper */  
+/* AMR helper */
 #include <pjmedia-codec/amr_helper.h>
 
-/* Pack/unpack G.729 frame of S60 DSP codec, taken from:  
+/* Pack/unpack G.729 frame of S60 DSP codec, taken from:
  * http://wiki.forum.nokia.com/index.php/TSS000776_-_Payload_conversion_for_G.729_audio_format
  */
 #include "s60_g729_bitstream.h"
@@ -81,8 +81,7 @@ static pj_uint8_t vas_g711_frame_len;
 
 
 /* VAS factory */
-struct vas_factory
-{
+struct vas_factory {
     pjmedia_aud_dev_factory	 base;
     pj_pool_t			*pool;
     pj_pool_factory		*pf;
@@ -95,11 +94,10 @@ class CPjAudioEngine;
 
 
 /* VAS stream. */
-struct vas_stream
-{
+struct vas_stream {
     // Base
     pjmedia_aud_stream	 base;			/**< Base class.	*/
-    
+
     // Pool
     pj_pool_t		*pool;			/**< Memory pool.       */
 
@@ -122,7 +120,7 @@ struct vas_stream
     pj_uint16_t		 rec_buf_len;		/**< Record buffer length. */
     void                *strm_data;		/**< Stream data.	*/
 
-    /* Resampling is needed, in case audio device is opened with clock rate 
+    /* Resampling is needed, in case audio device is opened with clock rate
      * other than 8kHz (only for PCM format).
      */
     pjmedia_resample	*play_resample;		/**< Resampler for playback. */
@@ -139,38 +137,37 @@ struct vas_stream
 
 
 /* Prototypes */
-static pj_status_t factory_init(pjmedia_aud_dev_factory *f);
-static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f);
-static unsigned    factory_get_dev_count(pjmedia_aud_dev_factory *f);
-static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
-					unsigned index,
-					pjmedia_aud_dev_info *info);
-static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
-					 unsigned index,
-					 pjmedia_aud_param *param);
-static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
-					 const pjmedia_aud_param *param,
-					 pjmedia_aud_rec_cb rec_cb,
-					 pjmedia_aud_play_cb play_cb,
-					 void *user_data,
-					 pjmedia_aud_stream **p_aud_strm);
-
-static pj_status_t stream_get_param(pjmedia_aud_stream *strm,
-				    pjmedia_aud_param *param);
-static pj_status_t stream_get_cap(pjmedia_aud_stream *strm,
-				  pjmedia_aud_dev_cap cap,
-				  void *value);
-static pj_status_t stream_set_cap(pjmedia_aud_stream *strm,
-				  pjmedia_aud_dev_cap cap,
-				  const void *value);
-static pj_status_t stream_start(pjmedia_aud_stream *strm);
-static pj_status_t stream_stop(pjmedia_aud_stream *strm);
-static pj_status_t stream_destroy(pjmedia_aud_stream *strm);
+static pj_status_t factory_init (pjmedia_aud_dev_factory *f);
+static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f);
+static unsigned    factory_get_dev_count (pjmedia_aud_dev_factory *f);
+static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_dev_info *info);
+static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_param *param);
+static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
+        const pjmedia_aud_param *param,
+        pjmedia_aud_rec_cb rec_cb,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data,
+        pjmedia_aud_stream **p_aud_strm);
+
+static pj_status_t stream_get_param (pjmedia_aud_stream *strm,
+                                     pjmedia_aud_param *param);
+static pj_status_t stream_get_cap (pjmedia_aud_stream *strm,
+                                   pjmedia_aud_dev_cap cap,
+                                   void *value);
+static pj_status_t stream_set_cap (pjmedia_aud_stream *strm,
+                                   pjmedia_aud_dev_cap cap,
+                                   const void *value);
+static pj_status_t stream_start (pjmedia_aud_stream *strm);
+static pj_status_t stream_stop (pjmedia_aud_stream *strm);
+static pj_status_t stream_destroy (pjmedia_aud_stream *strm);
 
 
 /* Operations */
-static pjmedia_aud_dev_factory_op factory_op =
-{
+static pjmedia_aud_dev_factory_op factory_op = {
     &factory_init,
     &factory_destroy,
     &factory_get_dev_count,
@@ -179,8 +176,7 @@ static pjmedia_aud_dev_factory_op factory_op =
     &factory_create_stream
 };
 
-static pjmedia_aud_stream_op stream_op = 
-{
+static pjmedia_aud_stream_op stream_op = {
     &stream_get_param,
     &stream_get_cap,
     &stream_set_cap,
@@ -197,277 +193,298 @@ static pjmedia_aud_stream_op stream_op =
 /*
  * Utility: print sound device error
  */
-static void snd_perror(const char *title, TInt rc)
+static void snd_perror (const char *title, TInt rc)
 {
-    PJ_LOG(1,(THIS_FILE, "%s (error code=%d)", title, rc));
+    PJ_LOG (1, (THIS_FILE, "%s (error code=%d)", title, rc));
 }
 
-typedef void(*PjAudioCallback)(CVoIPDataBuffer *buf, void *user_data);
+typedef void (*PjAudioCallback) (CVoIPDataBuffer *buf, void *user_data);
 
 /*
  * Audio setting for CPjAudioEngine.
  */
 class CPjAudioSetting
 {
-public:
-    TVoIPCodecFormat	 format;
-    TInt		 mode;
-    TBool		 plc;
-    TBool		 vad;
-    TBool		 cng;
-    TBool		 loudspk;
+    public:
+        TVoIPCodecFormat	 format;
+        TInt		 mode;
+        TBool		 plc;
+        TBool		 vad;
+        TBool		 cng;
+        TBool		 loudspk;
 };
 
 /*
  * Implementation: Symbian Input & Output Stream.
  */
 class CPjAudioEngine :  public CBase,
-			public MVoIPDownlinkObserver,
-			public MVoIPUplinkObserver,
-			public MVoIPFormatObserver
+        public MVoIPDownlinkObserver,
+        public MVoIPUplinkObserver,
+        public MVoIPFormatObserver
 {
-public:
-    enum State
-    {
-	STATE_NULL,
-	STATE_STARTING,
-	STATE_READY,
-	STATE_STREAMING
-    };
-
-    ~CPjAudioEngine();
-
-    static CPjAudioEngine *NewL(struct vas_stream *parent_strm,
-			        PjAudioCallback rec_cb,
-				PjAudioCallback play_cb,
-				void *user_data,
-				const CPjAudioSetting &setting);
-
-    TInt Start();
-    void Stop();
-
-    TInt ActivateSpeaker(TBool active);
-    
-    TInt SetVolume(TInt vol) { return iVoIPDnlink->SetVolume(vol); }
-    TInt GetVolume() { TInt vol;iVoIPDnlink->GetVolume(vol);return vol; }
-    TInt GetMaxVolume() { TInt vol;iVoIPDnlink->GetMaxVolume(vol);return vol; }
-    
-    TInt SetGain(TInt gain) { return iVoIPUplink->SetGain(gain); }
-    TInt GetGain() { TInt gain;iVoIPUplink->GetGain(gain);return gain; }
-    TInt GetMaxGain() { TInt gain;iVoIPUplink->GetMaxGain(gain);return gain; }
-
-    TBool IsStarted();
-    
-private:
-    CPjAudioEngine(struct vas_stream *parent_strm,
-		   PjAudioCallback rec_cb,
-		   PjAudioCallback play_cb,
-		   void *user_data,
-		   const CPjAudioSetting &setting);
-    void ConstructL();
-
-    TInt InitPlay();
-    TInt InitRec();
-
-    TInt StartPlay();
-    TInt StartRec();
-
-    // From MVoIPDownlinkObserver
-    void FillBuffer(const CVoIPAudioDownlinkStream& aSrc,
-                            CVoIPDataBuffer* aBuffer);
-    void Event(const CVoIPAudioDownlinkStream& aSrc,
-                       TInt aEventType,
-                       TInt aError);
-
-    // From MVoIPUplinkObserver
-    void EmptyBuffer(const CVoIPAudioUplinkStream& aSrc,
-                             CVoIPDataBuffer* aBuffer);
-    void Event(const CVoIPAudioUplinkStream& aSrc,
-                       TInt aEventType,
-                       TInt aError);
-
-    // From MVoIPFormatObserver
-    void Event(const CVoIPFormatIntfc& aSrc, TInt aEventType);
-
-    State			 dn_state_;
-    State			 up_state_;
-    struct vas_stream		*parentStrm_;
-    CPjAudioSetting		 setting_;
-    PjAudioCallback 		 rec_cb_;
-    PjAudioCallback 		 play_cb_;
-    void 			*user_data_;
-
-    // VAS objects
-    CVoIPUtilityFactory         *iFactory;
-    CVoIPAudioDownlinkStream    *iVoIPDnlink;
-    CVoIPAudioUplinkStream      *iVoIPUplink;
-    CVoIPFormatIntfc		*enc_fmt_if;
-    CVoIPFormatIntfc		*dec_fmt_if;
+    public:
+        enum State {
+            STATE_NULL,
+            STATE_STARTING,
+            STATE_READY,
+            STATE_STREAMING
+        };
+
+        ~CPjAudioEngine();
+
+        static CPjAudioEngine *NewL (struct vas_stream *parent_strm,
+                                     PjAudioCallback rec_cb,
+                                     PjAudioCallback play_cb,
+                                     void *user_data,
+                                     const CPjAudioSetting &setting);
+
+        TInt Start();
+        void Stop();
+
+        TInt ActivateSpeaker (TBool active);
+
+        TInt SetVolume (TInt vol) {
+            return iVoIPDnlink->SetVolume (vol);
+        }
+        TInt GetVolume() {
+            TInt vol;
+            iVoIPDnlink->GetVolume (vol);
+            return vol;
+        }
+        TInt GetMaxVolume() {
+            TInt vol;
+            iVoIPDnlink->GetMaxVolume (vol);
+            return vol;
+        }
+
+        TInt SetGain (TInt gain) {
+            return iVoIPUplink->SetGain (gain);
+        }
+        TInt GetGain() {
+            TInt gain;
+            iVoIPUplink->GetGain (gain);
+            return gain;
+        }
+        TInt GetMaxGain() {
+            TInt gain;
+            iVoIPUplink->GetMaxGain (gain);
+            return gain;
+        }
+
+        TBool IsStarted();
+
+    private:
+        CPjAudioEngine (struct vas_stream *parent_strm,
+                        PjAudioCallback rec_cb,
+                        PjAudioCallback play_cb,
+                        void *user_data,
+                        const CPjAudioSetting &setting);
+        void ConstructL();
+
+        TInt InitPlay();
+        TInt InitRec();
+
+        TInt StartPlay();
+        TInt StartRec();
+
+        // From MVoIPDownlinkObserver
+        void FillBuffer (const CVoIPAudioDownlinkStream& aSrc,
+                         CVoIPDataBuffer* aBuffer);
+        void Event (const CVoIPAudioDownlinkStream& aSrc,
+                    TInt aEventType,
+                    TInt aError);
+
+        // From MVoIPUplinkObserver
+        void EmptyBuffer (const CVoIPAudioUplinkStream& aSrc,
+                          CVoIPDataBuffer* aBuffer);
+        void Event (const CVoIPAudioUplinkStream& aSrc,
+                    TInt aEventType,
+                    TInt aError);
+
+        // From MVoIPFormatObserver
+        void Event (const CVoIPFormatIntfc& aSrc, TInt aEventType);
+
+        State			 dn_state_;
+        State			 up_state_;
+        struct vas_stream		*parentStrm_;
+        CPjAudioSetting		 setting_;
+        PjAudioCallback 		 rec_cb_;
+        PjAudioCallback 		 play_cb_;
+        void 			*user_data_;
+
+        // VAS objects
+        CVoIPUtilityFactory         *iFactory;
+        CVoIPAudioDownlinkStream    *iVoIPDnlink;
+        CVoIPAudioUplinkStream      *iVoIPUplink;
+        CVoIPFormatIntfc		*enc_fmt_if;
+        CVoIPFormatIntfc		*dec_fmt_if;
 };
 
 
-CPjAudioEngine* CPjAudioEngine::NewL(struct vas_stream *parent_strm,
-				     PjAudioCallback rec_cb,
-				     PjAudioCallback play_cb,
-				     void *user_data,
-				     const CPjAudioSetting &setting)
+CPjAudioEngine* CPjAudioEngine::NewL (struct vas_stream *parent_strm,
+                                      PjAudioCallback rec_cb,
+                                      PjAudioCallback play_cb,
+                                      void *user_data,
+                                      const CPjAudioSetting &setting)
 {
-    CPjAudioEngine* self = new (ELeave) CPjAudioEngine(parent_strm,
-						       rec_cb, play_cb,
-						       user_data,
-						       setting);
-    CleanupStack::PushL(self);
+    CPjAudioEngine* self = new (ELeave) CPjAudioEngine (parent_strm,
+            rec_cb, play_cb,
+            user_data,
+            setting);
+    CleanupStack::PushL (self);
     self->ConstructL();
-    CleanupStack::Pop(self);
+    CleanupStack::Pop (self);
     return self;
 }
 
 void CPjAudioEngine::ConstructL()
 {
     TInt err;
-    const TVersion ver(1, 0, 0); /* Not really used at this time */
+    const TVersion ver (1, 0, 0); /* Not really used at this time */
 
-    err = CVoIPUtilityFactory::CreateFactory(iFactory);
-    User::LeaveIfError(err);
+    err = CVoIPUtilityFactory::CreateFactory (iFactory);
+    User::LeaveIfError (err);
 
     if (parentStrm_->param.dir != PJMEDIA_DIR_CAPTURE) {
-	err = iFactory->CreateDownlinkStream(ver, 
-					     CVoIPUtilityFactory::EVoIPCall,
-					     iVoIPDnlink);
-	User::LeaveIfError(err);
+        err = iFactory->CreateDownlinkStream (ver,
+                                              CVoIPUtilityFactory::EVoIPCall,
+                                              iVoIPDnlink);
+        User::LeaveIfError (err);
     }
 
     if (parentStrm_->param.dir != PJMEDIA_DIR_PLAYBACK) {
-	err = iFactory->CreateUplinkStream(ver, 
-					   CVoIPUtilityFactory::EVoIPCall,
-					   iVoIPUplink);
-	User::LeaveIfError(err);
+        err = iFactory->CreateUplinkStream (ver,
+                                            CVoIPUtilityFactory::EVoIPCall,
+                                            iVoIPUplink);
+        User::LeaveIfError (err);
     }
 }
 
-CPjAudioEngine::CPjAudioEngine(struct vas_stream *parent_strm,
-			       PjAudioCallback rec_cb,
-			       PjAudioCallback play_cb,
-			       void *user_data,
-			       const CPjAudioSetting &setting)
-      : dn_state_(STATE_NULL),
-        up_state_(STATE_NULL),
-	parentStrm_(parent_strm),
-	setting_(setting),
-        rec_cb_(rec_cb),
-        play_cb_(play_cb),
-        user_data_(user_data),
-        iFactory(NULL),
-        iVoIPDnlink(NULL),
-        iVoIPUplink(NULL),
-        enc_fmt_if(NULL),
-        dec_fmt_if(NULL)
+CPjAudioEngine::CPjAudioEngine (struct vas_stream *parent_strm,
+                                PjAudioCallback rec_cb,
+                                PjAudioCallback play_cb,
+                                void *user_data,
+                                const CPjAudioSetting &setting)
+        : dn_state_ (STATE_NULL),
+        up_state_ (STATE_NULL),
+        parentStrm_ (parent_strm),
+        setting_ (setting),
+        rec_cb_ (rec_cb),
+        play_cb_ (play_cb),
+        user_data_ (user_data),
+        iFactory (NULL),
+        iVoIPDnlink (NULL),
+        iVoIPUplink (NULL),
+        enc_fmt_if (NULL),
+        dec_fmt_if (NULL)
 {
 }
 
 CPjAudioEngine::~CPjAudioEngine()
 {
     Stop();
-    
+
     if (iVoIPUplink)
-	iVoIPUplink->Close();
-    
+        iVoIPUplink->Close();
+
     if (iVoIPDnlink)
-	iVoIPDnlink->Close();
+        iVoIPDnlink->Close();
 
     delete iVoIPDnlink;
     delete iVoIPUplink;
     delete iFactory;
-    
-    TRACE_((THIS_FILE, "Sound device destroyed"));
+
+    TRACE_ ( (THIS_FILE, "Sound device destroyed"));
 }
 
 TBool CPjAudioEngine::IsStarted()
 {
-    return ((((parentStrm_->param.dir & PJMEDIA_DIR_CAPTURE) == 0) || 
-	       up_state_ == STATE_STREAMING) &&
-	    (((parentStrm_->param.dir & PJMEDIA_DIR_PLAYBACK) == 0) || 
-	       dn_state_ == STATE_STREAMING));
+    return ( ( ( (parentStrm_->param.dir & PJMEDIA_DIR_CAPTURE) == 0) ||
+               up_state_ == STATE_STREAMING) &&
+             ( ( (parentStrm_->param.dir & PJMEDIA_DIR_PLAYBACK) == 0) ||
+               dn_state_ == STATE_STREAMING));
 }
 
 TInt CPjAudioEngine::InitPlay()
 {
     TInt err;
 
-    pj_assert(iVoIPDnlink);
+    pj_assert (iVoIPDnlink);
+
+    err = iVoIPDnlink->SetFormat (setting_.format, dec_fmt_if);
 
-    err = iVoIPDnlink->SetFormat(setting_.format, dec_fmt_if);
     if (err != KErrNone)
-	return err;
-    
-    err = dec_fmt_if->SetObserver(*this);
+        return err;
+
+    err = dec_fmt_if->SetObserver (*this);
+
     if (err != KErrNone)
-	return err;
+        return err;
 
-    return iVoIPDnlink->Open(*this);
+    return iVoIPDnlink->Open (*this);
 }
 
 TInt CPjAudioEngine::InitRec()
 {
     TInt err;
-    
-    pj_assert(iVoIPUplink);
 
-    err = iVoIPUplink->SetFormat(setting_.format, enc_fmt_if);
+    pj_assert (iVoIPUplink);
+
+    err = iVoIPUplink->SetFormat (setting_.format, enc_fmt_if);
+
     if (err != KErrNone)
-	return err;
-    
-    err = enc_fmt_if->SetObserver(*this);
+        return err;
+
+    err = enc_fmt_if->SetObserver (*this);
+
     if (err != KErrNone)
-	return err;
-    
-    return iVoIPUplink->Open(*this);
+        return err;
+
+    return iVoIPUplink->Open (*this);
 }
 
 TInt CPjAudioEngine::StartPlay()
 {
     TInt err;
-    
-    pj_assert(iVoIPDnlink);
-    pj_assert(dn_state_ == STATE_READY);
+
+    pj_assert (iVoIPDnlink);
+    pj_assert (dn_state_ == STATE_READY);
 
     /* Configure specific codec setting */
     switch (setting_.format) {
-    case EG711:
-	{
-	    CVoIPG711DecoderIntfc *g711dec_if = (CVoIPG711DecoderIntfc*)
-						dec_fmt_if;
-	    err = g711dec_if->SetMode((CVoIPFormatIntfc::TG711CodecMode)
-				      setting_.mode);
-	    pj_assert(err == KErrNone);
-	}
-	break;
-	
-    case EILBC:
-	{
-	    CVoIPILBCDecoderIntfc *ilbcdec_if = (CVoIPILBCDecoderIntfc*)
-						dec_fmt_if;
-	    err = ilbcdec_if->SetMode((CVoIPFormatIntfc::TILBCCodecMode)
-				      setting_.mode);
-	    pj_assert(err == KErrNone);
-	}
-	break;
-
-    default:
-	break;
+        case EG711: {
+            CVoIPG711DecoderIntfc *g711dec_if = (CVoIPG711DecoderIntfc*)
+                                                dec_fmt_if;
+            err = g711dec_if->SetMode ( (CVoIPFormatIntfc::TG711CodecMode)
+                                        setting_.mode);
+            pj_assert (err == KErrNone);
+        }
+        break;
+
+        case EILBC: {
+            CVoIPILBCDecoderIntfc *ilbcdec_if = (CVoIPILBCDecoderIntfc*)
+                                                dec_fmt_if;
+            err = ilbcdec_if->SetMode ( (CVoIPFormatIntfc::TILBCCodecMode)
+                                        setting_.mode);
+            pj_assert (err == KErrNone);
+        }
+        break;
+
+        default:
+            break;
     }
-    
+
     /* Configure audio routing */
-    ActivateSpeaker(setting_.loudspk);
+    ActivateSpeaker (setting_.loudspk);
 
     /* Start player */
     err = iVoIPDnlink->Start();
-    
+
     if (err == KErrNone) {
-	dn_state_ = STATE_STREAMING;
-	TRACE_((THIS_FILE, "Downlink started"));
+        dn_state_ = STATE_STREAMING;
+        TRACE_ ( (THIS_FILE, "Downlink started"));
     } else {
-	snd_perror("Failed starting downlink", err);
+        snd_perror ("Failed starting downlink", err);
     }
 
     return err;
@@ -476,47 +493,45 @@ TInt CPjAudioEngine::StartPlay()
 TInt CPjAudioEngine::StartRec()
 {
     TInt err;
-    
-    pj_assert(iVoIPUplink);
-    pj_assert(up_state_ == STATE_READY);
+
+    pj_assert (iVoIPUplink);
+    pj_assert (up_state_ == STATE_READY);
 
     /* Configure specific codec setting */
     switch (setting_.format) {
-    case EG711:
-	{
-	    CVoIPG711EncoderIntfc *g711enc_if = (CVoIPG711EncoderIntfc*)
-						enc_fmt_if;
-	    err = g711enc_if->SetMode((CVoIPFormatIntfc::TG711CodecMode)
-				      setting_.mode);
-	    pj_assert(err == KErrNone);
-	}
-	break;
-
-    case EILBC:
-	{
-	    CVoIPILBCEncoderIntfc *ilbcenc_if = (CVoIPILBCEncoderIntfc*)
-						enc_fmt_if;
-	    err = ilbcenc_if->SetMode((CVoIPFormatIntfc::TILBCCodecMode)
-				      setting_.mode);
-	    pj_assert(err == KErrNone);
-	}
-	break;
-	
-    default:
-	break;
+        case EG711: {
+            CVoIPG711EncoderIntfc *g711enc_if = (CVoIPG711EncoderIntfc*)
+                                                enc_fmt_if;
+            err = g711enc_if->SetMode ( (CVoIPFormatIntfc::TG711CodecMode)
+                                        setting_.mode);
+            pj_assert (err == KErrNone);
+        }
+        break;
+
+        case EILBC: {
+            CVoIPILBCEncoderIntfc *ilbcenc_if = (CVoIPILBCEncoderIntfc*)
+                                                enc_fmt_if;
+            err = ilbcenc_if->SetMode ( (CVoIPFormatIntfc::TILBCCodecMode)
+                                        setting_.mode);
+            pj_assert (err == KErrNone);
+        }
+        break;
+
+        default:
+            break;
     }
-    
+
     /* Configure general codec setting */
-    enc_fmt_if->SetVAD(setting_.vad);
-    
+    enc_fmt_if->SetVAD (setting_.vad);
+
     /* Start recorder */
     err = iVoIPUplink->Start();
-    
+
     if (err == KErrNone) {
-	up_state_ = STATE_STREAMING;
-	TRACE_((THIS_FILE, "Uplink started"));
+        up_state_ = STATE_STREAMING;
+        TRACE_ ( (THIS_FILE, "Uplink started"));
     } else {
-	snd_perror("Failed starting uplink", err);
+        snd_perror ("Failed starting uplink", err);
     }
 
     return err;
@@ -525,37 +540,41 @@ TInt CPjAudioEngine::StartRec()
 TInt CPjAudioEngine::Start()
 {
     TInt err = KErrNone;
-    
+
     if (iVoIPDnlink) {
-	switch(dn_state_) {
-	case STATE_READY:
-	    err = StartPlay();
-	    break;
-	case STATE_NULL:
-	    err = InitPlay();
-	    if (err != KErrNone)
-		return err;
-	    dn_state_ = STATE_STARTING;
-	    break;
-	default:
-	    break;
-	}
+        switch (dn_state_) {
+            case STATE_READY:
+                err = StartPlay();
+                break;
+            case STATE_NULL:
+                err = InitPlay();
+
+                if (err != KErrNone)
+                    return err;
+
+                dn_state_ = STATE_STARTING;
+                break;
+            default:
+                break;
+        }
     }
-    
+
     if (iVoIPUplink) {
-	switch(up_state_) {
-	case STATE_READY:
-	    err = StartRec();
-	    break;
-	case STATE_NULL:
-	    err = InitRec();
-	    if (err != KErrNone)
-		return err;
-	    up_state_ = STATE_STARTING;
-	    break;
-	default:
-	    break;
-	}
+        switch (up_state_) {
+            case STATE_READY:
+                err = StartRec();
+                break;
+            case STATE_NULL:
+                err = InitRec();
+
+                if (err != KErrNone)
+                    return err;
+
+                up_state_ = STATE_STARTING;
+                break;
+            default:
+                break;
+        }
     }
 
     return err;
@@ -564,134 +583,138 @@ TInt CPjAudioEngine::Start()
 void CPjAudioEngine::Stop()
 {
     if (iVoIPDnlink) {
-	switch(dn_state_) {
-	case STATE_STREAMING:
-	    iVoIPDnlink->Stop();
-	    dn_state_ = STATE_READY;
-	    break;
-	case STATE_STARTING:
-	    dn_state_ = STATE_NULL;
-	    break;
-	default:
-	    break;
-	}
+        switch (dn_state_) {
+            case STATE_STREAMING:
+                iVoIPDnlink->Stop();
+                dn_state_ = STATE_READY;
+                break;
+            case STATE_STARTING:
+                dn_state_ = STATE_NULL;
+                break;
+            default:
+                break;
+        }
     }
 
     if (iVoIPUplink) {
-	switch(up_state_) {
-	case STATE_STREAMING:
-	    iVoIPUplink->Stop();
-	    up_state_ = STATE_READY;
-	    break;
-	case STATE_STARTING:
-	    up_state_ = STATE_NULL;
-	    break;
-	default:
-	    break;
-	}
+        switch (up_state_) {
+            case STATE_STREAMING:
+                iVoIPUplink->Stop();
+                up_state_ = STATE_READY;
+                break;
+            case STATE_STARTING:
+                up_state_ = STATE_NULL;
+                break;
+            default:
+                break;
+        }
     }
 }
 
 
-TInt CPjAudioEngine::ActivateSpeaker(TBool active)
+TInt CPjAudioEngine::ActivateSpeaker (TBool active)
 {
     TInt err = KErrNotSupported;
-    
+
     if (iVoIPDnlink) {
-	err = iVoIPDnlink->SetAudioDevice(active?
-				    CVoIPAudioDownlinkStream::ELoudSpeaker :
-				    CVoIPAudioDownlinkStream::EHandset);
-	TRACE_((THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
+        err = iVoIPDnlink->SetAudioDevice (active?
+                                           CVoIPAudioDownlinkStream::ELoudSpeaker :
+                                           CVoIPAudioDownlinkStream::EHandset);
+        TRACE_ ( (THIS_FILE, "Loudspeaker turned %s", (active? "on":"off")));
     }
-    
+
     return err;
 }
 
 // Callback from MVoIPDownlinkObserver
-void CPjAudioEngine::FillBuffer(const CVoIPAudioDownlinkStream& aSrc,
-                                CVoIPDataBuffer* aBuffer)
+void CPjAudioEngine::FillBuffer (const CVoIPAudioDownlinkStream& aSrc,
+                                 CVoIPDataBuffer* aBuffer)
 {
-    play_cb_(aBuffer, user_data_);
-    iVoIPDnlink->BufferFilled(aBuffer);
+    play_cb_ (aBuffer, user_data_);
+    iVoIPDnlink->BufferFilled (aBuffer);
 }
 
 // Callback from MVoIPUplinkObserver
-void CPjAudioEngine::EmptyBuffer(const CVoIPAudioUplinkStream& aSrc,
-                                 CVoIPDataBuffer* aBuffer)
+void CPjAudioEngine::EmptyBuffer (const CVoIPAudioUplinkStream& aSrc,
+                                  CVoIPDataBuffer* aBuffer)
 {
-    rec_cb_(aBuffer, user_data_);
-    iVoIPUplink->BufferEmptied(aBuffer);
+    rec_cb_ (aBuffer, user_data_);
+    iVoIPUplink->BufferEmptied (aBuffer);
 }
 
 // Callback from MVoIPDownlinkObserver
-void CPjAudioEngine::Event(const CVoIPAudioDownlinkStream& /*aSrc*/,
-                           TInt aEventType,
-                           TInt aError)
+void CPjAudioEngine::Event (const CVoIPAudioDownlinkStream& /*aSrc*/,
+                            TInt aEventType,
+                            TInt aError)
 {
     switch (aEventType) {
-    case MVoIPDownlinkObserver::KOpenComplete:
-	if (aError == KErrNone) {
-	    State last_state = dn_state_;
-
-	    dn_state_ = STATE_READY;
-	    TRACE_((THIS_FILE, "Downlink opened"));
-
-	    if (last_state == STATE_STARTING)
-		StartPlay();
-	}
-	break;
-
-    case MVoIPDownlinkObserver::KDownlinkClosed:
-	dn_state_ = STATE_NULL;
-	TRACE_((THIS_FILE, "Downlink closed"));
-	break;
-
-    case MVoIPDownlinkObserver::KDownlinkError:
-	dn_state_ = STATE_READY;
-	snd_perror("Downlink problem", aError);
-	break;
-    default:
-	break;
+        case MVoIPDownlinkObserver::KOpenComplete:
+
+            if (aError == KErrNone) {
+                State last_state = dn_state_;
+
+                dn_state_ = STATE_READY;
+                TRACE_ ( (THIS_FILE, "Downlink opened"));
+
+                if (last_state == STATE_STARTING)
+                    StartPlay();
+            }
+
+            break;
+
+        case MVoIPDownlinkObserver::KDownlinkClosed:
+            dn_state_ = STATE_NULL;
+            TRACE_ ( (THIS_FILE, "Downlink closed"));
+            break;
+
+        case MVoIPDownlinkObserver::KDownlinkError:
+            dn_state_ = STATE_READY;
+            snd_perror ("Downlink problem", aError);
+            break;
+        default:
+            break;
     }
 }
 
 // Callback from MVoIPUplinkObserver
-void CPjAudioEngine::Event(const CVoIPAudioUplinkStream& /*aSrc*/,
-                           TInt aEventType,
-                           TInt aError)
+void CPjAudioEngine::Event (const CVoIPAudioUplinkStream& /*aSrc*/,
+                            TInt aEventType,
+                            TInt aError)
 {
     switch (aEventType) {
-    case MVoIPUplinkObserver::KOpenComplete:
-	if (aError == KErrNone) {
-	    State last_state = up_state_;
-
-	    up_state_ = STATE_READY;
-	    TRACE_((THIS_FILE, "Uplink opened"));
-	    
-	    if (last_state == STATE_STARTING)
-		StartRec();
-	}
-	break;
-
-    case MVoIPUplinkObserver::KUplinkClosed:
-	up_state_ = STATE_NULL;
-	TRACE_((THIS_FILE, "Uplink closed"));
-	break;
-
-    case MVoIPUplinkObserver::KUplinkError:
-	up_state_ = STATE_READY;
-	snd_perror("Uplink problem", aError);
-	break;
-    default:
-	break;
+        case MVoIPUplinkObserver::KOpenComplete:
+
+            if (aError == KErrNone) {
+                State last_state = up_state_;
+
+                up_state_ = STATE_READY;
+                TRACE_ ( (THIS_FILE, "Uplink opened"));
+
+                if (last_state == STATE_STARTING)
+                    StartRec();
+            }
+
+            break;
+
+        case MVoIPUplinkObserver::KUplinkClosed:
+            up_state_ = STATE_NULL;
+            TRACE_ ( (THIS_FILE, "Uplink closed"));
+            break;
+
+        case MVoIPUplinkObserver::KUplinkError:
+            up_state_ = STATE_READY;
+            snd_perror ("Uplink problem", aError);
+            break;
+        default:
+            break;
     }
 }
 
 // Callback from MVoIPFormatObserver
-void CPjAudioEngine::Event(const CVoIPFormatIntfc& /*aSrc*/, 
-			   TInt aEventType)
+void CPjAudioEngine::Event (const CVoIPFormatIntfc& /*aSrc*/,
+                            TInt aEventType)
 {
-    snd_perror("Format event", aEventType);
+    snd_perror ("Format event", aEventType);
 }
 
 /****************************************************************************
@@ -700,89 +723,94 @@ void CPjAudioEngine::Event(const CVoIPFormatIntfc& /*aSrc*/,
 
 #ifdef USE_NATIVE_PCM
 
-static void RecCbPcm2(CVoIPDataBuffer *buf, void *user_data)
+static void RecCbPcm2 (CVoIPDataBuffer *buf, void *user_data)
 {
     struct vas_stream *strm = (struct vas_stream*) user_data;
-    TPtr8 buffer(0, 0, 0);
+    TPtr8 buffer (0, 0, 0);
     pj_int16_t *p_buf;
     unsigned buf_len;
 
     /* Get the buffer */
-    buf->GetPayloadPtr(buffer);
-    
+    buf->GetPayloadPtr (buffer);
+
     /* Call parent callback */
     p_buf = (pj_int16_t*) buffer.Ptr();
     buf_len = buffer.Length() >> 1;
+
     while (buf_len) {
-	unsigned req;
-	
-	req = strm->param.samples_per_frame - strm->rec_buf_len;
-	if (req > buf_len)
-	    req = buf_len;
-	pjmedia_copy_samples(strm->rec_buf + strm->rec_buf_len, p_buf, req);
-	p_buf += req;
-	buf_len -= req;
-	strm->rec_buf_len += req;
-	
-	if (strm->rec_buf_len >= strm->param.samples_per_frame) {
-	    pjmedia_frame f;
-
-	    f.buf = strm->rec_buf;
-	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-	    f.size = strm->param.samples_per_frame << 1;
-	    strm->rec_cb(strm->user_data, &f);
-	    strm->rec_buf_len = 0;
-	}
+        unsigned req;
+
+        req = strm->param.samples_per_frame - strm->rec_buf_len;
+
+        if (req > buf_len)
+            req = buf_len;
+
+        pjmedia_copy_samples (strm->rec_buf + strm->rec_buf_len, p_buf, req);
+        p_buf += req;
+        buf_len -= req;
+        strm->rec_buf_len += req;
+
+        if (strm->rec_buf_len >= strm->param.samples_per_frame) {
+            pjmedia_frame f;
+
+            f.buf = strm->rec_buf;
+            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+            f.size = strm->param.samples_per_frame << 1;
+            strm->rec_cb (strm->user_data, &f);
+            strm->rec_buf_len = 0;
+        }
     }
 }
 
-static void PlayCbPcm2(CVoIPDataBuffer *buf, void *user_data)
+static void PlayCbPcm2 (CVoIPDataBuffer *buf, void *user_data)
 {
     struct vas_stream *strm = (struct vas_stream*) user_data;
-    TPtr8 buffer(0, 0, 0);
+    TPtr8 buffer (0, 0, 0);
     pjmedia_frame f;
 
     /* Get the buffer */
-    buf->GetPayloadPtr(buffer);
+    buf->GetPayloadPtr (buffer);
 
     /* Call parent callback */
     f.buf = strm->play_buf;
     f.size = strm->param.samples_per_frame << 1;
-    strm->play_cb(strm->user_data, &f);
+    strm->play_cb (strm->user_data, &f);
+
     if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
-	pjmedia_zero_samples((pj_int16_t*)f.buf, 
-			     strm->param.samples_per_frame);
+        pjmedia_zero_samples ( (pj_int16_t*) f.buf,
+                               strm->param.samples_per_frame);
     }
+
     f.size = strm->param.samples_per_frame << 1;
 
     /* Init buffer attributes and header. */
     buffer.Zero();
-    buffer.Append((TUint8*)f.buf, f.size);
+    buffer.Append ( (TUint8*) f.buf, f.size);
 
     /* Set the buffer */
-    buf->SetPayloadPtr(buffer);
+    buf->SetPayloadPtr (buffer);
 }
 
 #else // not USE_NATIVE_PCM
 
-static void RecCbPcm(CVoIPDataBuffer *buf, void *user_data)
+static void RecCbPcm (CVoIPDataBuffer *buf, void *user_data)
 {
     struct vas_stream *strm = (struct vas_stream*) user_data;
-    TPtr8 buffer(0, 0, 0);
+    TPtr8 buffer (0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr(buffer);
-    
+    buf->GetPayloadPtr (buffer);
+
     /* Buffer has to contain normal speech. */
-    pj_assert(buffer[0] == 1 && buffer[1] == 0);
+    pj_assert (buffer[0] == 1 && buffer[1] == 0);
 
     /* Detect the recorder G.711 frame size, player frame size will follow
      * this recorder frame size.
      */
     if (vas_g711_frame_len == 0) {
-	vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
-	TRACE_((THIS_FILE, "Detected VAS G.711 frame size = %u samples",
-		vas_g711_frame_len));
+        vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
+        TRACE_ ( (THIS_FILE, "Detected VAS G.711 frame size = %u samples",
+                  vas_g711_frame_len));
     }
 
     /* Decode VAS buffer (coded in G.711) and put the PCM result into rec_buf.
@@ -791,511 +819,510 @@ static void RecCbPcm(CVoIPDataBuffer *buf, void *user_data)
     unsigned samples_processed = 0;
 
     while (samples_processed < vas_g711_frame_len) {
-	unsigned samples_to_process;
-	unsigned samples_req;
-
-	samples_to_process = vas_g711_frame_len - samples_processed;
-	samples_req = (strm->param.samples_per_frame /
-		       strm->param.channel_count /
-		       strm->resample_factor) -
-		      strm->rec_buf_len;
-	if (samples_to_process > samples_req)
-	    samples_to_process = samples_req;
-
-	pjmedia_ulaw_decode(&strm->rec_buf[strm->rec_buf_len],
-			    buffer.Ptr() + 2 + samples_processed,
-			    samples_to_process);
-
-	strm->rec_buf_len += samples_to_process;
-	samples_processed += samples_to_process;
-
-	/* Buffer is full, time to call parent callback */
-	if (strm->rec_buf_len == strm->param.samples_per_frame / 
-				 strm->param.channel_count /
-				 strm->resample_factor) 
-	{
-	    pjmedia_frame f;
-
-	    /* Need to resample clock rate? */
-	    if (strm->rec_resample) {
-		unsigned resampled = 0;
-		
-		while (resampled < strm->rec_buf_len) {
-		    pjmedia_resample_run(strm->rec_resample, 
-				&strm->rec_buf[resampled],
-				strm->pcm_buf + 
-				resampled * strm->resample_factor);
-		    resampled += 80;
-		}
-		f.buf = strm->pcm_buf;
-	    } else {
-		f.buf = strm->rec_buf;
-	    }
-
-	    /* Need to convert channel count? */
-	    if (strm->param.channel_count != 1) {
-		pjmedia_convert_channel_1ton((pj_int16_t*)f.buf,
-					     (pj_int16_t*)f.buf,
-					     strm->param.channel_count,
-					     strm->param.samples_per_frame /
-					     strm->param.channel_count,
-					     0);
-	    }
-
-	    /* Call parent callback */
-	    f.type = PJMEDIA_FRAME_TYPE_AUDIO;
-	    f.size = strm->param.samples_per_frame << 1;
-	    strm->rec_cb(strm->user_data, &f);
-	    strm->rec_buf_len = 0;
-	}
+        unsigned samples_to_process;
+        unsigned samples_req;
+
+        samples_to_process = vas_g711_frame_len - samples_processed;
+        samples_req = (strm->param.samples_per_frame /
+                       strm->param.channel_count /
+                       strm->resample_factor) -
+                      strm->rec_buf_len;
+
+        if (samples_to_process > samples_req)
+            samples_to_process = samples_req;
+
+        pjmedia_ulaw_decode (&strm->rec_buf[strm->rec_buf_len],
+                             buffer.Ptr() + 2 + samples_processed,
+                             samples_to_process);
+
+        strm->rec_buf_len += samples_to_process;
+        samples_processed += samples_to_process;
+
+        /* Buffer is full, time to call parent callback */
+        if (strm->rec_buf_len == strm->param.samples_per_frame /
+                strm->param.channel_count /
+                strm->resample_factor) {
+            pjmedia_frame f;
+
+            /* Need to resample clock rate? */
+            if (strm->rec_resample) {
+                unsigned resampled = 0;
+
+                while (resampled < strm->rec_buf_len) {
+                    pjmedia_resample_run (strm->rec_resample,
+                                          &strm->rec_buf[resampled],
+                                          strm->pcm_buf +
+                                          resampled * strm->resample_factor);
+                    resampled += 80;
+                }
+
+                f.buf = strm->pcm_buf;
+            } else {
+                f.buf = strm->rec_buf;
+            }
+
+            /* Need to convert channel count? */
+            if (strm->param.channel_count != 1) {
+                pjmedia_convert_channel_1ton ( (pj_int16_t*) f.buf,
+                                               (pj_int16_t*) f.buf,
+                                               strm->param.channel_count,
+                                               strm->param.samples_per_frame /
+                                               strm->param.channel_count,
+                                               0);
+            }
+
+            /* Call parent callback */
+            f.type = PJMEDIA_FRAME_TYPE_AUDIO;
+            f.size = strm->param.samples_per_frame << 1;
+            strm->rec_cb (strm->user_data, &f);
+            strm->rec_buf_len = 0;
+        }
     }
 }
 
 #endif // USE_NATIVE_PCM
 
-static void PlayCbPcm(CVoIPDataBuffer *buf, void *user_data)
+static void PlayCbPcm (CVoIPDataBuffer *buf, void *user_data)
 {
     struct vas_stream *strm = (struct vas_stream*) user_data;
     unsigned g711_frame_len = vas_g711_frame_len;
-    TPtr8 buffer(0, 0, 0);
+    TPtr8 buffer (0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr(buffer);
+    buf->GetPayloadPtr (buffer);
 
     /* Init buffer attributes and header. */
     buffer.Zero();
-    buffer.Append(1);
-    buffer.Append(0);
+    buffer.Append (1);
+    buffer.Append (0);
 
     /* Assume frame size is 10ms if frame size hasn't been known. */
     if (g711_frame_len == 0)
-	g711_frame_len = 80;
+        g711_frame_len = 80;
 
     /* Call parent stream callback to get PCM samples to play,
      * encode the PCM samples into G.711 and put it into VAS buffer.
      */
     unsigned samples_processed = 0;
-    
+
     while (samples_processed < g711_frame_len) {
-	/* Need more samples to play, time to call parent callback */
-	if (strm->play_buf_len == 0) {
-	    pjmedia_frame f;
-	    unsigned samples_got;
-	    
-	    f.size = strm->param.samples_per_frame << 1;
-	    if (strm->play_resample || strm->param.channel_count != 1)
-		f.buf = strm->pcm_buf;
-	    else
-		f.buf = strm->play_buf;
-
-	    /* Call parent callback */
-	    strm->play_cb(strm->user_data, &f);
-	    if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
-		pjmedia_zero_samples((pj_int16_t*)f.buf, 
-				     strm->param.samples_per_frame);
-	    }
-	    
-	    samples_got = strm->param.samples_per_frame / 
-			  strm->param.channel_count /
-			  strm->resample_factor;
-
-	    /* Need to convert channel count? */
-	    if (strm->param.channel_count != 1) {
-		pjmedia_convert_channel_nto1((pj_int16_t*)f.buf,
-					     (pj_int16_t*)f.buf,
-					     strm->param.channel_count,
-					     strm->param.samples_per_frame,
-					     PJ_FALSE,
-					     0);
-	    }
-
-	    /* Need to resample clock rate? */
-	    if (strm->play_resample) {
-		unsigned resampled = 0;
-		
-		while (resampled < samples_got) 
-		{
-		    pjmedia_resample_run(strm->play_resample, 
-				strm->pcm_buf + 
-				resampled * strm->resample_factor,
-				&strm->play_buf[resampled]);
-		    resampled += 80;
-		}
-	    }
-	    
-	    strm->play_buf_len = samples_got;
-	    strm->play_buf_start = 0;
-	}
-
-	unsigned tmp;
-
-	tmp = PJ_MIN(strm->play_buf_len, g711_frame_len - samples_processed);
-	pjmedia_ulaw_encode((pj_uint8_t*)&strm->play_buf[strm->play_buf_start],
-			    &strm->play_buf[strm->play_buf_start],
-			    tmp);
-	buffer.Append((TUint8*)&strm->play_buf[strm->play_buf_start], tmp);
-	samples_processed += tmp;
-	strm->play_buf_len -= tmp;
-	strm->play_buf_start += tmp;
+        /* Need more samples to play, time to call parent callback */
+        if (strm->play_buf_len == 0) {
+            pjmedia_frame f;
+            unsigned samples_got;
+
+            f.size = strm->param.samples_per_frame << 1;
+
+            if (strm->play_resample || strm->param.channel_count != 1)
+                f.buf = strm->pcm_buf;
+            else
+                f.buf = strm->play_buf;
+
+            /* Call parent callback */
+            strm->play_cb (strm->user_data, &f);
+
+            if (f.type != PJMEDIA_FRAME_TYPE_AUDIO) {
+                pjmedia_zero_samples ( (pj_int16_t*) f.buf,
+                                       strm->param.samples_per_frame);
+            }
+
+            samples_got = strm->param.samples_per_frame /
+                          strm->param.channel_count /
+                          strm->resample_factor;
+
+            /* Need to convert channel count? */
+            if (strm->param.channel_count != 1) {
+                pjmedia_convert_channel_nto1 ( (pj_int16_t*) f.buf,
+                                               (pj_int16_t*) f.buf,
+                                               strm->param.channel_count,
+                                               strm->param.samples_per_frame,
+                                               PJ_FALSE,
+                                               0);
+            }
+
+            /* Need to resample clock rate? */
+            if (strm->play_resample) {
+                unsigned resampled = 0;
+
+                while (resampled < samples_got) {
+                    pjmedia_resample_run (strm->play_resample,
+                                          strm->pcm_buf +
+                                          resampled * strm->resample_factor,
+                                          &strm->play_buf[resampled]);
+                    resampled += 80;
+                }
+            }
+
+            strm->play_buf_len = samples_got;
+            strm->play_buf_start = 0;
+        }
+
+        unsigned tmp;
+
+        tmp = PJ_MIN (strm->play_buf_len, g711_frame_len - samples_processed);
+        pjmedia_ulaw_encode ( (pj_uint8_t*) &strm->play_buf[strm->play_buf_start],
+                              &strm->play_buf[strm->play_buf_start],
+                              tmp);
+        buffer.Append ( (TUint8*) &strm->play_buf[strm->play_buf_start], tmp);
+        samples_processed += tmp;
+        strm->play_buf_len -= tmp;
+        strm->play_buf_start += tmp;
     }
 
     /* Set the buffer */
-    buf->SetPayloadPtr(buffer);
+    buf->SetPayloadPtr (buffer);
 }
 
 /****************************************************************************
  * Internal VAS callbacks for non-PCM format
  */
 
-static void RecCb(CVoIPDataBuffer *buf, void *user_data)
+static void RecCb (CVoIPDataBuffer *buf, void *user_data)
 {
     struct vas_stream *strm = (struct vas_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->rec_buf;
-    TPtr8 buffer(0, 0, 0);
+    TPtr8 buffer (0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr(buffer);
-    
-    switch(strm->param.ext_fmt.id) {
-    case PJMEDIA_FORMAT_AMR:
-	{
-	    const pj_uint8_t *p = (const pj_uint8_t*)buffer.Ptr() + 1;
-	    unsigned len = buffer.Length() - 1;
-	    
-	    pjmedia_frame_ext_append_subframe(frame, p, len << 3, 160);
-	    if (frame->samples_cnt == strm->param.samples_per_frame) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_G729:
-	{
-	    /* Check if we got a normal or SID frame. */
-	    if (buffer[0] != 0) {
-		enum { NORMAL_LEN = 22, SID_LEN = 8 };
-		TBitStream *bitstream = (TBitStream*)strm->strm_data;
-		unsigned src_len = buffer.Length()- 2;
-		
-		pj_assert(src_len == NORMAL_LEN || src_len == SID_LEN);
-		
-		const TDesC8& p = bitstream->CompressG729Frame(
-					    buffer.Right(src_len), 
-					    src_len == SID_LEN);
-		
-		pjmedia_frame_ext_append_subframe(frame, p.Ptr(), 
-						  p.Length() << 3, 80);
-	    } else { /* We got null frame. */
-		pjmedia_frame_ext_append_subframe(frame, NULL, 0, 80);
-	    }
-	    
-	    if (frame->samples_cnt == strm->param.samples_per_frame) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-
-    case PJMEDIA_FORMAT_ILBC:
-	{
-	    unsigned samples_got;
-	    
-	    samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
-	    
-	    /* Check if we got a normal or SID frame. */
-	    if (buffer[0] != 0) {
-		const pj_uint8_t *p = (const pj_uint8_t*)buffer.Ptr() + 2;
-		unsigned len = buffer.Length() - 2;
-		
-		pjmedia_frame_ext_append_subframe(frame, p, len << 3,
-						  samples_got);
-	    } else { /* We got null frame. */
-		pjmedia_frame_ext_append_subframe(frame, NULL, 0, samples_got);
-	    }
-	    
-	    if (frame->samples_cnt == strm->param.samples_per_frame) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_PCMU:
-    case PJMEDIA_FORMAT_PCMA:
-	{
-	    unsigned samples_processed = 0;
-	    
-	    /* Make sure it is normal frame. */
-	    pj_assert(buffer[0] == 1 && buffer[1] == 0);
-
-	    /* Detect the recorder G.711 frame size, player frame size will 
-	     * follow this recorder frame size.
-	     */
-	    if (vas_g711_frame_len == 0) {
-		vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
-		TRACE_((THIS_FILE, "Detected VAS G.711 frame size = %u samples",
-			vas_g711_frame_len));
-	    }
-	    
-	    /* Convert VAS buffer format into pjmedia_frame_ext. Whenever 
-	     * samples count in the frame is equal to stream's samples per 
-	     * frame, call parent stream callback.
-	     */
-	    while (samples_processed < vas_g711_frame_len) {
-		unsigned tmp;
-		const pj_uint8_t *pb = (const pj_uint8_t*)buffer.Ptr() +
-				       2 + samples_processed;
-    
-		tmp = PJ_MIN(strm->param.samples_per_frame - frame->samples_cnt,
-			     vas_g711_frame_len - samples_processed);
-		
-		pjmedia_frame_ext_append_subframe(frame, pb, tmp << 3, tmp);
-		samples_processed += tmp;
-    
-		if (frame->samples_cnt == strm->param.samples_per_frame) {
-		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		    strm->rec_cb(strm->user_data, (pjmedia_frame*)frame);
-		    frame->samples_cnt = 0;
-		    frame->subframe_cnt = 0;
-		}
-	    }
-	}
-	break;
-	
-    default:
-	break;
+    buf->GetPayloadPtr (buffer);
+
+    switch (strm->param.ext_fmt.id) {
+        case PJMEDIA_FORMAT_AMR: {
+            const pj_uint8_t *p = (const pj_uint8_t*) buffer.Ptr() + 1;
+            unsigned len = buffer.Length() - 1;
+
+            pjmedia_frame_ext_append_subframe (frame, p, len << 3, 160);
+
+            if (frame->samples_cnt == strm->param.samples_per_frame) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_G729: {
+            /* Check if we got a normal or SID frame. */
+            if (buffer[0] != 0) {
+                enum { NORMAL_LEN = 22, SID_LEN = 8 };
+                TBitStream *bitstream = (TBitStream*) strm->strm_data;
+                unsigned src_len = buffer.Length()- 2;
+
+                pj_assert (src_len == NORMAL_LEN || src_len == SID_LEN);
+
+                const TDesC8& p = bitstream->CompressG729Frame (
+                                      buffer.Right (src_len),
+                                      src_len == SID_LEN);
+
+                pjmedia_frame_ext_append_subframe (frame, p.Ptr(),
+                                                   p.Length() << 3, 80);
+            } else { /* We got null frame. */
+                pjmedia_frame_ext_append_subframe (frame, NULL, 0, 80);
+            }
+
+            if (frame->samples_cnt == strm->param.samples_per_frame) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_ILBC: {
+            unsigned samples_got;
+
+            samples_got = strm->param.ext_fmt.bitrate == 15200? 160 : 240;
+
+            /* Check if we got a normal or SID frame. */
+            if (buffer[0] != 0) {
+                const pj_uint8_t *p = (const pj_uint8_t*) buffer.Ptr() + 2;
+                unsigned len = buffer.Length() - 2;
+
+                pjmedia_frame_ext_append_subframe (frame, p, len << 3,
+                                                   samples_got);
+            } else { /* We got null frame. */
+                pjmedia_frame_ext_append_subframe (frame, NULL, 0, samples_got);
+            }
+
+            if (frame->samples_cnt == strm->param.samples_per_frame) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_PCMU:
+        case PJMEDIA_FORMAT_PCMA: {
+            unsigned samples_processed = 0;
+
+            /* Make sure it is normal frame. */
+            pj_assert (buffer[0] == 1 && buffer[1] == 0);
+
+            /* Detect the recorder G.711 frame size, player frame size will
+             * follow this recorder frame size.
+             */
+            if (vas_g711_frame_len == 0) {
+                vas_g711_frame_len = buffer.Length() < 160? 80 : 160;
+                TRACE_ ( (THIS_FILE, "Detected VAS G.711 frame size = %u samples",
+                          vas_g711_frame_len));
+            }
+
+            /* Convert VAS buffer format into pjmedia_frame_ext. Whenever
+             * samples count in the frame is equal to stream's samples per
+             * frame, call parent stream callback.
+             */
+            while (samples_processed < vas_g711_frame_len) {
+                unsigned tmp;
+                const pj_uint8_t *pb = (const pj_uint8_t*) buffer.Ptr() +
+                                       2 + samples_processed;
+
+                tmp = PJ_MIN (strm->param.samples_per_frame - frame->samples_cnt,
+                              vas_g711_frame_len - samples_processed);
+
+                pjmedia_frame_ext_append_subframe (frame, pb, tmp << 3, tmp);
+                samples_processed += tmp;
+
+                if (frame->samples_cnt == strm->param.samples_per_frame) {
+                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                    strm->rec_cb (strm->user_data, (pjmedia_frame*) frame);
+                    frame->samples_cnt = 0;
+                    frame->subframe_cnt = 0;
+                }
+            }
+        }
+        break;
+
+        default:
+            break;
     }
 }
 
-static void PlayCb(CVoIPDataBuffer *buf, void *user_data)
+static void PlayCb (CVoIPDataBuffer *buf, void *user_data)
 {
     struct vas_stream *strm = (struct vas_stream*) user_data;
     pjmedia_frame_ext *frame = (pjmedia_frame_ext*) strm->play_buf;
-    TPtr8 buffer(0, 0, 0);
+    TPtr8 buffer (0, 0, 0);
 
     /* Get the buffer */
-    buf->GetPayloadPtr(buffer);
+    buf->GetPayloadPtr (buffer);
 
     /* Init buffer attributes and header. */
     buffer.Zero();
 
-    switch(strm->param.ext_fmt.id) {
-    case PJMEDIA_FORMAT_AMR:
-	{
-	    if (frame->samples_cnt == 0) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-	    }
-
-	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		pjmedia_frame_ext_subframe *sf;
-		unsigned samples_cnt;
-		
-		sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		
-		if (sf->data && sf->bitlen) {
-		    /* AMR header for VAS is one byte, the format (may be!):
-		     * 0xxxxy00, where xxxx:frame type, y:not sure. 
-		     */
-		    unsigned len = (sf->bitlen+7)>>3;
-		    enum {SID_FT = 8 };
-		    pj_uint8_t amr_header = 4, ft = SID_FT;
-
-		    if (len >= pjmedia_codec_amrnb_framelen[0])
-			ft = pjmedia_codec_amr_get_mode2(PJ_TRUE, len);
-		    
-		    amr_header |= ft << 3;
-		    buffer.Append(amr_header);
-		    
-		    buffer.Append((TUint8*)sf->data, len);
-		} else {
-		    buffer.Append(0);
-		}
-
-		pjmedia_frame_ext_pop_subframes(frame, 1);
-	    
-	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
-		buffer.Append(0);
-		
-		frame->samples_cnt = 0;
-		frame->subframe_cnt = 0;
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_G729:
-	{
-	    if (frame->samples_cnt == 0) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-	    }
-
-	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		pjmedia_frame_ext_subframe *sf;
-		unsigned samples_cnt;
-		
-		sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		
-		if (sf->data && sf->bitlen) {
-		    enum { NORMAL_LEN = 10, SID_LEN = 2 };
-		    pj_bool_t sid_frame = ((sf->bitlen >> 3) == SID_LEN);
-		    TBitStream *bitstream = (TBitStream*)strm->strm_data;
-		    const TPtrC8 src(sf->data, sf->bitlen>>3);
-		    const TDesC8 &dst = bitstream->ExpandG729Frame(src,
-								   sid_frame); 
-		    if (sid_frame) {
-			buffer.Append(2);
-			buffer.Append(0);
-		    } else {
-			buffer.Append(1);
-			buffer.Append(0);
-		    }
-		    buffer.Append(dst);
-		} else {
-		    buffer.Append(2);
-		    buffer.Append(0);
-
-		    buffer.AppendFill(0, 22);
-		}
-
-		pjmedia_frame_ext_pop_subframes(frame, 1);
-	    
-	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
-		buffer.Append(2);
-		buffer.Append(0);
-		
-		buffer.AppendFill(0, 22);
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_ILBC:
-	{
-	    if (frame->samples_cnt == 0) {
-		frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			  frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-	    }
-
-	    if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		pjmedia_frame_ext_subframe *sf;
-		unsigned samples_cnt;
-		
-		sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		
-		pj_assert((strm->param.ext_fmt.bitrate == 15200 && 
-			   samples_cnt == 160) ||
-			  (strm->param.ext_fmt.bitrate != 15200 &&
-			   samples_cnt == 240));
-		
-		if (sf->data && sf->bitlen) {
-		    buffer.Append(1);
-		    buffer.Append(0);
-		    buffer.Append((TUint8*)sf->data, sf->bitlen>>3);
-		} else {
-		    unsigned frame_len;
-		    
-		    buffer.Append(1);
-		    buffer.Append(0);
-		    
-		    /* VAS iLBC frame is 20ms or 30ms */
-		    frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
-		    buffer.AppendFill(0, frame_len);
-		}
-
-		pjmedia_frame_ext_pop_subframes(frame, 1);
-	    
-	    } else { /* PJMEDIA_FRAME_TYPE_NONE */
-		
-		unsigned frame_len;
-		
-		buffer.Append(1);
-		buffer.Append(0);
-		
-		/* VAS iLBC frame is 20ms or 30ms */
-		frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
-		buffer.AppendFill(0, frame_len);
-
-	    }
-	}
-	break;
-	
-    case PJMEDIA_FORMAT_PCMU:
-    case PJMEDIA_FORMAT_PCMA:
-	{
-	    unsigned samples_ready = 0;
-	    unsigned samples_req = vas_g711_frame_len;
-	    
-	    /* Assume frame size is 10ms if frame size hasn't been known. */
-	    if (samples_req == 0)
-		samples_req = 80;
-	    
-	    buffer.Append(1);
-	    buffer.Append(0);
-	    
-	    /* Call parent stream callback to get samples to play. */
-	    while (samples_ready < samples_req) {
-		if (frame->samples_cnt == 0) {
-		    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
-		    strm->play_cb(strm->user_data, (pjmedia_frame*)frame);
-		    pj_assert(frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
-			      frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
-		}
-    
-		if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) { 
-		    pjmedia_frame_ext_subframe *sf;
-		    unsigned samples_cnt;
-		    
-		    sf = pjmedia_frame_ext_get_subframe(frame, 0);
-		    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
-		    if (sf->data && sf->bitlen) {
-			buffer.Append((TUint8*)sf->data, sf->bitlen>>3);
-		    } else {
-			pj_uint8_t silc;
-			silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
-				pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
-			buffer.AppendFill(silc, samples_cnt);
-		    }
-		    samples_ready += samples_cnt;
-		    
-		    pjmedia_frame_ext_pop_subframes(frame, 1);
-		
-		} else { /* PJMEDIA_FRAME_TYPE_NONE */
-		    pj_uint8_t silc;
-		    
-		    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU)?
-			    pjmedia_linear2ulaw(0) : pjmedia_linear2alaw(0);
-		    buffer.AppendFill(silc, samples_req - samples_ready);
-
-		    samples_ready = samples_req;
-		    frame->samples_cnt = 0;
-		    frame->subframe_cnt = 0;
-		}
-	    }
-	}
-	break;
-	
-    default:
-	break;
+    switch (strm->param.ext_fmt.id) {
+        case PJMEDIA_FORMAT_AMR: {
+            if (frame->samples_cnt == 0) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+            }
+
+            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                pjmedia_frame_ext_subframe *sf;
+                unsigned samples_cnt;
+
+                sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                if (sf->data && sf->bitlen) {
+                    /* AMR header for VAS is one byte, the format (may be!):
+                     * 0xxxxy00, where xxxx:frame type, y:not sure.
+                     */
+                    unsigned len = (sf->bitlen+7) >>3;
+                    enum {SID_FT = 8 };
+                    pj_uint8_t amr_header = 4, ft = SID_FT;
+
+                    if (len >= pjmedia_codec_amrnb_framelen[0])
+                        ft = pjmedia_codec_amr_get_mode2 (PJ_TRUE, len);
+
+                    amr_header |= ft << 3;
+                    buffer.Append (amr_header);
+
+                    buffer.Append ( (TUint8*) sf->data, len);
+                } else {
+                    buffer.Append (0);
+                }
+
+                pjmedia_frame_ext_pop_subframes (frame, 1);
+
+            } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                buffer.Append (0);
+
+                frame->samples_cnt = 0;
+                frame->subframe_cnt = 0;
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_G729: {
+            if (frame->samples_cnt == 0) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+            }
+
+            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                pjmedia_frame_ext_subframe *sf;
+                unsigned samples_cnt;
+
+                sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                if (sf->data && sf->bitlen) {
+                    enum { NORMAL_LEN = 10, SID_LEN = 2 };
+                    pj_bool_t sid_frame = ( (sf->bitlen >> 3) == SID_LEN);
+                    TBitStream *bitstream = (TBitStream*) strm->strm_data;
+                    const TPtrC8 src (sf->data, sf->bitlen>>3);
+                    const TDesC8 &dst = bitstream->ExpandG729Frame (src,
+                                        sid_frame);
+
+                    if (sid_frame) {
+                        buffer.Append (2);
+                        buffer.Append (0);
+                    } else {
+                        buffer.Append (1);
+                        buffer.Append (0);
+                    }
+
+                    buffer.Append (dst);
+                } else {
+                    buffer.Append (2);
+                    buffer.Append (0);
+
+                    buffer.AppendFill (0, 22);
+                }
+
+                pjmedia_frame_ext_pop_subframes (frame, 1);
+
+            } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                buffer.Append (2);
+                buffer.Append (0);
+
+                buffer.AppendFill (0, 22);
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_ILBC: {
+            if (frame->samples_cnt == 0) {
+                frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                           frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+            }
+
+            if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                pjmedia_frame_ext_subframe *sf;
+                unsigned samples_cnt;
+
+                sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                pj_assert ( (strm->param.ext_fmt.bitrate == 15200 &&
+                             samples_cnt == 160) ||
+                            (strm->param.ext_fmt.bitrate != 15200 &&
+                             samples_cnt == 240));
+
+                if (sf->data && sf->bitlen) {
+                    buffer.Append (1);
+                    buffer.Append (0);
+                    buffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
+                } else {
+                    unsigned frame_len;
+
+                    buffer.Append (1);
+                    buffer.Append (0);
+
+                    /* VAS iLBC frame is 20ms or 30ms */
+                    frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
+                    buffer.AppendFill (0, frame_len);
+                }
+
+                pjmedia_frame_ext_pop_subframes (frame, 1);
+
+            } else { /* PJMEDIA_FRAME_TYPE_NONE */
+
+                unsigned frame_len;
+
+                buffer.Append (1);
+                buffer.Append (0);
+
+                /* VAS iLBC frame is 20ms or 30ms */
+                frame_len = strm->param.ext_fmt.bitrate == 15200? 38 : 50;
+                buffer.AppendFill (0, frame_len);
+
+            }
+        }
+        break;
+
+        case PJMEDIA_FORMAT_PCMU:
+        case PJMEDIA_FORMAT_PCMA: {
+            unsigned samples_ready = 0;
+            unsigned samples_req = vas_g711_frame_len;
+
+            /* Assume frame size is 10ms if frame size hasn't been known. */
+            if (samples_req == 0)
+                samples_req = 80;
+
+            buffer.Append (1);
+            buffer.Append (0);
+
+            /* Call parent stream callback to get samples to play. */
+            while (samples_ready < samples_req) {
+                if (frame->samples_cnt == 0) {
+                    frame->base.type = PJMEDIA_FRAME_TYPE_EXTENDED;
+                    strm->play_cb (strm->user_data, (pjmedia_frame*) frame);
+                    pj_assert (frame->base.type==PJMEDIA_FRAME_TYPE_EXTENDED ||
+                               frame->base.type==PJMEDIA_FRAME_TYPE_NONE);
+                }
+
+                if (frame->base.type == PJMEDIA_FRAME_TYPE_EXTENDED) {
+                    pjmedia_frame_ext_subframe *sf;
+                    unsigned samples_cnt;
+
+                    sf = pjmedia_frame_ext_get_subframe (frame, 0);
+                    samples_cnt = frame->samples_cnt / frame->subframe_cnt;
+
+                    if (sf->data && sf->bitlen) {
+                        buffer.Append ( (TUint8*) sf->data, sf->bitlen>>3);
+                    } else {
+                        pj_uint8_t silc;
+                        silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
+                               pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
+                        buffer.AppendFill (silc, samples_cnt);
+                    }
+
+                    samples_ready += samples_cnt;
+
+                    pjmedia_frame_ext_pop_subframes (frame, 1);
+
+                } else { /* PJMEDIA_FRAME_TYPE_NONE */
+                    pj_uint8_t silc;
+
+                    silc = (strm->param.ext_fmt.id==PJMEDIA_FORMAT_PCMU) ?
+                           pjmedia_linear2ulaw (0) : pjmedia_linear2alaw (0);
+                    buffer.AppendFill (silc, samples_req - samples_ready);
+
+                    samples_ready = samples_req;
+                    frame->samples_cnt = 0;
+                    frame->subframe_cnt = 0;
+                }
+            }
+        }
+        break;
+
+        default:
+            break;
     }
 
     /* Set the buffer */
-    buf->SetPayloadPtr(buffer);
+    buf->SetPayloadPtr (buffer);
 }
 
 
@@ -1307,19 +1334,19 @@ static void PlayCb(CVoIPDataBuffer *buf, void *user_data)
  * C compatible declaration of VAS factory.
  */
 PJ_BEGIN_DECL
-PJ_DECL(pjmedia_aud_dev_factory*)pjmedia_symb_vas_factory(pj_pool_factory *pf);
+PJ_DECL (pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory (pj_pool_factory *pf);
 PJ_END_DECL
 
 /*
  * Init VAS audio driver.
  */
-PJ_DEF(pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory(pj_pool_factory *pf)
+PJ_DEF (pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory (pj_pool_factory *pf)
 {
     struct vas_factory *f;
     pj_pool_t *pool;
 
-    pool = pj_pool_create(pf, "VAS", 1000, 1000, NULL);
-    f = PJ_POOL_ZALLOC_T(pool, struct vas_factory);
+    pool = pj_pool_create (pf, "VAS", 1000, 1000, NULL);
+    f = PJ_POOL_ZALLOC_T (pool, struct vas_factory);
     f->pf = pf;
     f->pool = pool;
     f->base.op = &factory_op;
@@ -1328,60 +1355,65 @@ PJ_DEF(pjmedia_aud_dev_factory*) pjmedia_symb_vas_factory(pj_pool_factory *pf)
 }
 
 /* API: init factory */
-static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
+static pj_status_t factory_init (pjmedia_aud_dev_factory *f)
 {
-    struct vas_factory *af = (struct vas_factory*)f;
+    struct vas_factory *af = (struct vas_factory*) f;
     CVoIPUtilityFactory *vas_factory_;
     CVoIPAudioUplinkStream *vas_uplink;
     CVoIPAudioDownlinkStream *vas_dnlink;
     RArray<TVoIPCodecFormat> uplink_formats, dnlink_formats;
     unsigned ext_fmt_cnt = 0;
-    TVersion vas_version(1, 0, 0); /* Not really used at this time */
+    TVersion vas_version (1, 0, 0); /* Not really used at this time */
     TInt err;
 
-    pj_ansi_strcpy(af->dev_info.name, "S60 VAS");
+    pj_ansi_strcpy (af->dev_info.name, "S60 VAS");
     af->dev_info.default_samples_per_sec = 8000;
     af->dev_info.caps = PJMEDIA_AUD_DEV_CAP_EXT_FORMAT |
-			//PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
-			PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
-			PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
-			PJMEDIA_AUD_DEV_CAP_VAD |
-			PJMEDIA_AUD_DEV_CAP_CNG;
-    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE | 
-			  PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+                        //PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING |
+                        PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING |
+                        PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE |
+                        PJMEDIA_AUD_DEV_CAP_VAD |
+                        PJMEDIA_AUD_DEV_CAP_CNG;
+    af->dev_info.routes = PJMEDIA_AUD_DEV_ROUTE_EARPIECE |
+                          PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
     af->dev_info.input_count = 1;
     af->dev_info.output_count = 1;
     af->dev_info.ext_fmt_cnt = 0;
 
     /* Enumerate supported formats */
-    err = CVoIPUtilityFactory::CreateFactory(vas_factory_);
+    err = CVoIPUtilityFactory::CreateFactory (vas_factory_);
+
     if (err != KErrNone)
-	goto on_error;
+        goto on_error;
 
-    /* On VAS 2.0, uplink & downlink stream should be instantiated before 
+    /* On VAS 2.0, uplink & downlink stream should be instantiated before
      * querying formats.
      */
-    err = vas_factory_->CreateUplinkStream(vas_version, 
-				          CVoIPUtilityFactory::EVoIPCall,
-				          vas_uplink);
+    err = vas_factory_->CreateUplinkStream (vas_version,
+                                            CVoIPUtilityFactory::EVoIPCall,
+                                            vas_uplink);
+
     if (err != KErrNone)
-	goto on_error;
-    
-    err = vas_factory_->CreateDownlinkStream(vas_version, 
-				            CVoIPUtilityFactory::EVoIPCall,
-				            vas_dnlink);
+        goto on_error;
+
+    err = vas_factory_->CreateDownlinkStream (vas_version,
+            CVoIPUtilityFactory::EVoIPCall,
+            vas_dnlink);
+
     if (err != KErrNone)
-	goto on_error;
-    
+        goto on_error;
+
     uplink_formats.Reset();
-    err = vas_factory_->GetSupportedUplinkFormats(uplink_formats);
+    err = vas_factory_->GetSupportedUplinkFormats (uplink_formats);
+
     if (err != KErrNone)
-	goto on_error;
+        goto on_error;
 
     dnlink_formats.Reset();
-    err = vas_factory_->GetSupportedDownlinkFormats(dnlink_formats);
+    err = vas_factory_->GetSupportedDownlinkFormats (dnlink_formats);
+
     if (err != KErrNone)
-	goto on_error;
+        goto on_error;
 
     /* Free the streams, they are just used for querying formats */
     delete vas_uplink;
@@ -1390,109 +1422,109 @@ static pj_status_t factory_init(pjmedia_aud_dev_factory *f)
     vas_dnlink = NULL;
     delete vas_factory_;
     vas_factory_ = NULL;
-    
+
     for (TInt i = 0; i < dnlink_formats.Count(); i++) {
-	/* Format must be supported by both downlink & uplink. */
-	if (uplink_formats.Find(dnlink_formats[i]) == KErrNotFound)
-	    continue;
-	
-	switch (dnlink_formats[i]) {
-	case EAMR_NB:
-	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_AMR;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 7400;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
-	    break;
-
-	case EG729:
-	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_G729;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 8000;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
-	    break;
-
-	case EILBC:
-	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_ILBC;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 13333;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
-	    break;
-
-	case EG711:
+        /* Format must be supported by both downlink & uplink. */
+        if (uplink_formats.Find (dnlink_formats[i]) == KErrNotFound)
+            continue;
+
+        switch (dnlink_formats[i]) {
+            case EAMR_NB:
+                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_AMR;
+                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 7400;
+                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
+                break;
+
+            case EG729:
+                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_G729;
+                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 8000;
+                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
+                break;
+
+            case EILBC:
+                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_ILBC;
+                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 13333;
+                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_TRUE;
+                break;
+
+            case EG711:
 #if PJMEDIA_AUDIO_DEV_SYMB_VAS_VERSION==2
-	case EG711_10MS:
+            case EG711_10MS:
 #endif
-	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMU;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
-	    ++ext_fmt_cnt;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMA;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
-	    af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
-	    break;
-	
-	default:
-	    continue;
-	}
-	
-	++ext_fmt_cnt;
+                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMU;
+                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
+                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
+                ++ext_fmt_cnt;
+                af->dev_info.ext_fmt[ext_fmt_cnt].id = PJMEDIA_FORMAT_PCMA;
+                af->dev_info.ext_fmt[ext_fmt_cnt].bitrate = 64000;
+                af->dev_info.ext_fmt[ext_fmt_cnt].vad = PJ_FALSE;
+                break;
+
+            default:
+                continue;
+        }
+
+        ++ext_fmt_cnt;
     }
-    
+
     af->dev_info.ext_fmt_cnt = ext_fmt_cnt;
 
     uplink_formats.Close();
     dnlink_formats.Close();
-    
-    PJ_LOG(3, (THIS_FILE, "VAS initialized"));
+
+    PJ_LOG (3, (THIS_FILE, "VAS initialized"));
 
     return PJ_SUCCESS;
-    
+
 on_error:
-    return PJ_RETURN_OS_ERROR(err);
+    return PJ_RETURN_OS_ERROR (err);
 }
 
 /* API: destroy factory */
-static pj_status_t factory_destroy(pjmedia_aud_dev_factory *f)
+static pj_status_t factory_destroy (pjmedia_aud_dev_factory *f)
 {
-    struct vas_factory *af = (struct vas_factory*)f;
+    struct vas_factory *af = (struct vas_factory*) f;
     pj_pool_t *pool = af->pool;
 
     af->pool = NULL;
-    pj_pool_release(pool);
+    pj_pool_release (pool);
+
+    PJ_LOG (3, (THIS_FILE, "VAS destroyed"));
 
-    PJ_LOG(3, (THIS_FILE, "VAS destroyed"));
-    
     return PJ_SUCCESS;
 }
 
 /* API: get number of devices */
-static unsigned factory_get_dev_count(pjmedia_aud_dev_factory *f)
+static unsigned factory_get_dev_count (pjmedia_aud_dev_factory *f)
 {
-    PJ_UNUSED_ARG(f);
+    PJ_UNUSED_ARG (f);
     return 1;
 }
 
 /* API: get device info */
-static pj_status_t factory_get_dev_info(pjmedia_aud_dev_factory *f, 
-					unsigned index,
-					pjmedia_aud_dev_info *info)
+static pj_status_t factory_get_dev_info (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_dev_info *info)
 {
-    struct vas_factory *af = (struct vas_factory*)f;
+    struct vas_factory *af = (struct vas_factory*) f;
 
-    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_memcpy(info, &af->dev_info, sizeof(*info));
+    pj_memcpy (info, &af->dev_info, sizeof (*info));
 
     return PJ_SUCCESS;
 }
 
 /* API: create default device parameter */
-static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
-					 unsigned index,
-					 pjmedia_aud_param *param)
+static pj_status_t factory_default_param (pjmedia_aud_dev_factory *f,
+        unsigned index,
+        pjmedia_aud_param *param)
 {
-    struct vas_factory *af = (struct vas_factory*)f;
+    struct vas_factory *af = (struct vas_factory*) f;
 
-    PJ_ASSERT_RETURN(index == 0, PJMEDIA_EAUD_INVDEV);
+    PJ_ASSERT_RETURN (index == 0, PJMEDIA_EAUD_INVDEV);
 
-    pj_bzero(param, sizeof(*param));
+    pj_bzero (param, sizeof (*param));
     param->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
     param->rec_id = index;
     param->play_id = index;
@@ -1508,14 +1540,14 @@ static pj_status_t factory_default_param(pjmedia_aud_dev_factory *f,
 
 
 /* API: create stream */
-static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
-					 const pjmedia_aud_param *param,
-					 pjmedia_aud_rec_cb rec_cb,
-					 pjmedia_aud_play_cb play_cb,
-					 void *user_data,
-					 pjmedia_aud_stream **p_aud_strm)
+static pj_status_t factory_create_stream (pjmedia_aud_dev_factory *f,
+        const pjmedia_aud_param *param,
+        pjmedia_aud_rec_cb rec_cb,
+        pjmedia_aud_play_cb play_cb,
+        void *user_data,
+        pjmedia_aud_stream **p_aud_strm)
 {
-    struct vas_factory *af = (struct vas_factory*)f;
+    struct vas_factory *af = (struct vas_factory*) f;
     pj_pool_t *pool;
     struct vas_stream *strm;
 
@@ -1524,127 +1556,117 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
     PjAudioCallback vas_play_cb;
 
     /* Can only support 16bits per sample */
-    PJ_ASSERT_RETURN(param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->bits_per_sample == BITS_PER_SAMPLE, PJ_EINVAL);
 
     /* Supported clock rates:
-     * - for non-PCM format: 8kHz  
-     * - for PCM format: 8kHz and 16kHz  
+     * - for non-PCM format: 8kHz
+     * - for PCM format: 8kHz and 16kHz
      */
-    PJ_ASSERT_RETURN(param->clock_rate == 8000 ||
-		     (param->clock_rate == 16000 && 
-		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-		     PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->clock_rate == 8000 ||
+                      (param->clock_rate == 16000 &&
+                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+                      PJ_EINVAL);
 
     /* Supported channels number:
      * - for non-PCM format: mono
-     * - for PCM format: mono and stereo  
+     * - for PCM format: mono and stereo
      */
-    PJ_ASSERT_RETURN(param->channel_count == 1 || 
-		     (param->channel_count == 2 &&
-		      param->ext_fmt.id == PJMEDIA_FORMAT_L16),
-		     PJ_EINVAL);
+    PJ_ASSERT_RETURN (param->channel_count == 1 ||
+                      (param->channel_count == 2 &&
+                       param->ext_fmt.id == PJMEDIA_FORMAT_L16),
+                      PJ_EINVAL);
 
     /* Create and Initialize stream descriptor */
-    pool = pj_pool_create(af->pf, "vas-dev", 1000, 1000, NULL);
-    PJ_ASSERT_RETURN(pool, PJ_ENOMEM);
+    pool = pj_pool_create (af->pf, "vas-dev", 1000, 1000, NULL);
+    PJ_ASSERT_RETURN (pool, PJ_ENOMEM);
 
-    strm = PJ_POOL_ZALLOC_T(pool, struct vas_stream);
+    strm = PJ_POOL_ZALLOC_T (pool, struct vas_stream);
     strm->pool = pool;
     strm->param = *param;
 
     if (strm->param.flags & PJMEDIA_AUD_DEV_CAP_EXT_FORMAT == 0)
-	strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
-	
+        strm->param.ext_fmt.id = PJMEDIA_FORMAT_L16;
+
     /* Set audio engine fourcc. */
-    switch(strm->param.ext_fmt.id) {
-    case PJMEDIA_FORMAT_L16:
-#ifdef USE_NATIVE_PCM	
-	vas_setting.format = EPCM16;
+    switch (strm->param.ext_fmt.id) {
+        case PJMEDIA_FORMAT_L16:
+#ifdef USE_NATIVE_PCM
+            vas_setting.format = EPCM16;
 #else
-	vas_setting.format = EG711;
+            vas_setting.format = EG711;
 #endif
-	break;
-    case PJMEDIA_FORMAT_PCMU:
-    case PJMEDIA_FORMAT_PCMA:
-	vas_setting.format = EG711;
-	break;
-    case PJMEDIA_FORMAT_AMR:
-	vas_setting.format = EAMR_NB;
-	break;
-    case PJMEDIA_FORMAT_G729:
-	vas_setting.format = EG729;
-	break;
-    case PJMEDIA_FORMAT_ILBC:
-	vas_setting.format = EILBC;
-	break;
-    default:
-	vas_setting.format = ENULL;
-	break;
+            break;
+        case PJMEDIA_FORMAT_PCMU:
+        case PJMEDIA_FORMAT_PCMA:
+            vas_setting.format = EG711;
+            break;
+        case PJMEDIA_FORMAT_AMR:
+            vas_setting.format = EAMR_NB;
+            break;
+        case PJMEDIA_FORMAT_G729:
+            vas_setting.format = EG729;
+            break;
+        case PJMEDIA_FORMAT_ILBC:
+            vas_setting.format = EILBC;
+            break;
+        default:
+            vas_setting.format = ENULL;
+            break;
     }
 
     /* Set audio engine mode. */
-    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16)
-    {
-#ifdef USE_NATIVE_PCM	
-	vas_setting.mode = 0;
+    if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
+#ifdef USE_NATIVE_PCM
+        vas_setting.mode = 0;
 #else
-	vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
+        vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
 #endif
-    } 
-    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR)
-    {
-	vas_setting.mode = strm->param.ext_fmt.bitrate;
-    } 
-    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU)
-    {
-	vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
-    }
-    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA)
-    {
-	vas_setting.mode = CVoIPFormatIntfc::EG711ALaw;
-    }
-    else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC)
-    {
-	if (strm->param.ext_fmt.bitrate == 15200)
-	    vas_setting.mode = CVoIPFormatIntfc::EiLBC20mSecFrame;
-	else
-	    vas_setting.mode = CVoIPFormatIntfc::EiLBC30mSecFrame;
+    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_AMR) {
+        vas_setting.mode = strm->param.ext_fmt.bitrate;
+    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU) {
+        vas_setting.mode = CVoIPFormatIntfc::EG711uLaw;
+    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA) {
+        vas_setting.mode = CVoIPFormatIntfc::EG711ALaw;
+    } else if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC) {
+        if (strm->param.ext_fmt.bitrate == 15200)
+            vas_setting.mode = CVoIPFormatIntfc::EiLBC20mSecFrame;
+        else
+            vas_setting.mode = CVoIPFormatIntfc::EiLBC30mSecFrame;
     } else {
-	vas_setting.mode = 0;
+        vas_setting.mode = 0;
     }
 
-    /* Disable VAD on L16, G711, iLBC, and also G729 (G729's SID 
+    /* Disable VAD on L16, G711, iLBC, and also G729 (G729's SID
      * potentially cause noise?).
      */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMU ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC ||
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729)
-    {
-	vas_setting.vad = EFalse;
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_PCMA ||
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 ||
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_ILBC ||
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
+        vas_setting.vad = EFalse;
     } else {
-	vas_setting.vad = strm->param.ext_fmt.vad;
+        vas_setting.vad = strm->param.ext_fmt.vad;
     }
-    
+
     /* Set other audio engine attributes. */
     vas_setting.plc = strm->param.plc_enabled;
     vas_setting.cng = vas_setting.vad;
-    vas_setting.loudspk = 
-		strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+    vas_setting.loudspk =
+        strm->param.output_route==PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
 
     /* Set audio engine callbacks. */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
 #ifdef USE_NATIVE_PCM
-	vas_play_cb = &PlayCbPcm2;
-	vas_rec_cb  = &RecCbPcm2;
+        vas_play_cb = &PlayCbPcm2;
+        vas_rec_cb  = &RecCbPcm2;
 #else
-	vas_play_cb = &PlayCbPcm;
-	vas_rec_cb  = &RecCbPcm;
+        vas_play_cb = &PlayCbPcm;
+        vas_rec_cb  = &RecCbPcm;
 #endif
     } else {
-	vas_play_cb = &PlayCb;
-	vas_rec_cb  = &RecCb;
+        vas_play_cb = &PlayCb;
+        vas_rec_cb  = &RecCb;
     }
 
     strm->rec_cb = rec_cb;
@@ -1653,80 +1675,81 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
     strm->resample_factor = strm->param.clock_rate / 8000;
 
     /* play_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->play_buf = (pj_int16_t*)pj_pool_zalloc(
-					pool, 
-					(strm->param.samples_per_frame / 
-					strm->resample_factor /
-					strm->param.channel_count) << 1);
+    strm->play_buf = (pj_int16_t*) pj_pool_zalloc (
+                         pool,
+                         (strm->param.samples_per_frame /
+                          strm->resample_factor /
+                          strm->param.channel_count) << 1);
     strm->play_buf_len = 0;
     strm->play_buf_start = 0;
 
     /* rec_buf size is samples per frame scaled in to 8kHz mono. */
-    strm->rec_buf  = (pj_int16_t*)pj_pool_zalloc(
-					pool, 
-					(strm->param.samples_per_frame / 
-					strm->resample_factor /
-					strm->param.channel_count) << 1);
+    strm->rec_buf  = (pj_int16_t*) pj_pool_zalloc (
+                         pool,
+                         (strm->param.samples_per_frame /
+                          strm->resample_factor /
+                          strm->param.channel_count) << 1);
     strm->rec_buf_len = 0;
 
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-	TBitStream *g729_bitstream = new TBitStream;
-	
-	PJ_ASSERT_RETURN(g729_bitstream, PJ_ENOMEM);
-	strm->strm_data = (void*)g729_bitstream;
+        TBitStream *g729_bitstream = new TBitStream;
+
+        PJ_ASSERT_RETURN (g729_bitstream, PJ_ENOMEM);
+        strm->strm_data = (void*) g729_bitstream;
     }
-	
+
     /* Init resampler when format is PCM and clock rate is not 8kHz */
-    if (strm->param.clock_rate != 8000 && 
-	strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16)
-    {
-	pj_status_t status;
-	
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    /* Create resample for recorder */
-	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
-					      8000,
-					      strm->param.clock_rate,
-					      80,
-					      &strm->rec_resample);
-	    if (status != PJ_SUCCESS)
-		return status;
-	}
-    
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    /* Create resample for player */
-	    status = pjmedia_resample_create( pool, PJ_TRUE, PJ_FALSE, 1, 
-					      strm->param.clock_rate,
-					      8000,
-					      80 * strm->resample_factor,
-					      &strm->play_resample);
-	    if (status != PJ_SUCCESS)
-		return status;
-	}
+    if (strm->param.clock_rate != 8000 &&
+            strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16) {
+        pj_status_t status;
+
+        if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+            /* Create resample for recorder */
+            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
+                                              8000,
+                                              strm->param.clock_rate,
+                                              80,
+                                              &strm->rec_resample);
+
+            if (status != PJ_SUCCESS)
+                return status;
+        }
+
+        if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+            /* Create resample for player */
+            status = pjmedia_resample_create (pool, PJ_TRUE, PJ_FALSE, 1,
+                                              strm->param.clock_rate,
+                                              8000,
+                                              80 * strm->resample_factor,
+                                              &strm->play_resample);
+
+            if (status != PJ_SUCCESS)
+                return status;
+        }
     }
 
     /* Create PCM buffer, when the clock rate is not 8kHz or not mono */
     if (strm->param.ext_fmt.id == PJMEDIA_FORMAT_L16 &&
-	(strm->resample_factor > 1 || strm->param.channel_count != 1)) 
-    {
-	strm->pcm_buf = (pj_int16_t*)pj_pool_zalloc(pool, 
-					strm->param.samples_per_frame << 1);
+            (strm->resample_factor > 1 || strm->param.channel_count != 1)) {
+        strm->pcm_buf = (pj_int16_t*) pj_pool_zalloc (pool,
+                        strm->param.samples_per_frame << 1);
     }
 
-    
+
     /* Create the audio engine. */
-    TRAPD(err, strm->engine = CPjAudioEngine::NewL(strm,
-						   vas_rec_cb, vas_play_cb,
-						   strm, vas_setting));
+    TRAPD (err, strm->engine = CPjAudioEngine::NewL (strm,
+                               vas_rec_cb, vas_play_cb,
+                               strm, vas_setting));
+
     if (err != KErrNone) {
-    	pj_pool_release(pool);
-	return PJ_RETURN_OS_ERROR(err);
+        pj_pool_release (pool);
+        return PJ_RETURN_OS_ERROR (err);
     }
 
     /* Apply output volume setting if specified */
     if (param->flags & PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING) {
-	stream_set_cap(&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, 
-		       &param->output_vol);
+        stream_set_cap (&strm->base, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+                        &param->output_vol);
     }
 
     /* Done */
@@ -1737,209 +1760,220 @@ static pj_status_t factory_create_stream(pjmedia_aud_dev_factory *f,
 }
 
 /* API: Get stream info. */
-static pj_status_t stream_get_param(pjmedia_aud_stream *s,
-				    pjmedia_aud_param *pi)
+static pj_status_t stream_get_param (pjmedia_aud_stream *s,
+                                     pjmedia_aud_param *pi)
 {
-    struct vas_stream *strm = (struct vas_stream*)s;
+    struct vas_stream *strm = (struct vas_stream*) s;
 
-    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
+    PJ_ASSERT_RETURN (strm && pi, PJ_EINVAL);
 
-    pj_memcpy(pi, &strm->param, sizeof(*pi));
+    pj_memcpy (pi, &strm->param, sizeof (*pi));
 
     /* Update the output volume setting */
-    if (stream_get_cap(s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-		       &pi->output_vol) == PJ_SUCCESS)
-    {
-	pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
+    if (stream_get_cap (s, PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+                        &pi->output_vol) == PJ_SUCCESS) {
+        pi->flags |= PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING;
     }
-    
+
     return PJ_SUCCESS;
 }
 
 /* API: get capability */
-static pj_status_t stream_get_cap(pjmedia_aud_stream *s,
-				  pjmedia_aud_dev_cap cap,
-				  void *pval)
+static pj_status_t stream_get_cap (pjmedia_aud_stream *s,
+                                   pjmedia_aud_dev_cap cap,
+                                   void *pval)
 {
-    struct vas_stream *strm = (struct vas_stream*)s;
+    struct vas_stream *strm = (struct vas_stream*) s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
 
     switch (cap) {
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    *(pjmedia_aud_dev_route*)pval = strm->param.output_route;
-	    status = PJ_SUCCESS;
-	}
-	break;
-    
-    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
-    /*
-    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_gain = strm->engine->GetMaxGain();
-	    TInt gain = strm->engine->GetGain();
-	    
-	    if (max_gain > 0 && gain >= 0) {
-		*(unsigned*)pval = gain * 100 / max_gain; 
-		status = PJ_SUCCESS;
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    */
-
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_vol = strm->engine->GetMaxVolume();
-	    TInt vol = strm->engine->GetVolume();
-	    
-	    if (max_vol > 0 && vol >= 0) {
-		*(unsigned*)pval = vol * 100 / max_vol; 
-		status = PJ_SUCCESS;
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	}
-	break;
-    default:
-	break;
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                * (pjmedia_aud_dev_route*) pval = strm->param.output_route;
+                status = PJ_SUCCESS;
+            }
+
+            break;
+
+            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
+            /*
+            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+
+                TInt max_gain = strm->engine->GetMaxGain();
+                TInt gain = strm->engine->GetGain();
+
+                if (max_gain > 0 && gain >= 0) {
+            	*(unsigned*)pval = gain * 100 / max_gain;
+            	status = PJ_SUCCESS;
+                } else {
+            	status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+            break;
+            */
+
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
+
+                TInt max_vol = strm->engine->GetMaxVolume();
+                TInt vol = strm->engine->GetVolume();
+
+                if (max_vol > 0 && vol >= 0) {
+                    * (unsigned*) pval = vol * 100 / max_vol;
+                    status = PJ_SUCCESS;
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+            }
+
+            break;
+        default:
+            break;
     }
-    
+
     return status;
 }
 
 /* API: set capability */
-static pj_status_t stream_set_cap(pjmedia_aud_stream *s,
-				  pjmedia_aud_dev_cap cap,
-				  const void *pval)
+static pj_status_t stream_set_cap (pjmedia_aud_stream *s,
+                                   pjmedia_aud_dev_cap cap,
+                                   const void *pval)
 {
-    struct vas_stream *strm = (struct vas_stream*)s;
+    struct vas_stream *strm = (struct vas_stream*) s;
     pj_status_t status = PJ_ENOTSUP;
 
-    PJ_ASSERT_RETURN(s && pval, PJ_EINVAL);
+    PJ_ASSERT_RETURN (s && pval, PJ_EINVAL);
 
     switch (cap) {
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE: 
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    pjmedia_aud_dev_route r = *(const pjmedia_aud_dev_route*)pval;
-	    TInt err;
-
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    switch (r) {
-	    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
-	    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
-		err = strm->engine->ActivateSpeaker(EFalse);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-		break;
-	    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
-		err = strm->engine->ActivateSpeaker(ETrue);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-		break;
-	    default:
-		status = PJ_EINVAL;
-		break;
-	    }
-	    if (status == PJ_SUCCESS)
-		strm->param.output_route = r; 
-	}
-	break;
-
-    /* There is a case that GetMaxGain() stucks, e.g: in N95. */ 
-    /*
-    case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_gain = strm->engine->GetMaxGain();
-	    if (max_gain > 0) {
-		TInt gain, err;
-		
-		gain = *(unsigned*)pval * max_gain / 100;
-		err = strm->engine->SetGain(gain);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	    if (status == PJ_SUCCESS)
-		strm->param.input_vol = *(unsigned*)pval;
-	}
-	break;
-    */
-
-    case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
-	if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
-	    PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
-	    
-	    TInt max_vol = strm->engine->GetMaxVolume();
-	    if (max_vol > 0) {
-		TInt vol, err;
-		
-		vol = *(unsigned*)pval * max_vol / 100;
-		err = strm->engine->SetVolume(vol);
-		status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
-	    } else {
-		status = PJMEDIA_EAUD_NOTREADY;
-	    }
-	    if (status == PJ_SUCCESS)
-		strm->param.output_vol = *(unsigned*)pval;
-	}
-	break;
-    default:
-	break;
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                pjmedia_aud_dev_route r = * (const pjmedia_aud_dev_route*) pval;
+                TInt err;
+
+                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
+
+                switch (r) {
+                    case PJMEDIA_AUD_DEV_ROUTE_DEFAULT:
+                    case PJMEDIA_AUD_DEV_ROUTE_EARPIECE:
+                        err = strm->engine->ActivateSpeaker (EFalse);
+                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
+                        break;
+                    case PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER:
+                        err = strm->engine->ActivateSpeaker (ETrue);
+                        status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
+                        break;
+                    default:
+                        status = PJ_EINVAL;
+                        break;
+                }
+
+                if (status == PJ_SUCCESS)
+                    strm->param.output_route = r;
+            }
+
+            break;
+
+            /* There is a case that GetMaxGain() stucks, e.g: in N95. */
+            /*
+            case PJMEDIA_AUD_DEV_CAP_INPUT_VOLUME_SETTING:
+            if (strm->param.dir & PJMEDIA_DIR_CAPTURE) {
+                PJ_ASSERT_RETURN(strm->engine, PJ_EINVAL);
+
+                TInt max_gain = strm->engine->GetMaxGain();
+                if (max_gain > 0) {
+            	TInt gain, err;
+
+            	gain = *(unsigned*)pval * max_gain / 100;
+            	err = strm->engine->SetGain(gain);
+            	status = (err==KErrNone)? PJ_SUCCESS:PJ_RETURN_OS_ERROR(err);
+                } else {
+            	status = PJMEDIA_EAUD_NOTREADY;
+                }
+                if (status == PJ_SUCCESS)
+            	strm->param.input_vol = *(unsigned*)pval;
+            }
+            break;
+            */
+
+        case PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING:
+
+            if (strm->param.dir & PJMEDIA_DIR_PLAYBACK) {
+                PJ_ASSERT_RETURN (strm->engine, PJ_EINVAL);
+
+                TInt max_vol = strm->engine->GetMaxVolume();
+
+                if (max_vol > 0) {
+                    TInt vol, err;
+
+                    vol = * (unsigned*) pval * max_vol / 100;
+                    err = strm->engine->SetVolume (vol);
+                    status = (err==KErrNone) ? PJ_SUCCESS:PJ_RETURN_OS_ERROR (err);
+                } else {
+                    status = PJMEDIA_EAUD_NOTREADY;
+                }
+
+                if (status == PJ_SUCCESS)
+                    strm->param.output_vol = * (unsigned*) pval;
+            }
+
+            break;
+        default:
+            break;
     }
-    
+
     return status;
 }
 
 /* API: Start stream. */
-static pj_status_t stream_start(pjmedia_aud_stream *strm)
+static pj_status_t stream_start (pjmedia_aud_stream *strm)
 {
-    struct vas_stream *stream = (struct vas_stream*)strm;
+    struct vas_stream *stream = (struct vas_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
     if (stream->engine) {
-	enum { VAS_WAIT_START = 2000 }; /* in msecs */
-	TTime start, now;
-	TInt err = stream->engine->Start();
-	
-    	if (err != KErrNone)
-    	    return PJ_RETURN_OS_ERROR(err);
-
-    	/* Perform synchronous start, timeout after VAS_WAIT_START ms */
-	start.UniversalTime();
-	do {
-    	    pj_symbianos_poll(-1, 100);
-    	    now.UniversalTime();
-    	} while (!stream->engine->IsStarted() &&
-		 (now.MicroSecondsFrom(start) < VAS_WAIT_START * 1000));
-	
-	if (stream->engine->IsStarted())
-	    return PJ_SUCCESS;
-	else
-	    return PJ_ETIMEDOUT;
-    }    
+        enum { VAS_WAIT_START = 2000 }; /* in msecs */
+        TTime start, now;
+        TInt err = stream->engine->Start();
+
+        if (err != KErrNone)
+            return PJ_RETURN_OS_ERROR (err);
+
+        /* Perform synchronous start, timeout after VAS_WAIT_START ms */
+        start.UniversalTime();
+
+        do {
+            pj_symbianos_poll (-1, 100);
+            now.UniversalTime();
+        } while (!stream->engine->IsStarted() &&
+                 (now.MicroSecondsFrom (start) < VAS_WAIT_START * 1000));
+
+        if (stream->engine->IsStarted())
+            return PJ_SUCCESS;
+        else
+            return PJ_ETIMEDOUT;
+    }
 
     return PJ_EINVALIDOP;
 }
 
 /* API: Stop stream. */
-static pj_status_t stream_stop(pjmedia_aud_stream *strm)
+static pj_status_t stream_stop (pjmedia_aud_stream *strm)
 {
-    struct vas_stream *stream = (struct vas_stream*)strm;
+    struct vas_stream *stream = (struct vas_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
     if (stream->engine) {
-    	stream->engine->Stop();
+        stream->engine->Stop();
     }
 
     return PJ_SUCCESS;
@@ -1947,28 +1981,29 @@ static pj_status_t stream_stop(pjmedia_aud_stream *strm)
 
 
 /* API: Destroy stream. */
-static pj_status_t stream_destroy(pjmedia_aud_stream *strm)
+static pj_status_t stream_destroy (pjmedia_aud_stream *strm)
 {
-    struct vas_stream *stream = (struct vas_stream*)strm;
+    struct vas_stream *stream = (struct vas_stream*) strm;
 
-    PJ_ASSERT_RETURN(stream, PJ_EINVAL);
+    PJ_ASSERT_RETURN (stream, PJ_EINVAL);
 
-    stream_stop(strm);
+    stream_stop (strm);
 
     delete stream->engine;
     stream->engine = NULL;
 
     if (stream->param.ext_fmt.id == PJMEDIA_FORMAT_G729) {
-	TBitStream *g729_bitstream = (TBitStream*)stream->strm_data;
-	stream->strm_data = NULL;
-	delete g729_bitstream;
+        TBitStream *g729_bitstream = (TBitStream*) stream->strm_data;
+        stream->strm_data = NULL;
+        delete g729_bitstream;
     }
 
     pj_pool_t *pool;
     pool = stream->pool;
+
     if (pool) {
-    	stream->pool = NULL;
-    	pj_pool_release(pool);
+        stream->pool = NULL;
+        pj_pool_release (pool);
     }
 
     return PJ_SUCCESS;
diff --git a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp
index 6bae3ff65fedf3e50b6d292cc4ba534adfcf1246..0575641c77523f8a5e359ee00a67fd2fbdb99119 100644
--- a/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjmedia/src/pjmedia/sdp_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sdp_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
diff --git a/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h b/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h
index 728897732a62129c6cba0a87bcbf4fa1d20e3ec6..c21d1c4358e7effbf0524f1d9d7cb391aeb2ee9e 100644
--- a/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h
+++ b/sflphone-common/libs/pjproject/pjnath/include/pjnath/config.h
@@ -1,5 +1,5 @@
 /* $Id: config.h 2966 2009-10-25 09:02:07Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
@@ -77,9 +77,9 @@
 
 /**
  * The default initial STUN round-trip time estimation (the RTO value
- * in RFC 3489-bis), in miliseconds. 
- * This value is used to control the STUN request 
- * retransmit time. The initial value of retransmission interval 
+ * in RFC 3489-bis), in miliseconds.
+ * This value is used to control the STUN request
+ * retransmit time. The initial value of retransmission interval
  * would be set to this value, and will be doubled after each
  * retransmission.
  */
@@ -90,7 +90,7 @@
 
 /**
  * The STUN transaction timeout value, in miliseconds.
- * After the last retransmission is sent and if no response is received 
+ * After the last retransmission is sent and if no response is received
  * after this time, the STUN transaction will be considered to have failed.
  *
  * The default value is 16x RTO (as per RFC 3489-bis).
@@ -213,8 +213,8 @@
 
 
 /**
- * Number of seconds to refresh the permission/channel binding before the 
- * permission/channel binding expires. This value should be greater than 
+ * Number of seconds to refresh the permission/channel binding before the
+ * permission/channel binding expires. This value should be greater than
  * PJ_TURN_PERM_TIMEOUT setting.
  */
 #ifndef PJ_TURN_REFRESH_SEC_BEFORE
@@ -223,7 +223,7 @@
 
 
 /**
- * The TURN session timer heart beat interval. When this timer occurs, the 
+ * The TURN session timer heart beat interval. When this timer occurs, the
  * TURN session will scan all the permissions/channel bindings to see which
  * need to be refreshed.
  */
@@ -293,10 +293,10 @@
 /**
  * The number of bits to represent ICE candidate's local preference. The
  * local preference is used to specify preference among candidates with
- * the same type, and ICE draft suggests 65535 as the default local 
- * preference, which means we need 16 bits to represent the value. But 
+ * the same type, and ICE draft suggests 65535 as the default local
+ * preference, which means we need 16 bits to represent the value. But
  * since we don't have the facility to specify local preference, we'll
- * just disable this feature and let the preference sorted by the 
+ * just disable this feature and let the preference sorted by the
  * type only.
  *
  * Default: 0
@@ -327,15 +327,15 @@
 
 
 /**
- * According to ICE Section 8.2. Updating States, if an In-Progress pair in 
- * the check list is for the same component as a nominated pair, the agent 
+ * According to ICE Section 8.2. Updating States, if an In-Progress pair in
+ * the check list is for the same component as a nominated pair, the agent
  * SHOULD cease retransmissions for its check if its pair priority is lower
  * than the lowest priority nominated pair for that component.
  *
  * If a higher priority check is In Progress, this rule would cause that
  * check to be performed even when it most likely will fail.
  *
- * The macro here controls if ICE session should cancel all In Progress 
+ * The macro here controls if ICE session should cancel all In Progress
  * checks for the same component regardless of its priority.
  *
  * Default: 1 (yes, cancel all)
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
index a10c67f887e3396f998e694ce5b4f3322de127f2..f9ddddf05b619d68d2ceea8989b12177d4f0be74 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pjsua_wince/pjsua_wince.cpp
@@ -54,15 +54,15 @@ static HWND	    hwndActionButton, hwndExitButton;
 //
 // STUN server
 #if 0
-	// Use this to have the STUN server resolved normally
+// Use this to have the STUN server resolved normally
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	"stun.fwdnet.net"
 #elif 0
-	// Use this to have the STUN server resolved with DNS SRV
+// Use this to have the STUN server resolved with DNS SRV
 #   define STUN_DOMAIN	"iptel.org"
 #   define STUN_SERVER	NULL
 #else
-	// Use this to disable STUN
+// Use this to disable STUN
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	NULL
 #endif
@@ -82,16 +82,14 @@ static int	    g_current_acc;
 static int	    g_current_call = PJSUA_INVALID_ID;
 static int	    g_current_action;
 
-enum
-{
+enum {
     ID_GLOBAL_STATUS	= 21,
     ID_URI,
     ID_CALL_STATUS,
     ID_POLL_TIMER,
 };
 
-enum
-{
+enum {
     ID_MENU_NONE	= 64,
     ID_MENU_CALL,
     ID_MENU_ANSWER,
@@ -104,85 +102,91 @@ enum
 static ATOM		MyRegisterClass	(HINSTANCE, LPTSTR);
 BOOL			InitInstance	(HINSTANCE, int);
 static void		OnCreate	(HWND hWnd);
-static LRESULT CALLBACK	WndProc		(HWND, UINT, WPARAM, LPARAM);
+static LRESULT CALLBACK	WndProc	(HWND, UINT, WPARAM, LPARAM);
 
 
 
 /////////////////////////////////////////////////////////////////////////////
 
-static void OnError(const wchar_t *title, pj_status_t status)
+static void OnError (const wchar_t *title, pj_status_t status)
 {
     char errmsg[PJ_ERR_MSG_SIZE];
-    PJ_DECL_UNICODE_TEMP_BUF(werrmsg, PJ_ERR_MSG_SIZE);
+    PJ_DECL_UNICODE_TEMP_BUF (werrmsg, PJ_ERR_MSG_SIZE);
 
-    pj_strerror(status, errmsg, sizeof(errmsg));
-    
-    MessageBox(NULL, PJ_STRING_TO_NATIVE(errmsg, werrmsg, PJ_ERR_MSG_SIZE),
-	       title, MB_OK);
+    pj_strerror (status, errmsg, sizeof (errmsg));
+
+    MessageBox (NULL, PJ_STRING_TO_NATIVE (errmsg, werrmsg, PJ_ERR_MSG_SIZE),
+                title, MB_OK);
 }
 
 
-static void SetLocalURI(const char *uri, int len, bool enabled=true)
+static void SetLocalURI (const char *uri, int len, bool enabled=true)
 {
     wchar_t tmp[128];
-    if (len==-1) len=pj_ansi_strlen(uri);
-    pj_ansi_to_unicode(uri, len, tmp, PJ_ARRAY_SIZE(tmp));
-    SetDlgItemText(hMainWnd, ID_GLOBAL_STATUS, tmp);
-    EnableWindow(hwndGlobalStatus, enabled?TRUE:FALSE);
+
+    if (len==-1) len=pj_ansi_strlen (uri);
+
+    pj_ansi_to_unicode (uri, len, tmp, PJ_ARRAY_SIZE (tmp));
+    SetDlgItemText (hMainWnd, ID_GLOBAL_STATUS, tmp);
+    EnableWindow (hwndGlobalStatus, enabled?TRUE:FALSE);
 }
 
 
 
-static void SetURI(const char *uri, int len, bool enabled=true)
+static void SetURI (const char *uri, int len, bool enabled=true)
 {
     wchar_t tmp[128];
-    if (len==-1) len=pj_ansi_strlen(uri);
-    pj_ansi_to_unicode(uri, len, tmp, PJ_ARRAY_SIZE(tmp));
-    SetDlgItemText(hMainWnd, ID_URI, tmp);
-    EnableWindow(hwndURI, enabled?TRUE:FALSE);
+
+    if (len==-1) len=pj_ansi_strlen (uri);
+
+    pj_ansi_to_unicode (uri, len, tmp, PJ_ARRAY_SIZE (tmp));
+    SetDlgItemText (hMainWnd, ID_URI, tmp);
+    EnableWindow (hwndURI, enabled?TRUE:FALSE);
 }
 
 
-static void SetCallStatus(const char *state, int len)
+static void SetCallStatus (const char *state, int len)
 {
     wchar_t tmp[128];
-    if (len==-1) len=pj_ansi_strlen(state);
-    pj_ansi_to_unicode(state, len, tmp, PJ_ARRAY_SIZE(tmp));
-    SetDlgItemText(hMainWnd, ID_CALL_STATUS, tmp);
+
+    if (len==-1) len=pj_ansi_strlen (state);
+
+    pj_ansi_to_unicode (state, len, tmp, PJ_ARRAY_SIZE (tmp));
+    SetDlgItemText (hMainWnd, ID_CALL_STATUS, tmp);
 }
 
-static void SetAction(int action, bool enable=true)
+static void SetAction (int action, bool enable=true)
 {
     HMENU hMenu;
 
-    hMenu = CommandBar_GetMenu(hwndCB, 0);
+    hMenu = CommandBar_GetMenu (hwndCB, 0);
 
-    RemoveMenu(hMenu, ID_MENU_NONE, MF_BYCOMMAND);
-    RemoveMenu(hMenu, ID_MENU_CALL, MF_BYCOMMAND);
-    RemoveMenu(hMenu, ID_MENU_ANSWER, MF_BYCOMMAND);
-    RemoveMenu(hMenu, ID_MENU_DISCONNECT, MF_BYCOMMAND);
+    RemoveMenu (hMenu, ID_MENU_NONE, MF_BYCOMMAND);
+    RemoveMenu (hMenu, ID_MENU_CALL, MF_BYCOMMAND);
+    RemoveMenu (hMenu, ID_MENU_ANSWER, MF_BYCOMMAND);
+    RemoveMenu (hMenu, ID_MENU_DISCONNECT, MF_BYCOMMAND);
 
     switch (action) {
-    case ID_MENU_NONE:
-	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("None"));
-	SetWindowText(hwndActionButton, TEXT("-"));
-	break;
-    case ID_MENU_CALL:
-	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Call"));
-	SetWindowText(hwndActionButton, TEXT("&Call"));
-	break;
-    case ID_MENU_ANSWER:
-	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Answer"));
-	SetWindowText(hwndActionButton, TEXT("&Answer"));
-	break;
-    case ID_MENU_DISCONNECT:
-	InsertMenu(hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT("Hangup"));
-	SetWindowText(hwndActionButton, TEXT("&Hangup"));
-	break;
+        case ID_MENU_NONE:
+            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("None"));
+            SetWindowText (hwndActionButton, TEXT ("-"));
+            break;
+        case ID_MENU_CALL:
+            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("Call"));
+            SetWindowText (hwndActionButton, TEXT ("&Call"));
+            break;
+        case ID_MENU_ANSWER:
+            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("Answer"));
+            SetWindowText (hwndActionButton, TEXT ("&Answer"));
+            break;
+        case ID_MENU_DISCONNECT:
+            InsertMenu (hMenu, ID_EXIT, MF_BYCOMMAND, action, TEXT ("Hangup"));
+            SetWindowText (hwndActionButton, TEXT ("&Hangup"));
+            break;
     }
 
-    EnableMenuItem(hMenu, action, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
-    DrawMenuBar(hMainWnd);
+    EnableMenuItem (hMenu, action, MF_BYCOMMAND | (enable?MF_ENABLED:MF_GRAYED));
+    DrawMenuBar (hMainWnd);
 
     g_current_action = action;
 }
@@ -191,35 +195,35 @@ static void SetAction(int action, bool enable=true)
 /*
  * Handler when invite state has changed.
  */
-static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
+static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
 {
     pjsua_call_info call_info;
 
-    PJ_UNUSED_ARG(e);
+    PJ_UNUSED_ARG (e);
 
-    pjsua_call_get_info(call_id, &call_info);
+    pjsua_call_get_info (call_id, &call_info);
 
     if (call_info.state == PJSIP_INV_STATE_DISCONNECTED) {
 
-	g_current_call = PJSUA_INVALID_ID;
-	SetURI(SIP_DST_URI, -1);
-	SetAction(ID_MENU_CALL);
-	//SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
-	SetCallStatus(call_info.last_status_text.ptr, call_info.last_status_text.slen);
+        g_current_call = PJSUA_INVALID_ID;
+        SetURI (SIP_DST_URI, -1);
+        SetAction (ID_MENU_CALL);
+        //SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
+        SetCallStatus (call_info.last_status_text.ptr, call_info.last_status_text.slen);
 
     } else {
-	//if (g_current_call == PJSUA_INVALID_ID)
-	//    g_current_call = call_id;
+        //if (g_current_call == PJSUA_INVALID_ID)
+        //    g_current_call = call_id;
 
-	if (call_info.remote_contact.slen)
-	    SetURI(call_info.remote_contact.ptr, call_info.remote_contact.slen, false);
-	else
-	    SetURI(call_info.remote_info.ptr, call_info.remote_info.slen, false);
+        if (call_info.remote_contact.slen)
+            SetURI (call_info.remote_contact.ptr, call_info.remote_contact.slen, false);
+        else
+            SetURI (call_info.remote_info.ptr, call_info.remote_info.slen, false);
 
-	if (call_info.state == PJSIP_INV_STATE_CONFIRMED)
-	    SetAction(ID_MENU_DISCONNECT);
+        if (call_info.state == PJSIP_INV_STATE_CONFIRMED)
+            SetAction (ID_MENU_DISCONNECT);
 
-	SetCallStatus(call_info.state_text.ptr, call_info.state_text.slen);
+        SetCallStatus (call_info.state_text.ptr, call_info.state_text.slen);
     }
 }
 
@@ -229,15 +233,15 @@ static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
  * The action may connect the call to sound device, to file, or
  * to loop the call.
  */
-static void on_call_media_state(pjsua_call_id call_id)
+static void on_call_media_state (pjsua_call_id call_id)
 {
     pjsua_call_info call_info;
 
-    pjsua_call_get_info(call_id, &call_info);
+    pjsua_call_get_info (call_id, &call_info);
 
     if (call_info.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-	pjsua_conf_connect(call_info.conf_slot, 0);
-	pjsua_conf_connect(0, call_info.conf_slot);
+        pjsua_conf_connect (call_info.conf_slot, 0);
+        pjsua_conf_connect (0, call_info.conf_slot);
     }
 }
 
@@ -245,37 +249,37 @@ static void on_call_media_state(pjsua_call_id call_id)
 /**
  * Handler when there is incoming call.
  */
-static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
-			     pjsip_rx_data *rdata)
+static void on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
+                              pjsip_rx_data *rdata)
 {
     pjsua_call_info call_info;
 
-    PJ_UNUSED_ARG(acc_id);
-    PJ_UNUSED_ARG(rdata);
+    PJ_UNUSED_ARG (acc_id);
+    PJ_UNUSED_ARG (rdata);
 
     if (g_current_call != PJSUA_INVALID_ID) {
-	pj_str_t reason;
-	reason = pj_str("Another call is in progress");
-	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, &reason, NULL);
-	return;
+        pj_str_t reason;
+        reason = pj_str ("Another call is in progress");
+        pjsua_call_answer (call_id, PJSIP_SC_BUSY_HERE, &reason, NULL);
+        return;
     }
 
     g_current_call = call_id;
 
-    pjsua_call_get_info(call_id, &call_info);
+    pjsua_call_get_info (call_id, &call_info);
 
-    SetAction(ID_MENU_ANSWER);
-    SetURI(call_info.remote_info.ptr, call_info.remote_info.slen, false);
-    pjsua_call_answer(call_id, 200, NULL, NULL);
+    SetAction (ID_MENU_ANSWER);
+    SetURI (call_info.remote_info.ptr, call_info.remote_info.slen, false);
+    pjsua_call_answer (call_id, 200, NULL, NULL);
 }
 
 
 /*
  * Handler registration status has changed.
  */
-static void on_reg_state(pjsua_acc_id acc_id)
+static void on_reg_state (pjsua_acc_id acc_id)
 {
-    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG (acc_id);
 
     // Log already written.
 }
@@ -284,65 +288,65 @@ static void on_reg_state(pjsua_acc_id acc_id)
 /*
  * Handler on buddy state changed.
  */
-static void on_buddy_state(pjsua_buddy_id buddy_id)
+static void on_buddy_state (pjsua_buddy_id buddy_id)
 {
     /* Currently this is not processed */
-    PJ_UNUSED_ARG(buddy_id);
+    PJ_UNUSED_ARG (buddy_id);
 }
 
 
 /**
  * Incoming IM message (i.e. MESSAGE request)!
  */
-static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
-		     const pj_str_t *to, const pj_str_t *contact,
-		     const pj_str_t *mime_type, const pj_str_t *text)
+static void on_pager (pjsua_call_id call_id, const pj_str_t *from,
+                      const pj_str_t *to, const pj_str_t *contact,
+                      const pj_str_t *mime_type, const pj_str_t *text)
 {
     /* Currently this is not processed */
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(from);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
-    PJ_UNUSED_ARG(mime_type);
-    PJ_UNUSED_ARG(text);
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (from);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG (mime_type);
+    PJ_UNUSED_ARG (text);
 }
 
 
 /**
  * Received typing indication
  */
-static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
-		      const pj_str_t *to, const pj_str_t *contact,
-		      pj_bool_t is_typing)
+static void on_typing (pjsua_call_id call_id, const pj_str_t *from,
+                       const pj_str_t *to, const pj_str_t *contact,
+                       pj_bool_t is_typing)
 {
     /* Currently this is not processed */
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(from);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
-    PJ_UNUSED_ARG(is_typing);
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (from);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG (is_typing);
 }
 
-/** 
- * Callback upon NAT detection completion 
+/**
+ * Callback upon NAT detection completion
  */
-static void nat_detect_cb(const pj_stun_nat_detect_result *res)
+static void nat_detect_cb (const pj_stun_nat_detect_result *res)
 {
     if (res->status != PJ_SUCCESS) {
-	char msg[250];
-	pj_ansi_snprintf(msg, sizeof(msg), "NAT detection failed: %s",
-			 res->status_text);
-	SetCallStatus(msg, pj_ansi_strlen(msg));
+        char msg[250];
+        pj_ansi_snprintf (msg, sizeof (msg), "NAT detection failed: %s",
+                          res->status_text);
+        SetCallStatus (msg, pj_ansi_strlen (msg));
     } else {
-	char msg[250];
-	pj_ansi_snprintf(msg, sizeof(msg), "NAT type is %s",
-			 res->nat_type_name);
-	SetCallStatus(msg, pj_ansi_strlen(msg));
+        char msg[250];
+        pj_ansi_snprintf (msg, sizeof (msg), "NAT type is %s",
+                          res->nat_type_name);
+        SetCallStatus (msg, pj_ansi_strlen (msg));
     }
 }
 
 
-static BOOL OnInitStack(void)
+static BOOL OnInitStack (void)
 {
     pjsua_config	    cfg;
     pjsua_logging_config    log_cfg;
@@ -356,26 +360,27 @@ static BOOL OnInitStack(void)
 
     /* Create pjsua */
     status = pjsua_create();
+
     if (status != PJ_SUCCESS) {
-	OnError(TEXT("Error creating pjsua"), status);
-	return FALSE;
+        OnError (TEXT ("Error creating pjsua"), status);
+        return FALSE;
     }
 
     /* Create global pool for application */
-    g_pool = pjsua_pool_create("pjsua", 4000, 4000);
+    g_pool = pjsua_pool_create ("pjsua", 4000, 4000);
 
     /* Init configs */
-    pjsua_config_default(&cfg);
-    pjsua_media_config_default(&media_cfg);
-    pjsua_transport_config_default(&udp_cfg);
+    pjsua_config_default (&cfg);
+    pjsua_media_config_default (&media_cfg);
+    pjsua_transport_config_default (&udp_cfg);
     udp_cfg.port = SIP_PORT;
 
-    pjsua_transport_config_default(&rtp_cfg);
+    pjsua_transport_config_default (&rtp_cfg);
     rtp_cfg.port = 40000;
 
-    pjsua_logging_config_default(&log_cfg);
+    pjsua_logging_config_default (&log_cfg);
     log_cfg.level = 5;
-    log_cfg.log_filename = pj_str("\\pjsua.txt");
+    log_cfg.log_filename = pj_str ("\\pjsua.txt");
     log_cfg.msg_logging = 1;
     log_cfg.decor = pj_log_get_decor() | PJ_LOG_HAS_CR;
 
@@ -399,98 +404,102 @@ static BOOL OnInitStack(void)
     cfg.cb.on_nat_detect = &nat_detect_cb;
 
     if (SIP_PROXY) {
-	    cfg.outbound_proxy_cnt = 1;
-	    cfg.outbound_proxy[0] = pj_str(SIP_PROXY);
+        cfg.outbound_proxy_cnt = 1;
+        cfg.outbound_proxy[0] = pj_str (SIP_PROXY);
     }
-    
+
     if (NAMESERVER) {
-	    cfg.nameserver_count = 1;
-	    cfg.nameserver[0] = pj_str(NAMESERVER);
+        cfg.nameserver_count = 1;
+        cfg.nameserver[0] = pj_str (NAMESERVER);
     }
-    
+
     if (NAMESERVER && STUN_DOMAIN) {
-	    cfg.stun_domain = pj_str(STUN_DOMAIN);
+        cfg.stun_domain = pj_str (STUN_DOMAIN);
     } else if (STUN_SERVER) {
-	    cfg.stun_host = pj_str(STUN_SERVER);
+        cfg.stun_host = pj_str (STUN_SERVER);
     }
-    
-    
+
+
     /* Initialize pjsua */
-    status = pjsua_init(&cfg, &log_cfg, &media_cfg);
+    status = pjsua_init (&cfg, &log_cfg, &media_cfg);
+
     if (status != PJ_SUCCESS) {
-	OnError(TEXT("Initialization error"), status);
-	return FALSE;
+        OnError (TEXT ("Initialization error"), status);
+        return FALSE;
     }
 
     /* Set codec priority */
-    pjsua_codec_set_priority(pj_cstr(&tmp, "pcmu"), 240);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "pcma"), 230);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/8000"), 190);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "ilbc"), 189);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/16000"), 180);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "speex/32000"), 0);
-    pjsua_codec_set_priority(pj_cstr(&tmp, "gsm"), 100);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "pcmu"), 240);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "pcma"), 230);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "speex/8000"), 190);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "ilbc"), 189);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "speex/16000"), 180);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "speex/32000"), 0);
+    pjsua_codec_set_priority (pj_cstr (&tmp, "gsm"), 100);
 
 
     /* Add UDP transport and the corresponding PJSUA account */
-    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP,
-				    &udp_cfg, &transport_id);
+    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP,
+                                     &udp_cfg, &transport_id);
+
     if (status != PJ_SUCCESS) {
-	OnError(TEXT("Error starting SIP transport"), status);
-	return FALSE;
+        OnError (TEXT ("Error starting SIP transport"), status);
+        return FALSE;
     }
 
-    pjsua_transport_get_info(transport_id, &transport_info);
+    pjsua_transport_get_info (transport_id, &transport_info);
 
-    g_local_uri.ptr = (char*)pj_pool_alloc(g_pool, 128);
-    g_local_uri.slen = pj_ansi_sprintf(g_local_uri.ptr,
-				       "<sip:%.*s:%d>",
-				       (int)transport_info.local_name.host.slen,
-				       transport_info.local_name.host.ptr,
-				       transport_info.local_name.port);
+    g_local_uri.ptr = (char*) pj_pool_alloc (g_pool, 128);
+    g_local_uri.slen = pj_ansi_sprintf (g_local_uri.ptr,
+                                        "<sip:%.*s:%d>",
+                                        (int) transport_info.local_name.host.slen,
+                                        transport_info.local_name.host.ptr,
+                                        transport_info.local_name.port);
 
 
     /* Add local account */
-    pjsua_acc_add_local(transport_id, PJ_TRUE, &g_current_acc);
-    pjsua_acc_set_online_status(g_current_acc, PJ_TRUE);
+    pjsua_acc_add_local (transport_id, PJ_TRUE, &g_current_acc);
+    pjsua_acc_set_online_status (g_current_acc, PJ_TRUE);
 
     /* Add account */
     if (HAS_SIP_ACCOUNT) {
-	pjsua_acc_config cfg;
-
-	pjsua_acc_config_default(&cfg);
-	cfg.id = pj_str("sip:" SIP_USER "@" SIP_DOMAIN);
-	cfg.reg_uri = pj_str("sip:" SIP_DOMAIN);
-	cfg.cred_count = 1;
-	cfg.cred_info[0].realm = pj_str(SIP_REALM);
-	cfg.cred_info[0].scheme = pj_str("digest");
-	cfg.cred_info[0].username = pj_str(SIP_USER);
-	cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
-	cfg.cred_info[0].data = pj_str(SIP_PASSWD);
-
-	status = pjsua_acc_add(&cfg, PJ_TRUE, &g_current_acc);
-	if (status != PJ_SUCCESS) {
-	    pjsua_destroy();
-	    return PJ_FALSE;
-	}
+        pjsua_acc_config cfg;
+
+        pjsua_acc_config_default (&cfg);
+        cfg.id = pj_str ("sip:" SIP_USER "@" SIP_DOMAIN);
+        cfg.reg_uri = pj_str ("sip:" SIP_DOMAIN);
+        cfg.cred_count = 1;
+        cfg.cred_info[0].realm = pj_str (SIP_REALM);
+        cfg.cred_info[0].scheme = pj_str ("digest");
+        cfg.cred_info[0].username = pj_str (SIP_USER);
+        cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
+        cfg.cred_info[0].data = pj_str (SIP_PASSWD);
+
+        status = pjsua_acc_add (&cfg, PJ_TRUE, &g_current_acc);
+
+        if (status != PJ_SUCCESS) {
+            pjsua_destroy();
+            return PJ_FALSE;
+        }
     }
 
     /* Add buddy */
     if (SIP_DST_URI) {
-    	pjsua_buddy_config bcfg;
-    
-    	pjsua_buddy_config_default(&bcfg);
-    	bcfg.uri = pj_str(SIP_DST_URI);
-    	bcfg.subscribe = PJ_FALSE;
-    	
-    	pjsua_buddy_add(&bcfg, NULL);
+        pjsua_buddy_config bcfg;
+
+        pjsua_buddy_config_default (&bcfg);
+        bcfg.uri = pj_str (SIP_DST_URI);
+        bcfg.subscribe = PJ_FALSE;
+
+        pjsua_buddy_add (&bcfg, NULL);
     }
 
     /* Start pjsua */
     status = pjsua_start();
+
     if (status != PJ_SUCCESS) {
-	OnError(TEXT("Error starting pjsua"), status);
-	return FALSE;
+        OnError (TEXT ("Error starting pjsua"), status);
+        return FALSE;
     }
 
     return TRUE;
@@ -499,40 +508,37 @@ static BOOL OnInitStack(void)
 
 //////////////////////////////////////////////////////////////////////////////
 
-int WINAPI WinMain(HINSTANCE hInstance,
-		   HINSTANCE hPrevInstance,
-		   LPTSTR    lpCmdLine,
-		   int       nCmdShow)
+int WINAPI WinMain (HINSTANCE hInstance,
+                    HINSTANCE hPrevInstance,
+                    LPTSTR    lpCmdLine,
+                    int       nCmdShow)
 {
     MSG msg;
     HACCEL hAccelTable;
 
-    PJ_UNUSED_ARG(lpCmdLine);
-    PJ_UNUSED_ARG(hPrevInstance);
+    PJ_UNUSED_ARG (lpCmdLine);
+    PJ_UNUSED_ARG (hPrevInstance);
 
     // Perform application initialization:
-    if (!InitInstance (hInstance, nCmdShow)) 
-    {
-	return FALSE;
+    if (!InitInstance (hInstance, nCmdShow)) {
+        return FALSE;
     }
-    
-    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_PJSUA_WINCE);
-    
-    
+
+    hAccelTable = LoadAccelerators (hInstance, (LPCTSTR) IDC_PJSUA_WINCE);
+
+
     // Main message loop:
-    while (GetMessage(&msg, NULL, 0, 0)) 
-    {
-	if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
-	{
-	    TranslateMessage(&msg);
-	    DispatchMessage(&msg);
-	}
+    while (GetMessage (&msg, NULL, 0, 0)) {
+        if (!TranslateAccelerator (msg.hwnd, hAccelTable, &msg)) {
+            TranslateMessage (&msg);
+            DispatchMessage (&msg);
+        }
     }
-    
+
     return msg.wParam;
 }
 
-static ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
+static ATOM MyRegisterClass (HINSTANCE hInstance, LPTSTR szWindowClass)
 {
     WNDCLASS wc;
 
@@ -541,17 +547,17 @@ static ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
     wc.cbClsExtra	= 0;
     wc.cbWndExtra	= 0;
     wc.hInstance	= hInstance;
-    wc.hIcon		= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PJSUA_WINCE));
+    wc.hIcon		= LoadIcon (hInstance, MAKEINTRESOURCE (IDI_PJSUA_WINCE));
     wc.hCursor		= 0;
-    wc.hbrBackground	= (HBRUSH) GetStockObject(WHITE_BRUSH);
+    wc.hbrBackground	= (HBRUSH) GetStockObject (WHITE_BRUSH);
     wc.lpszMenuName	= 0;
     wc.lpszClassName	= szWindowClass;
 
-    return RegisterClass(&wc);
+    return RegisterClass (&wc);
 }
 
 
-BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
+BOOL InitInstance (HINSTANCE hInstance, int nCmdShow)
 {
     HWND	hWnd;
     TCHAR	szTitle[MAX_LOADSTRING];
@@ -561,220 +567,231 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 
     /* Init stack */
     if (OnInitStack() == FALSE)
-	return FALSE;
+        return FALSE;
 
-    LoadString(hInstance, IDC_PJSUA_WINCE, szWindowClass, MAX_LOADSTRING);
-    MyRegisterClass(hInstance, szWindowClass);
+    LoadString (hInstance, IDC_PJSUA_WINCE, szWindowClass, MAX_LOADSTRING);
+    MyRegisterClass (hInstance, szWindowClass);
 
-    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
-    hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE,
-	    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 200, 
-	    NULL, NULL, hInstance, NULL);
+    LoadString (hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
+    hWnd = CreateWindow (szWindowClass, szTitle, WS_VISIBLE,
+                         CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 200,
+                         NULL, NULL, hInstance, NULL);
 
-    if (!hWnd)
-    {	
-	    return FALSE;
+    if (!hWnd) {
+        return FALSE;
     }
 
     hMainWnd = hWnd;
-    ShowWindow(hWnd, nCmdShow);
-    UpdateWindow(hWnd);
+    ShowWindow (hWnd, nCmdShow);
+    UpdateWindow (hWnd);
+
     if (hwndCB)
-	CommandBar_Show(hwndCB, TRUE);
+        CommandBar_Show (hwndCB, TRUE);
 
-    SetTimer(hMainWnd, ID_POLL_TIMER, 50, NULL);
+    SetTimer (hMainWnd, ID_POLL_TIMER, 50, NULL);
 
     pjsua_detect_nat_type();
     return TRUE;
 }
 
 
-static void OnCreate(HWND hWnd)
+static void OnCreate (HWND hWnd)
 {
-    enum 
-    {
-	X = 10,
-	Y = 40,
-	W = 220,
-	H = 30,
+    enum {
+        X = 10,
+        Y = 40,
+        W = 220,
+        H = 30,
     };
 
     DWORD dwStyle;
 
     hMainWnd = hWnd;
 
-    hwndCB = CommandBar_Create(hInst, hWnd, 1);			
-    CommandBar_InsertMenubar(hwndCB, hInst, IDM_MENU, 0);   
-    CommandBar_AddAdornments(hwndCB, 0, 0);
+    hwndCB = CommandBar_Create (hInst, hWnd, 1);
+    CommandBar_InsertMenubar (hwndCB, hInst, IDM_MENU, 0);
+    CommandBar_AddAdornments (hwndCB, 0, 0);
 
     // Create global status text
-    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED | ES_LEFT;  
-    hwndGlobalStatus = CreateWindow(
-                TEXT("EDIT"),   // Class name
-                NULL,           // Window text
-                dwStyle,        // Window style
-                X,		// x-coordinate of the upper-left corner
-                Y+0,            // y-coordinate of the upper-left corner
-                W,		// Width of the window for the edit
-                                // control
-                H-5,		// Height of the window for the edit
-                                // control
-                hWnd,           // Window handle to the parent window
-                (HMENU) ID_GLOBAL_STATUS, // Control identifier
-                hInst,           // Instance handle
-                NULL);          // Specify NULL for this parameter when 
-                                // you create a control
-    SetLocalURI(g_local_uri.ptr, g_local_uri.slen, false);
+    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED | ES_LEFT;
+    hwndGlobalStatus = CreateWindow (
+                           TEXT ("EDIT"),  // Class name
+                           NULL,           // Window text
+                           dwStyle,        // Window style
+                           X,		// x-coordinate of the upper-left corner
+                           Y+0,            // y-coordinate of the upper-left corner
+                           W,		// Width of the window for the edit
+                           // control
+                           H-5,		// Height of the window for the edit
+                           // control
+                           hWnd,           // Window handle to the parent window
+                           (HMENU) ID_GLOBAL_STATUS, // Control identifier
+                           hInst,           // Instance handle
+                           NULL);          // Specify NULL for this parameter when
+    // you create a control
+    SetLocalURI (g_local_uri.ptr, g_local_uri.slen, false);
 
 
     // Create URI edit
-    dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER;  
+    dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER;
     hwndURI = CreateWindow (
-                TEXT("EDIT"),   // Class name
-                NULL,		// Window text
-                dwStyle,        // Window style
-                X,  // x-coordinate of the upper-left corner
-                Y+H,  // y-coordinate of the upper-left corner
-                W,  // Width of the window for the edit
-                                // control
-                H-5,  // Height of the window for the edit
-                                // control
-                hWnd,           // Window handle to the parent window
-                (HMENU) ID_URI, // Control identifier
-                hInst,           // Instance handle
-                NULL);          // Specify NULL for this parameter when 
-                                // you create a control
+                  TEXT ("EDIT"),  // Class name
+                  NULL,		// Window text
+                  dwStyle,        // Window style
+                  X,  // x-coordinate of the upper-left corner
+                  Y+H,  // y-coordinate of the upper-left corner
+                  W,  // Width of the window for the edit
+                  // control
+                  H-5,  // Height of the window for the edit
+                  // control
+                  hWnd,           // Window handle to the parent window
+                  (HMENU) ID_URI, // Control identifier
+                  hInst,           // Instance handle
+                  NULL);          // Specify NULL for this parameter when
+    // you create a control
 
     // Create action Button
-    hwndActionButton = CreateWindow( L"button", L"Action", 
-                         WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
-                         X, Y+2*H, 
-			 60, H-5, hWnd, 
-                         (HMENU) ID_BTN_ACTION,
-                         hInst, NULL );
+    hwndActionButton = CreateWindow (L"button", L"Action",
+                                     WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+                                     X, Y+2*H,
+                                     60, H-5, hWnd,
+                                     (HMENU) ID_BTN_ACTION,
+                                     hInst, NULL);
 
     // Create exit button
-    hwndExitButton = CreateWindow( L"button", L"E&xit", 
-                         WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
-                         X+70, Y+2*H, 
-			 60, H-5, hWnd, 
-                         (HMENU) ID_EXIT,
-                         hInst, NULL );
+    hwndExitButton = CreateWindow (L"button", L"E&xit",
+                                   WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
+                                   X+70, Y+2*H,
+                                   60, H-5, hWnd,
+                                   (HMENU) ID_EXIT,
+                                   hInst, NULL);
 
 
     // Create call status edit
-    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED;  
+    dwStyle = WS_CHILD | WS_VISIBLE | WS_DISABLED;
     hwndCallStatus = CreateWindow (
-                TEXT("EDIT"),   // Class name
-                NULL,		// Window text
-                dwStyle,        // Window style
-                X,  // x-coordinate of the upper-left corner
-                Y+3*H,  // y-coordinate of the upper-left corner
-                W,  // Width of the window for the edit
-                                // control
-                H-5,  // Height of the window for the edit
-                                // control
-                hWnd,           // Window handle to the parent window
-                (HMENU) ID_CALL_STATUS, // Control identifier
-                hInst,           // Instance handle
-                NULL);          // Specify NULL for this parameter when 
-                                // you create a control
-    SetCallStatus("Ready", 5);
-    SetAction(ID_MENU_CALL);
-    SetURI(SIP_DST_URI, -1);
-    SetFocus(hWnd);
+                         TEXT ("EDIT"),  // Class name
+                         NULL,		// Window text
+                         dwStyle,        // Window style
+                         X,  // x-coordinate of the upper-left corner
+                         Y+3*H,  // y-coordinate of the upper-left corner
+                         W,  // Width of the window for the edit
+                         // control
+                         H-5,  // Height of the window for the edit
+                         // control
+                         hWnd,           // Window handle to the parent window
+                         (HMENU) ID_CALL_STATUS, // Control identifier
+                         hInst,           // Instance handle
+                         NULL);          // Specify NULL for this parameter when
+    // you create a control
+    SetCallStatus ("Ready", 5);
+    SetAction (ID_MENU_CALL);
+    SetURI (SIP_DST_URI, -1);
+    SetFocus (hWnd);
 
 }
 
 
-static void OnDestroy(void)
+static void OnDestroy (void)
 {
     pjsua_destroy();
 }
 
-static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+static LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 {
     int wmId, wmEvent;
-    
+
     switch (message) {
-    case WM_KEYUP:
-	if (wParam==114) {
-	    wParam = ID_MENU_CALL;
-	} else if (wParam==115) {
-	    if (g_current_call == PJSUA_INVALID_ID)
-		wParam = ID_EXIT;
-	    else
-		wParam = ID_MENU_DISCONNECT;
-	} else
-	    break;
-
-    case WM_COMMAND:
-	wmId    = LOWORD(wParam); 
-	wmEvent = HIWORD(wParam); 
-	if (wmId == ID_BTN_ACTION)
-	    wmId = g_current_action;
-	switch (wmId)
-	{
-	case ID_MENU_CALL:
-	    if (g_current_call != PJSUA_INVALID_ID) {
-		MessageBox(NULL, TEXT("Can not make call"), 
-			   TEXT("You already have one call active"), MB_OK);
-	    }
-	    pj_str_t dst_uri;
-	    wchar_t text[256];
-	    char tmp[256];
-	    pj_status_t status;
-
-	    GetWindowText(hwndURI, text, PJ_ARRAY_SIZE(text));
-	    pj_unicode_to_ansi(text, pj_unicode_strlen(text),
-			       tmp, sizeof(tmp));
-	    dst_uri.ptr = tmp;
-	    dst_uri.slen = pj_ansi_strlen(tmp);
-	    status = pjsua_call_make_call(g_current_acc,
-						      &dst_uri, 0, NULL,
-						      NULL, &g_current_call);
-	    if (status != PJ_SUCCESS)
-		OnError(TEXT("Unable to make call"), status);
-	    break;
-	case ID_MENU_ANSWER:
-	    if (g_current_call == PJSUA_INVALID_ID)
-		MessageBox(NULL, TEXT("Can not answer"), 
-			   TEXT("There is no call!"), MB_OK);
-	    else
-		pjsua_call_answer(g_current_call, 200, NULL, NULL);
-	    break;
-	case ID_MENU_DISCONNECT:
-	    if (g_current_call == PJSUA_INVALID_ID)
-		MessageBox(NULL, TEXT("Can not disconnect"), 
-			   TEXT("There is no call!"), MB_OK);
-	    else
-		pjsua_call_hangup(g_current_call, PJSIP_SC_DECLINE, NULL, NULL);
-	    break;
-	case ID_EXIT:
-	    DestroyWindow(hWnd);
-	    break;
-	default:
-	    return DefWindowProc(hWnd, message, wParam, lParam);
-	}
-	break;
-
-    case WM_CREATE:
-	OnCreate(hWnd);
-	break;
-
-    case WM_DESTROY:
-	OnDestroy();
-	CommandBar_Destroy(hwndCB);
-	PostQuitMessage(0);
-	break;
-
-    case WM_TIMER:
-	pjsua_handle_events(1);
-	break;
-
-    default:
-	return DefWindowProc(hWnd, message, wParam, lParam);
+        case WM_KEYUP:
+
+            if (wParam==114) {
+                wParam = ID_MENU_CALL;
+            } else if (wParam==115) {
+                if (g_current_call == PJSUA_INVALID_ID)
+                    wParam = ID_EXIT;
+                else
+                    wParam = ID_MENU_DISCONNECT;
+            } else
+                break;
+
+        case WM_COMMAND:
+            wmId    = LOWORD (wParam);
+            wmEvent = HIWORD (wParam);
+
+            if (wmId == ID_BTN_ACTION)
+                wmId = g_current_action;
+
+            switch (wmId) {
+                case ID_MENU_CALL:
+
+                    if (g_current_call != PJSUA_INVALID_ID) {
+                        MessageBox (NULL, TEXT ("Can not make call"),
+                                    TEXT ("You already have one call active"), MB_OK);
+                    }
+
+                    pj_str_t dst_uri;
+                    wchar_t text[256];
+                    char tmp[256];
+                    pj_status_t status;
+
+                    GetWindowText (hwndURI, text, PJ_ARRAY_SIZE (text));
+                    pj_unicode_to_ansi (text, pj_unicode_strlen (text),
+                                        tmp, sizeof (tmp));
+                    dst_uri.ptr = tmp;
+                    dst_uri.slen = pj_ansi_strlen (tmp);
+                    status = pjsua_call_make_call (g_current_acc,
+                                                   &dst_uri, 0, NULL,
+                                                   NULL, &g_current_call);
+
+                    if (status != PJ_SUCCESS)
+                        OnError (TEXT ("Unable to make call"), status);
+
+                    break;
+                case ID_MENU_ANSWER:
+
+                    if (g_current_call == PJSUA_INVALID_ID)
+                        MessageBox (NULL, TEXT ("Can not answer"),
+                                    TEXT ("There is no call!"), MB_OK);
+                    else
+                        pjsua_call_answer (g_current_call, 200, NULL, NULL);
+
+                    break;
+                case ID_MENU_DISCONNECT:
+
+                    if (g_current_call == PJSUA_INVALID_ID)
+                        MessageBox (NULL, TEXT ("Can not disconnect"),
+                                    TEXT ("There is no call!"), MB_OK);
+                    else
+                        pjsua_call_hangup (g_current_call, PJSIP_SC_DECLINE, NULL, NULL);
+
+                    break;
+                case ID_EXIT:
+                    DestroyWindow (hWnd);
+                    break;
+                default:
+                    return DefWindowProc (hWnd, message, wParam, lParam);
+            }
+
+            break;
+
+        case WM_CREATE:
+            OnCreate (hWnd);
+            break;
+
+        case WM_DESTROY:
+            OnDestroy();
+            CommandBar_Destroy (hwndCB);
+            PostQuitMessage (0);
+            break;
+
+        case WM_TIMER:
+            pjsua_handle_events (1);
+            break;
+
+        default:
+            return DefWindowProc (hWnd, message, wParam, lParam);
     }
-   return 0;
+
+    return 0;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp
index 2d42d96e2ea3f8e259bbfb5dc4ab2966ea01d874..cc75d884ba8ed66ab5e30a943b74a3ec7d4f896e 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJ.cpp
@@ -14,21 +14,21 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // CPocketPJApp
 
-BEGIN_MESSAGE_MAP(CPocketPJApp, CWinApp)
-	//{{AFX_MSG_MAP(CPocketPJApp)
-		// NOTE - the ClassWizard will add and remove mapping macros here.
-		//    DO NOT EDIT what you see in these blocks of generated code!
-	//}}AFX_MSG_MAP
+BEGIN_MESSAGE_MAP (CPocketPJApp, CWinApp)
+    //{{AFX_MSG_MAP(CPocketPJApp)
+    // NOTE - the ClassWizard will add and remove mapping macros here.
+    //    DO NOT EDIT what you see in these blocks of generated code!
+    //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CPocketPJApp construction
 
 CPocketPJApp::CPocketPJApp()
-	: CWinApp()
+        : CWinApp()
 {
-	// TODO: add construction code here,
-	// Place all significant initialization in InitInstance
+    // TODO: add construction code here,
+    // Place all significant initialization in InitInstance
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -41,26 +41,24 @@ CPocketPJApp theApp;
 
 BOOL CPocketPJApp::InitInstance()
 {
-	// Standard initialization
-	// If you are not using these features and wish to reduce the size
-	//  of your final executable, you should remove from the following
-	//  the specific initialization routines you do not need.
+    // Standard initialization
+    // If you are not using these features and wish to reduce the size
+    //  of your final executable, you should remove from the following
+    //  the specific initialization routines you do not need.
 
-	CPocketPJDlg dlg;
-	m_pMainWnd = &dlg;
-	int nResponse = dlg.DoModal();
-	if (nResponse == IDOK)
-	{
-		// TODO: Place code here to handle when the dialog is
-		//  dismissed with OK
-	}
-	else if (nResponse == IDCANCEL)
-	{
-		// TODO: Place code here to handle when the dialog is
-		//  dismissed with Cancel
-	}
+    CPocketPJDlg dlg;
+    m_pMainWnd = &dlg;
+    int nResponse = dlg.DoModal();
 
-	// Since the dialog has been closed, return FALSE so that we exit the
-	//  application, rather than start the application's message pump.
-	return FALSE;
+    if (nResponse == IDOK) {
+        // TODO: Place code here to handle when the dialog is
+        //  dismissed with OK
+    } else if (nResponse == IDCANCEL) {
+        // TODO: Place code here to handle when the dialog is
+        //  dismissed with Cancel
+    }
+
+    // Since the dialog has been closed, return FALSE so that we exit the
+    //  application, rather than start the application's message pump.
+    return FALSE;
 }
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
index b8a6bf2f1e7b3b3853bd122c02513c3e7d2fc0c2..7751205da544d54429c0e94c7c3a29c8d5c99723 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PocketPJDlg.cpp
@@ -18,64 +18,65 @@ static CPocketPJDlg *theDlg;
 /////////////////////////////////////////////////////////////////////////////
 // CPocketPJDlg dialog
 
-CPocketPJDlg::CPocketPJDlg(CWnd* pParent /*=NULL*/)
-	: CDialog(CPocketPJDlg::IDD, pParent), m_PopUp(NULL)
+CPocketPJDlg::CPocketPJDlg (CWnd* pParent /*=NULL*/)
+        : CDialog (CPocketPJDlg::IDD, pParent), m_PopUp (NULL)
 {
-	//{{AFX_DATA_INIT(CPocketPJDlg)
-		// NOTE: the ClassWizard will add member initialization here
-	//}}AFX_DATA_INIT
-	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
-	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-
-	theDlg = this;
-
-	m_PopUp = new CPopUpWnd(this);
-	m_PopUp->Hide();
-
-	unsigned i;
-	m_PopUpCount = 0;
-	for (i=0; i<POPUP_MAX_TYPE; ++i) {
-	    m_PopUpState[i] = FALSE;
-	}
+    //{{AFX_DATA_INIT(CPocketPJDlg)
+    // NOTE: the ClassWizard will add member initialization here
+    //}}AFX_DATA_INIT
+    // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
+    m_hIcon = AfxGetApp()->LoadIcon (IDR_MAINFRAME);
+
+    theDlg = this;
+
+    m_PopUp = new CPopUpWnd (this);
+    m_PopUp->Hide();
+
+    unsigned i;
+    m_PopUpCount = 0;
+
+    for (i=0; i<POPUP_MAX_TYPE; ++i) {
+        m_PopUpState[i] = FALSE;
+    }
 }
 
-void CPocketPJDlg::DoDataExchange(CDataExchange* pDX)
+void CPocketPJDlg::DoDataExchange (CDataExchange* pDX)
 {
-	CDialog::DoDataExchange(pDX);
-	//{{AFX_DATA_MAP(CPocketPJDlg)
-	DDX_Control(pDX, IDC_URL, m_Url);
-	DDX_Control(pDX, IDC_BUDDY_LIST, m_BuddyList);
-	DDX_Control(pDX, IDC_BTN_ACTION, m_BtnUrlAction);
-	DDX_Control(pDX, IDC_BTN_ACC, m_BtnAcc);
-	DDX_Control(pDX, IDC_ACC_ID, m_AccId);
-	//}}AFX_DATA_MAP
+    CDialog::DoDataExchange (pDX);
+    //{{AFX_DATA_MAP(CPocketPJDlg)
+    DDX_Control (pDX, IDC_URL, m_Url);
+    DDX_Control (pDX, IDC_BUDDY_LIST, m_BuddyList);
+    DDX_Control (pDX, IDC_BTN_ACTION, m_BtnUrlAction);
+    DDX_Control (pDX, IDC_BTN_ACC, m_BtnAcc);
+    DDX_Control (pDX, IDC_ACC_ID, m_AccId);
+    //}}AFX_DATA_MAP
 }
 
-BEGIN_MESSAGE_MAP(CPocketPJDlg, CDialog)
-	//{{AFX_MSG_MAP(CPocketPJDlg)
-	ON_BN_CLICKED(IDC_BTN_ACC, OnBtnAcc)
-	ON_BN_CLICKED(IDC_BTN_ACTION, OnBtnAction)
-	ON_COMMAND(IDC_ACC_SETTINGS, OnSettings)
-	ON_COMMAND(IDC_URI_CALL, OnUriCall)
-	ON_WM_TIMER()
-	ON_COMMAND(IDC_URI_ADD_BUDDY, OnUriAddBuddy)
-	ON_COMMAND(IDC_URI_DEL_BUDDY, OnUriDelBuddy)
-	ON_COMMAND(IDC_ACC_ONLINE, OnAccOnline)
-	ON_COMMAND(IDC_ACC_INVISIBLE, OnAccInvisible)
-	ON_NOTIFY(NM_CLICK, IDC_BUDDY_LIST, OnClickBuddyList)
-	//}}AFX_MSG_MAP
+BEGIN_MESSAGE_MAP (CPocketPJDlg, CDialog)
+    //{{AFX_MSG_MAP(CPocketPJDlg)
+    ON_BN_CLICKED (IDC_BTN_ACC, OnBtnAcc)
+    ON_BN_CLICKED (IDC_BTN_ACTION, OnBtnAction)
+    ON_COMMAND (IDC_ACC_SETTINGS, OnSettings)
+    ON_COMMAND (IDC_URI_CALL, OnUriCall)
+    ON_WM_TIMER()
+    ON_COMMAND (IDC_URI_ADD_BUDDY, OnUriAddBuddy)
+    ON_COMMAND (IDC_URI_DEL_BUDDY, OnUriDelBuddy)
+    ON_COMMAND (IDC_ACC_ONLINE, OnAccOnline)
+    ON_COMMAND (IDC_ACC_INVISIBLE, OnAccInvisible)
+    ON_NOTIFY (NM_CLICK, IDC_BUDDY_LIST, OnClickBuddyList)
+    //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 
-void CPocketPJDlg::Error(const CString &title, pj_status_t rc)
+void CPocketPJDlg::Error (const CString &title, pj_status_t rc)
 {
     char errmsg[PJ_ERR_MSG_SIZE];
     wchar_t werrmsg[PJ_ERR_MSG_SIZE];
 
-    pj_strerror(rc, errmsg, sizeof(errmsg));
-    pj_ansi_to_unicode(errmsg, strlen(errmsg), werrmsg, PJ_ARRAY_SIZE(werrmsg));
+    pj_strerror (rc, errmsg, sizeof (errmsg));
+    pj_ansi_to_unicode (errmsg, strlen (errmsg), werrmsg, PJ_ARRAY_SIZE (werrmsg));
 
-    AfxMessageBox(title + _T(": ") + werrmsg);
+    AfxMessageBox (title + _T (": ") + werrmsg);
 }
 
 BOOL CPocketPJDlg::Restart()
@@ -84,41 +85,42 @@ BOOL CPocketPJDlg::Restart()
     pj_status_t status;
 
     char ver[80];
-    sprintf(ver, "PocketPJ/%s", pj_get_version());
+    sprintf (ver, "PocketPJ/%s", pj_get_version());
 
-    ShowWindow(SW_SHOW);
-    PopUp_Show(POPUP_REGISTRATION, ver,
-	       "Starting up....", "", "", "", 0);
+    ShowWindow (SW_SHOW);
+    PopUp_Show (POPUP_REGISTRATION, ver,
+                "Starting up....", "", "", "", 0);
 
-    KillTimer(TIMER_ID);
+    KillTimer (TIMER_ID);
 
     // Destroy first.
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Cleaning up..");
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Cleaning up..");
     pjsua_destroy();
 
-    m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_OFFLINE)) );
+    m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_OFFLINE)));
     UpdateWindow();
 
 
     // Create
-    PopUp_Show(POPUP_REGISTRATION, ver,
-	       "Starting up....", "Creating stack..", "", "", 0);
+    PopUp_Show (POPUP_REGISTRATION, ver,
+                "Starting up....", "Creating stack..", "", "", 0);
 
     status = pjsua_create();
+
     if (status != PJ_SUCCESS) {
-	Error(_T("Error in creating library"), status);
-	PopUp_Hide(POPUP_REGISTRATION);
-	return FALSE;
+        Error (_T ("Error in creating library"), status);
+        PopUp_Hide (POPUP_REGISTRATION);
+        return FALSE;
     }
 
     pjsua_config cfg;
     pjsua_logging_config log_cfg;
     pjsua_media_config media_cfg;
 
-    pjsua_config_default(&cfg);
+    pjsua_config_default (&cfg);
     cfg.max_calls = 1;
     cfg.thread_cnt = 0;
-    cfg.user_agent = pj_str(ver);
+    cfg.user_agent = pj_str (ver);
 
     cfg.cb.on_call_state = &on_call_state;
     cfg.cb.on_call_media_state = &on_call_media_state;
@@ -130,53 +132,55 @@ BOOL CPocketPJDlg::Restart()
     /* Configure nameserver */
     char nameserver[60];
     {
-	FIXED_INFO fi;
-	PIP_ADDR_STRING pDNS = NULL;
-	ULONG len = sizeof(fi);
-	CString err;
-
-	PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Retrieving network parameters..");
-	if (GetNetworkParams(&fi, &len) != ERROR_SUCCESS) {
-	    err = _T("Info: Error querying network parameters. You must configure DNS server.");
-	} else if (fi.CurrentDnsServer) {
-	    pDNS = fi.CurrentDnsServer;
-	} else if (fi.DnsServerList.IpAddress.String[0] != 0) {
-	    pDNS = &fi.DnsServerList;
-	} else {
-	    err = _T("Info: DNS server not configured. You must configure DNS server.");
-	} 
-	
-	if (err.GetLength()) {
-	    if (m_Cfg.m_DNS.GetLength()) {
-		pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_DNS, m_Cfg.m_DNS.GetLength(),
-				   nameserver, sizeof(nameserver));
-		cfg.nameserver_count = 1;
-		cfg.nameserver[0] = pj_str(nameserver);
-	    } else {
-		AfxMessageBox(err);
-		pjsua_destroy();
-		PopUp_Hide(POPUP_REGISTRATION);
-		return FALSE;
-	    }
-	} else {
-	    strcpy(nameserver, pDNS->IpAddress.String);
-	    cfg.nameserver_count = 1;
-	    cfg.nameserver[0] = pj_str(nameserver);
-	}
+        FIXED_INFO fi;
+        PIP_ADDR_STRING pDNS = NULL;
+        ULONG len = sizeof (fi);
+        CString err;
+
+        PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Retrieving network parameters..");
+
+        if (GetNetworkParams (&fi, &len) != ERROR_SUCCESS) {
+            err = _T ("Info: Error querying network parameters. You must configure DNS server.");
+        } else if (fi.CurrentDnsServer) {
+            pDNS = fi.CurrentDnsServer;
+        } else if (fi.DnsServerList.IpAddress.String[0] != 0) {
+            pDNS = &fi.DnsServerList;
+        } else {
+            err = _T ("Info: DNS server not configured. You must configure DNS server.");
+        }
+
+        if (err.GetLength()) {
+            if (m_Cfg.m_DNS.GetLength()) {
+                pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_DNS, m_Cfg.m_DNS.GetLength(),
+                                     nameserver, sizeof (nameserver));
+                cfg.nameserver_count = 1;
+                cfg.nameserver[0] = pj_str (nameserver);
+            } else {
+                AfxMessageBox (err);
+                pjsua_destroy();
+                PopUp_Hide (POPUP_REGISTRATION);
+                return FALSE;
+            }
+        } else {
+            strcpy (nameserver, pDNS->IpAddress.String);
+            cfg.nameserver_count = 1;
+            cfg.nameserver[0] = pj_str (nameserver);
+        }
     }
 
     char tmp_stun[80];
+
     if (m_Cfg.m_UseStun) {
-	pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_StunSrv, m_Cfg.m_StunSrv.GetLength(),
-			   tmp_stun, sizeof(tmp_stun));
-	cfg.stun_host = pj_str(tmp_stun);
+        pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_StunSrv, m_Cfg.m_StunSrv.GetLength(),
+                             tmp_stun, sizeof (tmp_stun));
+        cfg.stun_host = pj_str (tmp_stun);
     }
 
-    pjsua_logging_config_default(&log_cfg);
+    pjsua_logging_config_default (&log_cfg);
     log_cfg.msg_logging = PJ_TRUE;
-    log_cfg.log_filename = pj_str("\\PocketPJ.TXT");
+    log_cfg.log_filename = pj_str ("\\PocketPJ.TXT");
 
-    pjsua_media_config_default(&media_cfg);
+    pjsua_media_config_default (&media_cfg);
     media_cfg.clock_rate = 8000;
     media_cfg.audio_frame_ptime = 40;
     media_cfg.ec_tail_len = 0;
@@ -189,104 +193,109 @@ BOOL CPocketPJDlg::Restart()
     media_cfg.no_vad = !m_Cfg.m_VAD;
 
     if (m_Cfg.m_EchoSuppress) {
-	media_cfg.ec_options = PJMEDIA_ECHO_SIMPLE;
-	media_cfg.ec_tail_len = m_Cfg.m_EcTail;
+        media_cfg.ec_options = PJMEDIA_ECHO_SIMPLE;
+        media_cfg.ec_tail_len = m_Cfg.m_EcTail;
     }
 
     // Init
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Initializing..");
-    status = pjsua_init(&cfg, &log_cfg, &media_cfg);
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Initializing..");
+    status = pjsua_init (&cfg, &log_cfg, &media_cfg);
+
     if (status != PJ_SUCCESS) {
-	Error(_T("Error initializing library"), status);
-	pjsua_destroy();
-	PopUp_Hide(POPUP_REGISTRATION);
-	return FALSE;
+        Error (_T ("Error initializing library"), status);
+        pjsua_destroy();
+        PopUp_Hide (POPUP_REGISTRATION);
+        return FALSE;
     }
 
     // Create one UDP transport
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding UDP transport..");
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding UDP transport..");
     pjsua_transport_id transport_id;
     pjsua_transport_config udp_cfg;
 
-    pjsua_transport_config_default(&udp_cfg);
+    pjsua_transport_config_default (&udp_cfg);
     udp_cfg.port = 0;
-    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP,
-					&udp_cfg, &transport_id);
+    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP,
+                                     &udp_cfg, &transport_id);
+
     if (status != PJ_SUCCESS) {
-	Error(_T("Error creating UDP transport"), status);
-	pjsua_destroy();
-	PopUp_Hide(POPUP_REGISTRATION);
-	return FALSE;
+        Error (_T ("Error creating UDP transport"), status);
+        pjsua_destroy();
+        PopUp_Hide (POPUP_REGISTRATION);
+        return FALSE;
     }
 
     // Always instantiate TCP to support auto-switching to TCP when
     // packet is larger than 1300 bytes. If TCP is disabled when
     // no auto-switching will occur
     if (1) {
-	// Create one TCP transport
-	PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding TCP transport..");
-	pjsua_transport_id transport_id;
-	pjsua_transport_config tcp_cfg;
-
-	pjsua_transport_config_default(&tcp_cfg);
-	tcp_cfg.port = 0;
-	status = pjsua_transport_create(PJSIP_TRANSPORT_TCP,
-					&tcp_cfg, &transport_id);
-	if (status != PJ_SUCCESS) {
-	    Error(_T("Error creating TCP transport"), status);
-	    pjsua_destroy();
-	    PopUp_Hide(POPUP_REGISTRATION);
-	    return FALSE;
-	}
+        // Create one TCP transport
+        PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding TCP transport..");
+        pjsua_transport_id transport_id;
+        pjsua_transport_config tcp_cfg;
+
+        pjsua_transport_config_default (&tcp_cfg);
+        tcp_cfg.port = 0;
+        status = pjsua_transport_create (PJSIP_TRANSPORT_TCP,
+                                         &tcp_cfg, &transport_id);
+
+        if (status != PJ_SUCCESS) {
+            Error (_T ("Error creating TCP transport"), status);
+            pjsua_destroy();
+            PopUp_Hide (POPUP_REGISTRATION);
+            return FALSE;
+        }
     }
 
     // Adjust codecs priority
     pj_str_t tmp;
-    pjsua_codec_set_priority(pj_cstr(&tmp, "*"), 0);
-    for (i=0; i<(unsigned)m_Cfg.m_Codecs.GetSize(); ++i) {
-	CString codec = m_Cfg.m_Codecs.GetAt(i);
-	char tmp_nam[80];
-
-	pj_unicode_to_ansi((LPCTSTR)codec, codec.GetLength(),
-			   tmp_nam, sizeof(tmp_nam));
-	pjsua_codec_set_priority(pj_cstr(&tmp, tmp_nam), (pj_uint8_t)(200-i));
+    pjsua_codec_set_priority (pj_cstr (&tmp, "*"), 0);
+
+    for (i=0; i< (unsigned) m_Cfg.m_Codecs.GetSize(); ++i) {
+        CString codec = m_Cfg.m_Codecs.GetAt (i);
+        char tmp_nam[80];
+
+        pj_unicode_to_ansi ( (LPCTSTR) codec, codec.GetLength(),
+                             tmp_nam, sizeof (tmp_nam));
+        pjsua_codec_set_priority (pj_cstr (&tmp, tmp_nam), (pj_uint8_t) (200-i));
     }
 
     // Start!
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Starting..");
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Starting..");
     status = pjsua_start();
+
     if (status != PJ_SUCCESS) {
-	Error(_T("Error starting library"), status);
-	pjsua_destroy();
-	PopUp_Hide(POPUP_REGISTRATION);
-	return FALSE;
+        Error (_T ("Error starting library"), status);
+        pjsua_destroy();
+        PopUp_Hide (POPUP_REGISTRATION);
+        return FALSE;
     }
 
     // Add account
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding account..");
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "Adding account..");
     char domain[80], username[80], passwd[80];
     char id[80], reg_uri[80];
     pjsua_acc_config acc_cfg;
 
-    pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_Domain, m_Cfg.m_Domain.GetLength(),
-		       domain, sizeof(domain));
-    pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_User, m_Cfg.m_User.GetLength(),
-		       username, sizeof(username));
-    pj_unicode_to_ansi((LPCTSTR)m_Cfg.m_Password, m_Cfg.m_Password.GetLength(),
-		       passwd, sizeof(passwd));
+    pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_Domain, m_Cfg.m_Domain.GetLength(),
+                         domain, sizeof (domain));
+    pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_User, m_Cfg.m_User.GetLength(),
+                         username, sizeof (username));
+    pj_unicode_to_ansi ( (LPCTSTR) m_Cfg.m_Password, m_Cfg.m_Password.GetLength(),
+                         passwd, sizeof (passwd));
 
-    snprintf(id, sizeof(id), "<sip:%s@%s>", username, domain);
-    snprintf(reg_uri, sizeof(reg_uri), "sip:%s", domain);
+    snprintf (id, sizeof (id), "<sip:%s@%s>", username, domain);
+    snprintf (reg_uri, sizeof (reg_uri), "sip:%s", domain);
 
-    pjsua_acc_config_default(&acc_cfg);
-    acc_cfg.id = pj_str(id);
-    acc_cfg.reg_uri = pj_str(reg_uri);
+    pjsua_acc_config_default (&acc_cfg);
+    acc_cfg.id = pj_str (id);
+    acc_cfg.reg_uri = pj_str (reg_uri);
     acc_cfg.cred_count = 1;
-    acc_cfg.cred_info[0].scheme = pj_str("Digest");
-    acc_cfg.cred_info[0].realm = pj_str("*");
-    acc_cfg.cred_info[0].username = pj_str(username);
+    acc_cfg.cred_info[0].scheme = pj_str ("Digest");
+    acc_cfg.cred_info[0].realm = pj_str ("*");
+    acc_cfg.cred_info[0].username = pj_str (username);
     acc_cfg.cred_info[0].data_type = 0;
-    acc_cfg.cred_info[0].data = pj_str(passwd);
+    acc_cfg.cred_info[0].data = pj_str (passwd);
 
 #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
     acc_cfg.use_srtp = (m_Cfg.m_UseSrtp ? PJMEDIA_SRTP_OPTIONAL : PJMEDIA_SRTP_DISABLED);
@@ -294,48 +303,50 @@ BOOL CPocketPJDlg::Restart()
 #endif
 
     acc_cfg.publish_enabled = m_Cfg.m_UsePublish;
-    
+
     char route[80];
+
     if (m_Cfg.m_TCP) {
-	snprintf(route, sizeof(route), "<sip:%s;lr;transport=tcp>", domain);
-	acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str(route);
+        snprintf (route, sizeof (route), "<sip:%s;lr;transport=tcp>", domain);
+        acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str (route);
     } else {
-	snprintf(route, sizeof(route), "<sip:%s;lr>", domain);
-	acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str(route);
+        snprintf (route, sizeof (route), "<sip:%s;lr>", domain);
+        acc_cfg.proxy[acc_cfg.proxy_cnt++] = pj_str (route);
     }
 
-    status = pjsua_acc_add(&acc_cfg, PJ_TRUE, &m_PjsuaAccId);
+    status = pjsua_acc_add (&acc_cfg, PJ_TRUE, &m_PjsuaAccId);
+
     if (status != PJ_SUCCESS) {
-	Error(_T("Invalid account settings"), status);
-	pjsua_destroy();
-	PopUp_Hide(POPUP_REGISTRATION);
-	return FALSE;
+        Error (_T ("Invalid account settings"), status);
+        pjsua_destroy();
+        PopUp_Hide (POPUP_REGISTRATION);
+        return FALSE;
     }
 
-    CString acc_text = m_Cfg.m_User + _T("@") + m_Cfg.m_Domain;
-    m_AccId.SetWindowText(acc_text);
+    CString acc_text = m_Cfg.m_User + _T ("@") + m_Cfg.m_Domain;
+    m_AccId.SetWindowText (acc_text);
 
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE1, acc_text);
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE2, "Registering..");
-    PopUp_Modify(POPUP_REGISTRATION, POPUP_EL_TITLE3, "");
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE1, acc_text);
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE2, "Registering..");
+    PopUp_Modify (POPUP_REGISTRATION, POPUP_EL_TITLE3, "");
 
-    SetTimer(TIMER_ID, 100, NULL);
+    SetTimer (TIMER_ID, 100, NULL);
     return TRUE;
 }
 
 
-void CPocketPJDlg::PopUp_Show( PopUpType type, 
-			        const CString& title1,
-				const CString& title2,
-				const CString& title3,
-				const CString& btn1,
-				const CString& btn2,
-				unsigned userData)
+void CPocketPJDlg::PopUp_Show (PopUpType type,
+                               const CString& title1,
+                               const CString& title2,
+                               const CString& title3,
+                               const CString& btn1,
+                               const CString& btn2,
+                               unsigned userData)
 {
-    PJ_UNUSED_ARG(userData);
+    PJ_UNUSED_ARG (userData);
 
     if (!m_PopUpState[type])
-	++m_PopUpCount;
+        ++m_PopUpCount;
 
     m_PopUpState[type] = TRUE;
 
@@ -345,52 +356,52 @@ void CPocketPJDlg::PopUp_Show( PopUpType type,
     m_PopUpContent[type].m_Btn1 = btn1;
     m_PopUpContent[type].m_Btn2 = btn2;
 
-    m_PopUp->SetContent(m_PopUpContent[type]);
+    m_PopUp->SetContent (m_PopUpContent[type]);
     m_PopUp->Show();
 }
 
-void CPocketPJDlg::PopUp_Modify(PopUpType type,
-				PopUpElement el,
-				const CString& text)
+void CPocketPJDlg::PopUp_Modify (PopUpType type,
+                                 PopUpElement el,
+                                 const CString& text)
 {
     switch (el) {
-    case POPUP_EL_TITLE1:
-	m_PopUpContent[type].m_Title1 = text;
-	break;
-    case POPUP_EL_TITLE2:
-	m_PopUpContent[type].m_Title2 = text;
-	break;
-    case POPUP_EL_TITLE3:
-	m_PopUpContent[type].m_Title3 = text;
-	break;
-    case POPUP_EL_BUTTON1:
-	m_PopUpContent[type].m_Btn1 = text;
-	break;
-    case POPUP_EL_BUTTON2:
-	m_PopUpContent[type].m_Btn1 = text;
-	break;
+        case POPUP_EL_TITLE1:
+            m_PopUpContent[type].m_Title1 = text;
+            break;
+        case POPUP_EL_TITLE2:
+            m_PopUpContent[type].m_Title2 = text;
+            break;
+        case POPUP_EL_TITLE3:
+            m_PopUpContent[type].m_Title3 = text;
+            break;
+        case POPUP_EL_BUTTON1:
+            m_PopUpContent[type].m_Btn1 = text;
+            break;
+        case POPUP_EL_BUTTON2:
+            m_PopUpContent[type].m_Btn1 = text;
+            break;
     }
 
-    m_PopUp->SetContent(m_PopUpContent[type]);
+    m_PopUp->SetContent (m_PopUpContent[type]);
 }
 
-void CPocketPJDlg::PopUp_Hide(PopUpType type)
+void CPocketPJDlg::PopUp_Hide (PopUpType type)
 {
     if (m_PopUpState[type])
-	--m_PopUpCount;
+        --m_PopUpCount;
 
     m_PopUpState[type] = FALSE;
 
     if (m_PopUpCount == 0) {
-	m_PopUp->Hide();
-	UpdateWindow();
+        m_PopUp->Hide();
+        UpdateWindow();
     } else {
-	for (int i=POPUP_MAX_TYPE-1; i>=0; --i) {
-	    if (m_PopUpState[i]) {
-		m_PopUp->SetContent(m_PopUpContent[i]);
-		break;
-	    }
-	}
+        for (int i=POPUP_MAX_TYPE-1; i>=0; --i) {
+            if (m_PopUpState[i]) {
+                m_PopUp->SetContent (m_PopUpContent[i]);
+                break;
+            }
+        }
     }
 }
 
@@ -398,109 +409,112 @@ void CPocketPJDlg::OnCallState()
 {
     pjsua_call_info ci;
 
-    pjsua_call_get_info(0, &ci);
-    
+    pjsua_call_get_info (0, &ci);
+
     switch (ci.state) {
-    case PJSIP_INV_STATE_NULL:	    /**< Before INVITE is sent or received  */
-	break;
-    case PJSIP_INV_STATE_CALLING:   /**< After INVITE is sent		    */
-	PopUp_Show(POPUP_CALL, "Calling..", ci.remote_info.ptr, "",
-		   "", "Hangup", 0);
-	break;
-    case PJSIP_INV_STATE_INCOMING:  /**< After INVITE is received.	    */
-	PopUp_Show(POPUP_CALL, "Incoming call..", ci.remote_info.ptr, "",
-		   "Answer", "Hangup", 0);
-	pjsua_call_answer(0, 180, NULL, NULL);
-	if (m_Cfg.m_AutoAnswer)
-	    OnPopUpButton(1);
-	break;
-    case PJSIP_INV_STATE_EARLY:	    /**< After response with To tag.	    */
-    case PJSIP_INV_STATE_CONNECTING:/**< After 2xx is sent/received.	    */
-    case PJSIP_INV_STATE_CONFIRMED:  /**< After ACK is sent/received.	    */
-	{
-	    CString stateText = ci.state_text.ptr;
-	    PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE3, stateText);
-	}
-	break;
-    case PJSIP_INV_STATE_DISCONNECTED:/**< Session is terminated.	    */
-	PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE3, "Disconnected");
-	PopUp_Hide(POPUP_CALL);
-	break;
-    }    
+        case PJSIP_INV_STATE_NULL:	    /**< Before INVITE is sent or received  */
+            break;
+        case PJSIP_INV_STATE_CALLING:   /**< After INVITE is sent		    */
+            PopUp_Show (POPUP_CALL, "Calling..", ci.remote_info.ptr, "",
+                        "", "Hangup", 0);
+            break;
+        case PJSIP_INV_STATE_INCOMING:  /**< After INVITE is received.	    */
+            PopUp_Show (POPUP_CALL, "Incoming call..", ci.remote_info.ptr, "",
+                        "Answer", "Hangup", 0);
+            pjsua_call_answer (0, 180, NULL, NULL);
+
+            if (m_Cfg.m_AutoAnswer)
+                OnPopUpButton (1);
+
+            break;
+        case PJSIP_INV_STATE_EARLY:	    /**< After response with To tag.	    */
+        case PJSIP_INV_STATE_CONNECTING:/**< After 2xx is sent/received.	    */
+        case PJSIP_INV_STATE_CONFIRMED: { /**< After ACK is sent/received.	    */
+            CString stateText = ci.state_text.ptr;
+            PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE3, stateText);
+        }
+        break;
+        case PJSIP_INV_STATE_DISCONNECTED:/**< Session is terminated.	    */
+            PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE3, "Disconnected");
+            PopUp_Hide (POPUP_CALL);
+            break;
+    }
 }
 
-void CPocketPJDlg::on_call_state(pjsua_call_id call_id, pjsip_event *e)
+void CPocketPJDlg::on_call_state (pjsua_call_id call_id, pjsip_event *e)
 {
-    PJ_UNUSED_ARG(e);
-    PJ_UNUSED_ARG(call_id);
+    PJ_UNUSED_ARG (e);
+    PJ_UNUSED_ARG (call_id);
 
     theDlg->OnCallState();
 }
 
-void CPocketPJDlg::on_call_media_state(pjsua_call_id call_id)
+void CPocketPJDlg::on_call_media_state (pjsua_call_id call_id)
 {
     pjsua_call_info call_info;
 
-    pjsua_call_get_info(call_id, &call_info);
+    pjsua_call_get_info (call_id, &call_info);
+
     if (call_info.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-	pjsua_conf_connect(call_info.conf_slot, 0);
-	pjsua_conf_connect(0, call_info.conf_slot);
+        pjsua_conf_connect (call_info.conf_slot, 0);
+        pjsua_conf_connect (0, call_info.conf_slot);
     }
 }
 
-void CPocketPJDlg::on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
-				    pjsip_rx_data *rdata)
+void CPocketPJDlg::on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
+                                     pjsip_rx_data *rdata)
 {
-    PJ_UNUSED_ARG(acc_id);
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(rdata);
+    PJ_UNUSED_ARG (acc_id);
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (rdata);
 }
 
 void CPocketPJDlg::OnRegState()
 {
     pjsua_acc_info ai;
-    pjsua_acc_get_info(m_PjsuaAccId, &ai);
+    pjsua_acc_get_info (m_PjsuaAccId, &ai);
 
-    CString acc_text = m_Cfg.m_User + _T("@") + m_Cfg.m_Domain;
+    CString acc_text = m_Cfg.m_User + _T ("@") + m_Cfg.m_Domain;
 
     if (ai.expires>0 && ai.status/100==2) {
-	/* Registration success */
-	HBITMAP old = m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_ONLINE)) );
-	PJ_UNUSED_ARG(old);
-	acc_text += " (OK)";
-	m_AccId.SetWindowText(acc_text);
+        /* Registration success */
+        HBITMAP old = m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_ONLINE)));
+        PJ_UNUSED_ARG (old);
+        acc_text += " (OK)";
+        m_AccId.SetWindowText (acc_text);
     } else if (ai.status/100 != 2) {
-	acc_text += " (err)";
-	Error(_T("SIP registration error"), PJSIP_ERRNO_FROM_SIP_STATUS(ai.status));
-	m_AccId.SetWindowText(acc_text);
+        acc_text += " (err)";
+        Error (_T ("SIP registration error"), PJSIP_ERRNO_FROM_SIP_STATUS (ai.status));
+        m_AccId.SetWindowText (acc_text);
     }
-    PopUp_Hide(POPUP_REGISTRATION);
+
+    PopUp_Hide (POPUP_REGISTRATION);
 }
 
-void CPocketPJDlg::on_reg_state(pjsua_acc_id acc_id)
+void CPocketPJDlg::on_reg_state (pjsua_acc_id acc_id)
 {
-    PJ_UNUSED_ARG(acc_id);
+    PJ_UNUSED_ARG (acc_id);
 
     theDlg->OnRegState();
 }
 
-void CPocketPJDlg::on_buddy_state(pjsua_buddy_id buddy_id)
+void CPocketPJDlg::on_buddy_state (pjsua_buddy_id buddy_id)
 {
-    PJ_UNUSED_ARG(buddy_id);
+    PJ_UNUSED_ARG (buddy_id);
 
     theDlg->RedrawBuddyList();
 }
 
-void CPocketPJDlg::on_pager(pjsua_call_id call_id, const pj_str_t *from, 
-			    const pj_str_t *to, const pj_str_t *contact,
-			    const pj_str_t *mime_type, const pj_str_t *text)
+void CPocketPJDlg::on_pager (pjsua_call_id call_id, const pj_str_t *from,
+                             const pj_str_t *to, const pj_str_t *contact,
+                             const pj_str_t *mime_type, const pj_str_t *text)
 {
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(from);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
-    PJ_UNUSED_ARG(mime_type);
-    PJ_UNUSED_ARG(text);
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (from);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG (mime_type);
+    PJ_UNUSED_ARG (text);
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -508,143 +522,149 @@ void CPocketPJDlg::on_pager(pjsua_call_id call_id, const pj_str_t *from,
 
 BOOL CPocketPJDlg::OnInitDialog()
 {
-	CDialog::OnInitDialog();
-
-	// Set the icon for this dialog.  The framework does this automatically
-	//  when the application's main window is not a dialog
-	SetIcon(m_hIcon, TRUE);			// Set big icon
-	SetIcon(m_hIcon, FALSE);		// Set small icon
-	
-	CenterWindow(GetDesktopWindow());	// center to the hpc screen
- 
-	// TODO: Add extra initialization here
-	
-	m_Cfg.LoadRegistry();
-	//ShowWindow(SW_SHOW);
-	m_AccId.SetWindowText(m_Cfg.m_User);
-
-	CImageList *il = new CImageList;
-	VERIFY(il->Create(16, 16, ILC_COLOR|ILC_MASK, 2, 4));
-
-	CBitmap *bmp = new CBitmap;
-	bmp->LoadBitmap(MAKEINTRESOURCE(IDB_BLANK));
-	il->Add(bmp, RGB(255,255,255));
-	bmp = new CBitmap;
-	bmp->LoadBitmap(MAKEINTRESOURCE(IDB_ONLINE));
-	il->Add(bmp, RGB(255,255,255));
-	
-	m_BuddyList.SetImageList(il, LVSIL_SMALL);
-
-	if (m_Cfg.m_Domain.GetLength()==0 || Restart() == FALSE) {
-	    for (;;) {
-		CSettingsDlg dlg(m_Cfg);
-		if (dlg.DoModal() != IDOK) {
-		    EndDialog(IDOK);
-		    return TRUE;
-		}
-
-		m_Cfg.SaveRegistry();
-
-		if (Restart())
-		    break;
-	    }
-	}
-
-	RedrawBuddyList();
-	return TRUE;  // return TRUE  unless you set the focus to a control
+    CDialog::OnInitDialog();
+
+    // Set the icon for this dialog.  The framework does this automatically
+    //  when the application's main window is not a dialog
+    SetIcon (m_hIcon, TRUE);			// Set big icon
+    SetIcon (m_hIcon, FALSE);		// Set small icon
+
+    CenterWindow (GetDesktopWindow());	// center to the hpc screen
+
+    // TODO: Add extra initialization here
+
+    m_Cfg.LoadRegistry();
+    //ShowWindow(SW_SHOW);
+    m_AccId.SetWindowText (m_Cfg.m_User);
+
+    CImageList *il = new CImageList;
+    VERIFY (il->Create (16, 16, ILC_COLOR|ILC_MASK, 2, 4));
+
+    CBitmap *bmp = new CBitmap;
+    bmp->LoadBitmap (MAKEINTRESOURCE (IDB_BLANK));
+    il->Add (bmp, RGB (255,255,255));
+    bmp = new CBitmap;
+    bmp->LoadBitmap (MAKEINTRESOURCE (IDB_ONLINE));
+    il->Add (bmp, RGB (255,255,255));
+
+    m_BuddyList.SetImageList (il, LVSIL_SMALL);
+
+    if (m_Cfg.m_Domain.GetLength() ==0 || Restart() == FALSE) {
+        for (;;) {
+            CSettingsDlg dlg (m_Cfg);
+
+            if (dlg.DoModal() != IDOK) {
+                EndDialog (IDOK);
+                return TRUE;
+            }
+
+            m_Cfg.SaveRegistry();
+
+            if (Restart())
+                break;
+        }
+    }
+
+    RedrawBuddyList();
+    return TRUE;  // return TRUE  unless you set the focus to a control
 }
 
 
 
-void CPocketPJDlg::OnBtnAcc() 
+void CPocketPJDlg::OnBtnAcc()
 {
     CMenu menu;
-    VERIFY(menu.LoadMenu(IDR_ACC_MENU));
-    CMenu* pPopup = menu.GetSubMenu(0);
-    ASSERT(pPopup != NULL);
+    VERIFY (menu.LoadMenu (IDR_ACC_MENU));
+    CMenu* pPopup = menu.GetSubMenu (0);
+    ASSERT (pPopup != NULL);
 
     RECT r;
-    m_BtnAcc.GetWindowRect(&r);
-    pPopup->TrackPopupMenu(TPM_LEFTALIGN, r.left+4, r.top+4, this);
+    m_BtnAcc.GetWindowRect (&r);
+    pPopup->TrackPopupMenu (TPM_LEFTALIGN, r.left+4, r.top+4, this);
 }
 
-void CPocketPJDlg::OnBtnAction() 
+void CPocketPJDlg::OnBtnAction()
 {
     CMenu menu;
-    VERIFY(menu.LoadMenu(IDR_URI_MENU));
-    CMenu* pPopup = menu.GetSubMenu(0);
-    ASSERT(pPopup != NULL);
+    VERIFY (menu.LoadMenu (IDR_URI_MENU));
+    CMenu* pPopup = menu.GetSubMenu (0);
+    ASSERT (pPopup != NULL);
 
     RECT r;
-    this->m_BtnUrlAction.GetWindowRect(&r);
-    pPopup->TrackPopupMenu(TPM_LEFTALIGN, r.left+4, r.top+4, this);
+    this->m_BtnUrlAction.GetWindowRect (&r);
+    pPopup->TrackPopupMenu (TPM_LEFTALIGN, r.left+4, r.top+4, this);
 }
 
-void CPocketPJDlg::OnSettings() 
+void CPocketPJDlg::OnSettings()
 {
     for (;;) {
-	CSettingsDlg dlg(m_Cfg);
-	if (dlg.DoModal() != IDOK) {
-	    return;
-	}
+        CSettingsDlg dlg (m_Cfg);
+
+        if (dlg.DoModal() != IDOK) {
+            return;
+        }
 
-	m_Cfg.SaveRegistry();
+        m_Cfg.SaveRegistry();
 
-	if (Restart())
-	    break;
+        if (Restart())
+            break;
     }
 }
 
 void CPocketPJDlg::OnOK()
 {
-    if (AfxMessageBox(_T("Quit PocketPJ?"), MB_YESNO)==IDYES) {
-	KillTimer(TIMER_ID);
-	PopUp_Show(POPUP_REGISTRATION, "", "Shutting down..", "", "", "", 0);
-	pjsua_destroy();
-	CDialog::OnOK();
-	PopUp_Hide(POPUP_REGISTRATION);
-	m_Cfg.SaveRegistry();
-	return;
+    if (AfxMessageBox (_T ("Quit PocketPJ?"), MB_YESNO) ==IDYES) {
+        KillTimer (TIMER_ID);
+        PopUp_Show (POPUP_REGISTRATION, "", "Shutting down..", "", "", "", 0);
+        pjsua_destroy();
+        CDialog::OnOK();
+        PopUp_Hide (POPUP_REGISTRATION);
+        m_Cfg.SaveRegistry();
+        return;
     }
 }
 
-void CPocketPJDlg::OnTimer(UINT nIDEvent) 
+void CPocketPJDlg::OnTimer (UINT nIDEvent)
 {
-    pjsua_handle_events(10);
-    CDialog::OnTimer(nIDEvent);
+    pjsua_handle_events (10);
+    CDialog::OnTimer (nIDEvent);
 }
 
-int  CPocketPJDlg::FindBuddyInPjsua(const CString &Uri)
+int  CPocketPJDlg::FindBuddyInPjsua (const CString &Uri)
 {
     char uri[80];
     pjsua_buddy_id  id[128];
-    unsigned i, count = PJ_ARRAY_SIZE(id);
+    unsigned i, count = PJ_ARRAY_SIZE (id);
+
+    if (pjsua_enum_buddies (id, &count) != PJ_SUCCESS)
+        return PJSUA_INVALID_ID;
 
-    if (pjsua_enum_buddies(id, &count) != PJ_SUCCESS)
-	return PJSUA_INVALID_ID;
     if (count==0)
-	return PJSUA_INVALID_ID;
+        return PJSUA_INVALID_ID;
 
-    pj_unicode_to_ansi((LPCTSTR)Uri, Uri.GetLength(), uri, sizeof(uri));
+    pj_unicode_to_ansi ( (LPCTSTR) Uri, Uri.GetLength(), uri, sizeof (uri));
 
     for (i=0; i<count; ++i) {
-	pjsua_buddy_info bi;
-	pjsua_buddy_get_info(id[i], &bi);
-	if (pj_strcmp2(&bi.uri, uri)==0)
-	    return i;
+        pjsua_buddy_info bi;
+        pjsua_buddy_get_info (id[i], &bi);
+
+        if (pj_strcmp2 (&bi.uri, uri) ==0)
+            return i;
     }
 
     return PJSUA_INVALID_ID;
 }
 
-int  CPocketPJDlg::FindBuddyInCfg(const CString &uri)
+int  CPocketPJDlg::FindBuddyInCfg (const CString &uri)
 {
     int i;
+
     for (i=0; i<m_Cfg.m_BuddyList.GetSize(); ++i) {
-	if (m_Cfg.m_BuddyList.GetAt(0) == uri) {
-	    return i;
-	}
+        if (m_Cfg.m_BuddyList.GetAt (0) == uri) {
+            return i;
+        }
     }
+
     return -1;
 }
 
@@ -655,127 +675,132 @@ void CPocketPJDlg::RedrawBuddyList()
     m_BuddyList.DeleteAllItems();
 
     for (i=0; i<m_Cfg.m_BuddyList.GetSize(); ++i) {
-	int isOnline;
-	int id;
-
-	id = FindBuddyInPjsua(m_Cfg.m_BuddyList.GetAt(i));
-	if (id != PJSUA_INVALID_ID) {
-	    pjsua_buddy_info bi;
-	    pjsua_buddy_get_info(id, &bi);
-	    isOnline = (bi.status == PJSUA_BUDDY_STATUS_ONLINE);
-	} else {
-	    isOnline = 0;
-	}
-
-	LVITEM lvi;
-	memset(&lvi, 0, sizeof(lvi));
-	lvi.mask = LVIF_TEXT  | LVIF_IMAGE;
-	lvi.iItem = i;
-	lvi.iImage = isOnline;
-	lvi.pszText = (LPTSTR)(LPCTSTR)m_Cfg.m_BuddyList.GetAt(i);
-
-	m_BuddyList.InsertItem(&lvi);
+        int isOnline;
+        int id;
+
+        id = FindBuddyInPjsua (m_Cfg.m_BuddyList.GetAt (i));
+
+        if (id != PJSUA_INVALID_ID) {
+            pjsua_buddy_info bi;
+            pjsua_buddy_get_info (id, &bi);
+            isOnline = (bi.status == PJSUA_BUDDY_STATUS_ONLINE);
+        } else {
+            isOnline = 0;
+        }
+
+        LVITEM lvi;
+        memset (&lvi, 0, sizeof (lvi));
+        lvi.mask = LVIF_TEXT  | LVIF_IMAGE;
+        lvi.iItem = i;
+        lvi.iImage = isOnline;
+        lvi.pszText = (LPTSTR) (LPCTSTR) m_Cfg.m_BuddyList.GetAt (i);
+
+        m_BuddyList.InsertItem (&lvi);
     }
 }
 
-void CPocketPJDlg::OnUriCall() 
+void CPocketPJDlg::OnUriCall()
 {
     char tmp[120];
     CString uri;
     pj_status_t status;
 
-    m_Url.GetWindowText(uri);
-    pj_unicode_to_ansi((LPCTSTR)uri, uri.GetLength(), tmp, sizeof(tmp));
-    if ((status=pjsua_verify_sip_url(tmp)) != PJ_SUCCESS) {
-	Error("The URL is not valid SIP URL", status);
-	return;
+    m_Url.GetWindowText (uri);
+    pj_unicode_to_ansi ( (LPCTSTR) uri, uri.GetLength(), tmp, sizeof (tmp));
+
+    if ( (status=pjsua_verify_sip_url (tmp)) != PJ_SUCCESS) {
+        Error ("The URL is not valid SIP URL", status);
+        return;
     }
 
-    pj_str_t dest_uri = pj_str(tmp);
+    pj_str_t dest_uri = pj_str (tmp);
     pjsua_call_id call_id;
 
-    status = pjsua_call_make_call(m_PjsuaAccId, &dest_uri, 0, NULL, NULL, &call_id);
+    status = pjsua_call_make_call (m_PjsuaAccId, &dest_uri, 0, NULL, NULL, &call_id);
 
     if (status != PJ_SUCCESS)
-	Error("Unable to make call", status);
+        Error ("Unable to make call", status);
 }
 
-void CPocketPJDlg::OnUriAddBuddy() 
+void CPocketPJDlg::OnUriAddBuddy()
 {
     int i;
     char tmp[120];
     CString uri;
     pj_status_t status;
 
-    m_Url.GetWindowText(uri);
-    pj_unicode_to_ansi((LPCTSTR)uri, uri.GetLength(), tmp, sizeof(tmp));
-    if ((status=pjsua_verify_sip_url(tmp)) != PJ_SUCCESS) {
-	Error("The URL is not valid SIP URL", status);
-	return;
+    m_Url.GetWindowText (uri);
+    pj_unicode_to_ansi ( (LPCTSTR) uri, uri.GetLength(), tmp, sizeof (tmp));
+
+    if ( (status=pjsua_verify_sip_url (tmp)) != PJ_SUCCESS) {
+        Error ("The URL is not valid SIP URL", status);
+        return;
     }
 
     for (i=0; i<m_Cfg.m_BuddyList.GetSize(); ++i) {
-	if (m_Cfg.m_BuddyList.GetAt(0) == uri) {
-	    AfxMessageBox(_T("The URI is already in the buddy list"));
-	    return;
-	}
+        if (m_Cfg.m_BuddyList.GetAt (0) == uri) {
+            AfxMessageBox (_T ("The URI is already in the buddy list"));
+            return;
+        }
     }
 
-    m_Cfg.m_BuddyList.Add(uri);
+    m_Cfg.m_BuddyList.Add (uri);
     RedrawBuddyList();
 }
 
-void CPocketPJDlg::OnUriDelBuddy() 
+void CPocketPJDlg::OnUriDelBuddy()
 {
     CString uri;
 
-    m_Url.GetWindowText(uri);
-    int i = FindBuddyInCfg(uri);
+    m_Url.GetWindowText (uri);
+    int i = FindBuddyInCfg (uri);
+
     if (i<0) {
-	/* Buddy not found */
-	return;
+        /* Buddy not found */
+        return;
     }
 
-    m_Cfg.m_BuddyList.RemoveAt(i);
+    m_Cfg.m_BuddyList.RemoveAt (i);
     RedrawBuddyList();
-    AfxMessageBox(_T("Buddy " + uri + " deleted"));
+    AfxMessageBox (_T ("Buddy " + uri + " deleted"));
 }
 
-void CPocketPJDlg::OnAccOnline() 
+void CPocketPJDlg::OnAccOnline()
 {
-    pjsua_acc_set_online_status(m_PjsuaAccId, PJ_TRUE);
-    m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_ONLINE)) );
+    pjsua_acc_set_online_status (m_PjsuaAccId, PJ_TRUE);
+    m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_ONLINE)));
 }
 
-void CPocketPJDlg::OnAccInvisible() 
+void CPocketPJDlg::OnAccInvisible()
 {
-    pjsua_acc_set_online_status(m_PjsuaAccId, PJ_FALSE);
-    m_BtnAcc.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_INVISIBLE)) );
+    pjsua_acc_set_online_status (m_PjsuaAccId, PJ_FALSE);
+    m_BtnAcc.SetBitmap (::LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE (IDB_INVISIBLE)));
 }
 
-void CPocketPJDlg::OnPopUpButton(int btnNo)
+void CPocketPJDlg::OnPopUpButton (int btnNo)
 {
     if (btnNo == 1) {
-	pjsua_call_answer(0, 200, NULL, 0);
-	PopUp_Modify(POPUP_CALL, POPUP_EL_BUTTON1, "");
+        pjsua_call_answer (0, 200, NULL, 0);
+        PopUp_Modify (POPUP_CALL, POPUP_EL_BUTTON1, "");
     } else if (btnNo == 2) {
-	// Hangup button
-	PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE2, "Hang up..");
-	PopUp_Modify(POPUP_CALL, POPUP_EL_TITLE3, "");
-	pjsua_call_hangup(0, PJSIP_SC_DECLINE, 0, 0);
+        // Hangup button
+        PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE2, "Hang up..");
+        PopUp_Modify (POPUP_CALL, POPUP_EL_TITLE3, "");
+        pjsua_call_hangup (0, PJSIP_SC_DECLINE, 0, 0);
     }
 }
 
-void CPocketPJDlg::OnClickBuddyList(NMHDR* pNMHDR, LRESULT* pResult) 
+void CPocketPJDlg::OnClickBuddyList (NMHDR* pNMHDR, LRESULT* pResult)
 {
     POSITION pos = m_BuddyList.GetFirstSelectedItemPosition();
 
-    PJ_UNUSED_ARG(pNMHDR);
+    PJ_UNUSED_ARG (pNMHDR);
 
     if (pos != NULL) {
-	int iItem = m_BuddyList.GetNextSelectedItem(pos);
-	CString uri = m_BuddyList.GetItemText(iItem, 0);
-	m_Url.SetWindowText(uri);
+        int iItem = m_BuddyList.GetNextSelectedItem (pos);
+        CString uri = m_BuddyList.GetItemText (iItem, 0);
+        m_Url.SetWindowText (uri);
     }
+
     *pResult = 0;
 }
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp
index 1f1654f0621eca2dd67e4686be3002f1a647eff5..f87a84a7a0597d59968b490b354cca40397705fc 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/PopUpWnd.cpp
@@ -16,9 +16,9 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // CPopUpWnd
 
-CPopUpWnd::CPopUpWnd(CPocketPJDlg* pParent)
+CPopUpWnd::CPopUpWnd (CPocketPJDlg* pParent)
 {
-    Create(pParent);
+    Create (pParent);
 }
 
 CPopUpWnd::~CPopUpWnd()
@@ -26,81 +26,87 @@ CPopUpWnd::~CPopUpWnd()
     DestroyWindow();
 }
 
-BOOL CPopUpWnd::Create(CPocketPJDlg* pParent)
+BOOL CPopUpWnd::Create (CPocketPJDlg* pParent)
 {
     BOOL bSuccess;
 
     m_ParentWnd = pParent;
 
     // Register window class
-    CString csClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
-                                              0,
-                                              CBrush(::GetSysColor(COLOR_BTNFACE)));
+    CString csClassName = AfxRegisterWndClass (CS_HREDRAW|CS_VREDRAW,
+                          0,
+                          CBrush (::GetSysColor (COLOR_BTNFACE)));
 
     // Create popup window
-    bSuccess = CreateEx(WS_EX_DLGMODALFRAME|WS_EX_TOPMOST, // Extended style
-                        csClassName,                       // Classname
-                        _T("PocketPJ"),                    // Title
-                        WS_POPUP|WS_BORDER|WS_CAPTION,     // style
-                        0,0,                               // position - updated soon.
-                        1,1,				   // Size - updated soon
-                        pParent->GetSafeHwnd(),            // handle to parent
-                        0,                                 // No menu
-                        NULL);    
-    if (!bSuccess) 
-	return FALSE;
-
-    ShowWindow(SW_HIDE);
+    bSuccess = CreateEx (WS_EX_DLGMODALFRAME|WS_EX_TOPMOST, // Extended style
+                         csClassName,                       // Classname
+                         _T ("PocketPJ"),                   // Title
+                         WS_POPUP|WS_BORDER|WS_CAPTION,     // style
+                         0,0,                               // position - updated soon.
+                         1,1,				   // Size - updated soon
+                         pParent->GetSafeHwnd(),            // handle to parent
+                         0,                                 // No menu
+                         NULL);
+
+    if (!bSuccess)
+        return FALSE;
+
+    ShowWindow (SW_HIDE);
 
     // Now create the controls
-    CRect TempRect(0,0,10,10);
+    CRect TempRect (0,0,10,10);
 
     /* |SS_LEFTNOWORDWRAP */
-    bSuccess = m_Title1.Create(_T("Title1"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
-			       TempRect, this, IDC_TITLE1);
+    bSuccess = m_Title1.Create (_T ("Title1"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
+                                TempRect, this, IDC_TITLE1);
+
     if (!bSuccess)
-	return FALSE;
+        return FALSE;
+
+    bSuccess = m_Title2.Create (_T ("Title2"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
+                                TempRect, this, IDC_TITLE2);
 
-    bSuccess = m_Title2.Create(_T("Title2"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
-			       TempRect, this, IDC_TITLE2);
     if (!bSuccess)
-	return FALSE;
+        return FALSE;
+
+    bSuccess = m_Title3.Create (_T ("Title3"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
+                                TempRect, this, IDC_TITLE3);
 
-    bSuccess = m_Title3.Create(_T("Title3"), WS_CHILD|WS_VISIBLE|SS_NOPREFIX,
-			       TempRect, this, IDC_TITLE3);
     if (!bSuccess)
-	return FALSE;
+        return FALSE;
+
+    bSuccess = m_Btn1.Create (_T ("Button1"),
+                              WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON,
+                              TempRect, this, IDC_BTN1);
 
-    bSuccess = m_Btn1.Create(_T("Button1"), 
-                             WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON, 
-                             TempRect, this, IDC_BTN1);
     if (!bSuccess)
-	return FALSE;
+        return FALSE;
+
+    bSuccess = m_Btn2.Create (_T ("Button2"),
+                              WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON,
+                              TempRect, this, IDC_BTN2);
 
-    bSuccess = m_Btn2.Create(_T("Button2"), 
-                             WS_CHILD|WS_VISIBLE|WS_TABSTOP| BS_PUSHBUTTON, 
-                             TempRect, this, IDC_BTN2);
     if (!bSuccess)
-	return FALSE;
+        return FALSE;
 
-    CFont *ft1 = new CFont, 
-	  *ft2 = new CFont, 
-	  *ft3 = new CFont;
+    CFont *ft1 = new CFont,
+    *ft2 = new CFont,
+    *ft3 = new CFont;
 
 
     LOGFONT lf;
-    memset(&lf, 0, sizeof(LOGFONT));
+    memset (&lf, 0, sizeof (LOGFONT));
     lf.lfHeight = 12;
-    lstrcpy(lf.lfFaceName, _T("Arial"));
-    VERIFY(ft1->CreateFontIndirect(&lf));
-    VERIFY(ft3->CreateFontIndirect(&lf));
+    lstrcpy (lf.lfFaceName, _T ("Arial"));
+    VERIFY (ft1->CreateFontIndirect (&lf));
+    VERIFY (ft3->CreateFontIndirect (&lf));
 
     lf.lfHeight = 20;
-    VERIFY(ft2->CreateFontIndirect(&lf));
+    VERIFY (ft2->CreateFontIndirect (&lf));
 
-    m_Title1.SetFont(ft1, TRUE);
-    m_Title2.SetFont(ft2, TRUE);
-    m_Title3.SetFont(ft3, TRUE);
+    m_Title1.SetFont (ft1, TRUE);
+    m_Title2.SetFont (ft2, TRUE);
+    m_Title3.SetFont (ft3, TRUE);
 
 
     SetWindowSize();
@@ -113,109 +119,108 @@ BOOL CPopUpWnd::Create(CPocketPJDlg* pParent)
     return TRUE;
 }
 
-void CPopUpWnd::SetContent(const CPopUpContent &content)
+void CPopUpWnd::SetContent (const CPopUpContent &content)
 {
-    m_Title1.SetWindowText(content.m_Title1);
-    m_Title2.SetWindowText(content.m_Title2);
-    m_Title3.SetWindowText(content.m_Title3);
+    m_Title1.SetWindowText (content.m_Title1);
+    m_Title2.SetWindowText (content.m_Title2);
+    m_Title3.SetWindowText (content.m_Title3);
 
     if (content.m_Btn1 != "") {
-	m_Btn1.SetWindowText(content.m_Btn1);
-	m_Btn1.ShowWindow(SW_SHOW);
+        m_Btn1.SetWindowText (content.m_Btn1);
+        m_Btn1.ShowWindow (SW_SHOW);
     } else {
-	m_Btn1.ShowWindow(SW_HIDE);
+        m_Btn1.ShowWindow (SW_HIDE);
     }
 
     if (content.m_Btn2 != "") {
-	m_Btn2.SetWindowText(content.m_Btn2);
-	m_Btn2.ShowWindow(SW_SHOW);
+        m_Btn2.SetWindowText (content.m_Btn2);
+        m_Btn2.ShowWindow (SW_SHOW);
     } else {
-	m_Btn2.ShowWindow(SW_HIDE);
+        m_Btn2.ShowWindow (SW_HIDE);
     }
 
     UpdateWindow();
-    ShowWindow(SW_SHOW);
+    ShowWindow (SW_SHOW);
 }
 
-void CPopUpWnd::SetWindowSize(int width, int height)
+void CPopUpWnd::SetWindowSize (int width, int height)
 {
     enum { H1 = 16, H2 = 40, H3 = 16, S = 5, G = 10, BW=60, BH=20, BG=40};
 
-    CRect rootRect(0, 0, 320, 240);
+    CRect rootRect (0, 0, 320, 240);
     int Y;
 
-    MoveWindow((rootRect.Width() - width)/2, (rootRect.Height() - height)/2,
-	       width, height);
+    MoveWindow ( (rootRect.Width() - width) /2, (rootRect.Height() - height) /2,
+                 width, height);
 
-    m_Title1.MoveWindow(10, Y=S, width-20, H1);
-    m_Title2.MoveWindow(10, Y+=H1+G, width-20, H2);
-    m_Title3.MoveWindow(10, Y+=H2+G, width-20, H3);
+    m_Title1.MoveWindow (10, Y=S, width-20, H1);
+    m_Title2.MoveWindow (10, Y+=H1+G, width-20, H2);
+    m_Title3.MoveWindow (10, Y+=H2+G, width-20, H3);
 
-    m_Btn1.MoveWindow((width-2*BW-BG)/2, Y+=H3+G, BW, BH);
-    m_Btn2.MoveWindow((width-2*BW-BG)/2+BW+BG, Y, BW, BH);
+    m_Btn1.MoveWindow ( (width-2*BW-BG) /2, Y+=H3+G, BW, BH);
+    m_Btn2.MoveWindow ( (width-2*BW-BG) /2+BW+BG, Y, BW, BH);
 }
 
-void CPopUpWnd::Hide()  
-{ 
-    if (!::IsWindow(GetSafeHwnd())) 
+void CPopUpWnd::Hide()
+{
+    if (!::IsWindow (GetSafeHwnd()))
         return;
 
-    if (IsWindowVisible())
-    {
-        ShowWindow(SW_HIDE);
-        ModifyStyle(WS_VISIBLE, 0);
+    if (IsWindowVisible()) {
+        ShowWindow (SW_HIDE);
+        ModifyStyle (WS_VISIBLE, 0);
     }
 }
 
-void CPopUpWnd::Show()  
-{ 
-    if (!::IsWindow(GetSafeHwnd()))
+void CPopUpWnd::Show()
+{
+    if (!::IsWindow (GetSafeHwnd()))
         return;
 
-    ModifyStyle(0, WS_VISIBLE);
-    ShowWindow(SW_SHOWNA);
-    RedrawWindow(NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW);
+    ModifyStyle (0, WS_VISIBLE);
+    ShowWindow (SW_SHOWNA);
+    RedrawWindow (NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_UPDATENOW);
 }
 
-BEGIN_MESSAGE_MAP(CPopUpWnd, CWnd)
+BEGIN_MESSAGE_MAP (CPopUpWnd, CWnd)
     //{{AFX_MSG_MAP(CPopUpWnd)
     ON_WM_ERASEBKGND()
-	//}}AFX_MSG_MAP
-    ON_BN_CLICKED(IDC_BTN1, OnCancel1)
-    ON_BN_CLICKED(IDC_BTN2, OnCancel2)
+    //}}AFX_MSG_MAP
+    ON_BN_CLICKED (IDC_BTN1, OnCancel1)
+    ON_BN_CLICKED (IDC_BTN2, OnCancel2)
 END_MESSAGE_MAP()
 
 
 /////////////////////////////////////////////////////////////////////////////
 // CPopUpWnd message handlers
 
-BOOL CPopUpWnd::OnEraseBkgnd(CDC* pDC) 
+BOOL CPopUpWnd::OnEraseBkgnd (CDC* pDC)
 {
     CBrush backBrush;
-    backBrush.CreateSolidBrush(RGB(255,255,255));
-    CBrush* pOldBrush = pDC->SelectObject(&backBrush);
+    backBrush.CreateSolidBrush (RGB (255,255,255));
+    CBrush* pOldBrush = pDC->SelectObject (&backBrush);
 
     CRect rect;
-    pDC->GetClipBox(&rect);     // Erase the area needed
-    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
-    pDC->SelectObject(pOldBrush);
+    pDC->GetClipBox (&rect);    // Erase the area needed
+    pDC->PatBlt (rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
+    pDC->SelectObject (pOldBrush);
 
     return TRUE;
 }
 
-void CPopUpWnd::OnCancel1() 
+void CPopUpWnd::OnCancel1()
 {
-    m_ParentWnd->OnPopUpButton(1);
+    m_ParentWnd->OnPopUpButton (1);
 }
 
 
-void CPopUpWnd::OnCancel2() 
+void CPopUpWnd::OnCancel2()
 {
-    m_ParentWnd->OnPopUpButton(2);
+    m_ParentWnd->OnPopUpButton (2);
 }
 
 
-BOOL CPopUpWnd::DestroyWindow() 
+BOOL CPopUpWnd::DestroyWindow()
 {
     return CWnd::DestroyWindow();
 }
@@ -223,13 +228,12 @@ BOOL CPopUpWnd::DestroyWindow()
 void CPopUpWnd::PeekAndPump()
 {
     MSG msg;
-    while (::PeekMessage(&msg, NULL,0,0,PM_NOREMOVE)) 
-    {
-        if (!AfxGetApp()->PumpMessage()) 
-        {
-            ::PostQuitMessage(0);
+
+    while (::PeekMessage (&msg, NULL,0,0,PM_NOREMOVE)) {
+        if (!AfxGetApp()->PumpMessage()) {
+            ::PostQuitMessage (0);
             return;
-        } 
+        }
     }
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp
index 1357044ae2c4675b973a6de003ba6a4a8476b784..276435be8fe838cc0f0e7059ecaf60bf9fa803d3 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/pocketpj/SettingsDlg.cpp
@@ -37,20 +37,20 @@ static char THIS_FILE[] = __FILE__;
 /////////////////////////////////////////////////////////////////////////////
 // Settings
 CPocketPJSettings::CPocketPJSettings()
-: m_UseStun(FALSE), m_UseIce(FALSE), m_UseSrtp(FALSE), m_UsePublish(FALSE),
-  m_EchoSuppress(TRUE), m_EcTail(200), m_TCP(FALSE), m_VAD(FALSE),
-  m_AutoAnswer(FALSE)
+        : m_UseStun (FALSE), m_UseIce (FALSE), m_UseSrtp (FALSE), m_UsePublish (FALSE),
+        m_EchoSuppress (TRUE), m_EcTail (200), m_TCP (FALSE), m_VAD (FALSE),
+        m_AutoAnswer (FALSE)
 {
     /* Init codec list */
 #if defined(PJMEDIA_HAS_GSM_CODEC) && PJMEDIA_HAS_GSM_CODEC
-    m_Codecs.Add(_T("GSM"));
+    m_Codecs.Add (_T ("GSM"));
 #endif
 #if defined(PJMEDIA_HAS_G711_CODEC) && PJMEDIA_HAS_G711_CODEC
-    m_Codecs.Add(_T("PCMU"));
-    m_Codecs.Add(_T("PCMA"));
+    m_Codecs.Add (_T ("PCMU"));
+    m_Codecs.Add (_T ("PCMA"));
 #endif
 #if defined(PJMEDIA_HAS_SPEEX_CODEC) && PJMEDIA_HAS_SPEEX_CODEC
-    m_Codecs.Add(_T("Speex"));
+    m_Codecs.Add (_T ("Speex"));
 #endif
 }
 
@@ -63,113 +63,130 @@ void CPocketPJSettings::LoadRegistry()
     DWORD cbData;
 
 
-    if (key.Open(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
-	return;
+    if (key.Open (HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
+        return;
 
-    cbData = sizeof(textVal);
-    if (key.QueryValue(textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) {
-	m_Domain = textVal;
+    cbData = sizeof (textVal);
+
+    if (key.QueryValue (textVal, REG_DOMAIN, &cbData) == ERROR_SUCCESS) {
+        m_Domain = textVal;
     }
 
-    cbData = sizeof(textVal);
-    if (key.QueryValue(textVal, REG_USER, &cbData) == ERROR_SUCCESS) {
-	m_User = textVal;
+    cbData = sizeof (textVal);
+
+    if (key.QueryValue (textVal, REG_USER, &cbData) == ERROR_SUCCESS) {
+        m_User = textVal;
     }
 
-    cbData = sizeof(textVal);
-    if (key.QueryValue(textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) {
-	m_Password = textVal;
+    cbData = sizeof (textVal);
+
+    if (key.QueryValue (textVal, REG_PASSWD, &cbData) == ERROR_SUCCESS) {
+        m_Password = textVal;
     }
 
-    cbData = sizeof(textVal);
-    if (key.QueryValue(textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) {
-	m_StunSrv = textVal;
+    cbData = sizeof (textVal);
+
+    if (key.QueryValue (textVal, REG_STUN_SRV, &cbData) == ERROR_SUCCESS) {
+        m_StunSrv = textVal;
     }
 
-    cbData = sizeof(textVal);
-    if (key.QueryValue(textVal, REG_DNS, &cbData) == ERROR_SUCCESS) {
-	m_DNS = textVal;
+    cbData = sizeof (textVal);
+
+    if (key.QueryValue (textVal, REG_DNS, &cbData) == ERROR_SUCCESS) {
+        m_DNS = textVal;
     }
 
     dwordVal = 0;
-    if (key.QueryValue(dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
-	m_UseStun = dwordVal != 0;
+
+    if (key.QueryValue (dwordVal, REG_USE_STUN) == ERROR_SUCCESS) {
+        m_UseStun = dwordVal != 0;
     }
 
-    if (key.QueryValue(dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
-	m_UseIce = dwordVal != 0;
+    if (key.QueryValue (dwordVal, REG_USE_ICE) == ERROR_SUCCESS) {
+        m_UseIce = dwordVal != 0;
     }
 
 
-    if (key.QueryValue(dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
-	m_UseSrtp = dwordVal != 0;
+    if (key.QueryValue (dwordVal, REG_USE_SRTP) == ERROR_SUCCESS) {
+        m_UseSrtp = dwordVal != 0;
     }
 
 
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) {
-	m_UsePublish = dwordVal != 0;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_USE_PUBLISH) == ERROR_SUCCESS) {
+        m_UsePublish = dwordVal != 0;
     }
 
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
-	m_EchoSuppress = dwordVal != 0;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_ENABLE_EC) == ERROR_SUCCESS) {
+        m_EchoSuppress = dwordVal != 0;
     }
 
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
-	m_EcTail = dwordVal;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_EC_TAIL) == ERROR_SUCCESS) {
+        m_EcTail = dwordVal;
     }
 
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
-	m_TCP = dwordVal != 0;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_ENABLE_TCP) == ERROR_SUCCESS) {
+        m_TCP = dwordVal != 0;
     }
 
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
-	m_VAD = dwordVal != 0;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_ENABLE_VAD) == ERROR_SUCCESS) {
+        m_VAD = dwordVal != 0;
     }
 
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
-	m_AutoAnswer = dwordVal != 0;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_AUTO_ANSWER) == ERROR_SUCCESS) {
+        m_AutoAnswer = dwordVal != 0;
     }
 
     m_BuddyList.RemoveAll();
 
     DWORD buddyCount = 0;
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) {
-	buddyCount = dwordVal;
+    cbData = sizeof (dwordVal);
+
+    if (key.QueryValue (dwordVal, REG_BUDDY_CNT) == ERROR_SUCCESS) {
+        buddyCount = dwordVal;
     }
 
     unsigned i;
+
     for (i=0; i<buddyCount; ++i) {
-	CString entry;
-	entry.Format(REG_BUDDY_X, i);
+        CString entry;
+        entry.Format (REG_BUDDY_X, i);
+
+        cbData = sizeof (textVal);
 
-	cbData = sizeof(textVal);
-	if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
-	    m_BuddyList.Add(textVal);
-	}
+        if (key.QueryValue (textVal, entry, &cbData) == ERROR_SUCCESS) {
+            m_BuddyList.Add (textVal);
+        }
     }
 
     DWORD codecCount = 0;
-    cbData = sizeof(dwordVal);
-    if (key.QueryValue(codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
+    cbData = sizeof (dwordVal);
 
-	m_Codecs.RemoveAll();
+    if (key.QueryValue (codecCount, REG_CODEC_CNT) == ERROR_SUCCESS) {
 
-	for (i=0; i<codecCount; ++i) {
-	    CString entry;
-	    entry.Format(REG_CODEC_X, i);
+        m_Codecs.RemoveAll();
 
-	    cbData = sizeof(textVal);
-	    if (key.QueryValue(textVal, entry, &cbData) == ERROR_SUCCESS) {
-		m_Codecs.Add(textVal);
-	    }
-	}
+        for (i=0; i<codecCount; ++i) {
+            CString entry;
+            entry.Format (REG_CODEC_X, i);
+
+            cbData = sizeof (textVal);
+
+            if (key.QueryValue (textVal, entry, &cbData) == ERROR_SUCCESS) {
+                m_Codecs.Add (textVal);
+            }
+        }
     }
 
     key.Close();
@@ -180,42 +197,44 @@ void CPocketPJSettings::SaveRegistry()
 {
     CRegKey key;
 
-    if (key.Create(HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
-	return;
+    if (key.Create (HKEY_CURRENT_USER, REG_PATH) != ERROR_SUCCESS)
+        return;
+
+    key.SetValue (m_Domain, REG_DOMAIN);
+    key.SetValue (m_User, REG_USER);
+    key.SetValue (m_Password, REG_PASSWD);
+    key.SetValue (m_StunSrv, REG_STUN_SRV);
+    key.SetValue (m_DNS, REG_DNS);
 
-    key.SetValue(m_Domain, REG_DOMAIN);
-    key.SetValue(m_User, REG_USER);
-    key.SetValue(m_Password, REG_PASSWD);
-    key.SetValue(m_StunSrv, REG_STUN_SRV);
-    key.SetValue(m_DNS, REG_DNS);
-    
-    key.SetValue(m_UseStun, REG_USE_STUN);
-    key.SetValue(m_UseIce, REG_USE_ICE);
-    key.SetValue(m_UseSrtp, REG_USE_SRTP);
-    key.SetValue(m_UsePublish, REG_USE_PUBLISH);
+    key.SetValue (m_UseStun, REG_USE_STUN);
+    key.SetValue (m_UseIce, REG_USE_ICE);
+    key.SetValue (m_UseSrtp, REG_USE_SRTP);
+    key.SetValue (m_UsePublish, REG_USE_PUBLISH);
 
-    key.SetValue(m_EchoSuppress, REG_ENABLE_EC);
-    key.SetValue(m_EcTail, REG_EC_TAIL);
+    key.SetValue (m_EchoSuppress, REG_ENABLE_EC);
+    key.SetValue (m_EcTail, REG_EC_TAIL);
 
-    key.SetValue(m_TCP, REG_ENABLE_TCP);
-    key.SetValue(m_VAD, REG_ENABLE_VAD);
-    key.SetValue(m_AutoAnswer, REG_AUTO_ANSWER);
+    key.SetValue (m_TCP, REG_ENABLE_TCP);
+    key.SetValue (m_VAD, REG_ENABLE_VAD);
+    key.SetValue (m_AutoAnswer, REG_AUTO_ANSWER);
 
-    key.SetValue(m_BuddyList.GetSize(), REG_BUDDY_CNT);
+    key.SetValue (m_BuddyList.GetSize(), REG_BUDDY_CNT);
 
     int i;
+
     for (i=0; i<m_BuddyList.GetSize(); ++i) {
-	CString entry;
-	entry.Format(REG_BUDDY_X, i);
-	key.SetValue(m_BuddyList.GetAt(i), entry);
+        CString entry;
+        entry.Format (REG_BUDDY_X, i);
+        key.SetValue (m_BuddyList.GetAt (i), entry);
     }
 
     DWORD N = m_Codecs.GetSize();
-    key.SetValue(N, REG_CODEC_CNT);
+    key.SetValue (N, REG_CODEC_CNT);
+
     for (i=0; i<m_Codecs.GetSize(); ++i) {
-	CString entry;
-	entry.Format(REG_CODEC_X, i);
-	key.SetValue(m_Codecs.GetAt(i), entry);
+        CString entry;
+        entry.Format (REG_CODEC_X, i);
+        key.SetValue (m_Codecs.GetAt (i), entry);
     }
 
     key.Close();
@@ -226,127 +245,130 @@ void CPocketPJSettings::SaveRegistry()
 // CSettingsDlg dialog
 
 
-CSettingsDlg::CSettingsDlg(CPocketPJSettings &cfg, CWnd* pParent)
-	: CDialog(CSettingsDlg::IDD, pParent), m_Cfg(cfg)
+CSettingsDlg::CSettingsDlg (CPocketPJSettings &cfg, CWnd* pParent)
+        : CDialog (CSettingsDlg::IDD, pParent), m_Cfg (cfg)
 {
-	//{{AFX_DATA_INIT(CSettingsDlg)
-	m_Domain = _T("");
-	m_ICE = FALSE;
-	m_Passwd = _T("");
-	m_PUBLISH = FALSE;
-	m_SRTP = FALSE;
-	m_STUN = FALSE;
-	m_StunSrv = _T("");
-	m_User = _T("");
-	m_Dns = _T("");
-	m_EchoSuppress = FALSE;
-	m_EcTail = _T("");
-	m_TCP = FALSE;
-	m_VAD = FALSE;
-	m_AutoAnswer = FALSE;
-	//}}AFX_DATA_INIT
-
-	m_Domain    = m_Cfg.m_Domain;
-	m_ICE	    = m_Cfg.m_UseIce;
-	m_Passwd    = m_Cfg.m_Password;
-	m_PUBLISH   = m_Cfg.m_UsePublish;
-	m_SRTP	    = m_Cfg.m_UseSrtp;
-	m_STUN	    = m_Cfg.m_UseStun;
-	m_StunSrv   = m_Cfg.m_StunSrv;
-	m_User	    = m_Cfg.m_User;
-	m_Dns	    = m_Cfg.m_DNS;
-	m_EchoSuppress = m_Cfg.m_EchoSuppress;
-	m_TCP	    = m_Cfg.m_TCP;
-	m_VAD	    = m_Cfg.m_VAD;
-	m_AutoAnswer= m_Cfg.m_AutoAnswer;
-
-	CString s;
-	s.Format(_T("%d"), m_Cfg.m_EcTail);
-	m_EcTail    = s;
+    //{{AFX_DATA_INIT(CSettingsDlg)
+    m_Domain = _T ("");
+    m_ICE = FALSE;
+    m_Passwd = _T ("");
+    m_PUBLISH = FALSE;
+    m_SRTP = FALSE;
+    m_STUN = FALSE;
+    m_StunSrv = _T ("");
+    m_User = _T ("");
+    m_Dns = _T ("");
+    m_EchoSuppress = FALSE;
+    m_EcTail = _T ("");
+    m_TCP = FALSE;
+    m_VAD = FALSE;
+    m_AutoAnswer = FALSE;
+    //}}AFX_DATA_INIT
+
+    m_Domain    = m_Cfg.m_Domain;
+    m_ICE	    = m_Cfg.m_UseIce;
+    m_Passwd    = m_Cfg.m_Password;
+    m_PUBLISH   = m_Cfg.m_UsePublish;
+    m_SRTP	    = m_Cfg.m_UseSrtp;
+    m_STUN	    = m_Cfg.m_UseStun;
+    m_StunSrv   = m_Cfg.m_StunSrv;
+    m_User	    = m_Cfg.m_User;
+    m_Dns	    = m_Cfg.m_DNS;
+    m_EchoSuppress = m_Cfg.m_EchoSuppress;
+    m_TCP	    = m_Cfg.m_TCP;
+    m_VAD	    = m_Cfg.m_VAD;
+    m_AutoAnswer= m_Cfg.m_AutoAnswer;
+
+    CString s;
+    s.Format (_T ("%d"), m_Cfg.m_EcTail);
+    m_EcTail    = s;
 
 }
 
 
-void CSettingsDlg::DoDataExchange(CDataExchange* pDX)
+void CSettingsDlg::DoDataExchange (CDataExchange* pDX)
 {
-	CDialog::DoDataExchange(pDX);
-	//{{AFX_DATA_MAP(CSettingsDlg)
-	DDX_Control(pDX, IDC_CODECS, m_Codecs);
-	DDX_Text(pDX, IDC_DOMAIN, m_Domain);
-	DDX_Check(pDX, IDC_ICE, m_ICE);
-	DDX_Text(pDX, IDC_PASSWD, m_Passwd);
-	DDX_Check(pDX, IDC_PUBLISH, m_PUBLISH);
-	DDX_Check(pDX, IDC_SRTP, m_SRTP);
-	DDX_Check(pDX, IDC_STUN, m_STUN);
-	DDX_Text(pDX, IDC_STUN_SRV, m_StunSrv);
-	DDX_Text(pDX, IDC_USER, m_User);
-	DDX_Text(pDX, IDC_DNS, m_Dns);
-	DDX_Check(pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
-	DDX_Text(pDX, IDC_EC_TAIL, m_EcTail);
-	DDX_Check(pDX, IDC_TCP, m_TCP);
-	DDX_Check(pDX, IDC_VAD, m_VAD);
-	DDX_Check(pDX, IDC_AA, m_AutoAnswer);
-	//}}AFX_DATA_MAP
-
-	
-	if (m_Codecs.GetCount() == 0) {
-	    int i;
-	    for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
-		m_Codecs.AddString(m_Cfg.m_Codecs.GetAt(i));
-	    }
-	    m_Codecs.SetCurSel(0);
-	}
+    CDialog::DoDataExchange (pDX);
+    //{{AFX_DATA_MAP(CSettingsDlg)
+    DDX_Control (pDX, IDC_CODECS, m_Codecs);
+    DDX_Text (pDX, IDC_DOMAIN, m_Domain);
+    DDX_Check (pDX, IDC_ICE, m_ICE);
+    DDX_Text (pDX, IDC_PASSWD, m_Passwd);
+    DDX_Check (pDX, IDC_PUBLISH, m_PUBLISH);
+    DDX_Check (pDX, IDC_SRTP, m_SRTP);
+    DDX_Check (pDX, IDC_STUN, m_STUN);
+    DDX_Text (pDX, IDC_STUN_SRV, m_StunSrv);
+    DDX_Text (pDX, IDC_USER, m_User);
+    DDX_Text (pDX, IDC_DNS, m_Dns);
+    DDX_Check (pDX, IDC_ECHO_SUPPRESS, m_EchoSuppress);
+    DDX_Text (pDX, IDC_EC_TAIL, m_EcTail);
+    DDX_Check (pDX, IDC_TCP, m_TCP);
+    DDX_Check (pDX, IDC_VAD, m_VAD);
+    DDX_Check (pDX, IDC_AA, m_AutoAnswer);
+    //}}AFX_DATA_MAP
+
+
+    if (m_Codecs.GetCount() == 0) {
+        int i;
+
+        for (i=0; i<m_Cfg.m_Codecs.GetSize(); ++i) {
+            m_Codecs.AddString (m_Cfg.m_Codecs.GetAt (i));
+        }
+
+        m_Codecs.SetCurSel (0);
+    }
 }
 
 
-BEGIN_MESSAGE_MAP(CSettingsDlg, CDialog)
-	//{{AFX_MSG_MAP(CSettingsDlg)
-	ON_BN_CLICKED(IDC_STUN, OnStun)
-	ON_BN_CLICKED(IDC_ECHO_SUPPRESS, OnEchoSuppress)
-	ON_CBN_SELCHANGE(IDC_CODECS, OnSelchangeCodecs)
-	//}}AFX_MSG_MAP
+BEGIN_MESSAGE_MAP (CSettingsDlg, CDialog)
+    //{{AFX_MSG_MAP(CSettingsDlg)
+    ON_BN_CLICKED (IDC_STUN, OnStun)
+    ON_BN_CLICKED (IDC_ECHO_SUPPRESS, OnEchoSuppress)
+    ON_CBN_SELCHANGE (IDC_CODECS, OnSelchangeCodecs)
+    //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CSettingsDlg message handlers
 
-int CSettingsDlg::DoModal() 
+int CSettingsDlg::DoModal()
 {
-    int rc = CDialog::DoModal();	
+    int rc = CDialog::DoModal();
 
     return rc;
 }
 
-void CSettingsDlg::OnStun() 
+void CSettingsDlg::OnStun()
 {
 }
 
-void CSettingsDlg::OnEchoSuppress() 
+void CSettingsDlg::OnEchoSuppress()
 {
 }
 
-void CSettingsDlg::OnSelchangeCodecs() 
+void CSettingsDlg::OnSelchangeCodecs()
 {
     int cur = m_Codecs.GetCurSel();
+
     if (cur < 1)
-	return;
+        return;
 
     CString codec;
     DWORD N;
 
-    m_Codecs.GetLBText(cur, codec);
+    m_Codecs.GetLBText (cur, codec);
     N = m_Codecs.GetCount();
-    m_Codecs.DeleteString(cur);
+    m_Codecs.DeleteString (cur);
     N = m_Codecs.GetCount();
-    m_Codecs.InsertString(0, codec);
+    m_Codecs.InsertString (0, codec);
     N = m_Codecs.GetCount();
-    m_Codecs.SetCurSel(0);
+    m_Codecs.SetCurSel (0);
 }
 
 
-void CSettingsDlg::OnOK() 
+void CSettingsDlg::OnOK()
 {
-    UpdateData(TRUE);
+    UpdateData (TRUE);
 
     m_Cfg.m_Domain	= m_Domain;
     m_Cfg.m_UseIce	= m_ICE != 0;
@@ -358,7 +380,7 @@ void CSettingsDlg::OnOK()
     m_Cfg.m_User	= m_User;
     m_Cfg.m_DNS		= m_Dns;
     m_Cfg.m_EchoSuppress= m_EchoSuppress != 0;
-    m_Cfg.m_EcTail	= _ttoi(m_EcTail);
+    m_Cfg.m_EcTail	= _ttoi (m_EcTail);
     m_Cfg.m_TCP		= m_TCP != 0;
     m_Cfg.m_VAD		= m_VAD != 0;
     m_Cfg.m_AutoAnswer	= m_AutoAnswer != 0;
@@ -366,10 +388,11 @@ void CSettingsDlg::OnOK()
     unsigned i;
     m_Cfg.m_Codecs.RemoveAll();
     DWORD N = m_Codecs.GetCount();
+
     for (i=0; i<N; ++i) {
-	CString codec;
-	m_Codecs.GetLBText(i, codec);
-	m_Cfg.m_Codecs.Add(codec);
+        CString codec;
+        m_Codecs.GetLBText (i, codec);
+        m_Cfg.m_Codecs.Add (codec);
     }
 
     CDialog::OnOK();
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp
index b1b884286cac3137827bd10a5cd42839b9d89007..ba9cec7c5f7ccdcfa892eb6ef92675cdff5be7cd 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/main_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: main_symbian.cpp 2673 2009-05-05 10:46:51Z nanang $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 #include "ua.h"
 
@@ -30,7 +30,7 @@ CConsoleBase* console;
 
 // Needed by APS
 //TPtrC APP_UID = _L("200235D3");
-TPtrC APP_UID = _L("A000000D");
+TPtrC APP_UID = _L ("A000000D");
 
 
 ////////////////////////////////////////////////////////////////////////////
@@ -38,13 +38,13 @@ TPtrC APP_UID = _L("A000000D");
 LOCAL_C void DoStartL()
 {
     CActiveScheduler *scheduler = new (ELeave) CActiveScheduler;
-    CleanupStack::PushL(scheduler);
-    CActiveScheduler::Install(scheduler);
+    CleanupStack::PushL (scheduler);
+    CActiveScheduler::Install (scheduler);
 
     ua_main();
-    
-    CActiveScheduler::Install(NULL);
-    CleanupStack::Pop(scheduler);
+
+    CActiveScheduler::Install (NULL);
+    CleanupStack::Pop (scheduler);
     delete scheduler;
 }
 
@@ -61,19 +61,20 @@ GLDEF_C TInt E32Main()
     CTrapCleanup* cleanup = CTrapCleanup::New();
 
     // Create output console
-    TRAPD(createError, console = Console::NewL(_L("Console"), TSize(KConsFullScreen,KConsFullScreen)));
+    TRAPD (createError, console = Console::NewL (_L ("Console"), TSize (KConsFullScreen,KConsFullScreen)));
+
     if (createError)
         return createError;
 
-    TRAPD(startError, DoStartL());
+    TRAPD (startError, DoStartL());
 
-    console->Printf(_L("[press any key to close]\n"));
+    console->Printf (_L ("[press any key to close]\n"));
     console->Getch();
-    
+
     delete console;
     delete cleanup;
 
-    CloseSTDLIB(); 
+    CloseSTDLIB();
 
     // Mark end of heap usage, detect memory leaks
     __UHEAP_MARKEND;
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp
index 7b5de03db3e38722f38500a92fd2a322304a5c7e..18c0e0ab90423e4c53e061be5c1842613ec6402f 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua/ua.cpp
@@ -1,5 +1,5 @@
 /* $Id: ua.cpp 2999 2009-11-09 09:52:23Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 #include <pjsua-lib/pjsua.h>
 #include <pjsua-lib/pjsua_internal.h>
@@ -59,7 +59,7 @@
 #define ENABLE_SIP_TLS	0 // experimental
 
 #define TLS_SRV_NAME	"pjsip.org"	// TLS servername (required for
-					// TLS transport)
+// TLS transport)
 
 //
 // Configure nameserver if DNS SRV is to be used with both SIP
@@ -71,15 +71,15 @@
 //
 // STUN server
 #if 0
-	// Use this to have the STUN server resolved normally
+// Use this to have the STUN server resolved normally
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	"stun.pjsip.org"
 #elif 0
-	// Use this to have the STUN server resolved with DNS SRV
+// Use this to have the STUN server resolved with DNS SRV
 #   define STUN_DOMAIN	"pjsip.org"
 #   define STUN_SERVER	NULL
 #else
-	// Use this to disable STUN
+// Use this to disable STUN
 #   define STUN_DOMAIN	NULL
 #   define STUN_SERVER	NULL
 #endif
@@ -97,7 +97,7 @@
 //
 // Set QoS on transports? Yes!
 // As an example, we set SIP transports DSCP value to CS3 (DSCP
-// value 24 or 0x18), for no reason, and tag RTP/RTCP packets 
+// value 24 or 0x18), for no reason, and tag RTP/RTCP packets
 // with VOICE type.
 //
 #define SIP_QOS_DSCP	0x18
@@ -113,179 +113,179 @@ static pjsua_buddy_id g_buddy_id = PJSUA_INVALID_ID;
 
 
 /* Callback called by the library upon receiving incoming call */
-static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
-			     pjsip_rx_data *rdata)
+static void on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
+                              pjsip_rx_data *rdata)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG(acc_id);
-    PJ_UNUSED_ARG(rdata);
+    PJ_UNUSED_ARG (acc_id);
+    PJ_UNUSED_ARG (rdata);
 
     if (g_call_id != PJSUA_INVALID_ID) {
-    	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
-    	return;
+        pjsua_call_answer (call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
+        return;
     }
-    
-    pjsua_call_get_info(call_id, &ci);
 
-    PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
-			 (int)ci.remote_info.slen,
-			 ci.remote_info.ptr));
+    pjsua_call_get_info (call_id, &ci);
+
+    PJ_LOG (3, (THIS_FILE, "Incoming call from %.*s!!",
+                (int) ci.remote_info.slen,
+                ci.remote_info.ptr));
 
     g_call_id = call_id;
-    
+
     /* Automatically answer incoming calls with 180/Ringing */
-    pjsua_call_answer(call_id, 180, NULL, NULL);
+    pjsua_call_answer (call_id, 180, NULL, NULL);
 }
 
 /* Callback called by the library when call's state has changed */
-static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
+static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG(e);
+    PJ_UNUSED_ARG (e);
+
+    pjsua_call_get_info (call_id, &ci);
 
-    pjsua_call_get_info(call_id, &ci);
-    
     if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
-    	if (call_id == g_call_id)
-    	    g_call_id = PJSUA_INVALID_ID;
+        if (call_id == g_call_id)
+            g_call_id = PJSUA_INVALID_ID;
     } else if (ci.state != PJSIP_INV_STATE_INCOMING) {
-    	if (g_call_id == PJSUA_INVALID_ID)
-    	    g_call_id = call_id;
+        if (g_call_id == PJSUA_INVALID_ID)
+            g_call_id = call_id;
     }
-    
-    PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,
-			 (int)ci.state_text.slen,
-			 ci.state_text.ptr));
+
+    PJ_LOG (3, (THIS_FILE, "Call %d state=%.*s", call_id,
+                (int) ci.state_text.slen,
+                ci.state_text.ptr));
 }
 
 /* Callback called by the library when call's media state has changed */
-static void on_call_media_state(pjsua_call_id call_id)
+static void on_call_media_state (pjsua_call_id call_id)
 {
     pjsua_call_info ci;
 
-    pjsua_call_get_info(call_id, &ci);
+    pjsua_call_get_info (call_id, &ci);
 
     if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-	// When media is active, connect call to sound device.
-	pjsua_conf_connect(ci.conf_slot, 0);
-	pjsua_conf_connect(0, ci.conf_slot);
+        // When media is active, connect call to sound device.
+        pjsua_conf_connect (ci.conf_slot, 0);
+        pjsua_conf_connect (0, ci.conf_slot);
     }
 }
 
 
 /* Handler on buddy state changed. */
-static void on_buddy_state(pjsua_buddy_id buddy_id)
+static void on_buddy_state (pjsua_buddy_id buddy_id)
 {
     pjsua_buddy_info info;
-    pjsua_buddy_get_info(buddy_id, &info);
+    pjsua_buddy_get_info (buddy_id, &info);
 
-    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s",
-	      (int)info.uri.slen,
-	      info.uri.ptr,
-	      (int)info.status_text.slen,
-	      info.status_text.ptr));
+    PJ_LOG (3, (THIS_FILE, "%.*s status is %.*s",
+                (int) info.uri.slen,
+                info.uri.ptr,
+                (int) info.status_text.slen,
+                info.status_text.ptr));
 }
 
 
 /* Incoming IM message (i.e. MESSAGE request)!  */
-static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
-		     const pj_str_t *to, const pj_str_t *contact,
-		     const pj_str_t *mime_type, const pj_str_t *text)
+static void on_pager (pjsua_call_id call_id, const pj_str_t *from,
+                      const pj_str_t *to, const pj_str_t *contact,
+                      const pj_str_t *mime_type, const pj_str_t *text)
 {
     /* Note: call index may be -1 */
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
-    PJ_UNUSED_ARG(mime_type);
-
-    PJ_LOG(3,(THIS_FILE,"MESSAGE from %.*s: %.*s",
-	      (int)from->slen, from->ptr,
-	      (int)text->slen, text->ptr));
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG (mime_type);
+
+    PJ_LOG (3, (THIS_FILE,"MESSAGE from %.*s: %.*s",
+                (int) from->slen, from->ptr,
+                (int) text->slen, text->ptr));
 }
 
 
 /* Received typing indication  */
-static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
-		      const pj_str_t *to, const pj_str_t *contact,
-		      pj_bool_t is_typing)
+static void on_typing (pjsua_call_id call_id, const pj_str_t *from,
+                       const pj_str_t *to, const pj_str_t *contact,
+                       pj_bool_t is_typing)
 {
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
 
-    PJ_LOG(3,(THIS_FILE, "IM indication: %.*s %s",
-	      (int)from->slen, from->ptr,
-	      (is_typing?"is typing..":"has stopped typing")));
+    PJ_LOG (3, (THIS_FILE, "IM indication: %.*s %s",
+                (int) from->slen, from->ptr,
+                (is_typing?"is typing..":"has stopped typing")));
 }
 
 
 /* Call transfer request status. */
-static void on_call_transfer_status(pjsua_call_id call_id,
-				    int status_code,
-				    const pj_str_t *status_text,
-				    pj_bool_t final,
-				    pj_bool_t *p_cont)
+static void on_call_transfer_status (pjsua_call_id call_id,
+                                     int status_code,
+                                     const pj_str_t *status_text,
+                                     pj_bool_t final,
+                                     pj_bool_t *p_cont)
 {
-    PJ_LOG(3,(THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
-	      call_id, status_code,
-	      (int)status_text->slen, status_text->ptr,
-	      (final ? "[final]" : "")));
+    PJ_LOG (3, (THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
+                call_id, status_code,
+                (int) status_text->slen, status_text->ptr,
+                (final ? "[final]" : "")));
 
     if (status_code/100 == 2) {
-	PJ_LOG(3,(THIS_FILE, 
-	          "Call %d: call transfered successfully, disconnecting call",
-		  call_id));
-	pjsua_call_hangup(call_id, PJSIP_SC_GONE, NULL, NULL);
-	*p_cont = PJ_FALSE;
+        PJ_LOG (3, (THIS_FILE,
+                    "Call %d: call transfered successfully, disconnecting call",
+                    call_id));
+        pjsua_call_hangup (call_id, PJSIP_SC_GONE, NULL, NULL);
+        *p_cont = PJ_FALSE;
     }
 }
 
 
 /* NAT detection result */
-static void on_nat_detect(const pj_stun_nat_detect_result *res) 
+static void on_nat_detect (const pj_stun_nat_detect_result *res)
 {
     if (res->status != PJ_SUCCESS) {
-	pjsua_perror(THIS_FILE, "NAT detection failed", res->status);
+        pjsua_perror (THIS_FILE, "NAT detection failed", res->status);
     } else {
-	PJ_LOG(3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
-    }    
+        PJ_LOG (3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
+    }
 }
 
 /* Notification that call is being replaced. */
-static void on_call_replaced(pjsua_call_id old_call_id,
-			     pjsua_call_id new_call_id)
+static void on_call_replaced (pjsua_call_id old_call_id,
+                              pjsua_call_id new_call_id)
 {
     pjsua_call_info old_ci, new_ci;
 
-    pjsua_call_get_info(old_call_id, &old_ci);
-    pjsua_call_get_info(new_call_id, &new_ci);
+    pjsua_call_get_info (old_call_id, &old_ci);
+    pjsua_call_get_info (new_call_id, &new_ci);
 
-    PJ_LOG(3,(THIS_FILE, "Call %d with %.*s is being replaced by "
-			 "call %d with %.*s",
-			 old_call_id, 
-			 (int)old_ci.remote_info.slen, old_ci.remote_info.ptr,
-			 new_call_id,
-			 (int)new_ci.remote_info.slen, new_ci.remote_info.ptr));
+    PJ_LOG (3, (THIS_FILE, "Call %d with %.*s is being replaced by "
+                "call %d with %.*s",
+                old_call_id,
+                (int) old_ci.remote_info.slen, old_ci.remote_info.ptr,
+                new_call_id,
+                (int) new_ci.remote_info.slen, new_ci.remote_info.ptr));
 }
 
 
 //#include<e32debug.h>
 
 /* Logging callback */
-static void log_writer(int level, const char *buf, int len)
+static void log_writer (int level, const char *buf, int len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG(level);
-    
-    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
+    PJ_UNUSED_ARG (level);
 
-    TPtrC16 aBuf((const TUint16*)buf16, (TInt)len);
+    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
+
+    TPtrC16 aBuf ( (const TUint16*) buf16, (TInt) len);
     //RDebug::Print(aBuf);
-    console->Write(aBuf);
-    
+    console->Write (aBuf);
+
 }
 
 /*
@@ -298,16 +298,17 @@ static pj_status_t app_startup()
     pj_status_t status;
 
     /* Redirect log before pjsua_init() */
-    pj_log_set_log_func(&log_writer);
-    
+    pj_log_set_log_func (&log_writer);
+
     /* Set log level */
-    pj_log_set_level(CON_LOG_LEVEL);
+    pj_log_set_level (CON_LOG_LEVEL);
 
     /* Create pjsua first! */
     status = pjsua_create();
+
     if (status != PJ_SUCCESS) {
-    	pjsua_perror(THIS_FILE, "pjsua_create() error", status);
-    	return status;
+        pjsua_perror (THIS_FILE, "pjsua_create() error", status);
+        return status;
     }
 
     /* Init pjsua */
@@ -315,12 +316,12 @@ static pj_status_t app_startup()
     pjsua_logging_config log_cfg;
     pjsua_media_config med_cfg;
 
-    pjsua_config_default(&cfg);
+    pjsua_config_default (&cfg);
     cfg.max_calls = 2;
     cfg.thread_cnt = 0; // Disable threading on Symbian
     cfg.use_srtp = USE_SRTP;
     cfg.srtp_secure_signaling = 0;
-    
+
     cfg.cb.on_incoming_call = &on_incoming_call;
     cfg.cb.on_call_media_state = &on_call_media_state;
     cfg.cb.on_call_state = &on_call_state;
@@ -330,31 +331,31 @@ static pj_status_t app_startup()
     cfg.cb.on_call_transfer_status = &on_call_transfer_status;
     cfg.cb.on_call_replaced = &on_call_replaced;
     cfg.cb.on_nat_detect = &on_nat_detect;
-    
+
     if (SIP_PROXY) {
-	    cfg.outbound_proxy_cnt = 1;
-	    cfg.outbound_proxy[0] = pj_str(SIP_PROXY);
+        cfg.outbound_proxy_cnt = 1;
+        cfg.outbound_proxy[0] = pj_str (SIP_PROXY);
     }
-    
+
     if (NAMESERVER) {
-	    cfg.nameserver_count = 1;
-	    cfg.nameserver[0] = pj_str(NAMESERVER);
+        cfg.nameserver_count = 1;
+        cfg.nameserver[0] = pj_str (NAMESERVER);
     }
-    
+
     if (NAMESERVER && STUN_DOMAIN) {
-	    cfg.stun_domain = pj_str(STUN_DOMAIN);
+        cfg.stun_domain = pj_str (STUN_DOMAIN);
     } else if (STUN_SERVER) {
-	    cfg.stun_host = pj_str(STUN_SERVER);
+        cfg.stun_host = pj_str (STUN_SERVER);
     }
-    
-    
-    pjsua_logging_config_default(&log_cfg);
+
+
+    pjsua_logging_config_default (&log_cfg);
     log_cfg.level = FILE_LOG_LEVEL;
     log_cfg.console_level = CON_LOG_LEVEL;
     log_cfg.cb = &log_writer;
-    log_cfg.log_filename = pj_str("C:\\data\\symbian_ua.log");
+    log_cfg.log_filename = pj_str ("C:\\data\\symbian_ua.log");
 
-    pjsua_media_config_default(&med_cfg);
+    pjsua_media_config_default (&med_cfg);
     med_cfg.thread_cnt = 0; // Disable threading on Symbian
     med_cfg.has_ioqueue = PJ_FALSE;
     med_cfg.clock_rate = 8000;
@@ -363,140 +364,157 @@ static pj_status_t app_startup()
     med_cfg.enable_ice = USE_ICE;
     med_cfg.snd_auto_close_time = 0; // wait for 0 seconds idle before sound dev get auto-closed
     //med_cfg.no_vad = PJ_TRUE;
-    
-    status = pjsua_init(&cfg, &log_cfg, &med_cfg);
+
+    status = pjsua_init (&cfg, &log_cfg, &med_cfg);
+
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "pjsua_init() error", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "pjsua_init() error", status);
+        pjsua_destroy();
+        return status;
     }
-    
+
     /* Adjust Speex priority and enable only the narrowband */
     {
-        pj_str_t codec_id = pj_str("speex/8000");
-        pjmedia_codec_mgr_set_codec_priority( 
-        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
-        	&codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
-
-        codec_id = pj_str("speex/16000");
-        pjmedia_codec_mgr_set_codec_priority( 
-        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
-        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
-
-        codec_id = pj_str("speex/32000");
-        pjmedia_codec_mgr_set_codec_priority( 
-        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
-        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+        pj_str_t codec_id = pj_str ("speex/8000");
+        pjmedia_codec_mgr_set_codec_priority (
+            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
+            &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
+
+        codec_id = pj_str ("speex/16000");
+        pjmedia_codec_mgr_set_codec_priority (
+            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
+            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+
+        codec_id = pj_str ("speex/32000");
+        pjmedia_codec_mgr_set_codec_priority (
+            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
+            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
     }
 
-    
+
     pjsua_transport_config tcfg;
     pjsua_transport_id tid;
 
 #if ENABLE_SIP_UDP
     /* Add UDP transport. */
-    pjsua_transport_config_default(&tcfg);
+    pjsua_transport_config_default (&tcfg);
     tcfg.port = SIP_PORT;
+
     if (SIP_QOS_DSCP) {
-	tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
-	tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
+        tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
+        tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
     }
-    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid);
+
+    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP, &tcfg, &tid);
+
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "Error creating UDP transport", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "Error creating UDP transport", status);
+        pjsua_destroy();
+        return status;
     }
+
 #endif
-    
+
 #if ENABLE_SIP_TCP
     /* Add TCP transport */
-    pjsua_transport_config_default(&tcfg);
+    pjsua_transport_config_default (&tcfg);
     tcfg.port = SIP_PORT;
+
     if (SIP_QOS_DSCP) {
-	tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
-	tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
+        tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
+        tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
     }
-    status = pjsua_transport_create(PJSIP_TRANSPORT_TCP, &tcfg, &tid);
+
+    status = pjsua_transport_create (PJSIP_TRANSPORT_TCP, &tcfg, &tid);
+
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "Error creating TCP transport", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "Error creating TCP transport", status);
+        pjsua_destroy();
+        return status;
     }
+
 #endif
-    
+
 #if ENABLE_SIP_TLS
     /* Add TLS transport */
-    pjsua_transport_config_default(&tcfg);
+    pjsua_transport_config_default (&tcfg);
     tcfg.port = SIP_PORT + 1;
+
     if (SIP_QOS_DSCP) {
-	tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
-	tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
-	tcfg.tls_setting.qos_params = tcfg.qos_params;
+        tcfg.qos_params.flags |= PJ_QOS_PARAM_HAS_DSCP;
+        tcfg.qos_params.dscp_val = SIP_QOS_DSCP;
+        tcfg.tls_setting.qos_params = tcfg.qos_params;
     }
-    tcfg.tls_setting.server_name = pj_str(TLS_SRV_NAME);
-    status = pjsua_transport_create(PJSIP_TRANSPORT_TLS, &tcfg, &tid);
+
+    tcfg.tls_setting.server_name = pj_str (TLS_SRV_NAME);
+    status = pjsua_transport_create (PJSIP_TRANSPORT_TLS, &tcfg, &tid);
+
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "Error creating TLS transport", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "Error creating TLS transport", status);
+        pjsua_destroy();
+        return status;
     }
+
 #endif
-    
+
     /* Add account for the transport */
-    pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id);
+    pjsua_acc_add_local (tid, PJ_TRUE, &g_acc_id);
 
     /* Create media transports */
     pjsua_transport_config mtcfg;
-    pjsua_transport_config_default(&mtcfg);
+    pjsua_transport_config_default (&mtcfg);
     mtcfg.port = 4000;
     mtcfg.qos_type = RTP_QOS_TYPE;
-    status = pjsua_media_transports_create(&mtcfg);
+    status = pjsua_media_transports_create (&mtcfg);
+
     if (status != PJ_SUCCESS) {
-    	pjsua_perror(THIS_FILE, "Error creating media transports", status);
-    	pjsua_destroy();
-    	return status;
+        pjsua_perror (THIS_FILE, "Error creating media transports", status);
+        pjsua_destroy();
+        return status;
     }
-    
+
     /* Initialization is done, now start pjsua */
     status = pjsua_start();
+
     if (status != PJ_SUCCESS) {
-    	pjsua_perror(THIS_FILE, "Error starting pjsua", status);
-    	pjsua_destroy();
-    	return status;
+        pjsua_perror (THIS_FILE, "Error starting pjsua", status);
+        pjsua_destroy();
+        return status;
     }
 
     /* Register to SIP server by creating SIP account. */
     if (HAS_SIP_ACCOUNT) {
-	pjsua_acc_config cfg;
-
-	pjsua_acc_config_default(&cfg);
-	cfg.id = pj_str("sip:" SIP_USER "@" SIP_DOMAIN);
-	cfg.reg_uri = pj_str("sip:" SIP_DOMAIN);
-	cfg.cred_count = 1;
-	cfg.cred_info[0].realm = pj_str("*");
-	cfg.cred_info[0].scheme = pj_str("digest");
-	cfg.cred_info[0].username = pj_str(SIP_USER);
-	cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
-	cfg.cred_info[0].data = pj_str(SIP_PASSWD);
-
-	status = pjsua_acc_add(&cfg, PJ_TRUE, &g_acc_id);
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "Error adding account", status);
-		pjsua_destroy();
-		return status;
-	}
+        pjsua_acc_config cfg;
+
+        pjsua_acc_config_default (&cfg);
+        cfg.id = pj_str ("sip:" SIP_USER "@" SIP_DOMAIN);
+        cfg.reg_uri = pj_str ("sip:" SIP_DOMAIN);
+        cfg.cred_count = 1;
+        cfg.cred_info[0].realm = pj_str ("*");
+        cfg.cred_info[0].scheme = pj_str ("digest");
+        cfg.cred_info[0].username = pj_str (SIP_USER);
+        cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
+        cfg.cred_info[0].data = pj_str (SIP_PASSWD);
+
+        status = pjsua_acc_add (&cfg, PJ_TRUE, &g_acc_id);
+
+        if (status != PJ_SUCCESS) {
+            pjsua_perror (THIS_FILE, "Error adding account", status);
+            pjsua_destroy();
+            return status;
+        }
     }
 
     if (SIP_DST_URI) {
-    	pjsua_buddy_config bcfg;
-    
-    	pjsua_buddy_config_default(&bcfg);
-    	bcfg.uri = pj_str(SIP_DST_URI);
-    	bcfg.subscribe = PJ_FALSE;
-    	
-    	pjsua_buddy_add(&bcfg, &g_buddy_id);
+        pjsua_buddy_config bcfg;
+
+        pjsua_buddy_config_default (&bcfg);
+        bcfg.uri = pj_str (SIP_DST_URI);
+        bcfg.subscribe = PJ_FALSE;
+
+        pjsua_buddy_add (&bcfg, &g_buddy_id);
     }
+
     return PJ_SUCCESS;
 }
 
@@ -507,404 +525,421 @@ static pj_status_t app_startup()
  */
 #include <e32base.h>
 
-class ConsoleUI : public CActive 
+class ConsoleUI : public CActive
 {
-public:
-    ConsoleUI(CConsoleBase *con);
-    ~ConsoleUI();
-
-    // Run console UI
-    void Run();
-
-    // Stop
-    void Stop();
-    
-protected:
-    // Cancel asynchronous read.
-    void DoCancel();
-
-    // Implementation: called when read has completed.
-    void RunL();
-    
-private:
-    CConsoleBase *con_;
+    public:
+        ConsoleUI (CConsoleBase *con);
+        ~ConsoleUI();
+
+        // Run console UI
+        void Run();
+
+        // Stop
+        void Stop();
+
+    protected:
+        // Cancel asynchronous read.
+        void DoCancel();
+
+        // Implementation: called when read has completed.
+        void RunL();
+
+    private:
+        CConsoleBase *con_;
 };
 
 
-ConsoleUI::ConsoleUI(CConsoleBase *con) 
-: CActive(EPriorityStandard), con_(con)
+ConsoleUI::ConsoleUI (CConsoleBase *con)
+        : CActive (EPriorityStandard), con_ (con)
 {
-    CActiveScheduler::Add(this);
+    CActiveScheduler::Add (this);
 }
 
-ConsoleUI::~ConsoleUI() 
+ConsoleUI::~ConsoleUI()
 {
     Stop();
 }
 
 // Run console UI
-void ConsoleUI::Run() 
+void ConsoleUI::Run()
 {
-    con_->Read(iStatus);
+    con_->Read (iStatus);
     SetActive();
 }
 
 // Stop console UI
-void ConsoleUI::Stop() 
+void ConsoleUI::Stop()
 {
     Cancel();
 }
 
 // Cancel asynchronous read.
-void ConsoleUI::DoCancel() 
+void ConsoleUI::DoCancel()
 {
     con_->ReadCancel();
 }
 
-static void PrintMainMenu() 
+static void PrintMainMenu()
 {
     const char *menu =
-	    "\n\n"
-	    "Main Menu:\n"
-	    "  d    Enable/disable codecs\n"
-	    "  m    Call " SIP_DST_URI "\n"
-	    "  a    Answer call\n"
-	    "  g    Hangup all calls\n"
-   	    "  t    Toggle audio route\n"
+        "\n\n"
+        "Main Menu:\n"
+        "  d    Enable/disable codecs\n"
+        "  m    Call " SIP_DST_URI "\n"
+        "  a    Answer call\n"
+        "  g    Hangup all calls\n"
+        "  t    Toggle audio route\n"
 #if !defined(PJMEDIA_CONF_USE_SWITCH_BOARD) || PJMEDIA_CONF_USE_SWITCH_BOARD==0
-   	    "  j    Toggle loopback audio\n"
+        "  j    Toggle loopback audio\n"
 #endif
-   	    "up/dn  Increase/decrease output volume\n"
-	    "  s    Subscribe " SIP_DST_URI "\n"
-	    "  S    Unsubscribe presence\n"
-	    "  o    Set account online\n"
-	    "  O    Set account offline\n"
-	    "  w    Quit\n";
-    
-    PJ_LOG(3, (THIS_FILE, menu));
+        "up/dn  Increase/decrease output volume\n"
+        "  s    Subscribe " SIP_DST_URI "\n"
+        "  S    Unsubscribe presence\n"
+        "  o    Set account online\n"
+        "  O    Set account offline\n"
+        "  w    Quit\n";
+
+    PJ_LOG (3, (THIS_FILE, menu));
 }
 
-static void PrintCodecMenu() 
+static void PrintCodecMenu()
 {
-    const char *menu = 
-	    "\n\n"
-	    "Codec Menu:\n"
-	    "  a    Enable all codecs\n"
+    const char *menu =
+        "\n\n"
+        "Codec Menu:\n"
+        "  a    Enable all codecs\n"
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_AMR
-	    "  d    Enable only AMR\n"
+        "  d    Enable only AMR\n"
 #endif
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_G729
-	    "  g    Enable only G.729\n"
+        "  g    Enable only G.729\n"
 #endif
 #if PJMEDIA_HAS_PASSTHROUGH_CODEC_ILBC
-	    "  j    Enable only iLBC\n"
+        "  j    Enable only iLBC\n"
 #endif
-	    "  m    Enable only Speex\n"
-	    "  p    Enable only GSM\n"
-	    "  t    Enable only PCMU\n"
-	    "  w    Enable only PCMA\n";
-    
-    PJ_LOG(3, (THIS_FILE, menu));
+        "  m    Enable only Speex\n"
+        "  p    Enable only GSM\n"
+        "  t    Enable only PCMU\n"
+        "  w    Enable only PCMA\n";
+
+    PJ_LOG (3, (THIS_FILE, menu));
 }
 
-static void HandleMainMenu(TKeyCode kc) {
+static void HandleMainMenu (TKeyCode kc)
+{
     switch (kc) {
-    
-    case EKeyUpArrow:
-    case EKeyDownArrow:
-	{
-	    unsigned vol;
-	    pj_status_t status;
-	    
-	    status = pjsua_snd_get_setting(
-			     PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, &vol);
-	    if (status == PJ_SUCCESS) {
-		if (kc == EKeyUpArrow)
-		    vol = PJ_MIN(100, vol+10);
-		else
-		    vol = (vol>=10 ? vol-10 : 0);
-		status = pjsua_snd_set_setting(
-				    PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
-				    &vol, PJ_TRUE);
-	    }
-
-	    if (status == PJ_SUCCESS) {
-		PJ_LOG(3,(THIS_FILE, "Output volume set to %d", vol));
-	    } else {
-		pjsua_perror(THIS_FILE, "Error setting volume", status);
-	    }
-	}
-	break;
-    
-    case 't':
-	{
-	    pjmedia_aud_dev_route route;
-	    pj_status_t status;
-	    
-	    status = pjsua_snd_get_setting(PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE, 
-					   &route);
-	    
-	    if (status == PJ_SUCCESS) {
-		if (route == PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER)
-		    route = PJMEDIA_AUD_DEV_ROUTE_EARPIECE;
-		else
-		    route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
-
-		status = pjsua_snd_set_setting(
-				    PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
-				    &route, PJ_TRUE);
-	    }
-
-	    if (status != PJ_SUCCESS)
-		pjsua_perror(THIS_FILE, "Error switch audio route", status);
-	}
-	break;
-	
-    case 'j':
-	{
-	    static pj_bool_t loopback_active = PJ_FALSE;
-	    if (!loopback_active)
-		pjsua_conf_connect(0, 0);
-	    else
-		pjsua_conf_disconnect(0, 0);
-	    loopback_active = !loopback_active;
-	}
-	break;
-	
-    case 'm':
-	if (g_call_id != PJSUA_INVALID_ID) {
-		PJ_LOG(3,(THIS_FILE, "Another call is active"));	
-		break;
-	}
-
-	if (pjsua_verify_sip_url(SIP_DST_URI) == PJ_SUCCESS) {
-		pj_str_t dst = pj_str(SIP_DST_URI);
-		pjsua_call_make_call(g_acc_id, &dst, 0, NULL,
-				     NULL, &g_call_id);
-	} else {
-		PJ_LOG(3,(THIS_FILE, "Invalid SIP URI"));
-	}
-	break;
-    case 'a':
-	if (g_call_id != PJSUA_INVALID_ID)
-		pjsua_call_answer(g_call_id, 200, NULL, NULL);
-	break;
-    case 'g':
-	pjsua_call_hangup_all();
-	break;
-    case 's':
-    case 'S':
-	if (g_buddy_id != PJSUA_INVALID_ID)
-		pjsua_buddy_subscribe_pres(g_buddy_id, kc=='s');
-	break;
-    case 'o':
-    case 'O':
-	pjsua_acc_set_online_status(g_acc_id, kc=='o');
-	break;
-	    
-    default:
-	PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
-	break;
+
+        case EKeyUpArrow:
+        case EKeyDownArrow: {
+            unsigned vol;
+            pj_status_t status;
+
+            status = pjsua_snd_get_setting (
+                         PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING, &vol);
+
+            if (status == PJ_SUCCESS) {
+                if (kc == EKeyUpArrow)
+                    vol = PJ_MIN (100, vol+10);
+                else
+                    vol = (vol>=10 ? vol-10 : 0);
+
+                status = pjsua_snd_set_setting (
+                             PJMEDIA_AUD_DEV_CAP_OUTPUT_VOLUME_SETTING,
+                             &vol, PJ_TRUE);
+            }
+
+            if (status == PJ_SUCCESS) {
+                PJ_LOG (3, (THIS_FILE, "Output volume set to %d", vol));
+            } else {
+                pjsua_perror (THIS_FILE, "Error setting volume", status);
+            }
+        }
+        break;
+
+        case 't': {
+            pjmedia_aud_dev_route route;
+            pj_status_t status;
+
+            status = pjsua_snd_get_setting (PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
+                                            &route);
+
+            if (status == PJ_SUCCESS) {
+                if (route == PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER)
+                    route = PJMEDIA_AUD_DEV_ROUTE_EARPIECE;
+                else
+                    route = PJMEDIA_AUD_DEV_ROUTE_LOUDSPEAKER;
+
+                status = pjsua_snd_set_setting (
+                             PJMEDIA_AUD_DEV_CAP_OUTPUT_ROUTE,
+                             &route, PJ_TRUE);
+            }
+
+            if (status != PJ_SUCCESS)
+                pjsua_perror (THIS_FILE, "Error switch audio route", status);
+        }
+        break;
+
+        case 'j': {
+            static pj_bool_t loopback_active = PJ_FALSE;
+
+            if (!loopback_active)
+                pjsua_conf_connect (0, 0);
+            else
+                pjsua_conf_disconnect (0, 0);
+
+            loopback_active = !loopback_active;
+        }
+        break;
+
+        case 'm':
+
+            if (g_call_id != PJSUA_INVALID_ID) {
+                PJ_LOG (3, (THIS_FILE, "Another call is active"));
+                break;
+            }
+
+            if (pjsua_verify_sip_url (SIP_DST_URI) == PJ_SUCCESS) {
+                pj_str_t dst = pj_str (SIP_DST_URI);
+                pjsua_call_make_call (g_acc_id, &dst, 0, NULL,
+                                      NULL, &g_call_id);
+            } else {
+                PJ_LOG (3, (THIS_FILE, "Invalid SIP URI"));
+            }
+
+            break;
+        case 'a':
+
+            if (g_call_id != PJSUA_INVALID_ID)
+                pjsua_call_answer (g_call_id, 200, NULL, NULL);
+
+            break;
+        case 'g':
+            pjsua_call_hangup_all();
+            break;
+        case 's':
+        case 'S':
+
+            if (g_buddy_id != PJSUA_INVALID_ID)
+                pjsua_buddy_subscribe_pres (g_buddy_id, kc=='s');
+
+            break;
+        case 'o':
+        case 'O':
+            pjsua_acc_set_online_status (g_acc_id, kc=='o');
+            break;
+
+        default:
+            PJ_LOG (3, (THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
+            break;
     }
 
     PrintMainMenu();
 }
 
-static void HandleCodecMenu(TKeyCode kc) {
+static void HandleCodecMenu (TKeyCode kc)
+{
     const pj_str_t ID_ALL = {"*", 1};
     pj_str_t codec = {NULL, 0};
-    
+
     if (kc == 'a') {
-	pjsua_codec_set_priority(&ID_ALL, PJMEDIA_CODEC_PRIO_NORMAL);
-	PJ_LOG(3,(THIS_FILE, "All codecs activated"));
+        pjsua_codec_set_priority (&ID_ALL, PJMEDIA_CODEC_PRIO_NORMAL);
+        PJ_LOG (3, (THIS_FILE, "All codecs activated"));
     } else {
-	switch (kc) {
-	case 'd':
-	    codec = pj_str("AMR");
-	    break;
-	case 'g':
-	    codec = pj_str("G729");
-	    break;
-	case 'j':
-	    codec = pj_str("ILBC");
-	    break;
-	case 'm':
-	    codec = pj_str("SPEEX/8000");
-	    break;
-	case 'p':
-	    codec = pj_str("GSM");
-	    break;
-	case 't':
-	    codec = pj_str("PCMU");
-	    break;
-	case 'w':
-	    codec = pj_str("PCMA");
-	    break;
-	default:
-	    PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
-	    break;
-	}
-
-	if (codec.slen) {
-	    pj_status_t status;
-	    
-	    pjsua_codec_set_priority(&ID_ALL, PJMEDIA_CODEC_PRIO_DISABLED);
-		
-	    status = pjsua_codec_set_priority(&codec, 
-					      PJMEDIA_CODEC_PRIO_NORMAL);
-	    if (status == PJ_SUCCESS)
-		PJ_LOG(3,(THIS_FILE, "%s activated", codec.ptr));
-	    else
-		PJ_LOG(3,(THIS_FILE, "Failed activating %s, err=%d", 
-			  codec.ptr, status));
-	}
+        switch (kc) {
+            case 'd':
+                codec = pj_str ("AMR");
+                break;
+            case 'g':
+                codec = pj_str ("G729");
+                break;
+            case 'j':
+                codec = pj_str ("ILBC");
+                break;
+            case 'm':
+                codec = pj_str ("SPEEX/8000");
+                break;
+            case 'p':
+                codec = pj_str ("GSM");
+                break;
+            case 't':
+                codec = pj_str ("PCMU");
+                break;
+            case 'w':
+                codec = pj_str ("PCMA");
+                break;
+            default:
+                PJ_LOG (3, (THIS_FILE, "Keycode '%c' (%d) is pressed", kc, kc));
+                break;
+        }
+
+        if (codec.slen) {
+            pj_status_t status;
+
+            pjsua_codec_set_priority (&ID_ALL, PJMEDIA_CODEC_PRIO_DISABLED);
+
+            status = pjsua_codec_set_priority (&codec,
+                                               PJMEDIA_CODEC_PRIO_NORMAL);
+
+            if (status == PJ_SUCCESS)
+                PJ_LOG (3, (THIS_FILE, "%s activated", codec.ptr));
+            else
+                PJ_LOG (3, (THIS_FILE, "Failed activating %s, err=%d",
+                            codec.ptr, status));
+        }
     }
 }
 
 // Implementation: called when read has completed.
-void ConsoleUI::RunL() 
+void ConsoleUI::RunL()
 {
     enum {
-	MENU_TYPE_MAIN = 0,
-	MENU_TYPE_CODEC = 1
+        MENU_TYPE_MAIN = 0,
+        MENU_TYPE_CODEC = 1
     };
     static int menu_type = MENU_TYPE_MAIN;
     TKeyCode kc = con_->KeyCode();
     pj_bool_t reschedule = PJ_TRUE;
-    
+
     if (menu_type == MENU_TYPE_MAIN) {
-	if (kc == 'w') {
-	    CActiveScheduler::Stop();
-	    reschedule = PJ_FALSE;
-	} else if (kc == 'd') {
-	    menu_type = MENU_TYPE_CODEC;
-	    PrintCodecMenu();
-	} else {
-	    HandleMainMenu(kc);
-	}
+        if (kc == 'w') {
+            CActiveScheduler::Stop();
+            reschedule = PJ_FALSE;
+        } else if (kc == 'd') {
+            menu_type = MENU_TYPE_CODEC;
+            PrintCodecMenu();
+        } else {
+            HandleMainMenu (kc);
+        }
     } else {
-	HandleCodecMenu(kc);
-	
-	menu_type = MENU_TYPE_MAIN;
-	PrintMainMenu();
+        HandleCodecMenu (kc);
+
+        menu_type = MENU_TYPE_MAIN;
+        PrintMainMenu();
     }
-    
+
     if (reschedule)
-	Run();
+        Run();
 }
 
 #if 0
 // IP networking related testing
-static pj_status_t test_addr(void)
+static pj_status_t test_addr (void)
 {
-	int af;
-	unsigned i, count;
-	pj_addrinfo ai[8];
-	pj_sockaddr ifs[8];
-	const pj_str_t *hostname;
-	pj_hostent he;
-	pj_status_t status;
-	
-	pj_log_set_log_func(&log_writer);
-	
-	status = pj_init();
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "pj_init() error", status);
-		return status;
-	}
-	
-	af = pj_AF_INET();
-	
+    int af;
+    unsigned i, count;
+    pj_addrinfo ai[8];
+    pj_sockaddr ifs[8];
+    const pj_str_t *hostname;
+    pj_hostent he;
+    pj_status_t status;
+
+    pj_log_set_log_func (&log_writer);
+
+    status = pj_init();
+
+    if (status != PJ_SUCCESS) {
+        pjsua_perror (THIS_FILE, "pj_init() error", status);
+        return status;
+    }
+
+    af = pj_AF_INET();
+
 #if 0
-	pj_in_addr in_addr;
-	pj_str_t aa = pj_str("1.1.1.1");
-	in_addr = pj_inet_addr(&aa);
-	char *the_addr = pj_inet_ntoa(in_addr);
-	PJ_LOG(3,(THIS_FILE, "IP addr=%s", the_addr));
-
-	aa = pj_str("192.168.0.15");
-	in_addr = pj_inet_addr(&aa);
-	the_addr = pj_inet_ntoa(in_addr);
-	PJ_LOG(3,(THIS_FILE, "IP addr=%s", the_addr));
-
-	aa = pj_str("2.2.2.2");
-	in_addr = pj_inet_addr(&aa);
-	the_addr = pj_inet_ntoa(in_addr);
-	PJ_LOG(3,(THIS_FILE, "IP addr=%s", the_addr));
-	
-	return -1;
+    pj_in_addr in_addr;
+    pj_str_t aa = pj_str ("1.1.1.1");
+    in_addr = pj_inet_addr (&aa);
+    char *the_addr = pj_inet_ntoa (in_addr);
+    PJ_LOG (3, (THIS_FILE, "IP addr=%s", the_addr));
+
+    aa = pj_str ("192.168.0.15");
+    in_addr = pj_inet_addr (&aa);
+    the_addr = pj_inet_ntoa (in_addr);
+    PJ_LOG (3, (THIS_FILE, "IP addr=%s", the_addr));
+
+    aa = pj_str ("2.2.2.2");
+    in_addr = pj_inet_addr (&aa);
+    the_addr = pj_inet_ntoa (in_addr);
+    PJ_LOG (3, (THIS_FILE, "IP addr=%s", the_addr));
+
+    return -1;
 #endif
-	
-	// Hostname
-	hostname = pj_gethostname();
-	if (hostname == NULL) {
-		status = PJ_ERESOLVE;
-		pjsua_perror(THIS_FILE, "pj_gethostname() error", status);
-		goto on_return;
-	}
-	
-	PJ_LOG(3,(THIS_FILE, "Hostname: %.*s", hostname->slen, hostname->ptr));
-	
-	// Gethostbyname
-	status = pj_gethostbyname(hostname, &he);
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "pj_gethostbyname() error", status);
-	} else {
-		PJ_LOG(3,(THIS_FILE, "gethostbyname: %s", 
-				  pj_inet_ntoa(*(pj_in_addr*)he.h_addr)));
-	}
-	
-	// Getaddrinfo
-	count = PJ_ARRAY_SIZE(ai);
-	status = pj_getaddrinfo(af, hostname, &count, ai);
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "pj_getaddrinfo() error", status);
-	} else {
-		for (i=0; i<count; ++i) {
-			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-			PJ_LOG(3,(THIS_FILE, "Addrinfo: %s", 
-					  pj_sockaddr_print(&ai[i].ai_addr, ipaddr, sizeof(ipaddr), 2)));
-		}
-	}
-	
-	// Enum interface
-	count = PJ_ARRAY_SIZE(ifs);
-	status = pj_enum_ip_interface(af, &count, ifs);
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "pj_enum_ip_interface() error", status);
-	} else {
-		for (i=0; i<count; ++i) {
-			char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-			PJ_LOG(3,(THIS_FILE, "Interface: %s", 
-					  pj_sockaddr_print(&ifs[i], ipaddr, sizeof(ipaddr), 2)));
-		}
-	}
-
-	// Get default iinterface
-	status = pj_getdefaultipinterface(af, &ifs[0]);
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "pj_getdefaultipinterface() error", status);
-	} else {
-		char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-		PJ_LOG(3,(THIS_FILE, "Default IP: %s", 
-				  pj_sockaddr_print(&ifs[0], ipaddr, sizeof(ipaddr), 2)));
-	}
-	
-	// Get default IP address
-	status = pj_gethostip(af, &ifs[0]);
-	if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "pj_gethostip() error", status);
-	} else {
-		char ipaddr[PJ_INET6_ADDRSTRLEN+2];
-		PJ_LOG(3,(THIS_FILE, "Host IP: %s", 
-				  pj_sockaddr_print(&ifs[0], ipaddr, sizeof(ipaddr), 2)));
-	}
-	
-	status = -1;
-	
+
+    // Hostname
+    hostname = pj_gethostname();
+
+    if (hostname == NULL) {
+        status = PJ_ERESOLVE;
+        pjsua_perror (THIS_FILE, "pj_gethostname() error", status);
+        goto on_return;
+    }
+
+    PJ_LOG (3, (THIS_FILE, "Hostname: %.*s", hostname->slen, hostname->ptr));
+
+    // Gethostbyname
+    status = pj_gethostbyname (hostname, &he);
+
+    if (status != PJ_SUCCESS) {
+        pjsua_perror (THIS_FILE, "pj_gethostbyname() error", status);
+    } else {
+        PJ_LOG (3, (THIS_FILE, "gethostbyname: %s",
+                    pj_inet_ntoa (* (pj_in_addr*) he.h_addr)));
+    }
+
+    // Getaddrinfo
+    count = PJ_ARRAY_SIZE (ai);
+    status = pj_getaddrinfo (af, hostname, &count, ai);
+
+    if (status != PJ_SUCCESS) {
+        pjsua_perror (THIS_FILE, "pj_getaddrinfo() error", status);
+    } else {
+        for (i=0; i<count; ++i) {
+            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+            PJ_LOG (3, (THIS_FILE, "Addrinfo: %s",
+                        pj_sockaddr_print (&ai[i].ai_addr, ipaddr, sizeof (ipaddr), 2)));
+        }
+    }
+
+    // Enum interface
+    count = PJ_ARRAY_SIZE (ifs);
+    status = pj_enum_ip_interface (af, &count, ifs);
+
+    if (status != PJ_SUCCESS) {
+        pjsua_perror (THIS_FILE, "pj_enum_ip_interface() error", status);
+    } else {
+        for (i=0; i<count; ++i) {
+            char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+            PJ_LOG (3, (THIS_FILE, "Interface: %s",
+                        pj_sockaddr_print (&ifs[i], ipaddr, sizeof (ipaddr), 2)));
+        }
+    }
+
+    // Get default iinterface
+    status = pj_getdefaultipinterface (af, &ifs[0]);
+
+    if (status != PJ_SUCCESS) {
+        pjsua_perror (THIS_FILE, "pj_getdefaultipinterface() error", status);
+    } else {
+        char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+        PJ_LOG (3, (THIS_FILE, "Default IP: %s",
+                    pj_sockaddr_print (&ifs[0], ipaddr, sizeof (ipaddr), 2)));
+    }
+
+    // Get default IP address
+    status = pj_gethostip (af, &ifs[0]);
+
+    if (status != PJ_SUCCESS) {
+        pjsua_perror (THIS_FILE, "pj_gethostip() error", status);
+    } else {
+        char ipaddr[PJ_INET6_ADDRSTRLEN+2];
+        PJ_LOG (3, (THIS_FILE, "Host IP: %s",
+                    pj_sockaddr_print (&ifs[0], ipaddr, sizeof (ipaddr), 2)));
+    }
+
+    status = -1;
+
 on_return:
-	pj_shutdown();
-	return status;
+    pj_shutdown();
+    return status;
 }
 #endif
 
@@ -912,40 +947,40 @@ on_return:
 #include <es_sock.h>
 
 #if 0
-// Force network connection to use the first IAP, 
-// this is useful for debugging on emulator without GUI. 
+// Force network connection to use the first IAP,
+// this is useful for debugging on emulator without GUI.
 // Include commdb.lib & apengine.lib in symbian_ua.mmp file
 // if this is enabled.
 
 #include <apdatahandler.h>
 
-inline void ForceUseFirstIAP() 
+inline void ForceUseFirstIAP()
 {
     TUint32 rank = 1;
     TUint32 bearers;
     TUint32 prompt;
     TUint32 iap;
 
-    CCommsDatabase* commDb = CCommsDatabase::NewL(EDatabaseTypeIAP);
-    CleanupStack::PushL(commDb);
+    CCommsDatabase* commDb = CCommsDatabase::NewL (EDatabaseTypeIAP);
+    CleanupStack::PushL (commDb);
+
+    CApDataHandler* apDataHandler = CApDataHandler::NewLC (*commDb);
 
-    CApDataHandler* apDataHandler = CApDataHandler::NewLC(*commDb);
-    
     TCommDbConnectionDirection direction = ECommDbConnectionDirectionOutgoing;
-    apDataHandler->GetPreferredIfDbIapTypeL(rank, direction, bearers, prompt, iap);
+    apDataHandler->GetPreferredIfDbIapTypeL (rank, direction, bearers, prompt, iap);
     prompt = ECommDbDialogPrefDoNotPrompt;
-    apDataHandler->SetPreferredIfDbIapTypeL(rank, direction, bearers, (TCommDbDialogPref)prompt, iap, ETrue);
-    CleanupStack::PopAndDestroy(2); // apDataHandler, commDb
+    apDataHandler->SetPreferredIfDbIapTypeL (rank, direction, bearers, (TCommDbDialogPref) prompt, iap, ETrue);
+    CleanupStack::PopAndDestroy (2); // apDataHandler, commDb
 }
 
-static void SelectIAP() 
+static void SelectIAP()
 {
     ForceUseFirstIAP();
 }
 
 #else
 
-static void SelectIAP() 
+static void SelectIAP()
 {
 }
 
@@ -954,96 +989,101 @@ static void SelectIAP()
 
 // Class CConnMon to monitor network connection (RConnection). Whenever
 // the connection is down, it will notify PJLIB and restart PJSUA-LIB.
-class CConnMon : public CActive {
-public:
-    static CConnMon* NewL(RConnection &conn, RSocketServ &sserver) {
-	CConnMon *self = new (ELeave) CConnMon(conn, sserver);
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-    }
-    
-    void Start() {
-	conn_.ProgressNotification(nif_progress_, iStatus);
-	SetActive();
-    }
-    
-    void Stop() {
-	Cancel();
-    }
-    
-    ~CConnMon() { Stop(); }
-    
-private:
-    CConnMon(RConnection &conn, RSocketServ &sserver) : 
-	CActive(EPriorityHigh), 
-	conn_(conn), 
-	sserver_(sserver)
-    {
-	CActiveScheduler::Add(this);
-    }
-    
-    void ConstructL() {}
-
-    void DoCancel() {
-	conn_.CancelProgressNotification();
-    }
-
-    void RunL() {
-	int stage = nif_progress_().iStage;
-	
-	if (stage == KLinkLayerClosed) {
-	    pj_status_t status;
-	    TInt err;
-
-	    // Tell pjlib that connection is down.
-	    pj_symbianos_set_connection_status(PJ_FALSE);
-	    
-	    PJ_LOG(3, (THIS_FILE, "RConnection closed, restarting PJSUA.."));
-	    
-	    // Destroy pjsua
-	    pjsua_destroy();
-	    PJ_LOG(3, (THIS_FILE, "PJSUA destroyed."));
-
-	    // Reopen the connection
-	    err = conn_.Open(sserver_);
-	    if (err == KErrNone)
-		err = conn_.Start();
-	    if (err != KErrNone) {
-		CActiveScheduler::Stop();
-		return;
-	    }
-
-	    // Reinit Symbian OS param before pj_init()
-	    pj_symbianos_params sym_params;
-	    pj_bzero(&sym_params, sizeof(sym_params));
-	    sym_params.rsocketserv = &sserver_;
-	    sym_params.rconnection = &conn_;
-	    pj_symbianos_set_params(&sym_params);
-
-	    // Reinit pjsua
-	    status = app_startup();
-	    if (status != PJ_SUCCESS) {
-		pjsua_perror(THIS_FILE, "app_startup() error", status);
-		CActiveScheduler::Stop();
-		return;
-	    }
-	    
-	    PJ_LOG(3, (THIS_FILE, "PJSUA restarted."));
-	    PrintMainMenu();
-	}
-	
-	Start();
-    }
-    
-    RConnection& conn_;
-    RSocketServ& sserver_;
-    TNifProgressBuf nif_progress_;
+class CConnMon : public CActive
+{
+    public:
+        static CConnMon* NewL (RConnection &conn, RSocketServ &sserver) {
+            CConnMon *self = new (ELeave) CConnMon (conn, sserver);
+            CleanupStack::PushL (self);
+            self->ConstructL();
+            CleanupStack::Pop (self);
+            return self;
+        }
+
+        void Start() {
+            conn_.ProgressNotification (nif_progress_, iStatus);
+            SetActive();
+        }
+
+        void Stop() {
+            Cancel();
+        }
+
+        ~CConnMon() {
+            Stop();
+        }
+
+    private:
+        CConnMon (RConnection &conn, RSocketServ &sserver) :
+                CActive (EPriorityHigh),
+                conn_ (conn),
+                sserver_ (sserver) {
+            CActiveScheduler::Add (this);
+        }
+
+        void ConstructL() {}
+
+        void DoCancel() {
+            conn_.CancelProgressNotification();
+        }
+
+        void RunL() {
+            int stage = nif_progress_().iStage;
+
+            if (stage == KLinkLayerClosed) {
+                pj_status_t status;
+                TInt err;
+
+                // Tell pjlib that connection is down.
+                pj_symbianos_set_connection_status (PJ_FALSE);
+
+                PJ_LOG (3, (THIS_FILE, "RConnection closed, restarting PJSUA.."));
+
+                // Destroy pjsua
+                pjsua_destroy();
+                PJ_LOG (3, (THIS_FILE, "PJSUA destroyed."));
+
+                // Reopen the connection
+                err = conn_.Open (sserver_);
+
+                if (err == KErrNone)
+                    err = conn_.Start();
+
+                if (err != KErrNone) {
+                    CActiveScheduler::Stop();
+                    return;
+                }
+
+                // Reinit Symbian OS param before pj_init()
+                pj_symbianos_params sym_params;
+                pj_bzero (&sym_params, sizeof (sym_params));
+                sym_params.rsocketserv = &sserver_;
+                sym_params.rconnection = &conn_;
+                pj_symbianos_set_params (&sym_params);
+
+                // Reinit pjsua
+                status = app_startup();
+
+                if (status != PJ_SUCCESS) {
+                    pjsua_perror (THIS_FILE, "app_startup() error", status);
+                    CActiveScheduler::Stop();
+                    return;
+                }
+
+                PJ_LOG (3, (THIS_FILE, "PJSUA restarted."));
+                PrintMainMenu();
+            }
+
+            Start();
+        }
+
+        RConnection& conn_;
+        RSocketServ& sserver_;
+        TNifProgressBuf nif_progress_;
 };
 
 ////////////////////////////////////////////////////////////////////////////
-int ua_main() 
+int ua_main()
 {
     RSocketServ aSocketServer;
     RConnection aConn;
@@ -1052,81 +1092,83 @@ int ua_main()
     pj_status_t status;
 
     SelectIAP();
-    
+
     // Initialize RSocketServ
-    if ((err=aSocketServer.Connect()) != KErrNone)
-    	return PJ_STATUS_FROM_OS(err);
-    
+    if ( (err=aSocketServer.Connect()) != KErrNone)
+        return PJ_STATUS_FROM_OS (err);
+
     // Open up a connection
-    if ((err=aConn.Open(aSocketServer)) != KErrNone) {
-	aSocketServer.Close();
-	return PJ_STATUS_FROM_OS(err);
+    if ( (err=aConn.Open (aSocketServer)) != KErrNone) {
+        aSocketServer.Close();
+        return PJ_STATUS_FROM_OS (err);
     }
-    
-    if ((err=aConn.Start()) != KErrNone) {
-    	aSocketServer.Close();
-    	return PJ_STATUS_FROM_OS(err);
+
+    if ( (err=aConn.Start()) != KErrNone) {
+        aSocketServer.Close();
+        return PJ_STATUS_FROM_OS (err);
     }
-    
+
     // Set Symbian OS parameters in pjlib.
     // This must be done before pj_init() is called.
-    pj_bzero(&sym_params, sizeof(sym_params));
+    pj_bzero (&sym_params, sizeof (sym_params));
     sym_params.rsocketserv = &aSocketServer;
     sym_params.rconnection = &aConn;
-    pj_symbianos_set_params(&sym_params);
-    
+    pj_symbianos_set_params (&sym_params);
+
     // Initialize pjsua
     status  = app_startup();
+
     //status = test_addr();
     if (status != PJ_SUCCESS) {
-    	aConn.Close();
-    	aSocketServer.Close();
-	return status;
+        aConn.Close();
+        aSocketServer.Close();
+        return status;
     }
 
-    
+
     // Run the UI
-    ConsoleUI *con = new ConsoleUI(console);
-    
+    ConsoleUI *con = new ConsoleUI (console);
+
     con->Run();
     PrintMainMenu();
 
     // Init & start connection monitor
-    CConnMon *connmon = CConnMon::NewL(aConn, aSocketServer);
+    CConnMon *connmon = CConnMon::NewL (aConn, aSocketServer);
     connmon->Start();
 
     CActiveScheduler::Start();
-    
+
     delete connmon;
     delete con;
 
     // Dump memory statistics
-    PJ_LOG(3,(THIS_FILE, "Max heap usage: %u.%03uMB",
-	      pjsua_var.cp.peak_used_size / 1000000,
-	      (pjsua_var.cp.peak_used_size % 1000000)/1000));
-    
+    PJ_LOG (3, (THIS_FILE, "Max heap usage: %u.%03uMB",
+                pjsua_var.cp.peak_used_size / 1000000,
+                (pjsua_var.cp.peak_used_size % 1000000) /1000));
+
     // check max stack usage
 #if defined(PJ_OS_HAS_CHECK_STACK) && PJ_OS_HAS_CHECK_STACK!=0
-	pj_thread_t* this_thread = pj_thread_this();
-	if (!this_thread)
-	    return status;
-	
-	const char* max_stack_file;
-	int max_stack_line;
-	status = pj_thread_get_stack_info(this_thread, &max_stack_file, &max_stack_line);
-	
-	PJ_LOG(3,(THIS_FILE, "Max stack usage: %u at %s:%d", 
-		  pj_thread_get_stack_max_usage(this_thread), 
-		  max_stack_file, max_stack_line));
+    pj_thread_t* this_thread = pj_thread_this();
+
+    if (!this_thread)
+        return status;
+
+    const char* max_stack_file;
+    int max_stack_line;
+    status = pj_thread_get_stack_info (this_thread, &max_stack_file, &max_stack_line);
+
+    PJ_LOG (3, (THIS_FILE, "Max stack usage: %u at %s:%d",
+                pj_thread_get_stack_max_usage (this_thread),
+                max_stack_file, max_stack_line));
 #endif
-	
+
     // Shutdown pjsua
     pjsua_destroy();
-    
+
     // Close connection and socket server
     aConn.Close();
     aSocketServer.Close();
-    
+
     return status;
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
index 6d7522938b924bc781abb0d7ae49544c8af38811..d1dd12bd660796307c83eafafbbd6ff4da00ba83 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/Symbian_ua_guiSettingItemListSets.cpp
@@ -3,16 +3,16 @@
  Name        : Symbian_ua_guiSettingItemListSettings.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 /**
- *	Generated helper class which manages the settings contained 
+ *	Generated helper class which manages the settings contained
  *	in 'symbian_ua_guiSettingItemList'.  Each CAknSettingItem maintains
  *	a reference to data in this class so that changes in the setting
  *	item list can be synchronized with this storage.
  */
- 
+
 // [[[ begin generated region: do not modify [Generated Includes]
 #include <e32base.h>
 #include <stringloader.h>
@@ -25,120 +25,120 @@
  * C/C++ constructor for settings data, cannot throw
  */
 TSymbian_ua_guiSettingItemListSettings::TSymbian_ua_guiSettingItemListSettings()
-	{
-	}
+{
+}
 
 /**
  * Two-phase constructor for settings data
  */
 TSymbian_ua_guiSettingItemListSettings* TSymbian_ua_guiSettingItemListSettings::NewL()
-	{
-	TSymbian_ua_guiSettingItemListSettings* data = new( ELeave ) TSymbian_ua_guiSettingItemListSettings;
-	CleanupStack::PushL( data );
-	data->ConstructL();
-	CleanupStack::Pop( data );
-	return data;
-	}
-	
+{
+    TSymbian_ua_guiSettingItemListSettings* data = new (ELeave) TSymbian_ua_guiSettingItemListSettings;
+    CleanupStack::PushL (data);
+    data->ConstructL();
+    CleanupStack::Pop (data);
+    return data;
+}
+
 /**
  *	Second phase for initializing settings data
  */
 void TSymbian_ua_guiSettingItemListSettings::ConstructL()
-	{
-	// [[[ begin generated region: do not modify [Generated Initializers]
-		{
-		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_REGISTRAR );
-		SetEd_registrar( text->Des() );
-		CleanupStack::PopAndDestroy( text );
-		}
-		{
-		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_USER );
-		SetEd_user( text->Des() );
-		CleanupStack::PopAndDestroy( text );
-		}
-	SetB_srtp( 0 );
-	SetB_ice( 0 );
-		{
-		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_STUN_SERVER );
-		SetEd_stun_server( text->Des() );
-		CleanupStack::PopAndDestroy( text );
-		}
-	// ]]] end generated region [Generated Initializers]
-	
-	}
-	
+{
+    // [[[ begin generated region: do not modify [Generated Initializers]
+    {
+        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_REGISTRAR);
+        SetEd_registrar (text->Des());
+        CleanupStack::PopAndDestroy (text);
+    }
+    {
+        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_USER);
+        SetEd_user (text->Des());
+        CleanupStack::PopAndDestroy (text);
+    }
+    SetB_srtp (0);
+    SetB_ice (0);
+    {
+        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_ED_STUN_SERVER);
+        SetEd_stun_server (text->Des());
+        CleanupStack::PopAndDestroy (text);
+    }
+    // ]]] end generated region [Generated Initializers]
+
+}
+
 // [[[ begin generated region: do not modify [Generated Contents]
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_registrar()
-	{
-	return iEd_registrar;
-	}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_registrar(const TDesC& aValue)
-	{
-	if ( aValue.Length() < KEd_registrarMaxLength)
-		iEd_registrar.Copy( aValue );
-	else
-		iEd_registrar.Copy( aValue.Ptr(), KEd_registrarMaxLength);
-	}
+{
+    return iEd_registrar;
+}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_registrar (const TDesC& aValue)
+{
+    if (aValue.Length() < KEd_registrarMaxLength)
+        iEd_registrar.Copy (aValue);
+    else
+        iEd_registrar.Copy (aValue.Ptr(), KEd_registrarMaxLength);
+}
 
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_user()
-	{
-	return iEd_user;
-	}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_user(const TDesC& aValue)
-	{
-	if ( aValue.Length() < KEd_userMaxLength)
-		iEd_user.Copy( aValue );
-	else
-		iEd_user.Copy( aValue.Ptr(), KEd_userMaxLength);
-	}
+{
+    return iEd_user;
+}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_user (const TDesC& aValue)
+{
+    if (aValue.Length() < KEd_userMaxLength)
+        iEd_user.Copy (aValue);
+    else
+        iEd_user.Copy (aValue.Ptr(), KEd_userMaxLength);
+}
 
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_password()
-	{
-	return iEd_password;
-	}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_password(const TDesC& aValue)
-	{
-	if ( aValue.Length() < KEd_passwordMaxLength)
-		iEd_password.Copy( aValue );
-	else
-		iEd_password.Copy( aValue.Ptr(), KEd_passwordMaxLength);
-	}
+{
+    return iEd_password;
+}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_password (const TDesC& aValue)
+{
+    if (aValue.Length() < KEd_passwordMaxLength)
+        iEd_password.Copy (aValue);
+    else
+        iEd_password.Copy (aValue.Ptr(), KEd_passwordMaxLength);
+}
 
 TBool& TSymbian_ua_guiSettingItemListSettings::B_srtp()
-	{
-	return iB_srtp;
-	}
+{
+    return iB_srtp;
+}
 
-void TSymbian_ua_guiSettingItemListSettings::SetB_srtp(const TBool& aValue)
-	{
-	iB_srtp = aValue;
-	}
+void TSymbian_ua_guiSettingItemListSettings::SetB_srtp (const TBool& aValue)
+{
+    iB_srtp = aValue;
+}
 
 TBool& TSymbian_ua_guiSettingItemListSettings::B_ice()
-	{
-	return iB_ice;
-	}
+{
+    return iB_ice;
+}
 
-void TSymbian_ua_guiSettingItemListSettings::SetB_ice(const TBool& aValue)
-	{
-	iB_ice = aValue;
-	}
+void TSymbian_ua_guiSettingItemListSettings::SetB_ice (const TBool& aValue)
+{
+    iB_ice = aValue;
+}
 
 TDes& TSymbian_ua_guiSettingItemListSettings::Ed_stun_server()
-	{
-	return iEd_stun_server;
-	}
-
-void TSymbian_ua_guiSettingItemListSettings::SetEd_stun_server(const TDesC& aValue)
-	{
-	if ( aValue.Length() < KEd_stun_serverMaxLength)
-		iEd_stun_server.Copy( aValue );
-	else
-		iEd_stun_server.Copy( aValue.Ptr(), KEd_stun_serverMaxLength);
-	}
+{
+    return iEd_stun_server;
+}
+
+void TSymbian_ua_guiSettingItemListSettings::SetEd_stun_server (const TDesC& aValue)
+{
+    if (aValue.Length() < KEd_stun_serverMaxLength)
+        iEd_stun_server.Copy (aValue);
+    else
+        iEd_stun_server.Copy (aValue.Ptr(), KEd_stun_serverMaxLength);
+}
 
 // ]]] end generated region [Generated Contents]
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
index f722336a1b900a640f9aecab638b82c5b60f10cc..ac905ff2c4b5df4594c3116d9a49dd0b41c25638 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua.cpp
@@ -1,5 +1,5 @@
 /* $Id: ua.cpp 1793 2008-02-14 13:39:24Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 #include <pjsua-lib/pjsua.h>
 #include <pjsua-lib/pjsua_internal.h>
@@ -38,222 +38,228 @@ static pjsua_buddy_id g_buddy_id = PJSUA_INVALID_ID;
 
 static symbian_ua_info_cb_t g_cb =  {NULL, NULL, NULL, NULL, NULL};
 
-static void log_writer(int level, const char *buf, int len)
+static void log_writer (int level, const char *buf, int len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG(level);
-    
+    PJ_UNUSED_ARG (level);
+
     if (!g_cb.on_info)
-	return;
+        return;
 
-    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
-    g_cb.on_info(buf16);
+    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
+    g_cb.on_info (buf16);
 }
 
-static void on_reg_state(pjsua_acc_id acc_id)
+static void on_reg_state (pjsua_acc_id acc_id)
 {
     pjsua_acc_info acc_info;
     pj_status_t status;
 
-    status = pjsua_acc_get_info(acc_id, &acc_info);
+    status = pjsua_acc_get_info (acc_id, &acc_info);
+
     if (status != PJ_SUCCESS)
-	return;
+        return;
 
     if (acc_info.status == 200) {
-	if (acc_info.expires) {
-	    PJ_LOG(3,(THIS_FILE, "Registration success!"));
-	    if (g_cb.on_reg_state) g_cb.on_reg_state(true);
-	} else {
-	    PJ_LOG(3,(THIS_FILE, "Unregistration success!"));
-	    if (g_cb.on_unreg_state) g_cb.on_unreg_state(true);
-	}
+        if (acc_info.expires) {
+            PJ_LOG (3, (THIS_FILE, "Registration success!"));
+
+            if (g_cb.on_reg_state) g_cb.on_reg_state (true);
+        } else {
+            PJ_LOG (3, (THIS_FILE, "Unregistration success!"));
+
+            if (g_cb.on_unreg_state) g_cb.on_unreg_state (true);
+        }
     } else {
-	if (acc_info.expires) {
-	    PJ_LOG(3,(THIS_FILE, "Registration failed!"));
-	    if (g_cb.on_reg_state) g_cb.on_reg_state(false);
-	} else {
-	    PJ_LOG(3,(THIS_FILE, "Unregistration failed!"));
-	    if (g_cb.on_unreg_state) g_cb.on_unreg_state(false);
-	}
+        if (acc_info.expires) {
+            PJ_LOG (3, (THIS_FILE, "Registration failed!"));
+
+            if (g_cb.on_reg_state) g_cb.on_reg_state (false);
+        } else {
+            PJ_LOG (3, (THIS_FILE, "Unregistration failed!"));
+
+            if (g_cb.on_unreg_state) g_cb.on_unreg_state (false);
+        }
     }
 }
 
 /* Callback called by the library upon receiving incoming call */
-static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id,
-			     pjsip_rx_data *rdata)
+static void on_incoming_call (pjsua_acc_id acc_id, pjsua_call_id call_id,
+                              pjsip_rx_data *rdata)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG(acc_id);
-    PJ_UNUSED_ARG(rdata);
+    PJ_UNUSED_ARG (acc_id);
+    PJ_UNUSED_ARG (rdata);
 
     if (g_call_id != PJSUA_INVALID_ID) {
-    	pjsua_call_answer(call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
-    	return;
+        pjsua_call_answer (call_id, PJSIP_SC_BUSY_HERE, NULL, NULL);
+        return;
     }
-    
-    pjsua_call_get_info(call_id, &ci);
 
-    PJ_LOG(3,(THIS_FILE, "Incoming call from %.*s!!",
-			 (int)ci.remote_info.slen,
-			 ci.remote_info.ptr));
+    pjsua_call_get_info (call_id, &ci);
+
+    PJ_LOG (3, (THIS_FILE, "Incoming call from %.*s!!",
+                (int) ci.remote_info.slen,
+                ci.remote_info.ptr));
 
     g_call_id = call_id;
-    
+
     /* Automatically answer incoming calls with 180/Ringing */
-    pjsua_call_answer(call_id, 180, NULL, NULL);
+    pjsua_call_answer (call_id, 180, NULL, NULL);
 
     if (g_cb.on_incoming_call) {
-	static wchar_t disp[256];
-	static wchar_t uri[PJSIP_MAX_URL_SIZE];
+        static wchar_t disp[256];
+        static wchar_t uri[PJSIP_MAX_URL_SIZE];
 
-	pj_ansi_to_unicode(ci.remote_info.ptr, ci.remote_info.slen, 
-	    disp, PJ_ARRAY_SIZE(disp));
-	pj_ansi_to_unicode(ci.remote_contact.ptr, ci.remote_contact.slen, 
-	    uri, PJ_ARRAY_SIZE(uri));
+        pj_ansi_to_unicode (ci.remote_info.ptr, ci.remote_info.slen,
+                            disp, PJ_ARRAY_SIZE (disp));
+        pj_ansi_to_unicode (ci.remote_contact.ptr, ci.remote_contact.slen,
+                            uri, PJ_ARRAY_SIZE (uri));
 
-	g_cb.on_incoming_call(disp, uri);
+        g_cb.on_incoming_call (disp, uri);
     }
 }
 
 /* Callback called by the library when call's state has changed */
-static void on_call_state(pjsua_call_id call_id, pjsip_event *e)
+static void on_call_state (pjsua_call_id call_id, pjsip_event *e)
 {
     pjsua_call_info ci;
 
-    PJ_UNUSED_ARG(e);
+    PJ_UNUSED_ARG (e);
+
+    pjsua_call_get_info (call_id, &ci);
 
-    pjsua_call_get_info(call_id, &ci);
-    
     if (ci.state == PJSIP_INV_STATE_DISCONNECTED) {
-    	if (call_id == g_call_id)
-    	    g_call_id = PJSUA_INVALID_ID;
-	if (g_cb.on_call_end) {
-	    static wchar_t reason[256];
-	    pj_ansi_to_unicode(ci.last_status_text.ptr, ci.last_status_text.slen, 
-		    reason, PJ_ARRAY_SIZE(reason));
-	    g_cb.on_call_end(reason);
-	}
+        if (call_id == g_call_id)
+            g_call_id = PJSUA_INVALID_ID;
+
+        if (g_cb.on_call_end) {
+            static wchar_t reason[256];
+            pj_ansi_to_unicode (ci.last_status_text.ptr, ci.last_status_text.slen,
+                                reason, PJ_ARRAY_SIZE (reason));
+            g_cb.on_call_end (reason);
+        }
 
     } else if (ci.state != PJSIP_INV_STATE_INCOMING) {
-    	if (g_call_id == PJSUA_INVALID_ID)
-    	    g_call_id = call_id;
+        if (g_call_id == PJSUA_INVALID_ID)
+            g_call_id = call_id;
     }
-    
-    PJ_LOG(3,(THIS_FILE, "Call %d state=%.*s", call_id,
-			 (int)ci.state_text.slen,
-			 ci.state_text.ptr));
+
+    PJ_LOG (3, (THIS_FILE, "Call %d state=%.*s", call_id,
+                (int) ci.state_text.slen,
+                ci.state_text.ptr));
 }
 
 /* Callback called by the library when call's media state has changed */
-static void on_call_media_state(pjsua_call_id call_id)
+static void on_call_media_state (pjsua_call_id call_id)
 {
     pjsua_call_info ci;
 
-    pjsua_call_get_info(call_id, &ci);
+    pjsua_call_get_info (call_id, &ci);
 
     if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
-	// When media is active, connect call to sound device.
-	pjsua_conf_connect(ci.conf_slot, 0);
-	pjsua_conf_connect(0, ci.conf_slot);
+        // When media is active, connect call to sound device.
+        pjsua_conf_connect (ci.conf_slot, 0);
+        pjsua_conf_connect (0, ci.conf_slot);
     }
 }
 
 
 /* Handler on buddy state changed. */
-static void on_buddy_state(pjsua_buddy_id buddy_id)
+static void on_buddy_state (pjsua_buddy_id buddy_id)
 {
     pjsua_buddy_info info;
-    pjsua_buddy_get_info(buddy_id, &info);
+    pjsua_buddy_get_info (buddy_id, &info);
 
-    PJ_LOG(3,(THIS_FILE, "%.*s status is %.*s",
-	      (int)info.uri.slen,
-	      info.uri.ptr,
-	      (int)info.status_text.slen,
-	      info.status_text.ptr));
+    PJ_LOG (3, (THIS_FILE, "%.*s status is %.*s",
+                (int) info.uri.slen,
+                info.uri.ptr,
+                (int) info.status_text.slen,
+                info.status_text.ptr));
 }
 
 
 /* Incoming IM message (i.e. MESSAGE request)!  */
-static void on_pager(pjsua_call_id call_id, const pj_str_t *from, 
-		     const pj_str_t *to, const pj_str_t *contact,
-		     const pj_str_t *mime_type, const pj_str_t *text)
+static void on_pager (pjsua_call_id call_id, const pj_str_t *from,
+                      const pj_str_t *to, const pj_str_t *contact,
+                      const pj_str_t *mime_type, const pj_str_t *text)
 {
     /* Note: call index may be -1 */
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
-    PJ_UNUSED_ARG(mime_type);
-
-    PJ_LOG(3,(THIS_FILE,"MESSAGE from %.*s: %.*s",
-	      (int)from->slen, from->ptr,
-	      (int)text->slen, text->ptr));
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
+    PJ_UNUSED_ARG (mime_type);
+
+    PJ_LOG (3, (THIS_FILE,"MESSAGE from %.*s: %.*s",
+                (int) from->slen, from->ptr,
+                (int) text->slen, text->ptr));
 }
 
 
 /* Received typing indication  */
-static void on_typing(pjsua_call_id call_id, const pj_str_t *from,
-		      const pj_str_t *to, const pj_str_t *contact,
-		      pj_bool_t is_typing)
+static void on_typing (pjsua_call_id call_id, const pj_str_t *from,
+                       const pj_str_t *to, const pj_str_t *contact,
+                       pj_bool_t is_typing)
 {
-    PJ_UNUSED_ARG(call_id);
-    PJ_UNUSED_ARG(to);
-    PJ_UNUSED_ARG(contact);
+    PJ_UNUSED_ARG (call_id);
+    PJ_UNUSED_ARG (to);
+    PJ_UNUSED_ARG (contact);
 
-    PJ_LOG(3,(THIS_FILE, "IM indication: %.*s %s",
-	      (int)from->slen, from->ptr,
-	      (is_typing?"is typing..":"has stopped typing")));
+    PJ_LOG (3, (THIS_FILE, "IM indication: %.*s %s",
+                (int) from->slen, from->ptr,
+                (is_typing?"is typing..":"has stopped typing")));
 }
 
 
 /* Call transfer request status. */
-static void on_call_transfer_status(pjsua_call_id call_id,
-				    int status_code,
-				    const pj_str_t *status_text,
-				    pj_bool_t final,
-				    pj_bool_t *p_cont)
+static void on_call_transfer_status (pjsua_call_id call_id,
+                                     int status_code,
+                                     const pj_str_t *status_text,
+                                     pj_bool_t final,
+                                     pj_bool_t *p_cont)
 {
-    PJ_LOG(3,(THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
-	      call_id, status_code,
-	      (int)status_text->slen, status_text->ptr,
-	      (final ? "[final]" : "")));
+    PJ_LOG (3, (THIS_FILE, "Call %d: transfer status=%d (%.*s) %s",
+                call_id, status_code,
+                (int) status_text->slen, status_text->ptr,
+                (final ? "[final]" : "")));
 
     if (status_code/100 == 2) {
-	PJ_LOG(3,(THIS_FILE, 
-	          "Call %d: call transfered successfully, disconnecting call",
-		  call_id));
-	pjsua_call_hangup(call_id, PJSIP_SC_GONE, NULL, NULL);
-	*p_cont = PJ_FALSE;
+        PJ_LOG (3, (THIS_FILE,
+                    "Call %d: call transfered successfully, disconnecting call",
+                    call_id));
+        pjsua_call_hangup (call_id, PJSIP_SC_GONE, NULL, NULL);
+        *p_cont = PJ_FALSE;
     }
 }
 
 
 /* NAT detection result */
-static void on_nat_detect(const pj_stun_nat_detect_result *res) 
+static void on_nat_detect (const pj_stun_nat_detect_result *res)
 {
     if (res->status != PJ_SUCCESS) {
-	pjsua_perror(THIS_FILE, "NAT detection failed", res->status);
+        pjsua_perror (THIS_FILE, "NAT detection failed", res->status);
     } else {
-	PJ_LOG(3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
-    }    
+        PJ_LOG (3, (THIS_FILE, "NAT detected as %s", res->nat_type_name));
+    }
 }
 
 /* Notification that call is being replaced. */
-static void on_call_replaced(pjsua_call_id old_call_id,
-			     pjsua_call_id new_call_id)
+static void on_call_replaced (pjsua_call_id old_call_id,
+                              pjsua_call_id new_call_id)
 {
     pjsua_call_info old_ci, new_ci;
 
-    pjsua_call_get_info(old_call_id, &old_ci);
-    pjsua_call_get_info(new_call_id, &new_ci);
+    pjsua_call_get_info (old_call_id, &old_ci);
+    pjsua_call_get_info (new_call_id, &new_ci);
 
-    PJ_LOG(3,(THIS_FILE, "Call %d with %.*s is being replaced by "
-			 "call %d with %.*s",
-			 old_call_id, 
-			 (int)old_ci.remote_info.slen, old_ci.remote_info.ptr,
-			 new_call_id,
-			 (int)new_ci.remote_info.slen, new_ci.remote_info.ptr));
+    PJ_LOG (3, (THIS_FILE, "Call %d with %.*s is being replaced by "
+                "call %d with %.*s",
+                old_call_id,
+                (int) old_ci.remote_info.slen, old_ci.remote_info.ptr,
+                new_call_id,
+                (int) new_ci.remote_info.slen, new_ci.remote_info.ptr));
 }
 
 int symbian_ua_init()
@@ -261,47 +267,48 @@ int symbian_ua_init()
     TInt err;
     pj_symbianos_params sym_params;
     pj_status_t status;
-    
+
     // Initialize RSocketServ
-    if ((err=aSocketServer.Connect()) != KErrNone)
-    	return PJ_STATUS_FROM_OS(err);
-    
+    if ( (err=aSocketServer.Connect()) != KErrNone)
+        return PJ_STATUS_FROM_OS (err);
+
     // Open up a connection
-    if ((err=aConn.Open(aSocketServer)) != KErrNone) {
-	    aSocketServer.Close();
-		return PJ_STATUS_FROM_OS(err);
+    if ( (err=aConn.Open (aSocketServer)) != KErrNone) {
+        aSocketServer.Close();
+        return PJ_STATUS_FROM_OS (err);
     }
-    
-    if ((err=aConn.Start()) != KErrNone) {
-	aConn.Close();
-    	aSocketServer.Close();
-    	return PJ_STATUS_FROM_OS(err);
+
+    if ( (err=aConn.Start()) != KErrNone) {
+        aConn.Close();
+        aSocketServer.Close();
+        return PJ_STATUS_FROM_OS (err);
     }
-    
+
     // Set Symbian OS parameters in pjlib.
     // This must be done before pj_init() is called.
-    pj_bzero(&sym_params, sizeof(sym_params));
+    pj_bzero (&sym_params, sizeof (sym_params));
     sym_params.rsocketserv = &aSocketServer;
     sym_params.rconnection = &aConn;
-    pj_symbianos_set_params(&sym_params);
+    pj_symbianos_set_params (&sym_params);
 
     /* Redirect log before pjsua_init() */
-    pj_log_set_log_func(&log_writer);
-    
+    pj_log_set_log_func (&log_writer);
+
     /* Set log level */
-    pj_log_set_level(LOG_LEVEL);
+    pj_log_set_level (LOG_LEVEL);
 
     /* Create pjsua first! */
     status = pjsua_create();
+
     if (status != PJ_SUCCESS) {
-    	pjsua_perror(THIS_FILE, "pjsua_create() error", status);
-    	return status;
+        pjsua_perror (THIS_FILE, "pjsua_create() error", status);
+        return status;
     }
 
     /* Init pjsua */
     pjsua_config cfg;
 
-    pjsua_config_default(&cfg);
+    pjsua_config_default (&cfg);
     cfg.max_calls = 2;
     cfg.thread_cnt = 0; // Disable threading on Symbian
     cfg.use_srtp = USE_SRTP;
@@ -320,7 +327,7 @@ int symbian_ua_init()
 
     pjsua_media_config med_cfg;
 
-    pjsua_media_config_default(&med_cfg);
+    pjsua_media_config_default (&med_cfg);
     med_cfg.thread_cnt = 0; // Disable threading on Symbian
     med_cfg.has_ioqueue = PJ_FALSE;
     med_cfg.clock_rate = 8000;
@@ -335,58 +342,61 @@ int symbian_ua_init()
 
     pjsua_logging_config log_cfg;
 
-    pjsua_logging_config_default(&log_cfg);
+    pjsua_logging_config_default (&log_cfg);
     log_cfg.console_level = LOG_LEVEL;
     log_cfg.cb = &log_writer;
     log_cfg.decor = 0;
 
-    status = pjsua_init(&cfg, &log_cfg, &med_cfg);
+    status = pjsua_init (&cfg, &log_cfg, &med_cfg);
+
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "pjsua_init() error", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "pjsua_init() error", status);
+        pjsua_destroy();
+        return status;
     }
 
     /* Add UDP transport. */
     pjsua_transport_config tcfg;
     pjsua_transport_id tid;
 
-    pjsua_transport_config_default(&tcfg);
+    pjsua_transport_config_default (&tcfg);
     tcfg.port = SIP_PORT;
-    status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &tcfg, &tid);
+    status = pjsua_transport_create (PJSIP_TRANSPORT_UDP, &tcfg, &tid);
+
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "Error creating transport", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "Error creating transport", status);
+        pjsua_destroy();
+        return status;
     }
 
     /* Add account for the transport */
-    pjsua_acc_add_local(tid, PJ_TRUE, &g_acc_id);
+    pjsua_acc_add_local (tid, PJ_TRUE, &g_acc_id);
 
     /* Initialization is done, now start pjsua */
     status = pjsua_start();
+
     if (status != PJ_SUCCESS) {
-    	pjsua_perror(THIS_FILE, "Error starting pjsua", status);
-    	pjsua_destroy();
-    	return status;
+        pjsua_perror (THIS_FILE, "Error starting pjsua", status);
+        pjsua_destroy();
+        return status;
     }
 
     /* Adjust Speex priority and enable only the narrowband */
     {
-        pj_str_t codec_id = pj_str("speex/8000");
-        pjmedia_codec_mgr_set_codec_priority( 
-        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
-        	&codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
-
-        codec_id = pj_str("speex/16000");
-        pjmedia_codec_mgr_set_codec_priority( 
-        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
-        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
-
-        codec_id = pj_str("speex/32000");
-        pjmedia_codec_mgr_set_codec_priority( 
-        	pjmedia_endpt_get_codec_mgr(pjsua_var.med_endpt),
-        	&codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+        pj_str_t codec_id = pj_str ("speex/8000");
+        pjmedia_codec_mgr_set_codec_priority (
+            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
+            &codec_id, PJMEDIA_CODEC_PRIO_NORMAL+1);
+
+        codec_id = pj_str ("speex/16000");
+        pjmedia_codec_mgr_set_codec_priority (
+            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
+            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
+
+        codec_id = pj_str ("speex/32000");
+        pjmedia_codec_mgr_set_codec_priority (
+            pjmedia_endpt_get_codec_mgr (pjsua_var.med_endpt),
+            &codec_id, PJMEDIA_CODEC_PRIO_DISABLED);
     }
 
     return PJ_SUCCESS;
@@ -397,97 +407,102 @@ int symbian_ua_destroy()
 {
     // Shutdown pjsua
     pjsua_destroy();
-    
+
     // Close connection and socket server
     aConn.Close();
     aSocketServer.Close();
-    
+
     CloseSTDLIB();
 
     return PJ_SUCCESS;
 }
 
-void symbian_ua_set_info_callback(const symbian_ua_info_cb_t *cb)
+void symbian_ua_set_info_callback (const symbian_ua_info_cb_t *cb)
 {
     if (cb)
-	g_cb = *cb;
+        g_cb = *cb;
     else
-	pj_bzero(&g_cb, sizeof(g_cb));
+        pj_bzero (&g_cb, sizeof (g_cb));
 }
 
-int symbian_ua_set_account(const char *domain, const char *username, 
-			   const char *password,
-			   bool use_srtp, bool use_ice)
+int symbian_ua_set_account (const char *domain, const char *username,
+                            const char *password,
+                            bool use_srtp, bool use_ice)
 {
     pj_status_t status;
 
-    PJ_ASSERT_RETURN(username && password && domain, PJ_EINVAL);
-    PJ_UNUSED_ARG(use_srtp);
-    PJ_UNUSED_ARG(use_ice);
+    PJ_ASSERT_RETURN (username && password && domain, PJ_EINVAL);
+    PJ_UNUSED_ARG (use_srtp);
+    PJ_UNUSED_ARG (use_ice);
 
     if (domain[0] == 0) {
-	    pjsua_acc_info acc_info;
-	    pj_status_t status;
-
-	    status = pjsua_acc_get_info(g_acc_id, &acc_info);
-	    if (status != PJ_SUCCESS)
-		return status;
-
-	    if (acc_info.status == 200) {
-			PJ_LOG(3,(THIS_FILE, "Unregistering.."));
-			pjsua_acc_set_registration(g_acc_id, PJ_FALSE);
-			g_acc_id = 0;
-	    }
-	    return PJ_SUCCESS;
+        pjsua_acc_info acc_info;
+        pj_status_t status;
+
+        status = pjsua_acc_get_info (g_acc_id, &acc_info);
+
+        if (status != PJ_SUCCESS)
+            return status;
+
+        if (acc_info.status == 200) {
+            PJ_LOG (3, (THIS_FILE, "Unregistering.."));
+            pjsua_acc_set_registration (g_acc_id, PJ_FALSE);
+            g_acc_id = 0;
+        }
+
+        return PJ_SUCCESS;
     }
 
     if (pjsua_acc_get_count() > 1) {
-	status = pjsua_acc_del(g_acc_id);
-	if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "Error removing account", status);
-	    return status;
-	}
-	g_acc_id = 0;
+        status = pjsua_acc_del (g_acc_id);
+
+        if (status != PJ_SUCCESS) {
+            pjsua_perror (THIS_FILE, "Error removing account", status);
+            return status;
+        }
+
+        g_acc_id = 0;
     }
 
     pjsua_acc_config cfg;
     char tmp_id[PJSIP_MAX_URL_SIZE];
     char tmp_reg_uri[PJSIP_MAX_URL_SIZE];
 
-    if (!pj_ansi_strnicmp(domain, "sip:", 4)) {
-	domain += 4;
+    if (!pj_ansi_strnicmp (domain, "sip:", 4)) {
+        domain += 4;
     }
 
-    pjsua_acc_config_default(&cfg);
-    pj_ansi_sprintf(tmp_id, "sip:%s@%s", username, domain);
-    cfg.id = pj_str(tmp_id);
-    pj_ansi_sprintf(tmp_reg_uri, "sip:%s", domain);
-    cfg.reg_uri = pj_str(tmp_reg_uri);
+    pjsua_acc_config_default (&cfg);
+    pj_ansi_sprintf (tmp_id, "sip:%s@%s", username, domain);
+    cfg.id = pj_str (tmp_id);
+    pj_ansi_sprintf (tmp_reg_uri, "sip:%s", domain);
+    cfg.reg_uri = pj_str (tmp_reg_uri);
     cfg.cred_count = 1;
-    cfg.cred_info[0].realm = pj_str("*");
-    cfg.cred_info[0].scheme = pj_str("digest");
-    cfg.cred_info[0].username = pj_str((char*)username);
+    cfg.cred_info[0].realm = pj_str ("*");
+    cfg.cred_info[0].scheme = pj_str ("digest");
+    cfg.cred_info[0].username = pj_str ( (char*) username);
     cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
-    cfg.cred_info[0].data = pj_str((char*)password);
+    cfg.cred_info[0].data = pj_str ( (char*) password);
+
+    status = pjsua_acc_add (&cfg, PJ_TRUE, &g_acc_id);
 
-    status = pjsua_acc_add(&cfg, PJ_TRUE, &g_acc_id);
     if (status != PJ_SUCCESS) {
-	    pjsua_perror(THIS_FILE, "Error setting account", status);
-	    pjsua_destroy();
-	    return status;
+        pjsua_perror (THIS_FILE, "Error setting account", status);
+        pjsua_destroy();
+        return status;
     }
 
     return PJ_SUCCESS;
 }
 
-int symbian_ua_makecall(const char* dest_url)
+int symbian_ua_makecall (const char* dest_url)
 {
-    if (pjsua_verify_sip_url(dest_url) == PJ_SUCCESS) {
-	    pj_str_t dst = pj_str((char*)dest_url);
-	    pjsua_call_make_call(g_acc_id, &dst, 0, NULL,
-				 NULL, &g_call_id);
+    if (pjsua_verify_sip_url (dest_url) == PJ_SUCCESS) {
+        pj_str_t dst = pj_str ( (char*) dest_url);
+        pjsua_call_make_call (g_acc_id, &dst, 0, NULL,
+                              NULL, &g_call_id);
 
-	    return PJ_SUCCESS;
+        return PJ_SUCCESS;
     }
 
     return PJ_EINVAL;
@@ -502,13 +517,13 @@ int symbian_ua_endcall()
 
 bool symbian_ua_anycall()
 {
-    return (pjsua_call_get_count()>0);
+    return (pjsua_call_get_count() >0);
 }
 
 int symbian_ua_answercall()
 {
     PJ_ASSERT_RETURN (g_call_id != PJSUA_INVALID_ID, PJ_EINVAL);
 
-    return pjsua_call_answer(g_call_id, 200, NULL, NULL);
+    return pjsua_call_answer (g_call_id, 200, NULL, NULL);
 }
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
index ac399510b2bb98b03fe0b34dbf21a021b4be41ec..af9e5f0573cac51108b9e7c337e1cf1059445fe4 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiAppUi.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiAppUi.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -29,167 +29,166 @@
 
 /**
  * Construct the Csymbian_ua_guiAppUi instance
- */ 
-Csymbian_ua_guiAppUi::Csymbian_ua_guiAppUi() : CTimer(0)
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
+ */
+Csymbian_ua_guiAppUi::Csymbian_ua_guiAppUi() : CTimer (0)
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
 
-	}
+}
 
-/** 
+/**
  * The appui's destructor removes the container from the control
  * stack and destroys it.
  */
 Csymbian_ua_guiAppUi::~Csymbian_ua_guiAppUi()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	TRAPD( err_Dlg_wait_init, RemoveDlg_wait_initL() );
-	// ]]] end generated region [Generated Contents]
-	}
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    TRAPD (err_Dlg_wait_init, RemoveDlg_wait_initL());
+    // ]]] end generated region [Generated Contents]
+}
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiAppUi::InitializeContainersL()
-	{
-	iSymbian_ua_guiContainerView = Csymbian_ua_guiContainerView::NewL();
-	AddViewL( iSymbian_ua_guiContainerView );
-	iSymbian_ua_guiSettingItemListView = Csymbian_ua_guiSettingItemListView::NewL();
-	AddViewL( iSymbian_ua_guiSettingItemListView );
-	SetDefaultViewL( *iSymbian_ua_guiSettingItemListView );
-	}
+{
+    iSymbian_ua_guiContainerView = Csymbian_ua_guiContainerView::NewL();
+    AddViewL (iSymbian_ua_guiContainerView);
+    iSymbian_ua_guiSettingItemListView = Csymbian_ua_guiSettingItemListView::NewL();
+    AddViewL (iSymbian_ua_guiSettingItemListView);
+    SetDefaultViewL (*iSymbian_ua_guiSettingItemListView);
+}
 // ]]] end generated function
 
 /**
  * Handle a command for this appui (override)
  * @param aCommand command id to be handled
  */
-void Csymbian_ua_guiAppUi::HandleCommandL( TInt aCommand )
-	{
-	// [[[ begin generated region: do not modify [Generated Code]
-	TBool commandHandled = EFalse;
-	switch ( aCommand )
-		{ // code to dispatch to the AppUi's menu and CBA commands is generated here
-		default:
-			break;
-		}
-	
-		
-	if ( !commandHandled ) 
-		{
-		if ( aCommand == EAknSoftkeyExit || aCommand == EEikCmdExit )
-			{
-		    	symbian_ua_destroy();
-			Exit();
-			}
-		}
-	// ]]] end generated region [Generated Code]
-	
-	}
-
-/** 
+void Csymbian_ua_guiAppUi::HandleCommandL (TInt aCommand)
+{
+    // [[[ begin generated region: do not modify [Generated Code]
+    TBool commandHandled = EFalse;
+
+    switch (aCommand) { // code to dispatch to the AppUi's menu and CBA commands is generated here
+        default:
+            break;
+    }
+
+
+    if (!commandHandled) {
+        if (aCommand == EAknSoftkeyExit || aCommand == EEikCmdExit) {
+            symbian_ua_destroy();
+            Exit();
+        }
+    }
+
+    // ]]] end generated region [Generated Code]
+
+}
+
+/**
  * Override of the HandleResourceChangeL virtual function
  */
-void Csymbian_ua_guiAppUi::HandleResourceChangeL( TInt aType )
-	{
-	CAknViewAppUi::HandleResourceChangeL( aType );
-	// [[[ begin generated region: do not modify [Generated Code]
-	// ]]] end generated region [Generated Code]
-	
-	}
-				
-/** 
+void Csymbian_ua_guiAppUi::HandleResourceChangeL (TInt aType)
+{
+    CAknViewAppUi::HandleResourceChangeL (aType);
+    // [[[ begin generated region: do not modify [Generated Code]
+    // ]]] end generated region [Generated Code]
+
+}
+
+/**
  * Override of the HandleKeyEventL virtual function
  * @return EKeyWasConsumed if event was handled, EKeyWasNotConsumed if not
- * @param aKeyEvent 
- * @param aType 
+ * @param aKeyEvent
+ * @param aType
  */
-TKeyResponse Csymbian_ua_guiAppUi::HandleKeyEventL(
-		const TKeyEvent& aKeyEvent,
-		TEventCode aType )
-	{
-	// The inherited HandleKeyEventL is private and cannot be called
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	return EKeyWasNotConsumed;
-	}
-
-/** 
+TKeyResponse Csymbian_ua_guiAppUi::HandleKeyEventL (
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType)
+{
+    // The inherited HandleKeyEventL is private and cannot be called
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+    return EKeyWasNotConsumed;
+}
+
+/**
  * Override of the HandleViewDeactivation virtual function
  *
- * @param aViewIdToBeDeactivated 
- * @param aNewlyActivatedViewId 
+ * @param aViewIdToBeDeactivated
+ * @param aNewlyActivatedViewId
  */
-void Csymbian_ua_guiAppUi::HandleViewDeactivation( 
-		const TVwsViewId& aViewIdToBeDeactivated, 
-		const TVwsViewId& aNewlyActivatedViewId )
-	{
-	CAknViewAppUi::HandleViewDeactivation( 
-			aViewIdToBeDeactivated, 
-			aNewlyActivatedViewId );
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
+void Csymbian_ua_guiAppUi::HandleViewDeactivation (
+    const TVwsViewId& aViewIdToBeDeactivated,
+    const TVwsViewId& aNewlyActivatedViewId)
+{
+    CAknViewAppUi::HandleViewDeactivation (
+        aViewIdToBeDeactivated,
+        aNewlyActivatedViewId);
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
 
 /**
- * @brief Completes the second phase of Symbian object construction. 
- * Put initialization code that could leave here. 
- */ 
+ * @brief Completes the second phase of Symbian object construction.
+ * Put initialization code that could leave here.
+ */
 void Csymbian_ua_guiAppUi::ConstructL()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	BaseConstructL( EAknEnableSkin );
-	InitializeContainersL();
-	// ]]] end generated region [Generated Contents]
-
-	// Create private folder
-	RProcess process;
-	TFileName path;
-	
-	path.Copy( process.FileName().Left(2) );
-	
-	if(path.Compare(_L("c")) || path.Compare(_L("C")))
-		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveC);
-	else if(path.Compare(_L("e")) || path.Compare(_L("E")))
-		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveE);	
-	
-	// Init PJSUA
-	if (symbian_ua_init() != 0) {
-	    symbian_ua_destroy();
-	    Exit();
-	}
-	
-	ExecuteDlg_wait_initLD();
-
-	CTimer::ConstructL();
-	CActiveScheduler::Add( this );
-	After(4000000);
-	}
-
-/** 
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    BaseConstructL (EAknEnableSkin);
+    InitializeContainersL();
+    // ]]] end generated region [Generated Contents]
+
+    // Create private folder
+    RProcess process;
+    TFileName path;
+
+    path.Copy (process.FileName().Left (2));
+
+    if (path.Compare (_L ("c")) || path.Compare (_L ("C")))
+        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveC);
+    else if (path.Compare (_L ("e")) || path.Compare (_L ("E")))
+        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveE);
+
+    // Init PJSUA
+    if (symbian_ua_init() != 0) {
+        symbian_ua_destroy();
+        Exit();
+    }
+
+    ExecuteDlg_wait_initLD();
+
+    CTimer::ConstructL();
+    CActiveScheduler::Add (this);
+    After (4000000);
+}
+
+/**
  * Override of the HandleApplicationSpecificEventL virtual function
  */
-void Csymbian_ua_guiAppUi::HandleApplicationSpecificEventL( 
-		TInt aType, 
-		const TWsEvent& anEvent )
-	{
-	CAknViewAppUi::HandleApplicationSpecificEventL( aType, anEvent );
-	// [[[ begin generated region: do not modify [Generated Code]
-	// ]]] end generated region [Generated Code]
-	
-	}
-				
-/** 
+void Csymbian_ua_guiAppUi::HandleApplicationSpecificEventL (
+    TInt aType,
+    const TWsEvent& anEvent)
+{
+    CAknViewAppUi::HandleApplicationSpecificEventL (aType, anEvent);
+    // [[[ begin generated region: do not modify [Generated Code]
+    // ]]] end generated region [Generated Code]
+
+}
+
+/**
  * Handle the applicationSpecificEvent event.
  */
-void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL( 
-		TInt /* aType */, 
-		const TWsEvent& /* anEvent */ )
-	{
-	// TODO: implement applicationSpecificEvent event handler
-	}
-				
+void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL (
+    TInt /* aType */,
+    const TWsEvent& /* anEvent */)
+{
+    // TODO: implement applicationSpecificEvent event handler
+}
+
 // [[[ begin generated function: do not modify
 /**
  * Execute the wait dialog for dlg_wait_init. This routine returns
@@ -198,19 +197,20 @@ void Csymbian_ua_guiAppUi::HandleSymbian_ua_guiAppUiApplicationSpecificEventL(
  * @param aOverrideText optional override text. When null the text configured
  * in the UI Designer is used.
  */
-void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD( const TDesC* aOverrideText )
-	{
-	iDlg_wait_init = new ( ELeave ) CAknWaitDialog( 
-			reinterpret_cast< CEikDialog** >( &iDlg_wait_init ), EFalse );
-	if ( aOverrideText != NULL )
-		{
-		iDlg_wait_init->SetTextL( *aOverrideText );
-		}
-	iDlg_wait_init->ExecuteLD( R_APPLICATION_DLG_WAIT_INIT );
-	iDlg_wait_initCallback = new ( ELeave ) CProgressDialogCallback( 
-		this, iDlg_wait_init, &Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL );
-	iDlg_wait_init->SetCallback( iDlg_wait_initCallback );
-	}
+void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD (const TDesC* aOverrideText)
+{
+    iDlg_wait_init = new (ELeave) CAknWaitDialog (
+        reinterpret_cast< CEikDialog** > (&iDlg_wait_init), EFalse);
+
+    if (aOverrideText != NULL) {
+        iDlg_wait_init->SetTextL (*aOverrideText);
+    }
+
+    iDlg_wait_init->ExecuteLD (R_APPLICATION_DLG_WAIT_INIT);
+    iDlg_wait_initCallback = new (ELeave) CProgressDialogCallback (
+        this, iDlg_wait_init, &Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL);
+    iDlg_wait_init->SetCallback (iDlg_wait_initCallback);
+}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -218,30 +218,30 @@ void Csymbian_ua_guiAppUi::ExecuteDlg_wait_initLD( const TDesC* aOverrideText )
  * Close and dispose of the wait dialog for dlg_wait_init
  */
 void Csymbian_ua_guiAppUi::RemoveDlg_wait_initL()
-	{
-	if ( iDlg_wait_init != NULL )
-		{
-		iDlg_wait_init->SetCallback( NULL );
-		iDlg_wait_init->ProcessFinishedL();    // deletes the dialog
-		iDlg_wait_init = NULL;
-		}
-	delete iDlg_wait_initCallback;
-	iDlg_wait_initCallback = NULL;
-	
-	}
+{
+    if (iDlg_wait_init != NULL) {
+        iDlg_wait_init->SetCallback (NULL);
+        iDlg_wait_init->ProcessFinishedL();    // deletes the dialog
+        iDlg_wait_init = NULL;
+    }
+
+    delete iDlg_wait_initCallback;
+    iDlg_wait_initCallback = NULL;
+
+}
 // ]]] end generated function
 
-/** 
+/**
  * Handle the canceled event.
  */
-void Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL( CAknProgressDialog* /* aDialog */ )
-	{
-	// TODO: implement canceled event handler
-	
-	}
-				
+void Csymbian_ua_guiAppUi::HandleDlg_wait_initCanceledL (CAknProgressDialog* /* aDialog */)
+{
+    // TODO: implement canceled event handler
+
+}
+
 void Csymbian_ua_guiAppUi::RunL()
-	{
-	RemoveDlg_wait_initL();
-	iSymbian_ua_guiSettingItemListView->HandleCommandL(EAknSoftkeySave);
-	}
+{
+    RemoveDlg_wait_initL();
+    iSymbian_ua_guiSettingItemListView->HandleCommandL (EAknSoftkeySave);
+}
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
index dc60fecd64d1cab99afdbb61aa15b9f49921935b..d32c672d6c7e08becc4bab7c0a2fe005a0d5948a 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiApplication.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiApplication.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -19,50 +19,50 @@
 
 
 // Needed by APS
-TPtrC APP_UID = _L("EBD12EE4");
+TPtrC APP_UID = _L ("EBD12EE4");
 
 /**
  * @brief Returns the application's UID (override from CApaApplication::AppDllUid())
  * @return UID for this application (KUidsymbian_ua_guiApplication)
  */
 TUid Csymbian_ua_guiApplication::AppDllUid() const
-	{
-	return KUidsymbian_ua_guiApplication;
-	}
+{
+    return KUidsymbian_ua_guiApplication;
+}
 
 /**
  * @brief Creates the application's document (override from CApaApplication::CreateDocumentL())
  * @return Pointer to the created document object (Csymbian_ua_guiDocument)
  */
 CApaDocument* Csymbian_ua_guiApplication::CreateDocumentL()
-	{
-	return Csymbian_ua_guiDocument::NewL( *this );
-	}
+{
+    return Csymbian_ua_guiDocument::NewL (*this);
+}
 
 #ifdef EKA2
 
 /**
  *	@brief Called by the application framework to construct the application object
  *  @return The application (Csymbian_ua_guiApplication)
- */	
+ */
 LOCAL_C CApaApplication* NewApplication()
-	{
-	return new Csymbian_ua_guiApplication;
-	}
+{
+    return new Csymbian_ua_guiApplication;
+}
 
 /**
 * @brief This standard export is the entry point for all Series 60 applications
 * @return error code
- */	
+ */
 GLDEF_C TInt E32Main()
-	{
-	TInt err;
-	
-	err = EikStart::RunApplication( NewApplication );
+{
+    TInt err;
+
+    err = EikStart::RunApplication (NewApplication);
+
+    return err;
+}
 
-	return err;
-	}
-	
 #else 	// Series 60 2.x main DLL program code
 
 /**
@@ -70,17 +70,17 @@ GLDEF_C TInt E32Main()
 * @return The application (Csymbian_ua_guiApplication)
 */
 EXPORT_C CApaApplication* NewApplication()
-	{
-	return new Csymbian_ua_guiApplication;
-	}
+{
+    return new Csymbian_ua_guiApplication;
+}
 
 /**
 * @brief This standard export is the entry point for all Series 60 applications
 * @return error code
 */
-GLDEF_C TInt E32Dll(TDllReason /*reason*/)
-	{
-	return KErrNone;
-	}
+GLDEF_C TInt E32Dll (TDllReason /*reason*/)
+{
+    return KErrNone;
+}
 
 #endif // EKA2
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
index 777217c7de802bbeee708c77d062236f1961d719..ca73e109c76ce330e48e354923706b759630ea2f 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainer.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiContainer.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -30,34 +30,34 @@
 // ]]] end generated region [Generated Constants]
 
 /**
- * First phase of Symbian two-phase construction. Should not 
+ * First phase of Symbian two-phase construction. Should not
  * contain any code that could leave.
  */
 CSymbian_ua_guiContainer::CSymbian_ua_guiContainer()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	iLabel1 = NULL;
-	iEd_url = NULL;
-	iEd_info = NULL;
-	// ]]] end generated region [Generated Contents]
-	
-	}
-/** 
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    iLabel1 = NULL;
+    iEd_url = NULL;
+    iEd_info = NULL;
+    // ]]] end generated region [Generated Contents]
+
+}
+/**
  * Destroy child controls.
  */
 CSymbian_ua_guiContainer::~CSymbian_ua_guiContainer()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	delete iLabel1;
-	iLabel1 = NULL;
-	delete iEd_url;
-	iEd_url = NULL;
-	delete iEd_info;
-	iEd_info = NULL;
-	// ]]] end generated region [Generated Contents]
-	
-	}
-				
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    delete iLabel1;
+    iLabel1 = NULL;
+    delete iEd_url;
+    iEd_url = NULL;
+    delete iEd_info;
+    iEd_info = NULL;
+    // ]]] end generated region [Generated Contents]
+
+}
+
 /**
  * Construct the control (first phase).
  *  Creates an instance and initializes it.
@@ -67,18 +67,18 @@ CSymbian_ua_guiContainer::~CSymbian_ua_guiContainer()
  * @param aCommandObserver command observer
  * @return initialized instance of CSymbian_ua_guiContainer
  */
-CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL( 
-		const TRect& aRect, 
-		const CCoeControl* aParent, 
-		MEikCommandObserver* aCommandObserver )
-	{
-	CSymbian_ua_guiContainer* self = CSymbian_ua_guiContainer::NewLC( 
-			aRect, 
-			aParent, 
-			aCommandObserver );
-	CleanupStack::Pop( self );
-	return self;
-	}
+CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL (
+    const TRect& aRect,
+    const CCoeControl* aParent,
+    MEikCommandObserver* aCommandObserver)
+{
+    CSymbian_ua_guiContainer* self = CSymbian_ua_guiContainer::NewLC (
+                                         aRect,
+                                         aParent,
+                                         aCommandObserver);
+    CleanupStack::Pop (self);
+    return self;
+}
 
 /**
  * Construct the control (first phase).
@@ -89,197 +89,195 @@ CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewL(
  * @param aCommandObserver command observer
  * @return new instance of CSymbian_ua_guiContainer
  */
-CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewLC( 
-		const TRect& aRect, 
-		const CCoeControl* aParent, 
-		MEikCommandObserver* aCommandObserver )
-	{
-	CSymbian_ua_guiContainer* self = new ( ELeave ) CSymbian_ua_guiContainer();
-	CleanupStack::PushL( self );
-	self->ConstructL( aRect, aParent, aCommandObserver );
-	return self;
-	}
-			
+CSymbian_ua_guiContainer* CSymbian_ua_guiContainer::NewLC (
+    const TRect& aRect,
+    const CCoeControl* aParent,
+    MEikCommandObserver* aCommandObserver)
+{
+    CSymbian_ua_guiContainer* self = new (ELeave) CSymbian_ua_guiContainer();
+    CleanupStack::PushL (self);
+    self->ConstructL (aRect, aParent, aCommandObserver);
+    return self;
+}
+
 /**
  * Construct the control (second phase).
  *  Creates a window to contain the controls and activates it.
  * @param aRect bounding rectangle
  * @param aCommandObserver command observer
  * @param aParent owning parent, or NULL
- */ 
-void CSymbian_ua_guiContainer::ConstructL( 
-		const TRect& aRect, 
-		const CCoeControl* aParent, 
-		MEikCommandObserver* aCommandObserver )
-	{
-	if ( aParent == NULL )
-	    {
-		CreateWindowL();
-	    }
-	else
-	    {
-	    SetContainerWindowL( *aParent );
-	    }
-	iFocusControl = NULL;
-	iCommandObserver = aCommandObserver;
-	InitializeControlsL();
-	SetRect( aRect );
-	ActivateL();
-	// [[[ begin generated region: do not modify [Post-ActivateL initializations]
-	// ]]] end generated region [Post-ActivateL initializations]
-	
-	}
-			
+ */
+void CSymbian_ua_guiContainer::ConstructL (
+    const TRect& aRect,
+    const CCoeControl* aParent,
+    MEikCommandObserver* aCommandObserver)
+{
+    if (aParent == NULL) {
+        CreateWindowL();
+    } else {
+        SetContainerWindowL (*aParent);
+    }
+
+    iFocusControl = NULL;
+    iCommandObserver = aCommandObserver;
+    InitializeControlsL();
+    SetRect (aRect);
+    ActivateL();
+    // [[[ begin generated region: do not modify [Post-ActivateL initializations]
+    // ]]] end generated region [Post-ActivateL initializations]
+
+}
+
 /**
 * Return the number of controls in the container (override)
 * @return count
 */
 TInt CSymbian_ua_guiContainer::CountComponentControls() const
-	{
-	return ( int ) ELastControl;
-	}
-				
+{
+    return (int) ELastControl;
+}
+
 /**
 * Get the control with the given index (override)
 * @param aIndex Control index [0...n) (limited by #CountComponentControls)
 * @return Pointer to control
 */
-CCoeControl* CSymbian_ua_guiContainer::ComponentControl( TInt aIndex ) const
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	switch ( aIndex )
-		{
-		case ELabel1:
-			return iLabel1;
-		case EEd_url:
-			return iEd_url;
-		case EEd_info:
-			return iEd_info;
-		}
-	// ]]] end generated region [Generated Contents]
-	
-	// handle any user controls here...
-	
-	return NULL;
-	}
-				
+CCoeControl* CSymbian_ua_guiContainer::ComponentControl (TInt aIndex) const
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    switch (aIndex) {
+        case ELabel1:
+            return iLabel1;
+        case EEd_url:
+            return iEd_url;
+        case EEd_info:
+            return iEd_info;
+    }
+
+    // ]]] end generated region [Generated Contents]
+
+    // handle any user controls here...
+
+    return NULL;
+}
+
 /**
  *	Handle resizing of the container. This implementation will lay out
  *  full-sized controls like list boxes for any screen size, and will layout
  *  labels, editors, etc. to the size they were given in the UI designer.
  *  This code will need to be modified to adjust arbitrary controls to
  *  any screen size.
- */				
+ */
 void CSymbian_ua_guiContainer::SizeChanged()
-	{
-	CCoeControl::SizeChanged();
-	LayoutControls();
-	// [[[ begin generated region: do not modify [Generated Contents]
-			
-	// ]]] end generated region [Generated Contents]
-	
-	}
-				
+{
+    CCoeControl::SizeChanged();
+    LayoutControls();
+    // [[[ begin generated region: do not modify [Generated Contents]
+
+    // ]]] end generated region [Generated Contents]
+
+}
+
 // [[[ begin generated function: do not modify
 /**
  * Layout components as specified in the UI Designer
  */
 void CSymbian_ua_guiContainer::LayoutControls()
-	{
-	iLabel1->SetExtent( TPoint( 2, 23 ), TSize( 32, 28 ) );
-	iEd_url->SetExtent( TPoint( 49, 25 ), TSize( 197, 28 ) );
-	iEd_info->SetExtent( TPoint( 3, 78 ), TSize( 235, 143 ) );
-	}
+{
+    iLabel1->SetExtent (TPoint (2, 23), TSize (32, 28));
+    iEd_url->SetExtent (TPoint (49, 25), TSize (197, 28));
+    iEd_info->SetExtent (TPoint (3, 78), TSize (235, 143));
+}
 // ]]] end generated function
 
 /**
  *	Handle key events.
- */				
-TKeyResponse CSymbian_ua_guiContainer::OfferKeyEventL( 
-		const TKeyEvent& aKeyEvent, 
-		TEventCode aType )
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	
-	// ]]] end generated region [Generated Contents]
-	
-	if ( iFocusControl != NULL
-		&& iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
-		{
-		return EKeyWasConsumed;
-		}
-	return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
-	}
-				
+ */
+TKeyResponse CSymbian_ua_guiContainer::OfferKeyEventL (
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType)
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+
+    // ]]] end generated region [Generated Contents]
+
+    if (iFocusControl != NULL
+            && iFocusControl->OfferKeyEventL (aKeyEvent, aType) == EKeyWasConsumed) {
+        return EKeyWasConsumed;
+    }
+
+    return CCoeControl::OfferKeyEventL (aKeyEvent, aType);
+}
+
 // [[[ begin generated function: do not modify
 /**
  *	Initialize each control upon creation.
- */				
+ */
 void CSymbian_ua_guiContainer::InitializeControlsL()
-	{
-	iLabel1 = new ( ELeave ) CEikLabel;
-	iLabel1->SetContainerWindowL( *this );
-		{
-		TResourceReader reader;
-		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_LABEL1 );
-		iLabel1->ConstructFromResourceL( reader );
-		CleanupStack::PopAndDestroy(); // reader internal state
-		}
-	iEd_url = new ( ELeave ) CEikEdwin;
-	iEd_url->SetContainerWindowL( *this );
-		{
-		TResourceReader reader;
-		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_URL );
-		iEd_url->ConstructFromResourceL( reader );
-		CleanupStack::PopAndDestroy(); // reader internal state
-		}
-		{
-		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_ED_URL_2 );
-		iEd_url->SetTextL( text );
-		CleanupStack::PopAndDestroy( text );
-		}
-	iEd_info = new ( ELeave ) CEikEdwin;
-	iEd_info->SetContainerWindowL( *this );
-		{
-		TResourceReader reader;
-		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO );
-		iEd_info->ConstructFromResourceL( reader );
-		CleanupStack::PopAndDestroy(); // reader internal state
-		}
-		{
-		HBufC* text = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO_2 );
-		iEd_info->SetTextL( text );
-		CleanupStack::PopAndDestroy( text );
-		}
-	
-	iEd_url->SetFocus( ETrue );
-	iFocusControl = iEd_url;
-	
-	}
+{
+    iLabel1 = new (ELeave) CEikLabel;
+    iLabel1->SetContainerWindowL (*this);
+    {
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_LABEL1);
+        iLabel1->ConstructFromResourceL (reader);
+        CleanupStack::PopAndDestroy(); // reader internal state
+    }
+    iEd_url = new (ELeave) CEikEdwin;
+    iEd_url->SetContainerWindowL (*this);
+    {
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_URL);
+        iEd_url->ConstructFromResourceL (reader);
+        CleanupStack::PopAndDestroy(); // reader internal state
+    }
+    {
+        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_ED_URL_2);
+        iEd_url->SetTextL (text);
+        CleanupStack::PopAndDestroy (text);
+    }
+    iEd_info = new (ELeave) CEikEdwin;
+    iEd_info->SetContainerWindowL (*this);
+    {
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO);
+        iEd_info->ConstructFromResourceL (reader);
+        CleanupStack::PopAndDestroy(); // reader internal state
+    }
+    {
+        HBufC* text = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_ED_INFO_2);
+        iEd_info->SetTextL (text);
+        CleanupStack::PopAndDestroy (text);
+    }
+
+    iEd_url->SetFocus (ETrue);
+    iFocusControl = iEd_url;
+
+}
 // ]]] end generated function
 
-/** 
+/**
  * Handle global resource changes, such as scalable UI or skin events (override)
  */
-void CSymbian_ua_guiContainer::HandleResourceChange( TInt aType )
-	{
-	CCoeControl::HandleResourceChange( aType );
-	SetRect( iAvkonViewAppUi->View( TUid::Uid( ESymbian_ua_guiContainerViewId ) )->ClientRect() );
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
-				
+void CSymbian_ua_guiContainer::HandleResourceChange (TInt aType)
+{
+    CCoeControl::HandleResourceChange (aType);
+    SetRect (iAvkonViewAppUi->View (TUid::Uid (ESymbian_ua_guiContainerViewId))->ClientRect());
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
+
 /**
  *	Draw container contents.
- */				
-void CSymbian_ua_guiContainer::Draw( const TRect& aRect ) const
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	CWindowGc& gc = SystemGc();
-	gc.Clear( aRect );
-	
-	// ]]] end generated region [Generated Contents]
-	
-	}
-				
+ */
+void CSymbian_ua_guiContainer::Draw (const TRect& aRect) const
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    CWindowGc& gc = SystemGc();
+    gc.Clear (aRect);
+
+    // ]]] end generated region [Generated Contents]
+
+}
+
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
index 661c210eac8ada40713cc3b7bbe0defd198b57e5..4a597893113304f12d32b56d2adee5b5797bff19 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiContainerView.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiContainerView.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -39,106 +39,109 @@
 // ]]] end generated region [Generated Constants]
 
 Csymbian_ua_guiContainerView *myinstance = NULL;
-_LIT(KStCall, "Call");
-_LIT(KStHangUp, "Hang Up");
+_LIT (KStCall, "Call");
+_LIT (KStHangUp, "Hang Up");
 
-void on_info(const wchar_t* buf)
+void on_info (const wchar_t* buf)
 {
-	TPtrC aBuf((const TUint16*)buf);
-	
-	if (myinstance)
-		myinstance->PutMessage(aBuf);
+    TPtrC aBuf ( (const TUint16*) buf);
+
+    if (myinstance)
+        myinstance->PutMessage (aBuf);
 }
 
-void on_incoming_call(const wchar_t* caller_disp, const wchar_t* caller_uri)
+void on_incoming_call (const wchar_t* caller_disp, const wchar_t* caller_uri)
 {
-	TBuf<512> buf;
-	TPtrC aDisp((const TUint16*)caller_disp);
-	TPtrC aUri((const TUint16*)caller_uri);
-	_LIT(KFormat, "Incoming call from %S, accept?");
-	
-	buf.Format(KFormat, &aDisp);
-	if (Csymbian_ua_guiContainerView::RunQry_accept_callL(&buf) == EAknSoftkeyYes)
-	{
-		CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-		if (cba != NULL) {
-			TRAPD(result, cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp));
-			cba->DrawDeferred();
-		}
-		symbian_ua_answercall();
-	} else {
-		symbian_ua_endcall();	
-	}
+    TBuf<512> buf;
+    TPtrC aDisp ( (const TUint16*) caller_disp);
+    TPtrC aUri ( (const TUint16*) caller_uri);
+    _LIT (KFormat, "Incoming call from %S, accept?");
+
+    buf.Format (KFormat, &aDisp);
+
+    if (Csymbian_ua_guiContainerView::RunQry_accept_callL (&buf) == EAknSoftkeyYes) {
+        CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+
+        if (cba != NULL) {
+            TRAPD (result, cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp));
+            cba->DrawDeferred();
+        }
+
+        symbian_ua_answercall();
+    } else {
+        symbian_ua_endcall();
+    }
 }
 
-void on_call_end(const wchar_t* reason)
+void on_call_end (const wchar_t* reason)
 {
-	TPtrC aReason((const TUint16*)reason);
-	
-	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-	if (cba != NULL) {
-		TRAPD(result, cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStCall));
-		cba->DrawDeferred();
-	}
-	
-	Csymbian_ua_guiContainerView::RunNote_infoL(&aReason);
+    TPtrC aReason ( (const TUint16*) reason);
+
+    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+
+    if (cba != NULL) {
+        TRAPD (result, cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStCall));
+        cba->DrawDeferred();
+    }
+
+    Csymbian_ua_guiContainerView::RunNote_infoL (&aReason);
 }
 
-void on_reg_state(bool success)
+void on_reg_state (bool success)
 {
-	if (success)
-		Csymbian_ua_guiContainerView::RunNote_infoL();
-	else
-		Csymbian_ua_guiContainerView::RunNote_warningL();
+    if (success)
+        Csymbian_ua_guiContainerView::RunNote_infoL();
+    else
+        Csymbian_ua_guiContainerView::RunNote_warningL();
 }
 
-void on_unreg_state(bool success)
+void on_unreg_state (bool success)
 {
-	TPtrC st_success(_L("Unregistration Success!"));
-	TPtrC st_failed(_L("Unregistration Failed!"));
-	
-	if (success)
-		Csymbian_ua_guiContainerView::RunNote_infoL(&st_success);
-	else
-		Csymbian_ua_guiContainerView::RunNote_warningL(&st_failed);
+    TPtrC st_success (_L ("Unregistration Success!"));
+    TPtrC st_failed (_L ("Unregistration Failed!"));
+
+    if (success)
+        Csymbian_ua_guiContainerView::RunNote_infoL (&st_success);
+    else
+        Csymbian_ua_guiContainerView::RunNote_warningL (&st_failed);
 }
 
-void Csymbian_ua_guiContainerView::PutMessage(const TDesC &msg)
-	{
-	if (!iSymbian_ua_guiContainer)
-		return;
-	
-	CEikEdwin *obj_info = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl(iSymbian_ua_guiContainer->EEd_info);
+void Csymbian_ua_guiContainerView::PutMessage (const TDesC &msg)
+{
+    if (!iSymbian_ua_guiContainer)
+        return;
+
+    CEikEdwin *obj_info = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl (iSymbian_ua_guiContainer->EEd_info);
 
-	obj_info->SetTextL(&msg);
-	obj_info->DrawDeferred();
-	}
+    obj_info->SetTextL (&msg);
+    obj_info->DrawDeferred();
+}
 
 /**
  * First phase of Symbian two-phase construction. Should not contain any
  * code that could leave.
  */
 Csymbian_ua_guiContainerView::Csymbian_ua_guiContainerView()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	iSymbian_ua_guiContainer = NULL;
-	// ]]] end generated region [Generated Contents]
-	
-	}
-/** 
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    iSymbian_ua_guiContainer = NULL;
+    // ]]] end generated region [Generated Contents]
+
+}
+/**
  * The view's destructor removes the container from the control
  * stack and destroys it.
  */
 Csymbian_ua_guiContainerView::~Csymbian_ua_guiContainerView()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	delete iSymbian_ua_guiContainer;
-	iSymbian_ua_guiContainer = NULL;
-	// ]]] end generated region [Generated Contents]
-	
-	symbian_ua_set_info_callback(NULL);
-	myinstance = NULL;
-	}
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    delete iSymbian_ua_guiContainer;
+    iSymbian_ua_guiContainer = NULL;
+    // ]]] end generated region [Generated Contents]
+
+    symbian_ua_set_info_callback (NULL);
+    myinstance = NULL;
+}
 
 /**
  * Symbian two-phase constructor.
@@ -147,11 +150,11 @@ Csymbian_ua_guiContainerView::~Csymbian_ua_guiContainerView()
  * @return new instance of Csymbian_ua_guiContainerView
  */
 Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewL()
-	{
-	Csymbian_ua_guiContainerView* self = Csymbian_ua_guiContainerView::NewLC();
-	CleanupStack::Pop( self );
-	return self;
-	}
+{
+    Csymbian_ua_guiContainerView* self = Csymbian_ua_guiContainerView::NewLC();
+    CleanupStack::Pop (self);
+    return self;
+}
 
 /**
  * Symbian two-phase constructor.
@@ -160,259 +163,259 @@ Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewL()
  * @return new instance of Csymbian_ua_guiContainerView
  */
 Csymbian_ua_guiContainerView* Csymbian_ua_guiContainerView::NewLC()
-	{
-	Csymbian_ua_guiContainerView* self = new ( ELeave ) Csymbian_ua_guiContainerView();
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	return self;
-	}
+{
+    Csymbian_ua_guiContainerView* self = new (ELeave) Csymbian_ua_guiContainerView();
+    CleanupStack::PushL (self);
+    self->ConstructL();
+    return self;
+}
 
 
 /**
- * Second-phase constructor for view.  
+ * Second-phase constructor for view.
  * Initialize contents from resource.
- */ 
+ */
 void Csymbian_ua_guiContainerView::ConstructL()
-	{
-	// [[[ begin generated region: do not modify [Generated Code]
-	BaseConstructL( R_SYMBIAN_UA_GUI_CONTAINER_SYMBIAN_UA_GUI_CONTAINER_VIEW );
-	// ]]] end generated region [Generated Code]
-	
-	// add your own initialization code here
-	symbian_ua_info_cb_t cb;
-	Mem::FillZ(&cb, sizeof(cb));
-
-	cb.on_info = &on_info;
-	cb.on_incoming_call = &on_incoming_call;
-	cb.on_reg_state = &on_reg_state;
-	cb.on_unreg_state = &on_unreg_state;
-	cb.on_call_end = &on_call_end;
-	
-	symbian_ua_set_info_callback(&cb);
-	myinstance = this;
-	}
-	
+{
+    // [[[ begin generated region: do not modify [Generated Code]
+    BaseConstructL (R_SYMBIAN_UA_GUI_CONTAINER_SYMBIAN_UA_GUI_CONTAINER_VIEW);
+    // ]]] end generated region [Generated Code]
+
+    // add your own initialization code here
+    symbian_ua_info_cb_t cb;
+    Mem::FillZ (&cb, sizeof (cb));
+
+    cb.on_info = &on_info;
+    cb.on_incoming_call = &on_incoming_call;
+    cb.on_reg_state = &on_reg_state;
+    cb.on_unreg_state = &on_unreg_state;
+    cb.on_call_end = &on_call_end;
+
+    symbian_ua_set_info_callback (&cb);
+    myinstance = this;
+}
+
 /**
  * @return The UID for this view
  */
 TUid Csymbian_ua_guiContainerView::Id() const
-	{
-	return TUid::Uid( ESymbian_ua_guiContainerViewId );
-	}
+{
+    return TUid::Uid (ESymbian_ua_guiContainerViewId);
+}
 
 /**
  * Handle a command for this view (override)
  * @param aCommand command id to be handled
  */
-void Csymbian_ua_guiContainerView::HandleCommandL( TInt aCommand )
-	{   
-	// [[[ begin generated region: do not modify [Generated Code]
-	TBool commandHandled = EFalse;
-	switch ( aCommand )
-		{	// code to dispatch to the AknView's menu and CBA commands is generated here
-	
-		case ESymbian_ua_guiContainerViewControlPaneRightId:
-			commandHandled = CallSoftKeyPressedL( aCommand );
-			break;
-		case ESymbian_ua_guiContainerViewSettingMenuItemCommand:
-			commandHandled = HandleSettingMenuItemSelectedL( aCommand );
-			break;
-		default:
-			break;
-		}
-	
-		
-	if ( !commandHandled ) 
-		{
-	
-		if ( aCommand == ESymbian_ua_guiContainerViewControlPaneRightId )
-			{
-			AppUi()->HandleCommandL( EEikCmdExit );
-			}
-	
-		}
-	// ]]] end generated region [Generated Code]
-	
-	}
+void Csymbian_ua_guiContainerView::HandleCommandL (TInt aCommand)
+{
+    // [[[ begin generated region: do not modify [Generated Code]
+    TBool commandHandled = EFalse;
+
+    switch (aCommand) {	// code to dispatch to the AknView's menu and CBA commands is generated here
+
+        case ESymbian_ua_guiContainerViewControlPaneRightId:
+            commandHandled = CallSoftKeyPressedL (aCommand);
+            break;
+        case ESymbian_ua_guiContainerViewSettingMenuItemCommand:
+            commandHandled = HandleSettingMenuItemSelectedL (aCommand);
+            break;
+        default:
+            break;
+    }
+
+
+    if (!commandHandled) {
+
+        if (aCommand == ESymbian_ua_guiContainerViewControlPaneRightId) {
+            AppUi()->HandleCommandL (EEikCmdExit);
+        }
+
+    }
+
+    // ]]] end generated region [Generated Code]
+
+}
 
 /**
- *	Handles user actions during activation of the view, 
+ *	Handles user actions during activation of the view,
  *	such as initializing the content.
  */
-void Csymbian_ua_guiContainerView::DoActivateL(
-		const TVwsViewId& /*aPrevViewId*/,
-		TUid /*aCustomMessageId*/,
-		const TDesC8& /*aCustomMessage*/ )
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	SetupStatusPaneL();
-	
-	CEikButtonGroupContainer* cba = AppUi()->Cba();
-	if ( cba != NULL ) 
-		{
-		cba->MakeVisible( EFalse );
-		}
-	
-	if ( iSymbian_ua_guiContainer == NULL )
-		{
-		iSymbian_ua_guiContainer = CSymbian_ua_guiContainer::NewL( ClientRect(), NULL, this );
-		iSymbian_ua_guiContainer->SetMopParent( this );
-		AppUi()->AddToStackL( *this, iSymbian_ua_guiContainer );
-		} 
-	// ]]] end generated region [Generated Contents]
-	
-	cba = CEikButtonGroupContainer::Current();
-	if (cba != NULL) {
-		if (symbian_ua_anycall())
-			cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp);
-		else
-			cba->SetCommandL(ESymbian_ua_guiContainerViewControlPaneRightId, KStCall);
-	}
-	
-	}
+void Csymbian_ua_guiContainerView::DoActivateL (
+    const TVwsViewId& /*aPrevViewId*/,
+    TUid /*aCustomMessageId*/,
+    const TDesC8& /*aCustomMessage*/)
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    SetupStatusPaneL();
+
+    CEikButtonGroupContainer* cba = AppUi()->Cba();
+
+    if (cba != NULL) {
+        cba->MakeVisible (EFalse);
+    }
+
+    if (iSymbian_ua_guiContainer == NULL) {
+        iSymbian_ua_guiContainer = CSymbian_ua_guiContainer::NewL (ClientRect(), NULL, this);
+        iSymbian_ua_guiContainer->SetMopParent (this);
+        AppUi()->AddToStackL (*this, iSymbian_ua_guiContainer);
+    }
+
+    // ]]] end generated region [Generated Contents]
+
+    cba = CEikButtonGroupContainer::Current();
+
+    if (cba != NULL) {
+        if (symbian_ua_anycall())
+            cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStHangUp);
+        else
+            cba->SetCommandL (ESymbian_ua_guiContainerViewControlPaneRightId, KStCall);
+    }
+
+}
 
 /**
  */
 void Csymbian_ua_guiContainerView::DoDeactivate()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	CleanupStatusPane();
-	
-	CEikButtonGroupContainer* cba = AppUi()->Cba();
-	if ( cba != NULL ) 
-		{
-		cba->MakeVisible( ETrue );
-		cba->DrawDeferred();
-		}
-	
-	if ( iSymbian_ua_guiContainer != NULL )
-		{
-		AppUi()->RemoveFromViewStack( *this, iSymbian_ua_guiContainer );
-		delete iSymbian_ua_guiContainer;
-		iSymbian_ua_guiContainer = NULL;
-		}
-	// ]]] end generated region [Generated Contents]
-	
-	}
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    CleanupStatusPane();
+
+    CEikButtonGroupContainer* cba = AppUi()->Cba();
+
+    if (cba != NULL) {
+        cba->MakeVisible (ETrue);
+        cba->DrawDeferred();
+    }
+
+    if (iSymbian_ua_guiContainer != NULL) {
+        AppUi()->RemoveFromViewStack (*this, iSymbian_ua_guiContainer);
+        delete iSymbian_ua_guiContainer;
+        iSymbian_ua_guiContainer = NULL;
+    }
+
+    // ]]] end generated region [Generated Contents]
+
+}
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiContainerView::SetupStatusPaneL()
-	{
-	// reset the context pane
-	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
-	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
-		StatusPane()->PaneCapabilities( contextPaneUid );
-	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
-		{
-		CAknContextPane* context = static_cast< CAknContextPane* > ( 
-			StatusPane()->ControlL( contextPaneUid ) );
-		context->SetPictureToDefaultL();
-		}
-	
-	// setup the title pane
-	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
-	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
-		StatusPane()->PaneCapabilities( titlePaneUid );
-	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
-		{
-		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
-			StatusPane()->ControlL( titlePaneUid ) );
-		TResourceReader reader;
-		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_CONTAINER_TITLE_RESOURCE );
-		title->SetFromResourceL( reader );
-		CleanupStack::PopAndDestroy(); // reader internal state
-		}
-				
-	}
+{
+    // reset the context pane
+    TUid contextPaneUid = TUid::Uid (EEikStatusPaneUidContext);
+    CEikStatusPaneBase::TPaneCapabilities subPaneContext =
+        StatusPane()->PaneCapabilities (contextPaneUid);
+
+    if (subPaneContext.IsPresent() && subPaneContext.IsAppOwned()) {
+        CAknContextPane* context = static_cast< CAknContextPane* > (
+                                       StatusPane()->ControlL (contextPaneUid));
+        context->SetPictureToDefaultL();
+    }
+
+    // setup the title pane
+    TUid titlePaneUid = TUid::Uid (EEikStatusPaneUidTitle);
+    CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
+        StatusPane()->PaneCapabilities (titlePaneUid);
+
+    if (subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned()) {
+        CAknTitlePane* title = static_cast< CAknTitlePane* > (
+                                   StatusPane()->ControlL (titlePaneUid));
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_CONTAINER_TITLE_RESOURCE);
+        title->SetFromResourceL (reader);
+        CleanupStack::PopAndDestroy(); // reader internal state
+    }
+
+}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiContainerView::CleanupStatusPane()
-	{
-	}
+{
+}
 // ]]] end generated function
 
-/** 
+/**
  * Handle status pane size change for this view (override)
  */
 void Csymbian_ua_guiContainerView::HandleStatusPaneSizeChange()
-	{
-	CAknView::HandleStatusPaneSizeChange();
-	
-	// this may fail, but we're not able to propagate exceptions here
-	TInt result;
-	TRAP( result, SetupStatusPaneL() ); 
-	}
-	
-/** 
+{
+    CAknView::HandleStatusPaneSizeChange();
+
+    // this may fail, but we're not able to propagate exceptions here
+    TInt result;
+    TRAP (result, SetupStatusPaneL());
+}
+
+/**
  * Handle the rightSoftKeyPressed event.
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiContainerView::CallSoftKeyPressedL( TInt aCommand )
-	{
-	CEikEdwin *obj_url = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl(iSymbian_ua_guiContainer->EEd_url);
-	CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
-	
-	if (symbian_ua_anycall()) {
-		symbian_ua_endcall();
-		return ETrue;
-	}
-
-	PutMessage(_L("Making call..."));
-	if ( cba != NULL ) {
-		cba->SetCommandL(aCommand, KStHangUp);
-		cba->DrawDeferred();
-	}
-	
-
-	TUint8 url[256];
-	TPtr8 aUrl(url, 256);
-
-	HBufC *buf = obj_url->GetTextInHBufL();
-	CnvUtfConverter::ConvertFromUnicodeToUtf8(aUrl, *buf);
-	delete buf;
-
-	if (symbian_ua_makecall((char *)aUrl.PtrZ()) != 0) {
-		PutMessage(_L("Making call failed!"));
-		if ( cba != NULL ) {
-			cba->SetCommandL(aCommand, KStCall);
-			cba->DrawDeferred();
-		}
-	}
-	
-	return ETrue;
-	}
-				
-/** 
+TBool Csymbian_ua_guiContainerView::CallSoftKeyPressedL (TInt aCommand)
+{
+    CEikEdwin *obj_url = (CEikEdwin*) iSymbian_ua_guiContainer->ComponentControl (iSymbian_ua_guiContainer->EEd_url);
+    CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+
+    if (symbian_ua_anycall()) {
+        symbian_ua_endcall();
+        return ETrue;
+    }
+
+    PutMessage (_L ("Making call..."));
+
+    if (cba != NULL) {
+        cba->SetCommandL (aCommand, KStHangUp);
+        cba->DrawDeferred();
+    }
+
+
+    TUint8 url[256];
+    TPtr8 aUrl (url, 256);
+
+    HBufC *buf = obj_url->GetTextInHBufL();
+    CnvUtfConverter::ConvertFromUnicodeToUtf8 (aUrl, *buf);
+    delete buf;
+
+    if (symbian_ua_makecall ( (char *) aUrl.PtrZ()) != 0) {
+        PutMessage (_L ("Making call failed!"));
+
+        if (cba != NULL) {
+            cba->SetCommandL (aCommand, KStCall);
+            cba->DrawDeferred();
+        }
+    }
+
+    return ETrue;
+}
+
+/**
  * Handle the selected event.
  * @param aCommand the command id invoked
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiContainerView::HandleSettingMenuItemSelectedL( TInt aCommand )
-	{
-	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiSettingItemListViewId));
-	return ETrue;
-	}
-				
+TBool Csymbian_ua_guiContainerView::HandleSettingMenuItemSelectedL (TInt aCommand)
+{
+    AppUi()->ActivateLocalViewL (TUid::Uid (ESymbian_ua_guiSettingItemListViewId));
+    return ETrue;
+}
+
 // [[[ begin generated function: do not modify
 /**
  * Show the popup note for note_error
  * @param aOverrideText optional override text
  */
-void Csymbian_ua_guiContainerView::RunNote_errorL( const TDesC* aOverrideText )
-	{
-	CAknErrorNote* note = new ( ELeave ) CAknErrorNote();
-	if ( aOverrideText == NULL )
-		{
-		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_ERROR );
-		note->ExecuteLD( *noteText );
-		CleanupStack::PopAndDestroy( noteText );
-		}
-	else
-		{
-		note->ExecuteLD( *aOverrideText );
-		}
-	}
+void Csymbian_ua_guiContainerView::RunNote_errorL (const TDesC* aOverrideText)
+{
+    CAknErrorNote* note = new (ELeave) CAknErrorNote();
+
+    if (aOverrideText == NULL) {
+        HBufC* noteText = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_NOTE_ERROR);
+        note->ExecuteLD (*noteText);
+        CleanupStack::PopAndDestroy (noteText);
+    } else {
+        note->ExecuteLD (*aOverrideText);
+    }
+}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -420,20 +423,18 @@ void Csymbian_ua_guiContainerView::RunNote_errorL( const TDesC* aOverrideText )
  * Show the popup note for note_info
  * @param aOverrideText optional override text
  */
-void Csymbian_ua_guiContainerView::RunNote_infoL( const TDesC* aOverrideText )
-	{
-	CAknInformationNote* note = new ( ELeave ) CAknInformationNote();
-	if ( aOverrideText == NULL )
-		{
-		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_INFO );
-		note->ExecuteLD( *noteText );
-		CleanupStack::PopAndDestroy( noteText );
-		}
-	else
-		{
-		note->ExecuteLD( *aOverrideText );
-		}
-	}
+void Csymbian_ua_guiContainerView::RunNote_infoL (const TDesC* aOverrideText)
+{
+    CAknInformationNote* note = new (ELeave) CAknInformationNote();
+
+    if (aOverrideText == NULL) {
+        HBufC* noteText = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_NOTE_INFO);
+        note->ExecuteLD (*noteText);
+        CleanupStack::PopAndDestroy (noteText);
+    } else {
+        note->ExecuteLD (*aOverrideText);
+    }
+}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -441,20 +442,18 @@ void Csymbian_ua_guiContainerView::RunNote_infoL( const TDesC* aOverrideText )
  * Show the popup note for note_warning
  * @param aOverrideText optional override text
  */
-void Csymbian_ua_guiContainerView::RunNote_warningL( const TDesC* aOverrideText )
-	{
-	CAknWarningNote* note = new ( ELeave ) CAknWarningNote();
-	if ( aOverrideText == NULL )
-		{
-		HBufC* noteText = StringLoader::LoadLC( R_SYMBIAN_UA_GUI_CONTAINER_NOTE_WARNING );
-		note->ExecuteLD( *noteText );
-		CleanupStack::PopAndDestroy( noteText );
-		}
-	else
-		{
-		note->ExecuteLD( *aOverrideText );
-		}
-	}
+void Csymbian_ua_guiContainerView::RunNote_warningL (const TDesC* aOverrideText)
+{
+    CAknWarningNote* note = new (ELeave) CAknWarningNote();
+
+    if (aOverrideText == NULL) {
+        HBufC* noteText = StringLoader::LoadLC (R_SYMBIAN_UA_GUI_CONTAINER_NOTE_WARNING);
+        note->ExecuteLD (*noteText);
+        CleanupStack::PopAndDestroy (noteText);
+    } else {
+        note->ExecuteLD (*aOverrideText);
+    }
+}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
@@ -463,16 +462,16 @@ void Csymbian_ua_guiContainerView::RunNote_warningL( const TDesC* aOverrideText
  * @param aOverrideText optional override text
  * @return EAknSoftkeyYes (left soft key id) or 0
  */
-TInt Csymbian_ua_guiContainerView::RunQry_accept_callL( const TDesC* aOverrideText )
-	{
-				
-	CAknQueryDialog* queryDialog = CAknQueryDialog::NewL();	
-	
-	if ( aOverrideText != NULL )
-		{
-		queryDialog->SetPromptL( *aOverrideText );
-		}
-	return queryDialog->ExecuteLD( R_SYMBIAN_UA_GUI_CONTAINER_QRY_ACCEPT_CALL );
-	}
+TInt Csymbian_ua_guiContainerView::RunQry_accept_callL (const TDesC* aOverrideText)
+{
+
+    CAknQueryDialog* queryDialog = CAknQueryDialog::NewL();
+
+    if (aOverrideText != NULL) {
+        queryDialog->SetPromptL (*aOverrideText);
+    }
+
+    return queryDialog->ExecuteLD (R_SYMBIAN_UA_GUI_CONTAINER_QRY_ACCEPT_CALL);
+}
 // ]]] end generated function
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
index 8eb54f8d74fed49b685ad511827c23256e1d61f4..209c9ebcec9f9a653241e1340be8fb8b382c2949 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiDocument.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiDocument.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated User Includes]
@@ -15,19 +15,19 @@
  * @brief Constructs the document class for the application.
  * @param anApplication the application instance
  */
-Csymbian_ua_guiDocument::Csymbian_ua_guiDocument( CEikApplication& anApplication )
-	: CAknDocument( anApplication )
-	{
-	}
+Csymbian_ua_guiDocument::Csymbian_ua_guiDocument (CEikApplication& anApplication)
+        : CAknDocument (anApplication)
+{
+}
 
 /**
- * @brief Completes the second phase of Symbian object construction. 
- * Put initialization code that could leave here.  
- */ 
+ * @brief Completes the second phase of Symbian object construction.
+ * Put initialization code that could leave here.
+ */
 void Csymbian_ua_guiDocument::ConstructL()
-	{
-	}
-	
+{
+}
+
 /**
  * Symbian OS two-phase constructor.
  *
@@ -37,21 +37,21 @@ void Csymbian_ua_guiDocument::ConstructL()
  * @param aApp the application instance
  * @return the new Csymbian_ua_guiDocument
  */
-Csymbian_ua_guiDocument* Csymbian_ua_guiDocument::NewL( CEikApplication& aApp )
-	{
-	Csymbian_ua_guiDocument* self = new ( ELeave ) Csymbian_ua_guiDocument( aApp );
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	CleanupStack::Pop( self );
-	return self;
-	}
+Csymbian_ua_guiDocument* Csymbian_ua_guiDocument::NewL (CEikApplication& aApp)
+{
+    Csymbian_ua_guiDocument* self = new (ELeave) Csymbian_ua_guiDocument (aApp);
+    CleanupStack::PushL (self);
+    self->ConstructL();
+    CleanupStack::Pop (self);
+    return self;
+}
 
 /**
  * @brief Creates the application UI object for this document.
  * @return the new instance
- */	
+ */
 CEikAppUi* Csymbian_ua_guiDocument::CreateAppUiL()
-	{
-	return new ( ELeave ) Csymbian_ua_guiAppUi;
-	}
-				
+{
+    return new (ELeave) Csymbian_ua_guiAppUi;
+}
+
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
index 27f3d6e5ce3c2793c376ae827d531342cea8e787..f9a72fc296c81098e8f4f0bed1dbd748ace85ddd 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemList.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiSettingItemList.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 
@@ -22,7 +22,7 @@
 #include <aknpopupfieldtext.h>
 #include <eikappui.h>
 #include <aknviewappui.h>
-#include <akntextsettingpage.h> 
+#include <akntextsettingpage.h>
 #include <symbian_ua_gui.rsg>
 // ]]] end generated region [Generated System Includes]
 
@@ -43,8 +43,8 @@
 // ]]] end generated region [Generated Constants]
 
 
-_LIT(KtxDicFileName			,"settings.ini" );
- 
+_LIT (KtxDicFileName			,"settings.ini");
+
 const TInt KRegistrar		= 2;
 const TInt KUsername		= 3;
 const TInt KPassword		= 4;
@@ -55,36 +55,35 @@ const TInt KIce				= 7;
 /**
  * Construct the CSymbian_ua_guiSettingItemList instance
  * @param aCommandObserver command observer
- */ 
-CSymbian_ua_guiSettingItemList::CSymbian_ua_guiSettingItemList( 
-		TSymbian_ua_guiSettingItemListSettings& aSettings, 
-		MEikCommandObserver* aCommandObserver )
-	: iSettings( aSettings ), iCommandObserver( aCommandObserver )
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
-/** 
+ */
+CSymbian_ua_guiSettingItemList::CSymbian_ua_guiSettingItemList (
+    TSymbian_ua_guiSettingItemListSettings& aSettings,
+    MEikCommandObserver* aCommandObserver)
+        : iSettings (aSettings), iCommandObserver (aCommandObserver)
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
+/**
  * Destroy any instance variables
  */
 CSymbian_ua_guiSettingItemList::~CSymbian_ua_guiSettingItemList()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
 
 /**
  * Handle system notification that the container's size has changed.
  */
 void CSymbian_ua_guiSettingItemList::SizeChanged()
-	{
-	if ( ListBox() ) 
-		{
-		ListBox()->SetRect( Rect() );
-		}
-	}
+{
+    if (ListBox()) {
+        ListBox()->SetRect (Rect());
+    }
+}
 
 /**
  * Create one setting item at a time, identified by id.
@@ -93,73 +92,66 @@ void CSymbian_ua_guiSettingItemList::SizeChanged()
  * a reference to the underlying data, which EditItemL() uses
  * to edit and store the value.
  */
-CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL( TInt aId )
-	{
-	switch ( aId )
-		{
-	// [[[ begin generated region: do not modify [Initializers]
-		case ESymbian_ua_guiSettingItemListViewEd_registrar:
-			{			
-			CAknTextSettingItem* item = new ( ELeave ) 
-				CAknTextSettingItem( 
-					aId,
-					iSettings.Ed_registrar() );
-			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
-			return item;
-			}
-		case ESymbian_ua_guiSettingItemListViewEd_user:
-			{			
-			CAknTextSettingItem* item = new ( ELeave ) 
-				CAknTextSettingItem( 
-					aId,
-					iSettings.Ed_user() );
-			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
-			return item;
-			}
-		case ESymbian_ua_guiSettingItemListViewEd_password:
-			{			
-			CAknPasswordSettingItem* item = new ( ELeave ) 
-				CAknPasswordSettingItem( 
-					aId,
-					CAknPasswordSettingItem::EAlpha,
-					iSettings.Ed_password() );
-			item->SetSettingPageFlags(CAknTextSettingPage::EZeroLengthAllowed);
-			return item;
-			}
-		case ESymbian_ua_guiSettingItemListViewB_srtp:
-			{			
-			CAknBinaryPopupSettingItem* item = new ( ELeave ) 
-				CAknBinaryPopupSettingItem( 
-					aId,
-					iSettings.B_srtp() );
-			item->SetHidden( ETrue ); 
-			return item;
-			}
-		case ESymbian_ua_guiSettingItemListViewB_ice:
-			{			
-			CAknBinaryPopupSettingItem* item = new ( ELeave ) 
-				CAknBinaryPopupSettingItem( 
-					aId,
-					iSettings.B_ice() );
-			item->SetHidden( ETrue ); 
-			return item;
-			}
-		case ESymbian_ua_guiSettingItemListViewEd_stun_server:
-			{			
-			CAknTextSettingItem* item = new ( ELeave ) 
-				CAknTextSettingItem( 
-					aId,
-					iSettings.Ed_stun_server() );
-			item->SetHidden( ETrue ); 
-			return item;
-			}
-	// ]]] end generated region [Initializers]
-	
-		}
-		
-	return NULL;
-	}
-	
+CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL (TInt aId)
+{
+    switch (aId) {
+            // [[[ begin generated region: do not modify [Initializers]
+        case ESymbian_ua_guiSettingItemListViewEd_registrar: {
+            CAknTextSettingItem* item = new (ELeave)
+            CAknTextSettingItem (
+                aId,
+                iSettings.Ed_registrar());
+            item->SetSettingPageFlags (CAknTextSettingPage::EZeroLengthAllowed);
+            return item;
+        }
+        case ESymbian_ua_guiSettingItemListViewEd_user: {
+            CAknTextSettingItem* item = new (ELeave)
+            CAknTextSettingItem (
+                aId,
+                iSettings.Ed_user());
+            item->SetSettingPageFlags (CAknTextSettingPage::EZeroLengthAllowed);
+            return item;
+        }
+        case ESymbian_ua_guiSettingItemListViewEd_password: {
+            CAknPasswordSettingItem* item = new (ELeave)
+            CAknPasswordSettingItem (
+                aId,
+                CAknPasswordSettingItem::EAlpha,
+                iSettings.Ed_password());
+            item->SetSettingPageFlags (CAknTextSettingPage::EZeroLengthAllowed);
+            return item;
+        }
+        case ESymbian_ua_guiSettingItemListViewB_srtp: {
+            CAknBinaryPopupSettingItem* item = new (ELeave)
+            CAknBinaryPopupSettingItem (
+                aId,
+                iSettings.B_srtp());
+            item->SetHidden (ETrue);
+            return item;
+        }
+        case ESymbian_ua_guiSettingItemListViewB_ice: {
+            CAknBinaryPopupSettingItem* item = new (ELeave)
+            CAknBinaryPopupSettingItem (
+                aId,
+                iSettings.B_ice());
+            item->SetHidden (ETrue);
+            return item;
+        }
+        case ESymbian_ua_guiSettingItemListViewEd_stun_server: {
+            CAknTextSettingItem* item = new (ELeave)
+            CAknTextSettingItem (
+                aId,
+                iSettings.Ed_stun_server());
+            item->SetHidden (ETrue);
+            return item;
+        }
+        // ]]] end generated region [Initializers]
+
+    }
+
+    return NULL;
+}
+
 /**
  * Edit the setting item identified by the given id and store
  * the changes into the store.
@@ -168,256 +160,254 @@ CAknSettingItem* CSymbian_ua_guiSettingItemList::CreateSettingItemL( TInt aId )
  *	always show the edit page and interactively edit the item;
  *	false: change the item in place if possible, else show the edit page
  */
-void CSymbian_ua_guiSettingItemList::EditItemL ( TInt aIndex, TBool aCalledFromMenu )
-	{
-	CAknSettingItem* item = ( *SettingItemArray() )[aIndex];
-	switch ( item->Identifier() )
-		{
-	// [[[ begin generated region: do not modify [Editing Started Invoker]
-	// ]]] end generated region [Editing Started Invoker]
-	
-		}
-	
-	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
-	
-	TBool storeValue = ETrue;
-	switch ( item->Identifier() )
-		{
-	// [[[ begin generated region: do not modify [Editing Stopped Invoker]
-	// ]]] end generated region [Editing Stopped Invoker]
-	
-		}
-		
-	if ( storeValue )
-		{
-		item->StoreL();
-		SaveSettingValuesL();
-		}	
-	}
+void CSymbian_ua_guiSettingItemList::EditItemL (TInt aIndex, TBool aCalledFromMenu)
+{
+    CAknSettingItem* item = (*SettingItemArray()) [aIndex];
+
+    switch (item->Identifier()) {
+            // [[[ begin generated region: do not modify [Editing Started Invoker]
+            // ]]] end generated region [Editing Started Invoker]
+
+    }
+
+    CAknSettingItemList::EditItemL (aIndex, aCalledFromMenu);
+
+    TBool storeValue = ETrue;
+
+    switch (item->Identifier()) {
+            // [[[ begin generated region: do not modify [Editing Stopped Invoker]
+            // ]]] end generated region [Editing Stopped Invoker]
+
+    }
+
+    if (storeValue) {
+        item->StoreL();
+        SaveSettingValuesL();
+    }
+}
 /**
  *	Handle the "Change" option on the Options menu.  This is an
  *	alternative to the Selection key that forces the settings page
  *	to come up rather than changing the value in place (if possible).
  */
 void CSymbian_ua_guiSettingItemList::ChangeSelectedItemL()
-	{
-	if ( ListBox()->CurrentItemIndex() >= 0 )
-		{
-		EditItemL( ListBox()->CurrentItemIndex(), ETrue );
-		}
-	}
+{
+    if (ListBox()->CurrentItemIndex() >= 0) {
+        EditItemL (ListBox()->CurrentItemIndex(), ETrue);
+    }
+}
 
 /**
  *	Load the initial contents of the setting items.  By default,
  *	the setting items are populated with the default values from
  * 	the design.  You can override those values here.
  *	<p>
- *	Note: this call alone does not update the UI.  
+ *	Note: this call alone does not update the UI.
  *	LoadSettingsL() must be called afterwards.
  */
 void CSymbian_ua_guiSettingItemList::LoadSettingValuesL()
-	{
-	// load values into iSettings
+{
+    // load values into iSettings
 
-	TFileName path;
-	TFileName pathWithoutDrive;
-	CEikonEnv::Static()->FsSession().PrivatePath( pathWithoutDrive );
+    TFileName path;
+    TFileName pathWithoutDrive;
+    CEikonEnv::Static()->FsSession().PrivatePath (pathWithoutDrive);
 
-	// Extract drive letter into appDrive:
+    // Extract drive letter into appDrive:
 #ifdef __WINS__
-	path.Copy( _L("c:") );
+    path.Copy (_L ("c:"));
 #else
-	RProcess process;
-	path.Copy( process.FileName().Left(2) );
+    RProcess process;
+    path.Copy (process.FileName().Left (2));
 #endif
 
-	path.Append( pathWithoutDrive );
-	path.Append( KtxDicFileName );
-	
-	TFindFile AufFolder(CCoeEnv::Static()->FsSession());
-	if(KErrNone == AufFolder.FindByDir(path, KNullDesC))
-	{
-		CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC(CCoeEnv::Static()->FsSession(),AufFolder.File(), TUid::Uid(1));
-		TUid FileUid;
-		
-		FileUid.iUid = KRegistrar;
-		if(MyDStore->IsPresentL(FileUid))
-		{
-			RDictionaryReadStream in;
-			in.OpenLC(*MyDStore,FileUid);
-			in >> iSettings.Ed_registrar();
-			CleanupStack::PopAndDestroy(1);// in
-		}
-			
-		FileUid.iUid = KUsername;
-		if(MyDStore->IsPresentL(FileUid))
-		{
-			RDictionaryReadStream in;
-			in.OpenLC(*MyDStore,FileUid);
-			in >> iSettings.Ed_user();
-			CleanupStack::PopAndDestroy(1);// in
-		}
-
-		FileUid.iUid = KPassword;
-		if(MyDStore->IsPresentL(FileUid))
-		{
-			RDictionaryReadStream in;
-			in.OpenLC(*MyDStore,FileUid);
-			in >> iSettings.Ed_password();
-			CleanupStack::PopAndDestroy(1);// in
-		}
-
-		FileUid.iUid = KStunServer;
-		if(MyDStore->IsPresentL(FileUid))
-		{
-			RDictionaryReadStream in;
-			in.OpenLC(*MyDStore,FileUid);
-			in >> iSettings.Ed_stun_server();
-			CleanupStack::PopAndDestroy(1);// in
-		}
-
-		FileUid.iUid = KSrtp;
-		if(MyDStore->IsPresentL(FileUid))
-		{
-			RDictionaryReadStream in;
-			in.OpenLC(*MyDStore,FileUid);
-			iSettings.SetB_srtp((TBool)in.ReadInt32L());
-			CleanupStack::PopAndDestroy(1);// in
-		}
-		
-		FileUid.iUid = KIce;
-		if(MyDStore->IsPresentL(FileUid))
-		{
-			RDictionaryReadStream in;
-			in.OpenLC(*MyDStore,FileUid);
-			iSettings.SetB_ice((TBool)in.ReadInt32L());
-			CleanupStack::PopAndDestroy(1);// in
-		}
-
-		CleanupStack::PopAndDestroy(1);// Store		
-	}
-
-	}
-	
+    path.Append (pathWithoutDrive);
+    path.Append (KtxDicFileName);
+
+    TFindFile AufFolder (CCoeEnv::Static()->FsSession());
+
+    if (KErrNone == AufFolder.FindByDir (path, KNullDesC)) {
+        CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC (CCoeEnv::Static()->FsSession(),AufFolder.File(), TUid::Uid (1));
+        TUid FileUid;
+
+        FileUid.iUid = KRegistrar;
+
+        if (MyDStore->IsPresentL (FileUid)) {
+            RDictionaryReadStream in;
+            in.OpenLC (*MyDStore,FileUid);
+            in >> iSettings.Ed_registrar();
+            CleanupStack::PopAndDestroy (1);// in
+        }
+
+        FileUid.iUid = KUsername;
+
+        if (MyDStore->IsPresentL (FileUid)) {
+            RDictionaryReadStream in;
+            in.OpenLC (*MyDStore,FileUid);
+            in >> iSettings.Ed_user();
+            CleanupStack::PopAndDestroy (1);// in
+        }
+
+        FileUid.iUid = KPassword;
+
+        if (MyDStore->IsPresentL (FileUid)) {
+            RDictionaryReadStream in;
+            in.OpenLC (*MyDStore,FileUid);
+            in >> iSettings.Ed_password();
+            CleanupStack::PopAndDestroy (1);// in
+        }
+
+        FileUid.iUid = KStunServer;
+
+        if (MyDStore->IsPresentL (FileUid)) {
+            RDictionaryReadStream in;
+            in.OpenLC (*MyDStore,FileUid);
+            in >> iSettings.Ed_stun_server();
+            CleanupStack::PopAndDestroy (1);// in
+        }
+
+        FileUid.iUid = KSrtp;
+
+        if (MyDStore->IsPresentL (FileUid)) {
+            RDictionaryReadStream in;
+            in.OpenLC (*MyDStore,FileUid);
+            iSettings.SetB_srtp ( (TBool) in.ReadInt32L());
+            CleanupStack::PopAndDestroy (1);// in
+        }
+
+        FileUid.iUid = KIce;
+
+        if (MyDStore->IsPresentL (FileUid)) {
+            RDictionaryReadStream in;
+            in.OpenLC (*MyDStore,FileUid);
+            iSettings.SetB_ice ( (TBool) in.ReadInt32L());
+            CleanupStack::PopAndDestroy (1);// in
+        }
+
+        CleanupStack::PopAndDestroy (1);// Store
+    }
+
+}
+
 /**
  *	Save the contents of the setting items.  Note, this is called
  *	whenever an item is changed and stored to the model, so it
  *	may be called multiple times or not at all.
  */
 void CSymbian_ua_guiSettingItemList::SaveSettingValuesL()
-	{
-	// store values from iSettings
+{
+    // store values from iSettings
 
-	TFileName path;
-	TFileName pathWithoutDrive;
-	CEikonEnv::Static()->FsSession().PrivatePath( pathWithoutDrive );
+    TFileName path;
+    TFileName pathWithoutDrive;
+    CEikonEnv::Static()->FsSession().PrivatePath (pathWithoutDrive);
 
-	// Extract drive letter into appDrive:
+    // Extract drive letter into appDrive:
 #ifdef __WINS__
-	path.Copy( _L("c:") );
+    path.Copy (_L ("c:"));
 #else
-	RProcess process;
-	path.Copy( process.FileName().Left(2) );
-	
-	if(path.Compare(_L("c")) || path.Compare(_L("C")))
-		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveC);
-	else if(path.Compare(_L("e")) || path.Compare(_L("E")))
-		CEikonEnv::Static()->FsSession().CreatePrivatePath(EDriveE);	
+    RProcess process;
+    path.Copy (process.FileName().Left (2));
+
+    if (path.Compare (_L ("c")) || path.Compare (_L ("C")))
+        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveC);
+    else if (path.Compare (_L ("e")) || path.Compare (_L ("E")))
+        CEikonEnv::Static()->FsSession().CreatePrivatePath (EDriveE);
+
 #endif
 
-	path.Append( pathWithoutDrive );
-	path.Append( KtxDicFileName );
-	
-	TFindFile AufFolder(CCoeEnv::Static()->FsSession());
-	if(KErrNone == AufFolder.FindByDir(path, KNullDesC))
-	{
-		User::LeaveIfError(CCoeEnv::Static()->FsSession().Delete(AufFolder.File()));
-	}
- 
-	CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC(CCoeEnv::Static()->FsSession(),path, TUid::Uid(1));
- 
-	TUid FileUid = {0x0};
-		
-	FileUid.iUid = KRegistrar;
-	RDictionaryWriteStream out1;
-	out1.AssignLC(*MyDStore,FileUid);
-	out1 << iSettings.Ed_registrar();
-	out1.CommitL(); 	
-	CleanupStack::PopAndDestroy(1);// out2	
-	
-	FileUid.iUid = KUsername;
-	RDictionaryWriteStream out2;
-	out2.AssignLC(*MyDStore,FileUid);
-	out2 << iSettings.Ed_user();
-	out2.CommitL(); 	
-	CleanupStack::PopAndDestroy(1);// out2	
-	
-	FileUid.iUid = KPassword;
-	RDictionaryWriteStream out3;
-	out3.AssignLC(*MyDStore,FileUid);
-	out3 << iSettings.Ed_password();
-	out3.CommitL(); 	
-	CleanupStack::PopAndDestroy(1);// out2	
-	
-	FileUid.iUid = KStunServer;
-	RDictionaryWriteStream out4;
-	out4.AssignLC(*MyDStore,FileUid);
-	out4 << iSettings.Ed_stun_server();
-	out4.CommitL(); 	
-	CleanupStack::PopAndDestroy(1);// out2	
-	
-	FileUid.iUid = KSrtp;
-	RDictionaryWriteStream out5;
-	out5.AssignLC(*MyDStore,FileUid);
-	out5.WriteInt32L(iSettings.B_srtp());
-	out5.CommitL(); 	
-	CleanupStack::PopAndDestroy(1);// out1
-	
-	FileUid.iUid = KIce;
-	RDictionaryWriteStream out6;
-	out6.AssignLC(*MyDStore,FileUid);
-	out6.WriteInt32L(iSettings.B_ice());
-	out6.CommitL(); 	
-	CleanupStack::PopAndDestroy(1);// out1
-	 
-	MyDStore->CommitL();
-	CleanupStack::PopAndDestroy(1);// Store
-
-	}
-
-
-/** 
+    path.Append (pathWithoutDrive);
+    path.Append (KtxDicFileName);
+
+    TFindFile AufFolder (CCoeEnv::Static()->FsSession());
+
+    if (KErrNone == AufFolder.FindByDir (path, KNullDesC)) {
+        User::LeaveIfError (CCoeEnv::Static()->FsSession().Delete (AufFolder.File()));
+    }
+
+    CDictionaryFileStore* MyDStore = CDictionaryFileStore::OpenLC (CCoeEnv::Static()->FsSession(),path, TUid::Uid (1));
+
+    TUid FileUid = {0x0};
+
+    FileUid.iUid = KRegistrar;
+    RDictionaryWriteStream out1;
+    out1.AssignLC (*MyDStore,FileUid);
+    out1 << iSettings.Ed_registrar();
+    out1.CommitL();
+    CleanupStack::PopAndDestroy (1);// out2
+
+    FileUid.iUid = KUsername;
+    RDictionaryWriteStream out2;
+    out2.AssignLC (*MyDStore,FileUid);
+    out2 << iSettings.Ed_user();
+    out2.CommitL();
+    CleanupStack::PopAndDestroy (1);// out2
+
+    FileUid.iUid = KPassword;
+    RDictionaryWriteStream out3;
+    out3.AssignLC (*MyDStore,FileUid);
+    out3 << iSettings.Ed_password();
+    out3.CommitL();
+    CleanupStack::PopAndDestroy (1);// out2
+
+    FileUid.iUid = KStunServer;
+    RDictionaryWriteStream out4;
+    out4.AssignLC (*MyDStore,FileUid);
+    out4 << iSettings.Ed_stun_server();
+    out4.CommitL();
+    CleanupStack::PopAndDestroy (1);// out2
+
+    FileUid.iUid = KSrtp;
+    RDictionaryWriteStream out5;
+    out5.AssignLC (*MyDStore,FileUid);
+    out5.WriteInt32L (iSettings.B_srtp());
+    out5.CommitL();
+    CleanupStack::PopAndDestroy (1);// out1
+
+    FileUid.iUid = KIce;
+    RDictionaryWriteStream out6;
+    out6.AssignLC (*MyDStore,FileUid);
+    out6.WriteInt32L (iSettings.B_ice());
+    out6.CommitL();
+    CleanupStack::PopAndDestroy (1);// out1
+
+    MyDStore->CommitL();
+    CleanupStack::PopAndDestroy (1);// Store
+
+}
+
+
+/**
  * Handle global resource changes, such as scalable UI or skin events (override)
  */
-void CSymbian_ua_guiSettingItemList::HandleResourceChange( TInt aType )
-	{
-	CAknSettingItemList::HandleResourceChange( aType );
-	SetRect( iAvkonViewAppUi->View( TUid::Uid( ESymbian_ua_guiSettingItemListViewId ) )->ClientRect() );
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
-				
-/** 
+void CSymbian_ua_guiSettingItemList::HandleResourceChange (TInt aType)
+{
+    CAknSettingItemList::HandleResourceChange (aType);
+    SetRect (iAvkonViewAppUi->View (TUid::Uid (ESymbian_ua_guiSettingItemListViewId))->ClientRect());
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
+
+/**
  * Handle key event (override)
  * @param aKeyEvent key event
  * @param aType event code
  * @return EKeyWasConsumed if the event was handled, else EKeyWasNotConsumed
  */
-TKeyResponse CSymbian_ua_guiSettingItemList::OfferKeyEventL( 
-		const TKeyEvent& aKeyEvent, 
-		TEventCode aType )
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	if ( aKeyEvent.iCode == EKeyLeftArrow 
-		|| aKeyEvent.iCode == EKeyRightArrow )
-		{
-		// allow the tab control to get the arrow keys
-		return EKeyWasNotConsumed;
-		}
-	
-	return CAknSettingItemList::OfferKeyEventL( aKeyEvent, aType );
-	}
-				
+TKeyResponse CSymbian_ua_guiSettingItemList::OfferKeyEventL (
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType)
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+    if (aKeyEvent.iCode == EKeyLeftArrow
+            || aKeyEvent.iCode == EKeyRightArrow) {
+        // allow the tab control to get the arrow keys
+        return EKeyWasNotConsumed;
+    }
+
+    return CAknSettingItemList::OfferKeyEventL (aKeyEvent, aType);
+}
+
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
index 243ff994c57092b657a7f86bcee643b8393be22e..656c761e89d464b35160cbf723354d7a03932622 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symbian_ua_gui/src/symbian_ua_guiSettingItemListView.cpp
@@ -3,7 +3,7 @@
  Name        : symbian_ua_guiSettingItemListView.cpp
  Author      : nanang
  Copyright   : (c) 2008-2009 Teluu Inc.
- Description : 
+ Description :
 ========================================================================
 */
 // [[[ begin generated region: do not modify [Generated System Includes]
@@ -36,21 +36,21 @@
  * code that could leave.
  */
 Csymbian_ua_guiSettingItemListView::Csymbian_ua_guiSettingItemListView()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
-/** 
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
+/**
  * The view's destructor removes the container from the control
  * stack and destroys it.
  */
 Csymbian_ua_guiSettingItemListView::~Csymbian_ua_guiSettingItemListView()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	// ]]] end generated region [Generated Contents]
-	
-	}
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    // ]]] end generated region [Generated Contents]
+
+}
 
 /**
  * Symbian two-phase constructor.
@@ -59,11 +59,11 @@ Csymbian_ua_guiSettingItemListView::~Csymbian_ua_guiSettingItemListView()
  * @return new instance of Csymbian_ua_guiSettingItemListView
  */
 Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewL()
-	{
-	Csymbian_ua_guiSettingItemListView* self = Csymbian_ua_guiSettingItemListView::NewLC();
-	CleanupStack::Pop( self );
-	return self;
-	}
+{
+    Csymbian_ua_guiSettingItemListView* self = Csymbian_ua_guiSettingItemListView::NewLC();
+    CleanupStack::Pop (self);
+    return self;
+}
 
 /**
  * Symbian two-phase constructor.
@@ -72,214 +72,214 @@ Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewL()
  * @return new instance of Csymbian_ua_guiSettingItemListView
  */
 Csymbian_ua_guiSettingItemListView* Csymbian_ua_guiSettingItemListView::NewLC()
-	{
-	Csymbian_ua_guiSettingItemListView* self = new ( ELeave ) Csymbian_ua_guiSettingItemListView();
-	CleanupStack::PushL( self );
-	self->ConstructL();
-	return self;
-	}
+{
+    Csymbian_ua_guiSettingItemListView* self = new (ELeave) Csymbian_ua_guiSettingItemListView();
+    CleanupStack::PushL (self);
+    self->ConstructL();
+    return self;
+}
 
 
 /**
- * Second-phase constructor for view.  
+ * Second-phase constructor for view.
  * Initialize contents from resource.
- */ 
+ */
 void Csymbian_ua_guiSettingItemListView::ConstructL()
-	{
-	// [[[ begin generated region: do not modify [Generated Code]
-	BaseConstructL( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_VIEW );
-	// ]]] end generated region [Generated Code]
-	
-	// add your own initialization code here
-	}
-	
+{
+    // [[[ begin generated region: do not modify [Generated Code]
+    BaseConstructL (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_VIEW);
+    // ]]] end generated region [Generated Code]
+
+    // add your own initialization code here
+}
+
 /**
  * @return The UID for this view
  */
 TUid Csymbian_ua_guiSettingItemListView::Id() const
-	{
-	return TUid::Uid( ESymbian_ua_guiSettingItemListViewId );
-	}
+{
+    return TUid::Uid (ESymbian_ua_guiSettingItemListViewId);
+}
 
 /**
  * Handle a command for this view (override)
  * @param aCommand command id to be handled
  */
-void Csymbian_ua_guiSettingItemListView::HandleCommandL( TInt aCommand )
-	{   
-	// [[[ begin generated region: do not modify [Generated Code]
-	TBool commandHandled = EFalse;
-	switch ( aCommand )
-		{	// code to dispatch to the AknView's menu and CBA commands is generated here
-	
-		case EAknSoftkeySave:
-			commandHandled = HandleControlPaneRightSoftKeyPressedL( aCommand );
-			break;
-		case ESymbian_ua_guiSettingItemListViewMenuItem1Command:
-			commandHandled = HandleChangeSelectedSettingItemL( aCommand );
-			break;
-		default:
-			break;
-		}
-	
-		
-	if ( !commandHandled ) 
-		{
-	
-		}
-	// ]]] end generated region [Generated Code]
-	
-	}
+void Csymbian_ua_guiSettingItemListView::HandleCommandL (TInt aCommand)
+{
+    // [[[ begin generated region: do not modify [Generated Code]
+    TBool commandHandled = EFalse;
+
+    switch (aCommand) {	// code to dispatch to the AknView's menu and CBA commands is generated here
+
+        case EAknSoftkeySave:
+            commandHandled = HandleControlPaneRightSoftKeyPressedL (aCommand);
+            break;
+        case ESymbian_ua_guiSettingItemListViewMenuItem1Command:
+            commandHandled = HandleChangeSelectedSettingItemL (aCommand);
+            break;
+        default:
+            break;
+    }
+
+
+    if (!commandHandled) {
+
+    }
+
+    // ]]] end generated region [Generated Code]
+
+}
 
 /**
- *	Handles user actions during activation of the view, 
+ *	Handles user actions during activation of the view,
  *	such as initializing the content.
  */
-void Csymbian_ua_guiSettingItemListView::DoActivateL(
-		const TVwsViewId& /*aPrevViewId*/,
-		TUid /*aCustomMessageId*/,
-		const TDesC8& /*aCustomMessage*/ )
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	SetupStatusPaneL();
-	
-	CEikButtonGroupContainer* cba = AppUi()->Cba();
-	if ( cba != NULL ) 
-		{
-		cba->MakeVisible( EFalse );
-		}
-	
-	if ( iSymbian_ua_guiSettingItemList == NULL )
-		{
-		iSettings = TSymbian_ua_guiSettingItemListSettings::NewL();
-		iSymbian_ua_guiSettingItemList = new ( ELeave ) CSymbian_ua_guiSettingItemList( *iSettings, this );
-		iSymbian_ua_guiSettingItemList->SetMopParent( this );
-		iSymbian_ua_guiSettingItemList->ConstructFromResourceL( R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST );
-		iSymbian_ua_guiSettingItemList->ActivateL();
-		iSymbian_ua_guiSettingItemList->LoadSettingValuesL();
-		iSymbian_ua_guiSettingItemList->LoadSettingsL();
-		AppUi()->AddToStackL( *this, iSymbian_ua_guiSettingItemList );
-		} 
-	// ]]] end generated region [Generated Contents]
-	
-	}
+void Csymbian_ua_guiSettingItemListView::DoActivateL (
+    const TVwsViewId& /*aPrevViewId*/,
+    TUid /*aCustomMessageId*/,
+    const TDesC8& /*aCustomMessage*/)
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    SetupStatusPaneL();
+
+    CEikButtonGroupContainer* cba = AppUi()->Cba();
+
+    if (cba != NULL) {
+        cba->MakeVisible (EFalse);
+    }
+
+    if (iSymbian_ua_guiSettingItemList == NULL) {
+        iSettings = TSymbian_ua_guiSettingItemListSettings::NewL();
+        iSymbian_ua_guiSettingItemList = new (ELeave) CSymbian_ua_guiSettingItemList (*iSettings, this);
+        iSymbian_ua_guiSettingItemList->SetMopParent (this);
+        iSymbian_ua_guiSettingItemList->ConstructFromResourceL (R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_SYMBIAN_UA_GUI_SETTING_ITEM_LIST);
+        iSymbian_ua_guiSettingItemList->ActivateL();
+        iSymbian_ua_guiSettingItemList->LoadSettingValuesL();
+        iSymbian_ua_guiSettingItemList->LoadSettingsL();
+        AppUi()->AddToStackL (*this, iSymbian_ua_guiSettingItemList);
+    }
+
+    // ]]] end generated region [Generated Contents]
+
+}
 
 /**
  */
 void Csymbian_ua_guiSettingItemListView::DoDeactivate()
-	{
-	// [[[ begin generated region: do not modify [Generated Contents]
-	CleanupStatusPane();
-	
-	CEikButtonGroupContainer* cba = AppUi()->Cba();
-	if ( cba != NULL ) 
-		{
-		cba->MakeVisible( ETrue );
-		cba->DrawDeferred();
-		}
-	
-	if ( iSymbian_ua_guiSettingItemList != NULL )
-		{
-		AppUi()->RemoveFromStack( iSymbian_ua_guiSettingItemList );
-		delete iSymbian_ua_guiSettingItemList;
-		iSymbian_ua_guiSettingItemList = NULL;
-		delete iSettings;
-		iSettings = NULL;
-		}
-	// ]]] end generated region [Generated Contents]
-	
-	}
+{
+    // [[[ begin generated region: do not modify [Generated Contents]
+    CleanupStatusPane();
+
+    CEikButtonGroupContainer* cba = AppUi()->Cba();
+
+    if (cba != NULL) {
+        cba->MakeVisible (ETrue);
+        cba->DrawDeferred();
+    }
+
+    if (iSymbian_ua_guiSettingItemList != NULL) {
+        AppUi()->RemoveFromStack (iSymbian_ua_guiSettingItemList);
+        delete iSymbian_ua_guiSettingItemList;
+        iSymbian_ua_guiSettingItemList = NULL;
+        delete iSettings;
+        iSettings = NULL;
+    }
+
+    // ]]] end generated region [Generated Contents]
+
+}
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiSettingItemListView::SetupStatusPaneL()
-	{
-	// reset the context pane
-	TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
-	CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
-		StatusPane()->PaneCapabilities( contextPaneUid );
-	if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
-		{
-		CAknContextPane* context = static_cast< CAknContextPane* > ( 
-			StatusPane()->ControlL( contextPaneUid ) );
-		context->SetPictureToDefaultL();
-		}
-	
-	// setup the title pane
-	TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
-	CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
-		StatusPane()->PaneCapabilities( titlePaneUid );
-	if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
-		{
-		CAknTitlePane* title = static_cast< CAknTitlePane* >( 
-			StatusPane()->ControlL( titlePaneUid ) );
-		TResourceReader reader;
-		iEikonEnv->CreateResourceReaderLC( reader, R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_TITLE_RESOURCE );
-		title->SetFromResourceL( reader );
-		CleanupStack::PopAndDestroy(); // reader internal state
-		}
-				
-	}
+{
+    // reset the context pane
+    TUid contextPaneUid = TUid::Uid (EEikStatusPaneUidContext);
+    CEikStatusPaneBase::TPaneCapabilities subPaneContext =
+        StatusPane()->PaneCapabilities (contextPaneUid);
+
+    if (subPaneContext.IsPresent() && subPaneContext.IsAppOwned()) {
+        CAknContextPane* context = static_cast< CAknContextPane* > (
+                                       StatusPane()->ControlL (contextPaneUid));
+        context->SetPictureToDefaultL();
+    }
+
+    // setup the title pane
+    TUid titlePaneUid = TUid::Uid (EEikStatusPaneUidTitle);
+    CEikStatusPaneBase::TPaneCapabilities subPaneTitle =
+        StatusPane()->PaneCapabilities (titlePaneUid);
+
+    if (subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned()) {
+        CAknTitlePane* title = static_cast< CAknTitlePane* > (
+                                   StatusPane()->ControlL (titlePaneUid));
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC (reader, R_SYMBIAN_UA_GUI_SETTING_ITEM_LIST_TITLE_RESOURCE);
+        title->SetFromResourceL (reader);
+        CleanupStack::PopAndDestroy(); // reader internal state
+    }
+
+}
 // ]]] end generated function
 
 // [[[ begin generated function: do not modify
 void Csymbian_ua_guiSettingItemListView::CleanupStatusPane()
-	{
-	}
+{
+}
 // ]]] end generated function
 
-/** 
+/**
  * Handle status pane size change for this view (override)
  */
 void Csymbian_ua_guiSettingItemListView::HandleStatusPaneSizeChange()
-	{
-	CAknView::HandleStatusPaneSizeChange();
-	
-	// this may fail, but we're not able to propagate exceptions here
-	TInt result;
-	TRAP( result, SetupStatusPaneL() ); 
-	}
-	
-/** 
+{
+    CAknView::HandleStatusPaneSizeChange();
+
+    // this may fail, but we're not able to propagate exceptions here
+    TInt result;
+    TRAP (result, SetupStatusPaneL());
+}
+
+/**
  * Handle the selected event.
  * @param aCommand the command id invoked
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiSettingItemListView::HandleChangeSelectedSettingItemL( TInt aCommand )
-	{
-	iSymbian_ua_guiSettingItemList->ChangeSelectedItemL();
-	return ETrue;
-	}
-								
-/** 
+TBool Csymbian_ua_guiSettingItemListView::HandleChangeSelectedSettingItemL (TInt aCommand)
+{
+    iSymbian_ua_guiSettingItemList->ChangeSelectedItemL();
+    return ETrue;
+}
+
+/**
  * Handle the rightSoftKeyPressed event.
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiSettingItemListView::HandleControlPaneRightSoftKeyPressedL( TInt aCommand )
-	{
-	TUint8 domain[256] = {0};
-	TPtr8 cDomain(domain, sizeof(domain));
-	TUint8 user[64] = {0};
-	TPtr8 cUser(user, sizeof(user));
-	TUint8 pass[64] = {0};
-	TPtr8 cPass(pass, sizeof(pass));
-	
-	cDomain.Copy(iSettings->Ed_registrar());
-	cUser.Copy(iSettings->Ed_user());
-	cPass.Copy(iSettings->Ed_password());
-	symbian_ua_set_account((char*)domain, (char*)user, (char*)pass, false, false);
-	
-	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiContainerViewId));
-	return ETrue;
-	}
-
-/** 
+TBool Csymbian_ua_guiSettingItemListView::HandleControlPaneRightSoftKeyPressedL (TInt aCommand)
+{
+    TUint8 domain[256] = {0};
+    TPtr8 cDomain (domain, sizeof (domain));
+    TUint8 user[64] = {0};
+    TPtr8 cUser (user, sizeof (user));
+    TUint8 pass[64] = {0};
+    TPtr8 cPass (pass, sizeof (pass));
+
+    cDomain.Copy (iSettings->Ed_registrar());
+    cUser.Copy (iSettings->Ed_user());
+    cPass.Copy (iSettings->Ed_password());
+    symbian_ua_set_account ( (char*) domain, (char*) user, (char*) pass, false, false);
+
+    AppUi()->ActivateLocalViewL (TUid::Uid (ESymbian_ua_guiContainerViewId));
+    return ETrue;
+}
+
+/**
  * Handle the selected event.
  * @param aCommand the command id invoked
  * @return ETrue if the command was handled, EFalse if not
  */
-TBool Csymbian_ua_guiSettingItemListView::HandleCancelMenuItemSelectedL( TInt aCommand )
-	{
-	AppUi()->ActivateLocalViewL(TUid::Uid(ESymbian_ua_guiContainerViewId));
-	return ETrue;
-	}
-				
+TBool Csymbian_ua_guiSettingItemListView::HandleCancelMenuItemSelectedL (TInt aCommand)
+{
+    AppUi()->ActivateLocalViewL (TUid::Uid (ESymbian_ua_guiContainerViewId));
+    return ETrue;
+}
+
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp
index b270fa71b2efca391ffd58cc25f9875f6252fd26..f31db07f1098ec5f0cf544ddc1977e801117ccad 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/app_main.cpp
@@ -1,5 +1,5 @@
 /* $Id: app_main.cpp 2821 2009-06-30 13:37:26Z nanang $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 #include <pjmedia-audiodev/audiodev.h>
 #include <pjmedia/delaybuf.h>
@@ -45,24 +45,24 @@ pj_pool_t *pool;
 pjmedia_delay_buf *delaybuf;
 
 /* Logging callback */
-static void log_writer(int level, const char *buf, unsigned len)
+static void log_writer (int level, const char *buf, unsigned len)
 {
     static wchar_t buf16[PJ_LOG_MAX_SIZE];
 
-    PJ_UNUSED_ARG(level);
+    PJ_UNUSED_ARG (level);
 
-    pj_ansi_to_unicode(buf, len, buf16, PJ_ARRAY_SIZE(buf16));
+    pj_ansi_to_unicode (buf, len, buf16, PJ_ARRAY_SIZE (buf16));
 
-    TPtrC16 aBuf((const TUint16*)buf16, (TInt)len);
-    console->Write(aBuf);
+    TPtrC16 aBuf ( (const TUint16*) buf16, (TInt) len);
+    console->Write (aBuf);
 }
 
 /* perror util */
-static void app_perror(const char *title, pj_status_t status)
+static void app_perror (const char *title, pj_status_t status)
 {
     char errmsg[PJ_ERR_MSG_SIZE];
-    pj_strerror(status, errmsg, sizeof(errmsg));
-    PJ_LOG(1,(THIS_FILE, "Error: %s: %s", title, errmsg));
+    pj_strerror (status, errmsg, sizeof (errmsg));
+    PJ_LOG (1, (THIS_FILE, "Error: %s: %s", title, errmsg));
 }
 
 /* Application init */
@@ -72,59 +72,64 @@ static pj_status_t app_init()
     pj_status_t status;
 
     /* Redirect log */
-    pj_log_set_log_func((void (*)(int,const char*,int)) &log_writer);
-    pj_log_set_decor(PJ_LOG_HAS_NEWLINE);
-    pj_log_set_level(3);
+    pj_log_set_log_func ( (void (*) (int,const char*,int)) &log_writer);
+    pj_log_set_decor (PJ_LOG_HAS_NEWLINE);
+    pj_log_set_level (3);
 
     /* Init pjlib */
     status = pj_init();
+
     if (status != PJ_SUCCESS) {
-    	app_perror("pj_init()", status);
-    	return status;
+        app_perror ("pj_init()", status);
+        return status;
     }
 
-    pj_caching_pool_init(&cp, NULL, 0);
+    pj_caching_pool_init (&cp, NULL, 0);
 
     /* Init sound subsystem */
-    status = pjmedia_aud_subsys_init(&cp.factory);
+    status = pjmedia_aud_subsys_init (&cp.factory);
+
     if (status != PJ_SUCCESS) {
-    	app_perror("pjmedia_snd_init()", status);
-        pj_caching_pool_destroy(&cp);
-    	pj_shutdown();
-    	return status;
+        app_perror ("pjmedia_snd_init()", status);
+        pj_caching_pool_destroy (&cp);
+        pj_shutdown();
+        return status;
     }
 
     count = pjmedia_aud_dev_count();
-    PJ_LOG(3,(THIS_FILE, "Device count: %d", count));
+    PJ_LOG (3, (THIS_FILE, "Device count: %d", count));
+
     for (i=0; i<count; ++i) {
-    	pjmedia_aud_dev_info info;
-    	pj_status_t status;
-
-    	status = pjmedia_aud_dev_get_info(i, &info);
-    	pj_assert(status == PJ_SUCCESS);
-    	PJ_LOG(3, (THIS_FILE, "%d: %s %d/%d %dHz",
-    		   i, info.name, info.input_count, info.output_count,
-    		   info.default_samples_per_sec));
+        pjmedia_aud_dev_info info;
+        pj_status_t status;
+
+        status = pjmedia_aud_dev_get_info (i, &info);
+        pj_assert (status == PJ_SUCCESS);
+        PJ_LOG (3, (THIS_FILE, "%d: %s %d/%d %dHz",
+                    i, info.name, info.input_count, info.output_count,
+                    info.default_samples_per_sec));
     }
 
     /* Create pool */
-    pool = pj_pool_create(&cp.factory, THIS_FILE, 512, 512, NULL);
+    pool = pj_pool_create (&cp.factory, THIS_FILE, 512, 512, NULL);
+
     if (pool == NULL) {
-    	app_perror("pj_pool_create()", status);
-        pj_caching_pool_destroy(&cp);
-    	pj_shutdown();
-    	return status;
+        app_perror ("pj_pool_create()", status);
+        pj_caching_pool_destroy (&cp);
+        pj_shutdown();
+        return status;
     }
 
     /* Init delay buffer */
-    status = pjmedia_delay_buf_create(pool, THIS_FILE, CLOCK_RATE,
-				      SAMPLES_PER_FRAME, CHANNEL_COUNT,
-				      0, 0, &delaybuf);
+    status = pjmedia_delay_buf_create (pool, THIS_FILE, CLOCK_RATE,
+                                       SAMPLES_PER_FRAME, CHANNEL_COUNT,
+                                       0, 0, &delaybuf);
+
     if (status != PJ_SUCCESS) {
-    	app_perror("pjmedia_delay_buf_create()", status);
+        app_perror ("pjmedia_delay_buf_create()", status);
         //pj_caching_pool_destroy(&cp);
-    	//pj_shutdown();
-    	//return status;
+        //pj_shutdown();
+        //return status;
     }
 
     return PJ_SUCCESS;
@@ -132,16 +137,16 @@ static pj_status_t app_init()
 
 
 /* Sound capture callback */
-static pj_status_t rec_cb(void *user_data,
-			  pjmedia_frame *frame)
+static pj_status_t rec_cb (void *user_data,
+                           pjmedia_frame *frame)
 {
-    PJ_UNUSED_ARG(user_data);
+    PJ_UNUSED_ARG (user_data);
 
-    pjmedia_delay_buf_put(delaybuf, (pj_int16_t*)frame->buf);
+    pjmedia_delay_buf_put (delaybuf, (pj_int16_t*) frame->buf);
 
     if (frame->size != SAMPLES_PER_FRAME*2) {
-		PJ_LOG(3, (THIS_FILE, "Size captured = %u",
-	 		   frame->size));
+        PJ_LOG (3, (THIS_FILE, "Size captured = %u",
+                    frame->size));
     }
 
     ++rec_cnt;
@@ -149,12 +154,12 @@ static pj_status_t rec_cb(void *user_data,
 }
 
 /* Play cb */
-static pj_status_t play_cb(void *user_data,
-			   pjmedia_frame *frame)
+static pj_status_t play_cb (void *user_data,
+                            pjmedia_frame *frame)
 {
-    PJ_UNUSED_ARG(user_data);
+    PJ_UNUSED_ARG (user_data);
 
-    pjmedia_delay_buf_get(delaybuf, (pj_int16_t*)frame->buf);
+    pjmedia_delay_buf_get (delaybuf, (pj_int16_t*) frame->buf);
     frame->size = SAMPLES_PER_FRAME*2;
     frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
 
@@ -163,39 +168,41 @@ static pj_status_t play_cb(void *user_data,
 }
 
 /* Start sound */
-static pj_status_t snd_start(unsigned flag)
+static pj_status_t snd_start (unsigned flag)
 {
     pjmedia_aud_param param;
     pj_status_t status;
 
     if (strm != NULL) {
-    	app_perror("snd already open", PJ_EINVALIDOP);
-    	return PJ_EINVALIDOP;
+        app_perror ("snd already open", PJ_EINVALIDOP);
+        return PJ_EINVALIDOP;
     }
 
-    pjmedia_aud_dev_default_param(0, &param);
+    pjmedia_aud_dev_default_param (0, &param);
     param.channel_count = CHANNEL_COUNT;
     param.clock_rate = CLOCK_RATE;
     param.samples_per_frame = SAMPLES_PER_FRAME;
     param.dir = (pjmedia_dir) flag;
 
-    status = pjmedia_aud_stream_create(&param, &rec_cb, &play_cb, NULL, &strm);
+    status = pjmedia_aud_stream_create (&param, &rec_cb, &play_cb, NULL, &strm);
+
     if (status != PJ_SUCCESS) {
-    	app_perror("snd open", status);
-    	return status;
+        app_perror ("snd open", status);
+        return status;
     }
 
     rec_cnt = play_cnt = 0;
-    pj_gettimeofday(&t_start);
+    pj_gettimeofday (&t_start);
+
+    pjmedia_delay_buf_reset (delaybuf);
 
-    pjmedia_delay_buf_reset(delaybuf);
+    status = pjmedia_aud_stream_start (strm);
 
-    status = pjmedia_aud_stream_start(strm);
     if (status != PJ_SUCCESS) {
-    	app_perror("snd start", status);
-    	pjmedia_aud_stream_destroy(strm);
-    	strm = NULL;
-    	return status;
+        app_perror ("snd start", status);
+        pjmedia_aud_stream_destroy (strm);
+        strm = NULL;
+        return status;
     }
 
     return PJ_SUCCESS;
@@ -208,23 +215,25 @@ static pj_status_t snd_stop()
     pj_status_t status;
 
     if (strm == NULL) {
-    	app_perror("snd not open", PJ_EINVALIDOP);
-    	return PJ_EINVALIDOP;
+        app_perror ("snd not open", PJ_EINVALIDOP);
+        return PJ_EINVALIDOP;
     }
 
-    status = pjmedia_aud_stream_stop(strm);
+    status = pjmedia_aud_stream_stop (strm);
+
     if (status != PJ_SUCCESS) {
-    	app_perror("snd failed to stop", status);
+        app_perror ("snd failed to stop", status);
     }
-    status = pjmedia_aud_stream_destroy(strm);
+
+    status = pjmedia_aud_stream_destroy (strm);
     strm = NULL;
 
-    pj_gettimeofday(&now);
-    PJ_TIME_VAL_SUB(now, t_start);
+    pj_gettimeofday (&now);
+    PJ_TIME_VAL_SUB (now, t_start);
 
-    PJ_LOG(3,(THIS_FILE, "Duration: %d.%03d", now.sec, now.msec));
-    PJ_LOG(3,(THIS_FILE, "Captured: %d", rec_cnt));
-    PJ_LOG(3,(THIS_FILE, "Played: %d", play_cnt));
+    PJ_LOG (3, (THIS_FILE, "Duration: %d.%03d", now.sec, now.msec));
+    PJ_LOG (3, (THIS_FILE, "Captured: %d", rec_cnt));
+    PJ_LOG (3, (THIS_FILE, "Played: %d", play_cnt));
 
     return status;
 }
@@ -233,12 +242,12 @@ static pj_status_t snd_stop()
 static void app_fini()
 {
     if (strm)
-    	snd_stop();
+        snd_stop();
 
     pjmedia_aud_subsys_shutdown();
-    pjmedia_delay_buf_destroy(delaybuf);
-    pj_pool_release(pool);
-    pj_caching_pool_destroy(&cp);
+    pjmedia_delay_buf_destroy (delaybuf);
+    pj_pool_release (pool);
+    pj_caching_pool_destroy (&cp);
     pj_shutdown();
 }
 
@@ -251,37 +260,37 @@ static void app_fini()
 
 class ConsoleUI : public CActive
 {
-public:
-    ConsoleUI(CConsoleBase *con);
+    public:
+        ConsoleUI (CConsoleBase *con);
 
-    // Run console UI
-    void Run();
+        // Run console UI
+        void Run();
 
-    // Stop
-    void Stop();
+        // Stop
+        void Stop();
 
-protected:
-    // Cancel asynchronous read.
-    void DoCancel();
+    protected:
+        // Cancel asynchronous read.
+        void DoCancel();
 
-    // Implementation: called when read has completed.
-    void RunL();
+        // Implementation: called when read has completed.
+        void RunL();
 
-private:
-    CConsoleBase *con_;
+    private:
+        CConsoleBase *con_;
 };
 
 
-ConsoleUI::ConsoleUI(CConsoleBase *con)
-: CActive(EPriorityUserInput), con_(con)
+ConsoleUI::ConsoleUI (CConsoleBase *con)
+        : CActive (EPriorityUserInput), con_ (con)
 {
-    CActiveScheduler::Add(this);
+    CActiveScheduler::Add (this);
 }
 
 // Run console UI
 void ConsoleUI::Run()
 {
-    con_->Read(iStatus);
+    con_->Read (iStatus);
     SetActive();
 }
 
@@ -299,13 +308,13 @@ void ConsoleUI::DoCancel()
 
 static void PrintMenu()
 {
-    PJ_LOG(3, (THIS_FILE, "\n\n"
-	    "Menu:\n"
-	    "  a    Start bidir sound\n"
-	    "  t    Start recorder\n"
-	    "  p    Start player\n"
-	    "  d    Stop & close sound\n"
-	    "  w    Quit\n"));
+    PJ_LOG (3, (THIS_FILE, "\n\n"
+                "Menu:\n"
+                "  a    Start bidir sound\n"
+                "  t    Start recorder\n"
+                "  p    Start player\n"
+                "  d    Stop & close sound\n"
+                "  w    Quit\n"));
 }
 
 // Implementation: called when read has completed.
@@ -315,33 +324,33 @@ void ConsoleUI::RunL()
     pj_bool_t reschedule = PJ_TRUE;
 
     switch (kc) {
-    case 'w':
-	    snd_stop();
-	    CActiveScheduler::Stop();
-	    reschedule = PJ_FALSE;
-	    break;
-    case 'a':
-    	snd_start(PJMEDIA_DIR_CAPTURE_PLAYBACK);
-	break;
-    case 't':
-    	snd_start(PJMEDIA_DIR_CAPTURE);
-	break;
-    case 'p':
-    	snd_start(PJMEDIA_DIR_PLAYBACK);
-    break;
-    case 'd':
-    	snd_stop();
-	break;
-    default:
-	    PJ_LOG(3,(THIS_FILE, "Keycode '%c' (%d) is pressed",
-		      kc, kc));
-	    break;
+        case 'w':
+            snd_stop();
+            CActiveScheduler::Stop();
+            reschedule = PJ_FALSE;
+            break;
+        case 'a':
+            snd_start (PJMEDIA_DIR_CAPTURE_PLAYBACK);
+            break;
+        case 't':
+            snd_start (PJMEDIA_DIR_CAPTURE);
+            break;
+        case 'p':
+            snd_start (PJMEDIA_DIR_PLAYBACK);
+            break;
+        case 'd':
+            snd_stop();
+            break;
+        default:
+            PJ_LOG (3, (THIS_FILE, "Keycode '%c' (%d) is pressed",
+                        kc, kc));
+            break;
     }
 
     PrintMenu();
 
     if (reschedule)
-	Run();
+        Run();
 }
 
 
@@ -352,7 +361,7 @@ int app_main()
         return -1;
 
     // Run the UI
-    ConsoleUI *con = new ConsoleUI(console);
+    ConsoleUI *con = new ConsoleUI (console);
 
     con->Run();
 
diff --git a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp
index 5ed4eb83ee1f7cd6a95611455129221fb5f881a9..5c6f1fec3bb1abf417fabb2788ac90ab748b47c2 100644
--- a/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp
+++ b/sflphone-common/libs/pjproject/pjsip-apps/src/symsndtest/main_symbian.cpp
@@ -1,5 +1,5 @@
 /* $Id: main_symbian.cpp 2506 2009-03-12 18:11:37Z bennylp $ */
-/* 
+/*
  * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
  * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
  *
@@ -15,7 +15,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include <e32std.h>
@@ -29,7 +29,7 @@
 CConsoleBase* console;
 
 // Needed by APS
-TPtrC APP_UID = _L("A000000E");
+TPtrC APP_UID = _L ("A000000E");
 
 int app_main();
 
@@ -39,13 +39,13 @@ int app_main();
 LOCAL_C void DoStartL()
 {
     CActiveScheduler *scheduler = new (ELeave) CActiveScheduler;
-    CleanupStack::PushL(scheduler);
-    CActiveScheduler::Install(scheduler);
+    CleanupStack::PushL (scheduler);
+    CActiveScheduler::Install (scheduler);
 
     app_main();
 
-    CActiveScheduler::Install(NULL);
-    CleanupStack::Pop(scheduler);
+    CActiveScheduler::Install (NULL);
+    CleanupStack::Pop (scheduler);
     delete scheduler;
 }
 
@@ -62,11 +62,12 @@ GLDEF_C TInt E32Main()
     CTrapCleanup* cleanup = CTrapCleanup::New();
 
     // Create output console
-    TRAPD(createError, console = Console::NewL(_L("Console"), TSize(KConsFullScreen,KConsFullScreen)));
+    TRAPD (createError, console = Console::NewL (_L ("Console"), TSize (KConsFullScreen,KConsFullScreen)));
+
     if (createError)
         return createError;
 
-    TRAPD(startError, DoStartL());
+    TRAPD (startError, DoStartL());
 
     //console->Printf(_L("[press any key to close]\n"));
     //console->Getch();
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp
index bf9d1c2954a93a8037b41c16bfed88337955862e..4636188df2dfd366049b1d3face4d96bd4779e9c 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_auth_parser_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_auth_parser_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp
index ace0c93ac9d35291644ef89155df284b2e4614b0..7ecfe9b618ee3c7299be6cb74f58ff657d20d731 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_dialog_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_dialog_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp
index dd16a70be1921b2b4800d7416cba5a213e9bf8df..583dd0556a4ffc3b014b51723ad351ccace96e0a 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_endpoint_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_endpoint_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp
index 31a09b6f98ffdd64ba2fcfe1c43e9e55581ed0a5..eb88b03079308382c1a0ece912e48eed64a9439b 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_parser_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_parser_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp
index a65c880b85295c93af9034a11f2d6ef3530f7634..ab1e8836992412c6558421cde688fae566dd67c9 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_tel_uri_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_tel_uri_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp
index 94185c157f7194c56ecc4601a3f4e12c8c5e791c..347fc38ac323b7217126b1f03d0c1f156305b175 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_transport_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_transport_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp
index 177a9c16f110ad0afd3d5d9fee0626310436810e..a78aad5f54ee2c88163f681d7b5e602839adc49a 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_proxy_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_util_proxy_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp
index 10b481d29791ac83342702a5a7be8209e262e124..488447ec42b4b73db2679af87364a20926a95841 100644
--- a/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp
+++ b/sflphone-common/libs/pjproject/pjsip/src/pjsip/sip_util_wrap.cpp
@@ -1,5 +1,5 @@
 /* $Id: sip_util_wrap.cpp 2873 2009-08-13 11:54:35Z nanang $ */
-/* 
+/*
  * Copyright (C) 2009 Teluu Inc. (http://www.teluu.com)
  *
  * This program is free software; you can redistribute it and/or modify
@@ -14,7 +14,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  *  Additional permission under GNU GPL version 3 section 7:
  *
diff --git a/sflphone-common/libs/pjproject/third_party/build/g7221/Makefile b/sflphone-common/libs/pjproject/third_party/build/g7221/Makefile
deleted file mode 100644
index 60590307f600325294032ecd76a674f9a4e4f2c2..0000000000000000000000000000000000000000
--- a/sflphone-common/libs/pjproject/third_party/build/g7221/Makefile
+++ /dev/null
@@ -1,63 +0,0 @@
-include ../../../build.mak
-include ../../../build/common.mak
-
-export LIBDIR := ../../lib
-
-RULES_MAK := $(PJDIR)/build/rules.mak
-
-export G7221_CODEC_LIB := ../../lib/libg7221codec-$(TARGET_NAME)$(LIBEXT)
-
-###############################################################################
-# Gather all flags.
-#
-export _CFLAGS 	:= $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
-		   $(CFLAGS) $(CC_INC)../.. $(CC_INC)../../g7221/common \
-		   $(CC_INC)../../g7221/common/stl-files \
-		   $(CC_INC)../../../pjlib/include
-export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
-		   $(HOST_CXXFLAGS) $(CXXFLAGS)
-export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
-		   $(LDFLAGS) 
-
-export G7221_CODEC_SRCDIR = ../../g7221
-export G7221_CODEC_OBJS = common/common.o common/huff_tab.o common/tables.o \
-                	common/basic_op.o  \
-                	decode/coef2sam.o decode/dct4_s.o decode/decoder.o \
-                	encode/dct4_a.o encode/sam2coef.o encode/encoder.o
-
-export G7221_CODEC_CFLAGS = $(_CFLAGS)
-
-
-export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
-###############################################################################
-# Main entry
-#
-# $(TARGET) is defined in os-$(OS_NAME).mak file in current directory.
-#
-TARGETS := libg7221codec
-
-all: $(TARGETS)
-
-doc:
-	cd .. && doxygen docs/doxygen.cfg
-
-dep: depend
-distclean: realclean
-
-.PHONY: dep depend libg7221codec clean realclean distclean
-
-libg7221codec:
-	$(MAKE) -f $(RULES_MAK) APP=G7221_CODEC app=libg7221codec $(G7221_CODEC_LIB)
-
-clean print_lib:
-	$(MAKE) -f $(RULES_MAK) APP=G7221_CODEC app=libg7221codec $@
-
-realclean:
-	$(subst @@,$(subst /,$(HOST_PSEP),.ilbc-$(TARGET_NAME).depend),$(HOST_RMR))
-	
-	$(MAKE) -f $(RULES_MAK) APP=G7221_CODEC app=libg7221codec $@
-
-depend:
-	$(MAKE) -f $(RULES_MAK) APP=G7221_CODEC app=libg7221codec $@
-
-
diff --git a/sflphone-common/libs/pjproject/third_party/build/g7221/libg7221codec.dsp b/sflphone-common/libs/pjproject/third_party/build/g7221/libg7221codec.dsp
deleted file mode 100644
index 82cc644ab743d57463bffc389fd8ad8d2ed2fc12..0000000000000000000000000000000000000000
--- a/sflphone-common/libs/pjproject/third_party/build/g7221/libg7221codec.dsp
+++ /dev/null
@@ -1,186 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libg7221codec" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Static Library" 0x0104
-
-CFG=libg7221codec - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "libg7221codec.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "libg7221codec.mak" CFG="libg7221codec - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "libg7221codec - Win32 Release" (based on "Win32 (x86) Static Library")
-!MESSAGE "libg7221codec - Win32 Debug" (based on "Win32 (x86) Static Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "libg7221codec - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "output\libg7221codec-i386-win32-vc6-release"
-# PROP Intermediate_Dir "output\libg7221codec-i386-win32-vc6-release"
-# PROP Target_Dir ""
-F90=df.exe
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../.." /I "../../g7221/common" /I "../../g7221/common/stl-files" /I "../../../pjlib/include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /c
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\libg7221codec-i386-win32-vc6-release.lib"
-
-!ELSEIF  "$(CFG)" == "libg7221codec - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "output\libg7221codec-i386-win32-vc6-debug"
-# PROP Intermediate_Dir "output\libg7221codec-i386-win32-vc6-debug"
-# PROP Target_Dir ""
-F90=df.exe
-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../.." /I "../../g7221/common" /I "../../g7221/common/stl-files" /I "../../../pjlib/include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /GZ /c
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LIB32=link.exe -lib
-# ADD BASE LIB32 /nologo
-# ADD LIB32 /nologo /out:"..\..\lib\libg7221codec-i386-win32-vc6-debug.lib"
-
-!ENDIF 
-
-# Begin Target
-
-# Name "libg7221codec - Win32 Release"
-# Name "libg7221codec - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Group "common"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\g7221\common\basic_op.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\basic_op.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\basic_op_i.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\common.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\count.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\defs.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\huff_def.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\huff_tab.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\huff_tab.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\tables.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\tables.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\common\typedef.h
-# End Source File
-# End Group
-# Begin Group "decode"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\g7221\decode\coef2sam.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\decode\dct4_s.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\decode\dct4_s.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\decode\decoder.c
-# End Source File
-# End Group
-# Begin Group "encode"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=..\..\g7221\encode\dct4_a.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\encode\dct4_a.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\encode\encoder.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\g7221\encode\sam2coef.c
-# End Source File
-# End Group
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# End Group
-# End Target
-# End Project
diff --git a/sflphone-common/libs/pjproject/third_party/build/g7221/libg7221codec.vcproj b/sflphone-common/libs/pjproject/third_party/build/g7221/libg7221codec.vcproj
deleted file mode 100644
index fb436777bd37b28292d242513f13a3afe38028c2..0000000000000000000000000000000000000000
--- a/sflphone-common/libs/pjproject/third_party/build/g7221/libg7221codec.vcproj
+++ /dev/null
@@ -1,6328 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="libg7221codec"
-	ProjectGUID="{2A3F241E-682C-47E1-9543-DC28708B406A}"
-	RootNamespace="libg7221codec"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="Windows Mobile 6 Standard SDK (ARMV4I)"
-		/>
-		<Platform
-			Name="Windows Mobile 6 Professional SDK (ARMV4I)"
-		/>
-		<Platform
-			Name="Pocket PC 2003 (ARMV4)"
-		/>
-		<Platform
-			Name="Smartphone 2003 (ARMV4)"
-		/>
-		<Platform
-			Name="Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-		/>
-		<Platform
-			Name="Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Release|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Pocket PC 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Smartphone 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Pocket PC 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Smartphone 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Smartphone 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-debug-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-common-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				Optimization="2"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Pocket PC 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Smartphone 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-static-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Win32"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-win32-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="2"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-$(PlatformName)-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6std-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm6-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm6pro-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm2003-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm2003sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5ppc-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-			ConfigurationType="4"
-			InheritedPropertySheets="..\..\..\build\vs\pjproject-vs8-release-dynamic-defaults.vsprops;..\..\..\build\vs\pjproject-vs8-wm5-release-defaults.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			CharacterSet="1"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				ExecutionBucket="7"
-				AdditionalIncludeDirectories="../..;../../g7221/common;../../../pjlib/include"
-				PreprocessorDefinitions="_LIB;"
-				PrecompiledHeaderFile=""
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="..\..\lib\$(ProjectName)-$(TargetCPU)-wm5sp-vc$(VSVer)-$(ConfigurationName).lib"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCCodeSignTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-			<DeploymentTool
-				ForceDirty="-1"
-				RemoteDirectory=""
-				RegisterOutput="0"
-				AdditionalFiles=""
-			/>
-			<DebuggerTool
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-			>
-			<Filter
-				Name="common"
-				>
-				<File
-					RelativePath="..\..\g7221\common\basic_op.c"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\basic_op.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\basic_op_i.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\common.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\config.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\count.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\huff_def.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\huff_tab.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\huff_tab.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\tables.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\tables.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\common\typedef.h"
-					>
-				</File>
-			</Filter>
-			<Filter
-				Name="decode"
-				>
-				<File
-					RelativePath="..\..\g7221\decode\coef2sam.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\decode\dct4_s.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\decode\dct4_s.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\decode\decoder.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-			</Filter>
-			<Filter
-				Name="encode"
-				>
-				<File
-					RelativePath="..\..\g7221\encode\dct4_a.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\encode\dct4_a.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\g7221\encode\encoder.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-				<File
-					RelativePath="..\..\g7221\encode\sam2coef.c"
-					>
-					<FileConfiguration
-						Name="Release|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Debug-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Static|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Standard SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 6 Professional SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Pocket PC 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Smartphone 2003 (ARMV4)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-					<FileConfiguration
-						Name="Release-Dynamic|Windows Mobile 5.0 Smartphone SDK (ARMV4I)"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-							AdditionalIncludeDirectories=""
-							PreprocessorDefinitions=""
-						/>
-					</FileConfiguration>
-				</File>
-			</Filter>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl"
-			>
-			<File
-				RelativePath="..\..\g7221\common\defs.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
-</VisualStudioProject>
diff --git a/sflphone-common/libs/pjproject/third_party/build/speex/config.h b/sflphone-common/libs/pjproject/third_party/build/speex/config.h
index ba7be7a6e21d233da490e2274094580c6d416459..e04c40be4f7383fdda6c17ec53d4369e70989492 100644
--- a/sflphone-common/libs/pjproject/third_party/build/speex/config.h
+++ b/sflphone-common/libs/pjproject/third_party/build/speex/config.h
@@ -4,7 +4,7 @@
 #if !defined(PJ_HAS_FLOATING_POINT) || PJ_HAS_FLOATING_POINT==0
 #   define FIXED_POINT
 #   define USE_KISS_FFT
-#else 
+#else
 #   define FLOATING_POINT
 #   define USE_SMALLFT
 #endif
@@ -12,7 +12,7 @@
 #define EXPORT
 
 #if (defined(PJ_WIN32) && PJ_WIN32!=0) || \
-    (defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE != 0) 
+    (defined(PJ_WIN32_WINCE) && PJ_WIN32_WINCE != 0)
 #   include "../../speex/win32/config.h"
 #else
 #define inline __inline
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
index 8dfefbd67b95ffc0d64194ab75ab7a05e1b1f72f..1b4b33781f155d3eb78dbbfe53dba83bee14ac08 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/iasiothiscallresolver.cpp
@@ -71,7 +71,7 @@
     (IUnknown functions)
     0   virtual HRESULT STDMETHODCALLTYPE (*QueryInterface)(REFIID riid, void **ppv) = 0;
     4   virtual ULONG STDMETHODCALLTYPE (*AddRef)() = 0;
-    8   virtual ULONG STDMETHODCALLTYPE (*Release)() = 0;      
+    8   virtual ULONG STDMETHODCALLTYPE (*Release)() = 0;
 
     (IASIO functions)
     12	virtual ASIOBool (*init)(void *sysHandle) = 0;
@@ -128,7 +128,7 @@
     with MSVC, and requires that you ship the OpenASIO DLL with your
     application.
 
-    
+
     ACKNOWLEDGEMENTS
 
     Ross Bencina: worked out the thiscall details above, wrote the original
@@ -186,7 +186,7 @@ extern IASIO* theAsioDriver;
 
 // The following macros define the inline assembler for BORLAND first then gcc
 
-#if defined(__BCPLUSPLUS__) || defined(__BORLANDC__)          
+#if defined(__BCPLUSPLUS__) || defined(__BORLANDC__)
 
 
 #define CALL_THISCALL_0( resultName, thisPtr, funcOffset )\
@@ -277,7 +277,7 @@ extern IASIO* theAsioDriver;
                           :"=a"(resultName) /* Output Operands */           \
                           :"c"(thisPtr)     /* Input Operands */            \
                          );                                                 \
-
+ 
 
 #define CALL_VOID_THISCALL_1( thisPtr, funcOffset, param1 )                 \
     __asm__ __volatile__ ("pushl %0\n\t"                                    \
@@ -287,7 +287,7 @@ extern IASIO* theAsioDriver;
                           :"r"(param1),     /* Input Operands */            \
                            "c"(thisPtr)                                     \
                          );                                                 \
-
+ 
 
 #define CALL_THISCALL_1( resultName, thisPtr, funcOffset, param1 )          \
     __asm__ __volatile__ ("pushl %1\n\t"                                    \
@@ -297,7 +297,7 @@ extern IASIO* theAsioDriver;
                           :"r"(param1),     /* Input Operands */            \
                            "c"(thisPtr)                                     \
                           );                                                \
-
+ 
 
 #define CALL_THISCALL_1_DOUBLE( resultName, thisPtr, funcOffset, param1 )   \
     __asm__ __volatile__ ("pushl 4(%1)\n\t"                                 \
@@ -310,7 +310,7 @@ extern IASIO* theAsioDriver;
                            /* when using GCC 3.3.3, and maybe later versions*/\
                            "c"(thisPtr)                                     \
                           );                                                \
-
+ 
 
 #define CALL_THISCALL_2( resultName, thisPtr, funcOffset, param1, param2 )  \
     __asm__ __volatile__ ("pushl %1\n\t"                                    \
@@ -322,7 +322,7 @@ extern IASIO* theAsioDriver;
                            "r"(param1),                                     \
                            "c"(thisPtr)                                     \
                           );                                                \
-
+ 
 
 #define CALL_THISCALL_4( resultName, thisPtr, funcOffset, param1, param2, param3, param4 )\
     __asm__ __volatile__ ("pushl %1\n\t"                                    \
@@ -338,7 +338,7 @@ extern IASIO* theAsioDriver;
                            "r"(param1),                                     \
                            "c"(thisPtr)                                     \
                           );                                                \
-
+ 
 #endif
 
 
@@ -354,8 +354,8 @@ IASIOThiscallResolver::IASIOThiscallResolver()
 }
 
 // Constructor called from ASIOInit() below
-IASIOThiscallResolver::IASIOThiscallResolver(IASIO* that)
-: that_( that )
+IASIOThiscallResolver::IASIOThiscallResolver (IASIO* that)
+        : that_ (that)
 {
 }
 
@@ -363,11 +363,11 @@ IASIOThiscallResolver::IASIOThiscallResolver(IASIO* that)
 // really a COM object, just a wrapper which will work with the ASIO SDK.
 // If you wanted to use ASIO without the SDK you might want to implement COM
 // aggregation in these methods.
-HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface(REFIID riid, void **ppv)
+HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface (REFIID riid, void **ppv)
 {
-    (void)riid;     // suppress unused variable warning
+    (void) riid;    // suppress unused variable warning
 
-    assert( false ); // this function should never be called by the ASIO SDK.
+    assert (false);  // this function should never be called by the ASIO SDK.
 
     *ppv = NULL;
     return E_NOINTERFACE;
@@ -375,176 +375,176 @@ HRESULT STDMETHODCALLTYPE IASIOThiscallResolver::QueryInterface(REFIID riid, voi
 
 ULONG STDMETHODCALLTYPE IASIOThiscallResolver::AddRef()
 {
-    assert( false ); // this function should never be called by the ASIO SDK.
+    assert (false);  // this function should never be called by the ASIO SDK.
 
     return 1;
 }
 
 ULONG STDMETHODCALLTYPE IASIOThiscallResolver::Release()
 {
-    assert( false ); // this function should never be called by the ASIO SDK.
-    
+    assert (false);  // this function should never be called by the ASIO SDK.
+
     return 1;
 }
 
 
 // Implement the IASIO interface methods by performing the vptr manipulation
 // described above then delegating to the real implementation.
-ASIOBool IASIOThiscallResolver::init(void *sysHandle)
+ASIOBool IASIOThiscallResolver::init (void *sysHandle)
 {
     ASIOBool result;
-    CALL_THISCALL_1( result, that_, 12, sysHandle );
+    CALL_THISCALL_1 (result, that_, 12, sysHandle);
     return result;
 }
 
-void IASIOThiscallResolver::getDriverName(char *name)
+void IASIOThiscallResolver::getDriverName (char *name)
 {
-    CALL_VOID_THISCALL_1( that_, 16, name );
+    CALL_VOID_THISCALL_1 (that_, 16, name);
 }
 
 long IASIOThiscallResolver::getDriverVersion()
 {
     ASIOBool result;
-    CALL_THISCALL_0( result, that_, 20 );
+    CALL_THISCALL_0 (result, that_, 20);
     return result;
 }
 
-void IASIOThiscallResolver::getErrorMessage(char *string)
+void IASIOThiscallResolver::getErrorMessage (char *string)
 {
-     CALL_VOID_THISCALL_1( that_, 24, string );
+    CALL_VOID_THISCALL_1 (that_, 24, string);
 }
 
 ASIOError IASIOThiscallResolver::start()
 {
     ASIOBool result;
-    CALL_THISCALL_0( result, that_, 28 );
+    CALL_THISCALL_0 (result, that_, 28);
     return result;
 }
 
 ASIOError IASIOThiscallResolver::stop()
 {
     ASIOBool result;
-    CALL_THISCALL_0( result, that_, 32 );
+    CALL_THISCALL_0 (result, that_, 32);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getChannels(long *numInputChannels, long *numOutputChannels)
+ASIOError IASIOThiscallResolver::getChannels (long *numInputChannels, long *numOutputChannels)
 {
     ASIOBool result;
-    CALL_THISCALL_2( result, that_, 36, numInputChannels, numOutputChannels );
+    CALL_THISCALL_2 (result, that_, 36, numInputChannels, numOutputChannels);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getLatencies(long *inputLatency, long *outputLatency)
+ASIOError IASIOThiscallResolver::getLatencies (long *inputLatency, long *outputLatency)
 {
     ASIOBool result;
-    CALL_THISCALL_2( result, that_, 40, inputLatency, outputLatency );
+    CALL_THISCALL_2 (result, that_, 40, inputLatency, outputLatency);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getBufferSize(long *minSize, long *maxSize,
+ASIOError IASIOThiscallResolver::getBufferSize (long *minSize, long *maxSize,
         long *preferredSize, long *granularity)
 {
     ASIOBool result;
-    CALL_THISCALL_4( result, that_, 44, minSize, maxSize, preferredSize, granularity );
+    CALL_THISCALL_4 (result, that_, 44, minSize, maxSize, preferredSize, granularity);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::canSampleRate(ASIOSampleRate sampleRate)
+ASIOError IASIOThiscallResolver::canSampleRate (ASIOSampleRate sampleRate)
 {
     ASIOBool result;
-    CALL_THISCALL_1_DOUBLE( result, that_, 48, sampleRate );
+    CALL_THISCALL_1_DOUBLE (result, that_, 48, sampleRate);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getSampleRate(ASIOSampleRate *sampleRate)
+ASIOError IASIOThiscallResolver::getSampleRate (ASIOSampleRate *sampleRate)
 {
     ASIOBool result;
-    CALL_THISCALL_1( result, that_, 52, sampleRate );
+    CALL_THISCALL_1 (result, that_, 52, sampleRate);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::setSampleRate(ASIOSampleRate sampleRate)
-{    
+ASIOError IASIOThiscallResolver::setSampleRate (ASIOSampleRate sampleRate)
+{
     ASIOBool result;
-    CALL_THISCALL_1_DOUBLE( result, that_, 56, sampleRate );
+    CALL_THISCALL_1_DOUBLE (result, that_, 56, sampleRate);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getClockSources(ASIOClockSource *clocks, long *numSources)
+ASIOError IASIOThiscallResolver::getClockSources (ASIOClockSource *clocks, long *numSources)
 {
     ASIOBool result;
-    CALL_THISCALL_2( result, that_, 60, clocks, numSources );
+    CALL_THISCALL_2 (result, that_, 60, clocks, numSources);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::setClockSource(long reference)
+ASIOError IASIOThiscallResolver::setClockSource (long reference)
 {
     ASIOBool result;
-    CALL_THISCALL_1( result, that_, 64, reference );
+    CALL_THISCALL_1 (result, that_, 64, reference);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getSamplePosition(ASIOSamples *sPos, ASIOTimeStamp *tStamp)
+ASIOError IASIOThiscallResolver::getSamplePosition (ASIOSamples *sPos, ASIOTimeStamp *tStamp)
 {
     ASIOBool result;
-    CALL_THISCALL_2( result, that_, 68, sPos, tStamp );
+    CALL_THISCALL_2 (result, that_, 68, sPos, tStamp);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::getChannelInfo(ASIOChannelInfo *info)
+ASIOError IASIOThiscallResolver::getChannelInfo (ASIOChannelInfo *info)
 {
     ASIOBool result;
-    CALL_THISCALL_1( result, that_, 72, info );
+    CALL_THISCALL_1 (result, that_, 72, info);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::createBuffers(ASIOBufferInfo *bufferInfos,
+ASIOError IASIOThiscallResolver::createBuffers (ASIOBufferInfo *bufferInfos,
         long numChannels, long bufferSize, ASIOCallbacks *callbacks)
 {
     ASIOBool result;
-    CALL_THISCALL_4( result, that_, 76, bufferInfos, numChannels, bufferSize, callbacks );
+    CALL_THISCALL_4 (result, that_, 76, bufferInfos, numChannels, bufferSize, callbacks);
     return result;
 }
 
 ASIOError IASIOThiscallResolver::disposeBuffers()
 {
     ASIOBool result;
-    CALL_THISCALL_0( result, that_, 80 );
+    CALL_THISCALL_0 (result, that_, 80);
     return result;
 }
 
 ASIOError IASIOThiscallResolver::controlPanel()
 {
     ASIOBool result;
-    CALL_THISCALL_0( result, that_, 84 );
+    CALL_THISCALL_0 (result, that_, 84);
     return result;
 }
 
-ASIOError IASIOThiscallResolver::future(long selector,void *opt)
+ASIOError IASIOThiscallResolver::future (long selector,void *opt)
 {
     ASIOBool result;
-    CALL_THISCALL_2( result, that_, 88, selector, opt );
+    CALL_THISCALL_2 (result, that_, 88, selector, opt);
     return result;
 }
 
 ASIOError IASIOThiscallResolver::outputReady()
 {
     ASIOBool result;
-    CALL_THISCALL_0( result, that_, 92 );
+    CALL_THISCALL_0 (result, that_, 92);
     return result;
 }
 
 
 // Implement our substitute ASIOInit() method
-ASIOError IASIOThiscallResolver::ASIOInit(ASIODriverInfo *info)
+ASIOError IASIOThiscallResolver::ASIOInit (ASIODriverInfo *info)
 {
     // To ensure that our instance's vptr is correctly constructed, even if
     // ASIOInit is called prior to main(), we explicitly call its constructor
     // (potentially over the top of an existing instance). Note that this is
     // pretty ugly, and is only safe because IASIOThiscallResolver has no
     // destructor and contains no objects with destructors.
-    new((void*)&instance) IASIOThiscallResolver( theAsioDriver );
+    new ( (void*) &instance) IASIOThiscallResolver (theAsioDriver);
 
     // Interpose between ASIO client code and the real driver.
     theAsioDriver = &instance;
@@ -553,7 +553,7 @@ ASIOError IASIOThiscallResolver::ASIOInit(ASIODriverInfo *info)
     // real driver because theAsioDriver is reset to zero in ASIOExit().
 
     // Delegate to the real ASIOInit
-	return ::ASIOInit(info);
+    return ::ASIOInit (info);
 }
 
 
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp
index 84d1c5117946f2d2d9af24c5a1e1aa2e6afd9923..7d0298104124c3e88b58af34ecffe839e5ed3267 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/asio/pa_asio.cpp
@@ -29,13 +29,13 @@
  */
 
 /*
- * The text above constitutes the entire PortAudio license; however, 
+ * The text above constitutes the entire PortAudio license; however,
  * the PortAudio community also makes the following non-binding requests:
  *
  * Any person wishing to distribute modifications to the Software is
  * requested to send the modifications to the original developer so that
- * they can be incorporated into the canonical version. It is also 
- * requested that these non-binding requests be included along with the 
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
  * license above.
  */
 
@@ -83,7 +83,7 @@
 
     @todo review ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable
 
-    @todo review Blocking i/o latency computations in OpenStream(), changing ring 
+    @todo review Blocking i/o latency computations in OpenStream(), changing ring
           buffer to a non-power-of-two structure could reduce blocking i/o latency.
 
     @todo implement IsFormatSupported
@@ -171,8 +171,8 @@
 
 /* external reference to ASIO SDK's asioDrivers.
 
- This is a bit messy because we want to explicitly manage 
- allocation/deallocation of this structure, but some layers of the SDK 
+ This is a bit messy because we want to explicitly manage
+ allocation/deallocation of this structure, but some layers of the SDK
  which we currently use (eg the implementation in asio.cpp) still
  use this global version.
 
@@ -190,9 +190,9 @@ extern AsioDrivers* asioDrivers;
 
 /* prototypes for functions declared in this file */
 
-extern "C" PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex );
-static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
-static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+extern "C" PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex);
+static void Terminate (struct PaUtilHostApiRepresentation *hostApi);
+static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -200,82 +200,99 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData );
-static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+                           void *userData);
+static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
-                                  double sampleRate );
-static PaError CloseStream( PaStream* stream );
-static PaError StartStream( PaStream *stream );
-static PaError StopStream( PaStream *stream );
-static PaError AbortStream( PaStream *stream );
-static PaError IsStreamStopped( PaStream *s );
-static PaError IsStreamActive( PaStream *stream );
-static PaTime GetStreamTime( PaStream *stream );
-static double GetStreamCpuLoad( PaStream* stream );
-static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
-static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
-static signed long GetStreamReadAvailable( PaStream* stream );
-static signed long GetStreamWriteAvailable( PaStream* stream );
+                                  double sampleRate);
+static PaError CloseStream (PaStream* stream);
+static PaError StartStream (PaStream *stream);
+static PaError StopStream (PaStream *stream);
+static PaError AbortStream (PaStream *stream);
+static PaError IsStreamStopped (PaStream *s);
+static PaError IsStreamActive (PaStream *stream);
+static PaTime GetStreamTime (PaStream *stream);
+static double GetStreamCpuLoad (PaStream* stream);
+static PaError ReadStream (PaStream* stream, void *buffer, unsigned long frames);
+static PaError WriteStream (PaStream* stream, const void *buffer, unsigned long frames);
+static signed long GetStreamReadAvailable (PaStream* stream);
+static signed long GetStreamWriteAvailable (PaStream* stream);
 
 /* Blocking i/o callback function. */
-static int BlockingIoPaCallback(const void                     *inputBuffer    ,
-                                      void                     *outputBuffer   ,
-                                      unsigned long             framesPerBuffer,
-                                const PaStreamCallbackTimeInfo *timeInfo       ,
-                                      PaStreamCallbackFlags     statusFlags    ,
-                                      void                     *userData       );
+static int BlockingIoPaCallback (const void                     *inputBuffer    ,
+                                 void                     *outputBuffer   ,
+                                 unsigned long             framesPerBuffer,
+                                 const PaStreamCallbackTimeInfo *timeInfo       ,
+                                 PaStreamCallbackFlags     statusFlags    ,
+                                 void                     *userData);
 
 /* our ASIO callback functions */
 
-static void bufferSwitch(long index, ASIOBool processNow);
-static ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow);
-static void sampleRateChanged(ASIOSampleRate sRate);
-static long asioMessages(long selector, long value, void* message, double* opt);
+static void bufferSwitch (long index, ASIOBool processNow);
+static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool processNow);
+static void sampleRateChanged (ASIOSampleRate sRate);
+static long asioMessages (long selector, long value, void* message, double* opt);
 
-static ASIOCallbacks asioCallbacks_ =
-    { bufferSwitch, sampleRateChanged, asioMessages, bufferSwitchTimeInfo };
+static ASIOCallbacks asioCallbacks_ = { bufferSwitch, sampleRateChanged, asioMessages, bufferSwitchTimeInfo };
 
 
 #define PA_ASIO_SET_LAST_HOST_ERROR( errorCode, errorText ) \
     PaUtil_SetLastHostErrorInfo( paASIO, errorCode, errorText )
 
 
-static void PaAsio_SetLastSystemError( DWORD errorCode )
+static void PaAsio_SetLastSystemError (DWORD errorCode)
 {
     LPVOID lpMsgBuf;
-    FormatMessage(
+    FormatMessage (
         FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
         NULL,
         errorCode,
-        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+        MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
         (LPTSTR) &lpMsgBuf,
         0,
         NULL
     );
-    PaUtil_SetLastHostErrorInfo( paASIO, errorCode, (const char*)lpMsgBuf );
-    LocalFree( lpMsgBuf );
+    PaUtil_SetLastHostErrorInfo (paASIO, errorCode, (const char*) lpMsgBuf);
+    LocalFree (lpMsgBuf);
 }
 
 #define PA_ASIO_SET_LAST_SYSTEM_ERROR( errorCode ) \
     PaAsio_SetLastSystemError( errorCode )
 
 
-static const char* PaAsio_GetAsioErrorText( ASIOError asioError )
+static const char* PaAsio_GetAsioErrorText (ASIOError asioError)
 {
     const char *result;
 
-    switch( asioError ){
+    switch (asioError) {
         case ASE_OK:
-        case ASE_SUCCESS:           result = "Success"; break;
-        case ASE_NotPresent:        result = "Hardware input or output is not present or available"; break;
-        case ASE_HWMalfunction:     result = "Hardware is malfunctioning"; break;
-        case ASE_InvalidParameter:  result = "Input parameter invalid"; break;
-        case ASE_InvalidMode:       result = "Hardware is in a bad mode or used in a bad mode"; break;
-        case ASE_SPNotAdvancing:    result = "Hardware is not running when sample position is inquired"; break;
-        case ASE_NoClock:           result = "Sample clock or rate cannot be determined or is not present"; break;
-        case ASE_NoMemory:          result = "Not enough memory for completing the request"; break;
-        default:                    result = "Unknown ASIO error"; break;
+        case ASE_SUCCESS:
+            result = "Success";
+            break;
+        case ASE_NotPresent:
+            result = "Hardware input or output is not present or available";
+            break;
+        case ASE_HWMalfunction:
+            result = "Hardware is malfunctioning";
+            break;
+        case ASE_InvalidParameter:
+            result = "Input parameter invalid";
+            break;
+        case ASE_InvalidMode:
+            result = "Hardware is in a bad mode or used in a bad mode";
+            break;
+        case ASE_SPNotAdvancing:
+            result = "Hardware is not running when sample position is inquired";
+            break;
+        case ASE_NoClock:
+            result = "Sample clock or rate cannot be determined or is not present";
+            break;
+        case ASE_NoMemory:
+            result = "Not enough memory for completing the request";
+            break;
+        default:
+            result = "Unknown ASIO error";
+            break;
     }
 
     return result;
@@ -290,18 +307,29 @@ static const char* PaAsio_GetAsioErrorText( ASIOError asioError )
 
 // Atomic increment and decrement operations
 #if MAC
-    /* need to be implemented on Mac */
-    inline long PaAsio_AtomicIncrement(volatile long* v) {return ++(*const_cast<long*>(v));}
-    inline long PaAsio_AtomicDecrement(volatile long* v) {return --(*const_cast<long*>(v));}
+/* need to be implemented on Mac */
+inline long PaAsio_AtomicIncrement (volatile long* v)
+{
+    return ++ (*const_cast<long*> (v));
+}
+inline long PaAsio_AtomicDecrement (volatile long* v)
+{
+    return -- (*const_cast<long*> (v));
+}
 #elif WINDOWS
-    inline long PaAsio_AtomicIncrement(volatile long* v) {return InterlockedIncrement(const_cast<long*>(v));}
-    inline long PaAsio_AtomicDecrement(volatile long* v) {return InterlockedDecrement(const_cast<long*>(v));}
+inline long PaAsio_AtomicIncrement (volatile long* v)
+{
+    return InterlockedIncrement (const_cast<long*> (v));
+}
+inline long PaAsio_AtomicDecrement (volatile long* v)
+{
+    return InterlockedDecrement (const_cast<long*> (v));
+}
 #endif
 
 
 
-typedef struct PaAsioDriverInfo
-{
+typedef struct PaAsioDriverInfo {
     ASIODriverInfo asioDriverInfo;
     long inputChannelCount, outputChannelCount;
     long bufferMinSize, bufferMaxSize, bufferPreferredSize, bufferGranularity;
@@ -312,8 +340,7 @@ PaAsioDriverInfo;
 
 /* PaAsioHostApiRepresentation - host api datastructure specific to this implementation */
 
-typedef struct
-{
+typedef struct {
     PaUtilHostApiRepresentation inheritedHostApiRep;
     PaUtilStreamInterface callbackStreamInterface;
     PaUtilStreamInterface blockingStreamInterface;
@@ -322,7 +349,7 @@ typedef struct
 
     AsioDrivers *asioDrivers;
     void *systemSpecific;
-    
+
     /* the ASIO C API only allows one ASIO driver to be open at a time,
         so we keep track of whether we have the driver open here, and
         use this information to return errors from OpenStream if the
@@ -344,43 +371,45 @@ PaAsioHostApiRepresentation;
     Retrieve <driverCount> driver names from ASIO, returned in a char**
     allocated in <group>.
 */
-static char **GetAsioDriverNames( PaAsioHostApiRepresentation *asioHostApi, PaUtilAllocationGroup *group, long driverCount )
+static char **GetAsioDriverNames (PaAsioHostApiRepresentation *asioHostApi, PaUtilAllocationGroup *group, long driverCount)
 {
     char **result = 0;
     int i;
 
-    result =(char**)PaUtil_GroupAllocateMemory(
-            group, sizeof(char*) * driverCount );
-    if( !result )
+    result = (char**) PaUtil_GroupAllocateMemory (
+                 group, sizeof (char*) * driverCount);
+
+    if (!result)
         goto error;
 
-    result[0] = (char*)PaUtil_GroupAllocateMemory(
-            group, 32 * driverCount );
-    if( !result[0] )
+    result[0] = (char*) PaUtil_GroupAllocateMemory (
+                    group, 32 * driverCount);
+
+    if (!result[0])
         goto error;
 
-    for( i=0; i<driverCount; ++i )
+    for (i=0; i<driverCount; ++i)
         result[i] = result[0] + (32 * i);
 
-    asioHostApi->asioDrivers->getDriverNames( result, driverCount );
+    asioHostApi->asioDrivers->getDriverNames (result, driverCount);
 
 error:
     return result;
 }
 
 
-static PaSampleFormat AsioSampleTypeToPaNativeSampleFormat(ASIOSampleType type)
+static PaSampleFormat AsioSampleTypeToPaNativeSampleFormat (ASIOSampleType type)
 {
     switch (type) {
         case ASIOSTInt16MSB:
         case ASIOSTInt16LSB:
-                return paInt16;
+            return paInt16;
 
         case ASIOSTFloat32MSB:
         case ASIOSTFloat32LSB:
         case ASIOSTFloat64MSB:
         case ASIOSTFloat64LSB:
-                return paFloat32;
+            return paFloat32;
 
         case ASIOSTInt32MSB:
         case ASIOSTInt32LSB:
@@ -392,44 +421,82 @@ static PaSampleFormat AsioSampleTypeToPaNativeSampleFormat(ASIOSampleType type)
         case ASIOSTInt32LSB18:
         case ASIOSTInt32LSB20:
         case ASIOSTInt32LSB24:
-                return paInt32;
+            return paInt32;
 
         case ASIOSTInt24MSB:
         case ASIOSTInt24LSB:
-                return paInt24;
+            return paInt24;
 
         default:
-                return paCustomFormat;
+            return paCustomFormat;
     }
 }
 
-void AsioSampleTypeLOG(ASIOSampleType type)
+void AsioSampleTypeLOG (ASIOSampleType type)
 {
     switch (type) {
-        case ASIOSTInt16MSB:  PA_DEBUG(("ASIOSTInt16MSB\n"));  break;
-        case ASIOSTInt16LSB:  PA_DEBUG(("ASIOSTInt16LSB\n"));  break;
-        case ASIOSTFloat32MSB:PA_DEBUG(("ASIOSTFloat32MSB\n"));break;
-        case ASIOSTFloat32LSB:PA_DEBUG(("ASIOSTFloat32LSB\n"));break;
-        case ASIOSTFloat64MSB:PA_DEBUG(("ASIOSTFloat64MSB\n"));break;
-        case ASIOSTFloat64LSB:PA_DEBUG(("ASIOSTFloat64LSB\n"));break;
-        case ASIOSTInt32MSB:  PA_DEBUG(("ASIOSTInt32MSB\n"));  break;
-        case ASIOSTInt32LSB:  PA_DEBUG(("ASIOSTInt32LSB\n"));  break;
-        case ASIOSTInt32MSB16:PA_DEBUG(("ASIOSTInt32MSB16\n"));break;
-        case ASIOSTInt32LSB16:PA_DEBUG(("ASIOSTInt32LSB16\n"));break;
-        case ASIOSTInt32MSB18:PA_DEBUG(("ASIOSTInt32MSB18\n"));break;
-        case ASIOSTInt32MSB20:PA_DEBUG(("ASIOSTInt32MSB20\n"));break;
-        case ASIOSTInt32MSB24:PA_DEBUG(("ASIOSTInt32MSB24\n"));break;
-        case ASIOSTInt32LSB18:PA_DEBUG(("ASIOSTInt32LSB18\n"));break;
-        case ASIOSTInt32LSB20:PA_DEBUG(("ASIOSTInt32LSB20\n"));break;
-        case ASIOSTInt32LSB24:PA_DEBUG(("ASIOSTInt32LSB24\n"));break;
-        case ASIOSTInt24MSB:  PA_DEBUG(("ASIOSTInt24MSB\n"));  break;
-        case ASIOSTInt24LSB:  PA_DEBUG(("ASIOSTInt24LSB\n"));  break;
-        default:              PA_DEBUG(("Custom Format%d\n",type));break;
+        case ASIOSTInt16MSB:
+            PA_DEBUG ( ("ASIOSTInt16MSB\n"));
+            break;
+        case ASIOSTInt16LSB:
+            PA_DEBUG ( ("ASIOSTInt16LSB\n"));
+            break;
+        case ASIOSTFloat32MSB:
+            PA_DEBUG ( ("ASIOSTFloat32MSB\n"));
+            break;
+        case ASIOSTFloat32LSB:
+            PA_DEBUG ( ("ASIOSTFloat32LSB\n"));
+            break;
+        case ASIOSTFloat64MSB:
+            PA_DEBUG ( ("ASIOSTFloat64MSB\n"));
+            break;
+        case ASIOSTFloat64LSB:
+            PA_DEBUG ( ("ASIOSTFloat64LSB\n"));
+            break;
+        case ASIOSTInt32MSB:
+            PA_DEBUG ( ("ASIOSTInt32MSB\n"));
+            break;
+        case ASIOSTInt32LSB:
+            PA_DEBUG ( ("ASIOSTInt32LSB\n"));
+            break;
+        case ASIOSTInt32MSB16:
+            PA_DEBUG ( ("ASIOSTInt32MSB16\n"));
+            break;
+        case ASIOSTInt32LSB16:
+            PA_DEBUG ( ("ASIOSTInt32LSB16\n"));
+            break;
+        case ASIOSTInt32MSB18:
+            PA_DEBUG ( ("ASIOSTInt32MSB18\n"));
+            break;
+        case ASIOSTInt32MSB20:
+            PA_DEBUG ( ("ASIOSTInt32MSB20\n"));
+            break;
+        case ASIOSTInt32MSB24:
+            PA_DEBUG ( ("ASIOSTInt32MSB24\n"));
+            break;
+        case ASIOSTInt32LSB18:
+            PA_DEBUG ( ("ASIOSTInt32LSB18\n"));
+            break;
+        case ASIOSTInt32LSB20:
+            PA_DEBUG ( ("ASIOSTInt32LSB20\n"));
+            break;
+        case ASIOSTInt32LSB24:
+            PA_DEBUG ( ("ASIOSTInt32LSB24\n"));
+            break;
+        case ASIOSTInt24MSB:
+            PA_DEBUG ( ("ASIOSTInt24MSB\n"));
+            break;
+        case ASIOSTInt24LSB:
+            PA_DEBUG ( ("ASIOSTInt24LSB\n"));
+            break;
+        default:
+            PA_DEBUG ( ("Custom Format%d\n",type));
+            break;
 
     }
 }
 
-static int BytesPerAsioSample( ASIOSampleType sampleType )
+static int BytesPerAsioSample (ASIOSampleType sampleType)
 {
     switch (sampleType) {
         case ASIOSTInt16MSB:
@@ -464,93 +531,86 @@ static int BytesPerAsioSample( ASIOSampleType sampleType )
 }
 
 
-static void Swap16( void *buffer, long shift, long count )
+static void Swap16 (void *buffer, long shift, long count)
 {
-    unsigned short *p = (unsigned short*)buffer;
+    unsigned short *p = (unsigned short*) buffer;
     unsigned short temp;
     (void) shift; /* unused parameter */
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p;
-        *p++ = (unsigned short)((temp<<8) | (temp>>8));
+        *p++ = (unsigned short) ( (temp<<8) | (temp>>8));
     }
 }
 
-static void Swap24( void *buffer, long shift, long count )
+static void Swap24 (void *buffer, long shift, long count)
 {
-    unsigned char *p = (unsigned char*)buffer;
+    unsigned char *p = (unsigned char*) buffer;
     unsigned char temp;
     (void) shift; /* unused parameter */
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p;
-        *p = *(p+2);
-        *(p+2) = temp;
+        *p = * (p+2);
+        * (p+2) = temp;
         p += 3;
     }
 }
 
 #define PA_SWAP32_( x ) ((x>>24) | ((x>>8)&0xFF00) | ((x<<8)&0xFF0000) | (x<<24));
 
-static void Swap32( void *buffer, long shift, long count )
+static void Swap32 (void *buffer, long shift, long count)
 {
-    unsigned long *p = (unsigned long*)buffer;
+    unsigned long *p = (unsigned long*) buffer;
     unsigned long temp;
     (void) shift; /* unused parameter */
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p;
-        *p++ = PA_SWAP32_( temp);
+        *p++ = PA_SWAP32_ (temp);
     }
 }
 
-static void SwapShiftLeft32( void *buffer, long shift, long count )
+static void SwapShiftLeft32 (void *buffer, long shift, long count)
 {
-    unsigned long *p = (unsigned long*)buffer;
+    unsigned long *p = (unsigned long*) buffer;
     unsigned long temp;
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p;
-        temp = PA_SWAP32_( temp);
+        temp = PA_SWAP32_ (temp);
         *p++ = temp << shift;
     }
 }
 
-static void ShiftRightSwap32( void *buffer, long shift, long count )
+static void ShiftRightSwap32 (void *buffer, long shift, long count)
 {
-    unsigned long *p = (unsigned long*)buffer;
+    unsigned long *p = (unsigned long*) buffer;
     unsigned long temp;
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p >> shift;
-        *p++ = PA_SWAP32_( temp);
+        *p++ = PA_SWAP32_ (temp);
     }
 }
 
-static void ShiftLeft32( void *buffer, long shift, long count )
+static void ShiftLeft32 (void *buffer, long shift, long count)
 {
-    unsigned long *p = (unsigned long*)buffer;
+    unsigned long *p = (unsigned long*) buffer;
     unsigned long temp;
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p;
         *p++ = temp << shift;
     }
 }
 
-static void ShiftRight32( void *buffer, long shift, long count )
+static void ShiftRight32 (void *buffer, long shift, long count)
 {
-    unsigned long *p = (unsigned long*)buffer;
+    unsigned long *p = (unsigned long*) buffer;
     unsigned long temp;
 
-    while( count-- )
-    {
+    while (count--) {
         temp = *p;
         *p++ = temp >> shift;
     }
@@ -558,65 +618,63 @@ static void ShiftRight32( void *buffer, long shift, long count )
 
 #define PA_SWAP_( x, y ) temp=x; x = y; y = temp;
 
-static void Swap64ConvertFloat64ToFloat32( void *buffer, long shift, long count )
+static void Swap64ConvertFloat64ToFloat32 (void *buffer, long shift, long count)
 {
-    double *in = (double*)buffer;
-    float *out = (float*)buffer;
+    double *in = (double*) buffer;
+    float *out = (float*) buffer;
     unsigned char *p;
     unsigned char temp;
     (void) shift; /* unused parameter */
 
-    while( count-- )
-    {
-        p = (unsigned char*)in;
-        PA_SWAP_( p[0], p[7] );
-        PA_SWAP_( p[1], p[6] );
-        PA_SWAP_( p[2], p[5] );
-        PA_SWAP_( p[3], p[4] );
+    while (count--) {
+        p = (unsigned char*) in;
+        PA_SWAP_ (p[0], p[7]);
+        PA_SWAP_ (p[1], p[6]);
+        PA_SWAP_ (p[2], p[5]);
+        PA_SWAP_ (p[3], p[4]);
 
         *out++ = (float) (*in++);
     }
 }
 
-static void ConvertFloat64ToFloat32( void *buffer, long shift, long count )
+static void ConvertFloat64ToFloat32 (void *buffer, long shift, long count)
 {
-    double *in = (double*)buffer;
-    float *out = (float*)buffer;
+    double *in = (double*) buffer;
+    float *out = (float*) buffer;
     (void) shift; /* unused parameter */
 
-    while( count-- )
+    while (count--)
         *out++ = (float) (*in++);
 }
 
-static void ConvertFloat32ToFloat64Swap64( void *buffer, long shift, long count )
+static void ConvertFloat32ToFloat64Swap64 (void *buffer, long shift, long count)
 {
-    float *in = ((float*)buffer) + (count-1);
-    double *out = ((double*)buffer) + (count-1);
+    float *in = ( (float*) buffer) + (count-1);
+    double *out = ( (double*) buffer) + (count-1);
     unsigned char *p;
     unsigned char temp;
     (void) shift; /* unused parameter */
 
-    while( count-- )
-    {
+    while (count--) {
         *out = *in--;
 
-        p = (unsigned char*)out;
-        PA_SWAP_( p[0], p[7] );
-        PA_SWAP_( p[1], p[6] );
-        PA_SWAP_( p[2], p[5] );
-        PA_SWAP_( p[3], p[4] );
+        p = (unsigned char*) out;
+        PA_SWAP_ (p[0], p[7]);
+        PA_SWAP_ (p[1], p[6]);
+        PA_SWAP_ (p[2], p[5]);
+        PA_SWAP_ (p[3], p[4]);
 
         out--;
     }
 }
 
-static void ConvertFloat32ToFloat64( void *buffer, long shift, long count )
+static void ConvertFloat32ToFloat64 (void *buffer, long shift, long count)
 {
-    float *in = ((float*)buffer) + (count-1);
-    double *out = ((double*)buffer) + (count-1);
+    float *in = ( (float*) buffer) + (count-1);
+    double *out = ( (double*) buffer) + (count-1);
     (void) shift; /* unused parameter */
 
-    while( count-- )
+    while (count--)
         *out-- = *in--;
 }
 
@@ -630,9 +688,9 @@ static void ConvertFloat32ToFloat64( void *buffer, long shift, long count )
 #define PA_LSB_IS_NATIVE_
 #endif
 
-typedef void PaAsioBufferConverter( void *, long, long );
+typedef void PaAsioBufferConverter (void *, long, long);
 
-static void SelectAsioToPaConverter( ASIOSampleType type, PaAsioBufferConverter **converter, long *shift )
+static void SelectAsioToPaConverter (ASIOSampleType type, PaAsioBufferConverter **converter, long *shift)
 {
     *shift = 0;
     *converter = 0;
@@ -640,145 +698,145 @@ static void SelectAsioToPaConverter( ASIOSampleType type, PaAsioBufferConverter
     switch (type) {
         case ASIOSTInt16MSB:
             /* dest: paInt16, no conversion necessary, possible byte swap*/
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap16;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap16;
+#endif
             break;
         case ASIOSTInt16LSB:
             /* dest: paInt16, no conversion necessary, possible byte swap*/
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap16;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap16;
+#endif
             break;
         case ASIOSTFloat32MSB:
             /* dest: paFloat32, no conversion necessary, possible byte swap*/
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTFloat32LSB:
             /* dest: paFloat32, no conversion necessary, possible byte swap*/
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTFloat64MSB:
             /* dest: paFloat32, in-place conversion to/from float32, possible byte swap*/
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap64ConvertFloat64ToFloat32;
-            #else
-                *converter = ConvertFloat64ToFloat32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap64ConvertFloat64ToFloat32;
+#else
+            *converter = ConvertFloat64ToFloat32;
+#endif
             break;
         case ASIOSTFloat64LSB:
             /* dest: paFloat32, in-place conversion to/from float32, possible byte swap*/
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap64ConvertFloat64ToFloat32;
-            #else
-                *converter = ConvertFloat64ToFloat32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap64ConvertFloat64ToFloat32;
+#else
+            *converter = ConvertFloat64ToFloat32;
+#endif
             break;
         case ASIOSTInt32MSB:
             /* dest: paInt32, no conversion necessary, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTInt32LSB:
             /* dest: paInt32, no conversion necessary, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTInt32MSB16:
             /* dest: paInt32, 16 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 16;
             break;
         case ASIOSTInt32MSB18:
             /* dest: paInt32, 14 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 14;
             break;
         case ASIOSTInt32MSB20:
             /* dest: paInt32, 12 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 12;
             break;
         case ASIOSTInt32MSB24:
             /* dest: paInt32, 8 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 8;
             break;
         case ASIOSTInt32LSB16:
             /* dest: paInt32, 16 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 16;
             break;
         case ASIOSTInt32LSB18:
             /* dest: paInt32, 14 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 14;
             break;
         case ASIOSTInt32LSB20:
             /* dest: paInt32, 12 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 12;
             break;
         case ASIOSTInt32LSB24:
             /* dest: paInt32, 8 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = SwapShiftLeft32;
-            #else
-                *converter = ShiftLeft32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = SwapShiftLeft32;
+#else
+            *converter = ShiftLeft32;
+#endif
             *shift = 8;
             break;
         case ASIOSTInt24MSB:
             /* dest: paInt24, no conversion necessary, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap24;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap24;
+#endif
             break;
         case ASIOSTInt24LSB:
             /* dest: paInt24, no conversion necessary, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap24;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap24;
+#endif
             break;
     }
 }
 
 
-static void SelectPaToAsioConverter( ASIOSampleType type, PaAsioBufferConverter **converter, long *shift )
+static void SelectPaToAsioConverter (ASIOSampleType type, PaAsioBufferConverter **converter, long *shift)
 {
     *shift = 0;
     *converter = 0;
@@ -786,146 +844,145 @@ static void SelectPaToAsioConverter( ASIOSampleType type, PaAsioBufferConverter
     switch (type) {
         case ASIOSTInt16MSB:
             /* src: paInt16, no conversion necessary, possible byte swap*/
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap16;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap16;
+#endif
             break;
         case ASIOSTInt16LSB:
             /* src: paInt16, no conversion necessary, possible byte swap*/
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap16;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap16;
+#endif
             break;
         case ASIOSTFloat32MSB:
             /* src: paFloat32, no conversion necessary, possible byte swap*/
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTFloat32LSB:
             /* src: paFloat32, no conversion necessary, possible byte swap*/
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTFloat64MSB:
             /* src: paFloat32, in-place conversion to/from float32, possible byte swap*/
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = ConvertFloat32ToFloat64Swap64;
-            #else
-                *converter = ConvertFloat32ToFloat64;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = ConvertFloat32ToFloat64Swap64;
+#else
+            *converter = ConvertFloat32ToFloat64;
+#endif
             break;
         case ASIOSTFloat64LSB:
             /* src: paFloat32, in-place conversion to/from float32, possible byte swap*/
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = ConvertFloat32ToFloat64Swap64;
-            #else
-                *converter = ConvertFloat32ToFloat64;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = ConvertFloat32ToFloat64Swap64;
+#else
+            *converter = ConvertFloat32ToFloat64;
+#endif
             break;
         case ASIOSTInt32MSB:
             /* src: paInt32, no conversion necessary, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTInt32LSB:
             /* src: paInt32, no conversion necessary, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap32;
+#endif
             break;
         case ASIOSTInt32MSB16:
             /* src: paInt32, 16 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 16;
             break;
         case ASIOSTInt32MSB18:
             /* src: paInt32, 14 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 14;
             break;
         case ASIOSTInt32MSB20:
             /* src: paInt32, 12 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 12;
             break;
         case ASIOSTInt32MSB24:
             /* src: paInt32, 8 bit shift, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 8;
             break;
         case ASIOSTInt32LSB16:
             /* src: paInt32, 16 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 16;
             break;
         case ASIOSTInt32LSB18:
             /* src: paInt32, 14 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 14;
             break;
         case ASIOSTInt32LSB20:
             /* src: paInt32, 12 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 12;
             break;
         case ASIOSTInt32LSB24:
             /* src: paInt32, 8 bit shift, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = ShiftRightSwap32;
-            #else
-                *converter = ShiftRight32;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = ShiftRightSwap32;
+#else
+            *converter = ShiftRight32;
+#endif
             *shift = 8;
             break;
         case ASIOSTInt24MSB:
             /* src: paInt24, no conversion necessary, possible byte swap */
-            #ifdef PA_LSB_IS_NATIVE_
-                *converter = Swap24;
-            #endif
+#ifdef PA_LSB_IS_NATIVE_
+            *converter = Swap24;
+#endif
             break;
         case ASIOSTInt24LSB:
             /* src: paInt24, no conversion necessary, possible byte swap */
-            #ifdef PA_MSB_IS_NATIVE_
-                *converter = Swap24;
-            #endif
+#ifdef PA_MSB_IS_NATIVE_
+            *converter = Swap24;
+#endif
             break;
     }
 }
 
 
-typedef struct PaAsioDeviceInfo
-{
+typedef struct PaAsioDeviceInfo {
     PaDeviceInfo commonDeviceInfo;
     long minBufferSize;
     long maxBufferSize;
@@ -937,23 +994,21 @@ typedef struct PaAsioDeviceInfo
 PaAsioDeviceInfo;
 
 
-PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device,
-        long *minLatency, long *maxLatency, long *preferredLatency, long *granularity )
+PaError PaAsio_GetAvailableLatencyValues (PaDeviceIndex device,
+        long *minLatency, long *maxLatency, long *preferredLatency, long *granularity)
 {
     PaError result;
     PaUtilHostApiRepresentation *hostApi;
     PaDeviceIndex hostApiDevice;
 
-    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
+    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
 
-    if( result == paNoError )
-    {
-        result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
+    if (result == paNoError) {
+        result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
 
-        if( result == paNoError )
-        {
+        if (result == paNoError) {
             PaAsioDeviceInfo *asioDeviceInfo =
-                    (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
+                (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
 
             *minLatency = asioDeviceInfo->minBufferSize;
             *maxLatency = asioDeviceInfo->maxBufferSize;
@@ -968,10 +1023,10 @@ PaError PaAsio_GetAvailableLatencyValues( PaDeviceIndex device,
 /* Unload whatever we loaded in LoadAsioDriver().
    Also balance the call to CoInitialize(0).
 */
-static void UnloadAsioDriver( void )
+static void UnloadAsioDriver (void)
 {
-	ASIOExit();
-	CoUninitialize();
+    ASIOExit();
+    CoUninitialize();
 }
 
 /*
@@ -980,67 +1035,62 @@ static void UnloadAsioDriver( void )
     and must be closed by the called by calling UnloadAsioDriver() - if an error
     is returned the driver will already be unloaded.
 */
-static PaError LoadAsioDriver( PaAsioHostApiRepresentation *asioHostApi, const char *driverName,
-        PaAsioDriverInfo *driverInfo, void *systemSpecific )
+static PaError LoadAsioDriver (PaAsioHostApiRepresentation *asioHostApi, const char *driverName,
+                               PaAsioDriverInfo *driverInfo, void *systemSpecific)
 {
     PaError result = paNoError;
     ASIOError asioError;
     int asioIsInitialized = 0;
 
-    /* 
-	ASIO uses CoCreateInstance() to load a driver. That requires that
-	CoInitialize(0) be called for every thread that loads a driver.
-	It is OK to call CoInitialize(0) multiple times form one thread as long
-	as it is balanced by a call to CoUninitialize(). See UnloadAsioDriver().
-
-	The V18 version called CoInitialize() starting on 2/19/02.
-	That was removed from PA V19 for unknown reasons.
-	Phil Burk added it back on 6/27/08 so that JSyn would work.
+    /*
+    ASIO uses CoCreateInstance() to load a driver. That requires that
+    CoInitialize(0) be called for every thread that loads a driver.
+    It is OK to call CoInitialize(0) multiple times form one thread as long
+    as it is balanced by a call to CoUninitialize(). See UnloadAsioDriver().
+
+    The V18 version called CoInitialize() starting on 2/19/02.
+    That was removed from PA V19 for unknown reasons.
+    Phil Burk added it back on 6/27/08 so that JSyn would work.
     */
-	CoInitialize( 0 );
+    CoInitialize (0);
 
-    if( !asioHostApi->asioDrivers->loadDriver( const_cast<char*>(driverName) ) )
-    {
-		/* If this returns an error then it might be because CoInitialize(0) was removed.
-		  It should be called right before this.
-	    */
+    if (!asioHostApi->asioDrivers->loadDriver (const_cast<char*> (driverName))) {
+        /* If this returns an error then it might be because CoInitialize(0) was removed.
+          It should be called right before this.
+        */
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_HOST_ERROR( 0, "Failed to load ASIO driver" );
+        PA_ASIO_SET_LAST_HOST_ERROR (0, "Failed to load ASIO driver");
         goto error;
     }
 
-    memset( &driverInfo->asioDriverInfo, 0, sizeof(ASIODriverInfo) );
+    memset (&driverInfo->asioDriverInfo, 0, sizeof (ASIODriverInfo));
     driverInfo->asioDriverInfo.asioVersion = 2;
     driverInfo->asioDriverInfo.sysRef = systemSpecific;
-    if( (asioError = ASIOInit( &driverInfo->asioDriverInfo )) != ASE_OK )
-    {
+
+    if ( (asioError = ASIOInit (&driverInfo->asioDriverInfo)) != ASE_OK) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         goto error;
-    }
-    else
-    {
+    } else {
         asioIsInitialized = 1;
     }
 
-    if( (asioError = ASIOGetChannels(&driverInfo->inputChannelCount,
-            &driverInfo->outputChannelCount)) != ASE_OK )
-    {
+    if ( (asioError = ASIOGetChannels (&driverInfo->inputChannelCount,
+                                       &driverInfo->outputChannelCount)) != ASE_OK) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         goto error;
     }
 
-    if( (asioError = ASIOGetBufferSize(&driverInfo->bufferMinSize,
-            &driverInfo->bufferMaxSize, &driverInfo->bufferPreferredSize,
-            &driverInfo->bufferGranularity)) != ASE_OK )
-    {
+    if ( (asioError = ASIOGetBufferSize (&driverInfo->bufferMinSize,
+                                         &driverInfo->bufferMaxSize, &driverInfo->bufferPreferredSize,
+                                         &driverInfo->bufferGranularity)) != ASE_OK) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         goto error;
     }
 
-    if( ASIOOutputReady() == ASE_OK )
+    if (ASIOOutputReady() == ASE_OK)
         driverInfo->postOutput = true;
     else
         driverInfo->postOutput = false;
@@ -1048,27 +1098,29 @@ static PaError LoadAsioDriver( PaAsioHostApiRepresentation *asioHostApi, const c
     return result;
 
 error:
-    if( asioIsInitialized )
-	{
-		ASIOExit();
-	}
-	CoUninitialize();
+
+    if (asioIsInitialized) {
+        ASIOExit();
+    }
+
+    CoUninitialize();
     return result;
 }
 
 
 #define PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_     13   /* must be the same number of elements as in the array below */
 static ASIOSampleRate defaultSampleRateSearchOrder_[]
-     = {44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0,
-        192000.0, 16000.0, 12000.0, 11025.0, 9600.0, 8000.0 };
+= {44100.0, 48000.0, 32000.0, 24000.0, 22050.0, 88200.0, 96000.0,
+   192000.0, 16000.0, 12000.0, 11025.0, 9600.0, 8000.0
+  };
 
 
 /* we look up IsDebuggerPresent at runtime incase it isn't present (on Win95 for example) */
-typedef BOOL (WINAPI *IsDebuggerPresentPtr)(VOID);
+typedef BOOL (WINAPI *IsDebuggerPresentPtr) (VOID);
 IsDebuggerPresentPtr IsDebuggerPresent_ = 0;
 //FARPROC IsDebuggerPresent_ = 0; // this is the current way to do it apparently according to davidv
 
-PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
+PaError PaAsio_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
 {
     PaError result = paNoError;
     int i, driverCount;
@@ -1077,9 +1129,9 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     char **names;
     PaAsioDriverInfo paAsioDriverInfo;
 
-    asioHostApi = (PaAsioHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaAsioHostApiRepresentation) );
-    if( !asioHostApi )
-    {
+    asioHostApi = (PaAsioHostApiRepresentation*) PaUtil_AllocateMemory (sizeof (PaAsioHostApiRepresentation));
+
+    if (!asioHostApi) {
         result = paInsufficientMemory;
         goto error;
     }
@@ -1087,25 +1139,22 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     asioHostApi->asioDrivers = 0; /* avoid surprises in our error handler below */
 
     asioHostApi->allocations = PaUtil_CreateAllocationGroup();
-    if( !asioHostApi->allocations )
-    {
+
+    if (!asioHostApi->allocations) {
         result = paInsufficientMemory;
         goto error;
     }
 
     /* Allocate the AsioDrivers() driver list (class from ASIO SDK) */
-    try
-    {
+    try {
         asioHostApi->asioDrivers = new AsioDrivers(); /* calls CoInitialize(0) */
-    } 
-    catch (std::bad_alloc)
-    {
+    } catch (std::bad_alloc) {
         asioHostApi->asioDrivers = 0;
     }
+
     /* some implementations of new (ie MSVC, see http://support.microsoft.com/?kbid=167733)
        don't throw std::bad_alloc, so we also explicitly test for a null return. */
-    if( asioHostApi->asioDrivers == 0 )
-    {
+    if (asioHostApi->asioDrivers == 0) {
         result = paInsufficientMemory;
         goto error;
     }
@@ -1122,24 +1171,23 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     (*hostApi)->info.name = "ASIO";
     (*hostApi)->info.deviceCount = 0;
 
-    #ifdef WINDOWS
-        /* use desktop window as system specific ptr */
-        asioHostApi->systemSpecific = GetDesktopWindow();
-    #endif
+#ifdef WINDOWS
+    /* use desktop window as system specific ptr */
+    asioHostApi->systemSpecific = GetDesktopWindow();
+#endif
 
     /* driverCount is the number of installed drivers - not necessarily
         the number of installed physical devices. */
-    #if MAC
-        driverCount = asioHostApi->asioDrivers->getNumFragments();
-    #elif WINDOWS
-        driverCount = asioHostApi->asioDrivers->asioGetNumDev();
-    #endif
-
-    if( driverCount > 0 )
-    {
-        names = GetAsioDriverNames( asioHostApi, asioHostApi->allocations, driverCount );
-        if( !names )
-        {
+#if MAC
+    driverCount = asioHostApi->asioDrivers->getNumFragments();
+#elif WINDOWS
+    driverCount = asioHostApi->asioDrivers->asioGetNumDev();
+#endif
+
+    if (driverCount > 0) {
+        names = GetAsioDriverNames (asioHostApi, asioHostApi->allocations, driverCount);
+
+        if (!names) {
             result = paInsufficientMemory;
             goto error;
         }
@@ -1147,63 +1195,58 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
 
         /* allocate enough space for all drivers, even if some aren't installed */
 
-        (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory(
-                asioHostApi->allocations, sizeof(PaDeviceInfo*) * driverCount );
-        if( !(*hostApi)->deviceInfos )
-        {
+        (*hostApi)->deviceInfos = (PaDeviceInfo**) PaUtil_GroupAllocateMemory (
+                                      asioHostApi->allocations, sizeof (PaDeviceInfo*) * driverCount);
+
+        if (! (*hostApi)->deviceInfos) {
             result = paInsufficientMemory;
             goto error;
         }
 
         /* allocate all device info structs in a contiguous block */
-        deviceInfoArray = (PaAsioDeviceInfo*)PaUtil_GroupAllocateMemory(
-                asioHostApi->allocations, sizeof(PaAsioDeviceInfo) * driverCount );
-        if( !deviceInfoArray )
-        {
+        deviceInfoArray = (PaAsioDeviceInfo*) PaUtil_GroupAllocateMemory (
+                              asioHostApi->allocations, sizeof (PaAsioDeviceInfo) * driverCount);
+
+        if (!deviceInfoArray) {
             result = paInsufficientMemory;
             goto error;
         }
 
-        IsDebuggerPresent_ = GetProcAddress( LoadLibrary( "Kernel32.dll" ), "IsDebuggerPresent" );
+        IsDebuggerPresent_ = GetProcAddress (LoadLibrary ("Kernel32.dll"), "IsDebuggerPresent");
 
-        for( i=0; i < driverCount; ++i )
-        {
+        for (i=0; i < driverCount; ++i) {
 
-            PA_DEBUG(("ASIO names[%d]:%s\n",i,names[i]));
+            PA_DEBUG ( ("ASIO names[%d]:%s\n",i,names[i]));
 
             // Since portaudio opens ALL ASIO drivers, and no one else does that,
             // we face fact that some drivers were not meant for it, drivers which act
             // like shells on top of REAL drivers, for instance.
             // so we get duplicate handles, locks and other problems.
-            // so lets NOT try to load any such wrappers. 
+            // so lets NOT try to load any such wrappers.
             // The ones i [davidv] know of so far are:
 
-            if (   strcmp (names[i],"ASIO DirectX Full Duplex Driver") == 0
-                || strcmp (names[i],"ASIO Multimedia Driver")          == 0
-                || strncmp(names[i],"Premiere",8)                      == 0   //"Premiere Elements Windows Sound 1.0"
-                || strncmp(names[i],"Adobe",5)                         == 0   //"Adobe Default Windows Sound 1.5"
-               )
-            {
-                PA_DEBUG(("BLACKLISTED!!!\n"));
+            if (strcmp (names[i],"ASIO DirectX Full Duplex Driver") == 0
+                    || strcmp (names[i],"ASIO Multimedia Driver")          == 0
+                    || strncmp (names[i],"Premiere",8)                      == 0  //"Premiere Elements Windows Sound 1.0"
+                    || strncmp (names[i],"Adobe",5)                         == 0  //"Adobe Default Windows Sound 1.5"
+               ) {
+                PA_DEBUG ( ("BLACKLISTED!!!\n"));
                 continue;
             }
 
 
-            if( IsDebuggerPresent_ && IsDebuggerPresent_() )  
-            {
+            if (IsDebuggerPresent_ && IsDebuggerPresent_()) {
                 /* ASIO Digidesign Driver uses PACE copy protection which quits out
                    if a debugger is running. So we don't load it if a debugger is running. */
-                if( strcmp(names[i], "ASIO Digidesign Driver") == 0 )  
-                {
-                    PA_DEBUG(("BLACKLISTED!!! ASIO Digidesign Driver would quit the debugger\n"));  
-                    continue;  
-                }  
-            }  
+                if (strcmp (names[i], "ASIO Digidesign Driver") == 0) {
+                    PA_DEBUG ( ("BLACKLISTED!!! ASIO Digidesign Driver would quit the debugger\n"));
+                    continue;
+                }
+            }
 
 
             /* Attempt to load the asio driver... */
-            if( LoadAsioDriver( asioHostApi, names[i], &paAsioDriverInfo, asioHostApi->systemSpecific ) == paNoError )
-            {
+            if (LoadAsioDriver (asioHostApi, names[i], &paAsioDriverInfo, asioHostApi->systemSpecific) == paNoError) {
                 PaAsioDeviceInfo *asioDeviceInfo = &deviceInfoArray[ (*hostApi)->info.deviceCount ];
                 PaDeviceInfo *deviceInfo = &asioDeviceInfo->commonDeviceInfo;
 
@@ -1211,33 +1254,33 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 deviceInfo->hostApi = hostApiIndex;
 
                 deviceInfo->name = names[i];
-                PA_DEBUG(("PaAsio_Initialize: drv:%d name = %s\n",  i,deviceInfo->name));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d inputChannels       = %d\n", i, paAsioDriverInfo.inputChannelCount));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d outputChannels      = %d\n", i, paAsioDriverInfo.outputChannelCount));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferMinSize       = %d\n", i, paAsioDriverInfo.bufferMinSize));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferMaxSize       = %d\n", i, paAsioDriverInfo.bufferMaxSize));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferPreferredSize = %d\n", i, paAsioDriverInfo.bufferPreferredSize));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d bufferGranularity   = %d\n", i, paAsioDriverInfo.bufferGranularity));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d name = %s\n",  i,deviceInfo->name));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d inputChannels       = %d\n", i, paAsioDriverInfo.inputChannelCount));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d outputChannels      = %d\n", i, paAsioDriverInfo.outputChannelCount));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferMinSize       = %d\n", i, paAsioDriverInfo.bufferMinSize));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferMaxSize       = %d\n", i, paAsioDriverInfo.bufferMaxSize));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferPreferredSize = %d\n", i, paAsioDriverInfo.bufferPreferredSize));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d bufferGranularity   = %d\n", i, paAsioDriverInfo.bufferGranularity));
 
                 deviceInfo->maxInputChannels  = paAsioDriverInfo.inputChannelCount;
                 deviceInfo->maxOutputChannels = paAsioDriverInfo.outputChannelCount;
 
                 deviceInfo->defaultSampleRate = 0.;
                 bool foundDefaultSampleRate = false;
-                for( int j=0; j < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++j )
-                {
-                    ASIOError asioError = ASIOCanSampleRate( defaultSampleRateSearchOrder_[j] );
-                    if( asioError != ASE_NoClock && asioError != ASE_NotPresent )
-                    {
+
+                for (int j=0; j < PA_DEFAULTSAMPLERATESEARCHORDER_COUNT_; ++j) {
+                    ASIOError asioError = ASIOCanSampleRate (defaultSampleRateSearchOrder_[j]);
+
+                    if (asioError != ASE_NoClock && asioError != ASE_NotPresent) {
                         deviceInfo->defaultSampleRate = defaultSampleRateSearchOrder_[j];
                         foundDefaultSampleRate = true;
                         break;
                     }
                 }
 
-                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultSampleRate = %f\n", i, deviceInfo->defaultSampleRate));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultSampleRate = %f\n", i, deviceInfo->defaultSampleRate));
 
-                if( foundDefaultSampleRate ){
+                if (foundDefaultSampleRate) {
 
                     /* calculate default latency values from bufferPreferredSize
                         for default low latency, and bufferPreferredSize * 3
@@ -1248,27 +1291,27 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                     */
 
                     double defaultLowLatency =
-                            paAsioDriverInfo.bufferPreferredSize / deviceInfo->defaultSampleRate;
+                        paAsioDriverInfo.bufferPreferredSize / deviceInfo->defaultSampleRate;
 
                     deviceInfo->defaultLowInputLatency = defaultLowLatency;
                     deviceInfo->defaultLowOutputLatency = defaultLowLatency;
 
                     long defaultHighLatencyBufferSize =
-                            paAsioDriverInfo.bufferPreferredSize * 3;
+                        paAsioDriverInfo.bufferPreferredSize * 3;
 
-                    if( defaultHighLatencyBufferSize > paAsioDriverInfo.bufferMaxSize )
+                    if (defaultHighLatencyBufferSize > paAsioDriverInfo.bufferMaxSize)
                         defaultHighLatencyBufferSize = paAsioDriverInfo.bufferMaxSize;
 
                     double defaultHighLatency =
-                            defaultHighLatencyBufferSize / deviceInfo->defaultSampleRate;
+                        defaultHighLatencyBufferSize / deviceInfo->defaultSampleRate;
+
+                    if (defaultHighLatency < defaultLowLatency)
+                        defaultHighLatency = defaultLowLatency; /* just incase the driver returns something strange */
 
-                    if( defaultHighLatency < defaultLowLatency )
-                        defaultHighLatency = defaultLowLatency; /* just incase the driver returns something strange */ 
-                            
                     deviceInfo->defaultHighInputLatency = defaultHighLatency;
                     deviceInfo->defaultHighOutputLatency = defaultHighLatency;
-                    
-                }else{
+
+                } else {
 
                     deviceInfo->defaultLowInputLatency = 0.;
                     deviceInfo->defaultLowOutputLatency = 0.;
@@ -1276,10 +1319,10 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                     deviceInfo->defaultHighOutputLatency = 0.;
                 }
 
-                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultLowInputLatency = %f\n", i, deviceInfo->defaultLowInputLatency));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultLowOutputLatency = %f\n", i, deviceInfo->defaultLowOutputLatency));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultHighInputLatency = %f\n", i, deviceInfo->defaultHighInputLatency));
-                PA_DEBUG(("PaAsio_Initialize: drv:%d defaultHighOutputLatency = %f\n", i, deviceInfo->defaultHighOutputLatency));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultLowInputLatency = %f\n", i, deviceInfo->defaultLowInputLatency));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultLowOutputLatency = %f\n", i, deviceInfo->defaultLowOutputLatency));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultHighInputLatency = %f\n", i, deviceInfo->defaultHighInputLatency));
+                PA_DEBUG ( ("PaAsio_Initialize: drv:%d defaultHighOutputLatency = %f\n", i, deviceInfo->defaultHighOutputLatency));
 
                 asioDeviceInfo->minBufferSize = paAsioDriverInfo.bufferMinSize;
                 asioDeviceInfo->maxBufferSize = paAsioDriverInfo.bufferMaxSize;
@@ -1287,39 +1330,39 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 asioDeviceInfo->bufferGranularity = paAsioDriverInfo.bufferGranularity;
 
 
-                asioDeviceInfo->asioChannelInfos = (ASIOChannelInfo*)PaUtil_GroupAllocateMemory(
-                        asioHostApi->allocations,
-                        sizeof(ASIOChannelInfo) * (deviceInfo->maxInputChannels
-                                + deviceInfo->maxOutputChannels) );
-                if( !asioDeviceInfo->asioChannelInfos )
-                {
+                asioDeviceInfo->asioChannelInfos = (ASIOChannelInfo*) PaUtil_GroupAllocateMemory (
+                                                       asioHostApi->allocations,
+                                                       sizeof (ASIOChannelInfo) * (deviceInfo->maxInputChannels
+                                                                                   + deviceInfo->maxOutputChannels));
+
+                if (!asioDeviceInfo->asioChannelInfos) {
                     result = paInsufficientMemory;
                     goto error_unload;
                 }
 
                 int a;
 
-                for( a=0; a < deviceInfo->maxInputChannels; ++a ){
+                for (a=0; a < deviceInfo->maxInputChannels; ++a) {
                     asioDeviceInfo->asioChannelInfos[a].channel = a;
                     asioDeviceInfo->asioChannelInfos[a].isInput = ASIOTrue;
-                    ASIOError asioError = ASIOGetChannelInfo( &asioDeviceInfo->asioChannelInfos[a] );
-                    if( asioError != ASE_OK )
-                    {
+                    ASIOError asioError = ASIOGetChannelInfo (&asioDeviceInfo->asioChannelInfos[a]);
+
+                    if (asioError != ASE_OK) {
                         result = paUnanticipatedHostError;
-                        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+                        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
                         goto error_unload;
                     }
                 }
 
-                for( a=0; a < deviceInfo->maxOutputChannels; ++a ){
+                for (a=0; a < deviceInfo->maxOutputChannels; ++a) {
                     int b = deviceInfo->maxInputChannels + a;
                     asioDeviceInfo->asioChannelInfos[b].channel = a;
                     asioDeviceInfo->asioChannelInfos[b].isInput = ASIOFalse;
-                    ASIOError asioError = ASIOGetChannelInfo( &asioDeviceInfo->asioChannelInfos[b] );
-                    if( asioError != ASE_OK )
-                    {
+                    ASIOError asioError = ASIOGetChannelInfo (&asioDeviceInfo->asioChannelInfos[b]);
+
+                    if (asioError != ASE_OK) {
                         result = paUnanticipatedHostError;
-                        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+                        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
                         goto error_unload;
                     }
                 }
@@ -1329,18 +1372,15 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
                 UnloadAsioDriver();
 
                 (*hostApi)->deviceInfos[ (*hostApi)->info.deviceCount ] = deviceInfo;
-                ++(*hostApi)->info.deviceCount;
+                ++ (*hostApi)->info.deviceCount;
             }
         }
     }
 
-    if( (*hostApi)->info.deviceCount > 0 )
-    {
+    if ( (*hostApi)->info.deviceCount > 0) {
         (*hostApi)->info.defaultInputDevice = 0;
         (*hostApi)->info.defaultOutputDevice = 0;
-    }
-    else
-    {
+    } else {
         (*hostApi)->info.defaultInputDevice = paNoDevice;
         (*hostApi)->info.defaultOutputDevice = paNoDevice;
     }
@@ -1350,97 +1390,94 @@ PaError PaAsio_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex
     (*hostApi)->OpenStream = OpenStream;
     (*hostApi)->IsFormatSupported = IsFormatSupported;
 
-    PaUtil_InitializeStreamInterface( &asioHostApi->callbackStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface (&asioHostApi->callbackStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, GetStreamCpuLoad,
                                       PaUtil_DummyRead, PaUtil_DummyWrite,
-                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable);
 
-    PaUtil_InitializeStreamInterface( &asioHostApi->blockingStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface (&asioHostApi->blockingStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, PaUtil_DummyGetCpuLoad,
-                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable);
 
     return result;
 
 error_unload:
-	UnloadAsioDriver();
+    UnloadAsioDriver();
 
 error:
-    if( asioHostApi )
-    {
-        if( asioHostApi->allocations )
-        {
-            PaUtil_FreeAllAllocations( asioHostApi->allocations );
-            PaUtil_DestroyAllocationGroup( asioHostApi->allocations );
+
+    if (asioHostApi) {
+        if (asioHostApi->allocations) {
+            PaUtil_FreeAllAllocations (asioHostApi->allocations);
+            PaUtil_DestroyAllocationGroup (asioHostApi->allocations);
         }
 
         delete asioHostApi->asioDrivers;
         asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */
 
-        PaUtil_FreeMemory( asioHostApi );
+        PaUtil_FreeMemory (asioHostApi);
     }
+
     return result;
 }
 
 
-static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
+static void Terminate (struct PaUtilHostApiRepresentation *hostApi)
 {
-    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
+    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
 
     /*
         IMPLEMENT ME:
             - clean up any resources not handled by the allocation group (need to review if there are any)
     */
 
-    if( asioHostApi->allocations )
-    {
-        PaUtil_FreeAllAllocations( asioHostApi->allocations );
-        PaUtil_DestroyAllocationGroup( asioHostApi->allocations );
+    if (asioHostApi->allocations) {
+        PaUtil_FreeAllAllocations (asioHostApi->allocations);
+        PaUtil_DestroyAllocationGroup (asioHostApi->allocations);
     }
 
     delete asioHostApi->asioDrivers; /* calls CoUninitialize() */
     asioDrivers = 0; /* keep SDK global in sync until we stop depending on it */
 
-    PaUtil_FreeMemory( asioHostApi );
+    PaUtil_FreeMemory (asioHostApi);
 }
 
 
-static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
-                                  double sampleRate )
+                                  double sampleRate)
 {
     PaError result = paNoError;
-    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
+    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
     PaAsioDriverInfo *driverInfo = &asioHostApi->openAsioDriverInfo;
     int inputChannelCount, outputChannelCount;
     PaSampleFormat inputSampleFormat, outputSampleFormat;
-    PaDeviceIndex asioDeviceIndex;                                  
+    PaDeviceIndex asioDeviceIndex;
     ASIOError asioError;
-    
-    if( inputParameters && outputParameters )
-    {
+
+    if (inputParameters && outputParameters) {
         /* full duplex ASIO stream must use the same device for input and output */
 
-        if( inputParameters->device != outputParameters->device )
+        if (inputParameters->device != outputParameters->device)
             return paBadIODeviceCombination;
     }
-    
-    if( inputParameters )
-    {
+
+    if (inputParameters) {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-        if( inputSampleFormat & paCustomFormat )
+        if (inputSampleFormat & paCustomFormat)
             return paSampleFormatNotSupported;
-            
+
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         asioDeviceIndex = inputParameters->device;
@@ -1449,26 +1486,23 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
         /** @todo do more validation here */
         // if( inputParameters->hostApiSpecificStreamInfo )
         //    return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
-    }
-    else
-    {
+    } else {
         inputChannelCount = 0;
     }
 
-    if( outputParameters )
-    {
+    if (outputParameters) {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-        if( outputSampleFormat & paCustomFormat )
+        if (outputSampleFormat & paCustomFormat)
             return paSampleFormatNotSupported;
-            
+
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         asioDeviceIndex = outputParameters->device;
@@ -1477,9 +1511,7 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
         /** @todo do more validation here */
         // if( outputParameters->hostApiSpecificStreamInfo )
         //    return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
-    }
-    else
-    {
+    } else {
         outputChannelCount = 0;
     }
 
@@ -1487,9 +1519,8 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
 
     /* if an ASIO device is open we can only get format information for the currently open device */
 
-    if( asioHostApi->openAsioDeviceIndex != paNoDevice 
-            && asioHostApi->openAsioDeviceIndex != asioDeviceIndex )
-    {
+    if (asioHostApi->openAsioDeviceIndex != paNoDevice
+            && asioHostApi->openAsioDeviceIndex != asioDeviceIndex) {
         return paDeviceUnavailable;
     }
 
@@ -1498,50 +1529,46 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
         rather than the ones in our device info structure which may be stale */
 
     /* open the device if it's not already open */
-    if( asioHostApi->openAsioDeviceIndex == paNoDevice )
-    {
-        result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
-                driverInfo, asioHostApi->systemSpecific );
-        if( result != paNoError )
+    if (asioHostApi->openAsioDeviceIndex == paNoDevice) {
+        result = LoadAsioDriver (asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
+                                 driverInfo, asioHostApi->systemSpecific);
+
+        if (result != paNoError)
             return result;
     }
 
     /* check that input device can support inputChannelCount */
-    if( inputChannelCount > 0 )
-    {
-        if( inputChannelCount > driverInfo->inputChannelCount )
-        {
+    if (inputChannelCount > 0) {
+        if (inputChannelCount > driverInfo->inputChannelCount) {
             result = paInvalidChannelCount;
             goto done;
         }
     }
 
     /* check that output device can support outputChannelCount */
-    if( outputChannelCount )
-    {
-        if( outputChannelCount > driverInfo->outputChannelCount )
-        {
+    if (outputChannelCount) {
+        if (outputChannelCount > driverInfo->outputChannelCount) {
             result = paInvalidChannelCount;
             goto done;
         }
     }
-    
+
     /* query for sample rate support */
-    asioError = ASIOCanSampleRate( sampleRate );
-    if( asioError == ASE_NoClock || asioError == ASE_NotPresent )
-    {
+    asioError = ASIOCanSampleRate (sampleRate);
+
+    if (asioError == ASE_NoClock || asioError == ASE_NotPresent) {
         result = paInvalidSampleRate;
         goto done;
     }
 
 done:
+
     /* close the device if it wasn't already open */
-    if( asioHostApi->openAsioDeviceIndex == paNoDevice )
-    {
+    if (asioHostApi->openAsioDeviceIndex == paNoDevice) {
         UnloadAsioDriver(); /* not sure if we should check for errors here */
     }
 
-    if( result == paNoError )
+    if (result == paNoError)
         return paFormatIsSupported;
     else
         return result;
@@ -1550,8 +1577,7 @@ done:
 
 
 /** A data structure specifically for storing blocking i/o related data. */
-typedef struct PaAsioStreamBlockingState
-{
+typedef struct PaAsioStreamBlockingState {
     int stopFlag; /**< Flag indicating that block processing is to be stopped. */
 
     unsigned long writeBuffersRequested; /**< The number of available output buffers, requested by the #WriteStream() function. */
@@ -1585,8 +1611,7 @@ PaAsioStreamBlockingState;
 
 /* PaAsioStream - a stream data structure specifically for this implementation */
 
-typedef struct PaAsioStream
-{
+typedef struct PaAsioStream {
     PaUtilStreamRepresentation streamRepresentation;
     PaUtilCpuLoadMeasurer cpuLoadMeasurer;
     PaUtilBufferProcessor bufferProcessor;
@@ -1635,81 +1660,65 @@ PaAsioStream;
 static PaAsioStream *theAsioStream = 0; /* due to ASIO sdk limitations there can be only one stream */
 
 
-static void ZeroOutputBuffers( PaAsioStream *stream, long index )
+static void ZeroOutputBuffers (PaAsioStream *stream, long index)
 {
     int i;
 
-    for( i=0; i < stream->outputChannelCount; ++i )
-    {
+    for (i=0; i < stream->outputChannelCount; ++i) {
         void *buffer = stream->asioBufferInfos[ i + stream->inputChannelCount ].buffers[index];
 
-        int bytesPerSample = BytesPerAsioSample( stream->asioChannelInfos[ i + stream->inputChannelCount ].type );
+        int bytesPerSample = BytesPerAsioSample (stream->asioChannelInfos[ i + stream->inputChannelCount ].type);
 
-        memset( buffer, 0, stream->framesPerHostCallback * bytesPerSample );
+        memset (buffer, 0, stream->framesPerHostCallback * bytesPerSample);
     }
 }
 
 
-static unsigned long SelectHostBufferSize( unsigned long suggestedLatencyFrames,
-        PaAsioDriverInfo *driverInfo )
+static unsigned long SelectHostBufferSize (unsigned long suggestedLatencyFrames,
+        PaAsioDriverInfo *driverInfo)
 {
     unsigned long result;
 
-    if( suggestedLatencyFrames == 0 )
-    {
+    if (suggestedLatencyFrames == 0) {
         result = driverInfo->bufferPreferredSize;
-    }
-    else{
-        if( suggestedLatencyFrames <= (unsigned long)driverInfo->bufferMinSize )
-        {
+    } else {
+        if (suggestedLatencyFrames <= (unsigned long) driverInfo->bufferMinSize) {
             result = driverInfo->bufferMinSize;
-        }
-        else if( suggestedLatencyFrames >= (unsigned long)driverInfo->bufferMaxSize )
-        {
+        } else if (suggestedLatencyFrames >= (unsigned long) driverInfo->bufferMaxSize) {
             result = driverInfo->bufferMaxSize;
-        }
-        else
-        {
-            if( driverInfo->bufferGranularity == -1 )
-            {
+        } else {
+            if (driverInfo->bufferGranularity == -1) {
                 /* power-of-two */
                 result = 2;
 
-                while( result < suggestedLatencyFrames )
+                while (result < suggestedLatencyFrames)
                     result *= 2;
 
-                if( result < (unsigned long)driverInfo->bufferMinSize )
+                if (result < (unsigned long) driverInfo->bufferMinSize)
                     result = driverInfo->bufferMinSize;
 
-                if( result > (unsigned long)driverInfo->bufferMaxSize )
+                if (result > (unsigned long) driverInfo->bufferMaxSize)
                     result = driverInfo->bufferMaxSize;
-            }
-            else if( driverInfo->bufferGranularity == 0 )
-            {
+            } else if (driverInfo->bufferGranularity == 0) {
                 /* the documentation states that bufferGranularity should be
                     zero when bufferMinSize, bufferMaxSize and
                     bufferPreferredSize are the same. We assume that is the case.
                 */
 
                 result = driverInfo->bufferPreferredSize;
-            }
-            else
-            {
+            } else {
                 /* modulo granularity */
 
                 unsigned long remainder =
-                        suggestedLatencyFrames % driverInfo->bufferGranularity;
+                    suggestedLatencyFrames % driverInfo->bufferGranularity;
 
-                if( remainder == 0 )
-                {
+                if (remainder == 0) {
                     result = suggestedLatencyFrames;
-                }
-                else
-                {
+                } else {
                     result = suggestedLatencyFrames
-                            + (driverInfo->bufferGranularity - remainder);
+                             + (driverInfo->bufferGranularity - remainder);
 
-                    if( result > (unsigned long)driverInfo->bufferMaxSize )
+                    if (result > (unsigned long) driverInfo->bufferMaxSize)
                         result = driverInfo->bufferMaxSize;
                 }
             }
@@ -1722,31 +1731,29 @@ static unsigned long SelectHostBufferSize( unsigned long suggestedLatencyFrames,
 
 /* returns channelSelectors if present */
 
-static PaError ValidateAsioSpecificStreamInfo(
-        const PaStreamParameters *streamParameters,
-        const PaAsioStreamInfo *streamInfo,
-        int deviceChannelCount,
-        int **channelSelectors )
+static PaError ValidateAsioSpecificStreamInfo (
+    const PaStreamParameters *streamParameters,
+    const PaAsioStreamInfo *streamInfo,
+    int deviceChannelCount,
+    int **channelSelectors)
 {
-    if( streamInfo )
-    {
-        if( streamInfo->size != sizeof( PaAsioStreamInfo )
-                || streamInfo->version != 1 )
-        {
+    if (streamInfo) {
+        if (streamInfo->size != sizeof (PaAsioStreamInfo)
+                || streamInfo->version != 1) {
             return paIncompatibleHostApiSpecificStreamInfo;
         }
 
-        if( streamInfo->flags & paAsioUseChannelSelectors )
+        if (streamInfo->flags & paAsioUseChannelSelectors)
             *channelSelectors = streamInfo->channelSelectors;
 
-        if( !(*channelSelectors) )
+        if (! (*channelSelectors))
             return paIncompatibleHostApiSpecificStreamInfo;
 
-        for( int i=0; i < streamParameters->channelCount; ++i ){
-             if( (*channelSelectors)[i] < 0
-                    || (*channelSelectors)[i] >= deviceChannelCount ){
+        for (int i=0; i < streamParameters->channelCount; ++i) {
+            if ( (*channelSelectors) [i] < 0
+                    || (*channelSelectors) [i] >= deviceChannelCount) {
                 return paInvalidChannelCount;
-             }           
+            }
         }
     }
 
@@ -1764,15 +1771,17 @@ static bool IsUsingExternalClockSource()
     /* davidv: listing ASIO Clock sources. there is an ongoing investigation by
        me about whether or not to call ASIOSetSampleRate if an external Clock is
        used. A few drivers expected different things here */
-    
-    asioError = ASIOGetClockSources(clocks, &numSources);
-    if( asioError != ASE_OK ){
-        PA_DEBUG(("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText(asioError) ));
-    }else{
-        PA_DEBUG(("INFO ASIOGetClockSources listing %d clocks\n", numSources ));
-        for (int i=0;i<numSources;++i){
-            PA_DEBUG(("ASIOClockSource%d %s current:%d\n", i, clocks[i].name, clocks[i].isCurrentSource ));
-           
+
+    asioError = ASIOGetClockSources (clocks, &numSources);
+
+    if (asioError != ASE_OK) {
+        PA_DEBUG ( ("ERROR: ASIOGetClockSources: %s\n", PaAsio_GetAsioErrorText (asioError)));
+    } else {
+        PA_DEBUG ( ("INFO ASIOGetClockSources listing %d clocks\n", numSources));
+
+        for (int i=0; i<numSources; ++i) {
+            PA_DEBUG ( ("ASIOClockSource%d %s current:%d\n", i, clocks[i].name, clocks[i].isCurrentSource));
+
             if (clocks[i].isCurrentSource)
                 result = true;
         }
@@ -1782,20 +1791,19 @@ static bool IsUsingExternalClockSource()
 }
 
 
-static PaError ValidateAndSetSampleRate( double sampleRate )
+static PaError ValidateAndSetSampleRate (double sampleRate)
 {
     PaError result = paNoError;
     ASIOError asioError;
 
-    // check that the device supports the requested sample rate 
+    // check that the device supports the requested sample rate
 
-    asioError = ASIOCanSampleRate( sampleRate );
-    PA_DEBUG(("ASIOCanSampleRate(%f):%d\n", sampleRate, asioError ));
+    asioError = ASIOCanSampleRate (sampleRate);
+    PA_DEBUG ( ("ASIOCanSampleRate(%f):%d\n", sampleRate, asioError));
 
-    if( asioError != ASE_OK )
-    {
+    if (asioError != ASE_OK) {
         result = paInvalidSampleRate;
-        PA_DEBUG(("ERROR: ASIOCanSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+        PA_DEBUG ( ("ERROR: ASIOCanSampleRate: %s\n", PaAsio_GetAsioErrorText (asioError)));
         goto error;
     }
 
@@ -1803,42 +1811,43 @@ static PaError ValidateAndSetSampleRate( double sampleRate )
     // sample rate if the device is not already in that rate.
 
     ASIOSampleRate oldRate;
-    asioError = ASIOGetSampleRate(&oldRate);
-    if( asioError != ASE_OK )
-    {
+    asioError = ASIOGetSampleRate (&oldRate);
+
+    if (asioError != ASE_OK) {
         result = paInvalidSampleRate;
-        PA_DEBUG(("ERROR: ASIOGetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+        PA_DEBUG ( ("ERROR: ASIOGetSampleRate: %s\n", PaAsio_GetAsioErrorText (asioError)));
         goto error;
     }
-    PA_DEBUG(("ASIOGetSampleRate:%f\n",oldRate));
 
-    if (oldRate != sampleRate){
+    PA_DEBUG ( ("ASIOGetSampleRate:%f\n",oldRate));
+
+    if (oldRate != sampleRate) {
         /* Set sample rate */
 
-        PA_DEBUG(("before ASIOSetSampleRate(%f)\n",sampleRate));
+        PA_DEBUG ( ("before ASIOSetSampleRate(%f)\n",sampleRate));
 
         /*
-            If you have problems with some drivers when externally clocked, 
+            If you have problems with some drivers when externally clocked,
             try switching on the following line and commenting out the one after it.
             See IsUsingExternalClockSource() for more info.
         */
+
         //if( IsUsingExternalClockSource() ){
-        if( false ){
-            asioError = ASIOSetSampleRate( 0 );
-        }else{
-            asioError = ASIOSetSampleRate( sampleRate );
+        if (false) {
+            asioError = ASIOSetSampleRate (0);
+        } else {
+            asioError = ASIOSetSampleRate (sampleRate);
         }
-        if( asioError != ASE_OK )
-        {
+
+        if (asioError != ASE_OK) {
             result = paInvalidSampleRate;
-            PA_DEBUG(("ERROR: ASIOSetSampleRate: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+            PA_DEBUG ( ("ERROR: ASIOSetSampleRate: %s\n", PaAsio_GetAsioErrorText (asioError)));
             goto error;
         }
-        PA_DEBUG(("after ASIOSetSampleRate(%f)\n",sampleRate));
-    }
-    else
-    {
-        PA_DEBUG(("No Need to change SR\n"));
+
+        PA_DEBUG ( ("after ASIOSetSampleRate(%f)\n",sampleRate));
+    } else {
+        PA_DEBUG ( ("No Need to change SR\n"));
     }
 
 error:
@@ -1848,7 +1857,7 @@ error:
 
 /* see pa_hostapi.h for a list of validity guarantees made about OpenStream  parameters */
 
-static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -1856,10 +1865,10 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData )
+                           void *userData)
 {
     PaError result = paNoError;
-    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
+    PaAsioHostApiRepresentation *asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
     PaAsioStream *stream = 0;
     PaAsioStreamInfo *inputStreamInfo, *outputStreamInfo;
     unsigned long framesPerHostBuffer;
@@ -1879,7 +1888,7 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     int *outputChannelSelectors = 0;
 
     /* Are we using blocking i/o interface? */
-    int usingBlockingIo = ( !streamCallback ) ? TRUE : FALSE;
+    int usingBlockingIo = (!streamCallback) ? TRUE : FALSE;
     /* Blocking i/o stuff */
     long lBlockingBufferSize     = 0; /* Desired ring buffer size in samples. */
     long lBlockingBufferSizePow2 = 0; /* Power-of-2 rounded ring buffer size. */
@@ -1892,80 +1901,73 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
     /* unless we move to using lower level ASIO calls, we can only have
         one device open at a time */
-    if( asioHostApi->openAsioDeviceIndex != paNoDevice )
-    {
-        PA_DEBUG(("OpenStream paDeviceUnavailable\n"));
+    if (asioHostApi->openAsioDeviceIndex != paNoDevice) {
+        PA_DEBUG ( ("OpenStream paDeviceUnavailable\n"));
         return paDeviceUnavailable;
     }
 
-    assert( theAsioStream == 0 );
+    assert (theAsioStream == 0);
 
-    if( inputParameters && outputParameters )
-    {
+    if (inputParameters && outputParameters) {
         /* full duplex ASIO stream must use the same device for input and output */
 
-        if( inputParameters->device != outputParameters->device )
-        {
-            PA_DEBUG(("OpenStream paBadIODeviceCombination\n"));
+        if (inputParameters->device != outputParameters->device) {
+            PA_DEBUG ( ("OpenStream paBadIODeviceCombination\n"));
             return paBadIODeviceCombination;
         }
     }
 
-    if( inputParameters )
-    {
+    if (inputParameters) {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
-        suggestedInputLatencyFrames = (unsigned long)((inputParameters->suggestedLatency * sampleRate)+0.5f);
+        suggestedInputLatencyFrames = (unsigned long) ( (inputParameters->suggestedLatency * sampleRate) +0.5f);
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
-        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         asioDeviceIndex = inputParameters->device;
 
-        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[asioDeviceIndex];
+        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[asioDeviceIndex];
 
         /* validate hostApiSpecificStreamInfo */
-        inputStreamInfo = (PaAsioStreamInfo*)inputParameters->hostApiSpecificStreamInfo;
-        result = ValidateAsioSpecificStreamInfo( inputParameters, inputStreamInfo,
-            asioDeviceInfo->commonDeviceInfo.maxInputChannels,
-            &inputChannelSelectors
-        );
-        if( result != paNoError ) return result;
-    }
-    else
-    {
+        inputStreamInfo = (PaAsioStreamInfo*) inputParameters->hostApiSpecificStreamInfo;
+        result = ValidateAsioSpecificStreamInfo (inputParameters, inputStreamInfo,
+                 asioDeviceInfo->commonDeviceInfo.maxInputChannels,
+                 &inputChannelSelectors
+                                                );
+
+        if (result != paNoError) return result;
+    } else {
         inputChannelCount = 0;
         inputSampleFormat = 0;
         suggestedInputLatencyFrames = 0;
     }
 
-    if( outputParameters )
-    {
+    if (outputParameters) {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
-        suggestedOutputLatencyFrames = (unsigned long)((outputParameters->suggestedLatency * sampleRate)+0.5f);
+        suggestedOutputLatencyFrames = (unsigned long) ( (outputParameters->suggestedLatency * sampleRate) +0.5f);
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
-        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         asioDeviceIndex = outputParameters->device;
 
-        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[asioDeviceIndex];
+        PaAsioDeviceInfo *asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[asioDeviceIndex];
 
         /* validate hostApiSpecificStreamInfo */
-        outputStreamInfo = (PaAsioStreamInfo*)outputParameters->hostApiSpecificStreamInfo;
-        result = ValidateAsioSpecificStreamInfo( outputParameters, outputStreamInfo,
-            asioDeviceInfo->commonDeviceInfo.maxOutputChannels,
-            &outputChannelSelectors
-        );
-        if( result != paNoError ) return result;
-    }
-    else
-    {
+        outputStreamInfo = (PaAsioStreamInfo*) outputParameters->hostApiSpecificStreamInfo;
+        result = ValidateAsioSpecificStreamInfo (outputParameters, outputStreamInfo,
+                 asioDeviceInfo->commonDeviceInfo.maxOutputChannels,
+                 &outputChannelSelectors
+                                                );
+
+        if (result != paNoError) return result;
+    } else {
         outputChannelCount = 0;
         outputSampleFormat = 0;
         suggestedOutputLatencyFrames = 0;
@@ -1976,39 +1978,37 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     /* NOTE: we load the driver and use its current settings
         rather than the ones in our device info structure which may be stale */
 
-    result = LoadAsioDriver( asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
-            driverInfo, asioHostApi->systemSpecific );
-    if( result == paNoError )
+    result = LoadAsioDriver (asioHostApi, asioHostApi->inheritedHostApiRep.deviceInfos[ asioDeviceIndex ]->name,
+                             driverInfo, asioHostApi->systemSpecific);
+
+    if (result == paNoError)
         asioIsInitialized = 1;
-    else{
-        PA_DEBUG(("OpenStream ERROR1 - LoadAsioDriver returned %d\n", result));
+    else {
+        PA_DEBUG ( ("OpenStream ERROR1 - LoadAsioDriver returned %d\n", result));
         goto error;
     }
 
     /* check that input device can support inputChannelCount */
-    if( inputChannelCount > 0 )
-    {
-        if( inputChannelCount > driverInfo->inputChannelCount )
-        {
+    if (inputChannelCount > 0) {
+        if (inputChannelCount > driverInfo->inputChannelCount) {
             result = paInvalidChannelCount;
-            PA_DEBUG(("OpenStream ERROR2\n"));
+            PA_DEBUG ( ("OpenStream ERROR2\n"));
             goto error;
         }
     }
 
     /* check that output device can support outputChannelCount */
-    if( outputChannelCount )
-    {
-        if( outputChannelCount > driverInfo->outputChannelCount )
-        {
+    if (outputChannelCount) {
+        if (outputChannelCount > driverInfo->outputChannelCount) {
             result = paInvalidChannelCount;
-            PA_DEBUG(("OpenStream ERROR3\n"));
+            PA_DEBUG ( ("OpenStream ERROR3\n"));
             goto error;
         }
     }
 
-    result = ValidateAndSetSampleRate( sampleRate );
-    if( result != paNoError )
+    result = ValidateAndSetSampleRate (sampleRate);
+
+    if (result != paNoError)
         goto error;
 
     /*
@@ -2018,30 +2018,32 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     */
 
     /* validate platform specific flags */
-    if( (streamFlags & paPlatformSpecificFlags) != 0 ){
-        PA_DEBUG(("OpenStream invalid flags!!\n"));
+    if ( (streamFlags & paPlatformSpecificFlags) != 0) {
+        PA_DEBUG ( ("OpenStream invalid flags!!\n"));
         return paInvalidFlag; /* unexpected platform specific flag */
     }
 
 
-    stream = (PaAsioStream*)PaUtil_AllocateMemory( sizeof(PaAsioStream) );
-    if( !stream )
-    {
+    stream = (PaAsioStream*) PaUtil_AllocateMemory (sizeof (PaAsioStream));
+
+    if (!stream) {
         result = paInsufficientMemory;
-        PA_DEBUG(("OpenStream ERROR5\n"));
+        PA_DEBUG ( ("OpenStream ERROR5\n"));
         goto error;
     }
+
     stream->blockingState = NULL; /* Blocking i/o not initialized, yet. */
 
 
-    stream->completedBuffersPlayedEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
-    if( stream->completedBuffersPlayedEvent == NULL )
-    {
+    stream->completedBuffersPlayedEvent = CreateEvent (NULL, TRUE, FALSE, NULL);
+
+    if (stream->completedBuffersPlayedEvent == NULL) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
-        PA_DEBUG(("OpenStream ERROR6\n"));
+        PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+        PA_DEBUG ( ("OpenStream ERROR6\n"));
         goto error;
     }
+
     completedBuffersPlayedEventInited = 1;
 
 
@@ -2050,95 +2052,87 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     stream->bufferPtrs = 0; /* for deallocation in error */
 
     /* Using blocking i/o interface... */
-    if( usingBlockingIo )
-    {
+    if (usingBlockingIo) {
         /* Blocking i/o is implemented by running callback mode, using a special blocking i/o callback. */
         streamCallback = BlockingIoPaCallback; /* Setup PA to use the ASIO blocking i/o callback. */
         userData       = &theAsioStream;       /* The callback user data will be the PA ASIO stream. */
-        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
-                                               &asioHostApi->blockingStreamInterface, streamCallback, userData );
-    }
-    else /* Using callback interface... */
-    {
-        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
-                                               &asioHostApi->callbackStreamInterface, streamCallback, userData );
+        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
+                                               &asioHostApi->blockingStreamInterface, streamCallback, userData);
+    } else { /* Using callback interface... */
+        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
+                                               &asioHostApi->callbackStreamInterface, streamCallback, userData);
     }
 
 
-    PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate );
+    PaUtil_InitializeCpuLoadMeasurer (&stream->cpuLoadMeasurer, sampleRate);
 
 
-    stream->asioBufferInfos = (ASIOBufferInfo*)PaUtil_AllocateMemory(
-            sizeof(ASIOBufferInfo) * (inputChannelCount + outputChannelCount) );
-    if( !stream->asioBufferInfos )
-    {
+    stream->asioBufferInfos = (ASIOBufferInfo*) PaUtil_AllocateMemory (
+                                  sizeof (ASIOBufferInfo) * (inputChannelCount + outputChannelCount));
+
+    if (!stream->asioBufferInfos) {
         result = paInsufficientMemory;
-        PA_DEBUG(("OpenStream ERROR7\n"));
+        PA_DEBUG ( ("OpenStream ERROR7\n"));
         goto error;
     }
 
 
-    for( i=0; i < inputChannelCount; ++i )
-    {
+    for (i=0; i < inputChannelCount; ++i) {
         ASIOBufferInfo *info = &stream->asioBufferInfos[i];
 
         info->isInput = ASIOTrue;
 
-        if( inputChannelSelectors ){
+        if (inputChannelSelectors) {
             // inputChannelSelectors values have already been validated in
             // ValidateAsioSpecificStreamInfo() above
             info->channelNum = inputChannelSelectors[i];
-        }else{
+        } else {
             info->channelNum = i;
         }
 
         info->buffers[0] = info->buffers[1] = 0;
     }
 
-    for( i=0; i < outputChannelCount; ++i ){
+    for (i=0; i < outputChannelCount; ++i) {
         ASIOBufferInfo *info = &stream->asioBufferInfos[inputChannelCount+i];
 
         info->isInput = ASIOFalse;
 
-        if( outputChannelSelectors ){
+        if (outputChannelSelectors) {
             // outputChannelSelectors values have already been validated in
             // ValidateAsioSpecificStreamInfo() above
             info->channelNum = outputChannelSelectors[i];
-        }else{
+        } else {
             info->channelNum = i;
         }
-        
+
         info->buffers[0] = info->buffers[1] = 0;
     }
 
 
     /* Using blocking i/o interface... */
-    if( usingBlockingIo )
-    {
-/** @todo REVIEW selection of host buffer size for blocking i/o */
+    if (usingBlockingIo) {
+        /** @todo REVIEW selection of host buffer size for blocking i/o */
         /* Use default host latency for blocking i/o. */
-        framesPerHostBuffer = SelectHostBufferSize( 0, driverInfo );
+        framesPerHostBuffer = SelectHostBufferSize (0, driverInfo);
 
-    }
-    else /* Using callback interface... */
-    {
-        framesPerHostBuffer = SelectHostBufferSize(
-                (( suggestedInputLatencyFrames > suggestedOutputLatencyFrames )
-                        ? suggestedInputLatencyFrames : suggestedOutputLatencyFrames),
-                driverInfo );
+    } else { /* Using callback interface... */
+        framesPerHostBuffer = SelectHostBufferSize (
+                                  ( (suggestedInputLatencyFrames > suggestedOutputLatencyFrames)
+                                    ? suggestedInputLatencyFrames : suggestedOutputLatencyFrames),
+                                  driverInfo);
     }
 
 
-    PA_DEBUG(("PaAsioOpenStream: framesPerHostBuffer :%d\n",  framesPerHostBuffer));
+    PA_DEBUG ( ("PaAsioOpenStream: framesPerHostBuffer :%d\n",  framesPerHostBuffer));
 
-    asioError = ASIOCreateBuffers( stream->asioBufferInfos,
-            inputChannelCount+outputChannelCount,
-            framesPerHostBuffer, &asioCallbacks_ );
+    asioError = ASIOCreateBuffers (stream->asioBufferInfos,
+                                   inputChannelCount+outputChannelCount,
+                                   framesPerHostBuffer, &asioCallbacks_);
 
-    if( asioError != ASE_OK
-            && framesPerHostBuffer != (unsigned long)driverInfo->bufferPreferredSize )
-    {
-        PA_DEBUG(("ERROR: ASIOCreateBuffers: %s\n", PaAsio_GetAsioErrorText(asioError) ));
+    if (asioError != ASE_OK
+            && framesPerHostBuffer != (unsigned long) driverInfo->bufferPreferredSize) {
+        PA_DEBUG ( ("ERROR: ASIOCreateBuffers: %s\n", PaAsio_GetAsioErrorText (asioError)));
         /*
             Some buggy drivers (like the Hoontech DSP24) give incorrect
             [min, preferred, max] values They should work with the preferred size
@@ -2148,138 +2142,122 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
         framesPerHostBuffer = driverInfo->bufferPreferredSize;
 
-        PA_DEBUG(("PaAsioOpenStream: CORRECTED framesPerHostBuffer :%d\n",  framesPerHostBuffer));
+        PA_DEBUG ( ("PaAsioOpenStream: CORRECTED framesPerHostBuffer :%d\n",  framesPerHostBuffer));
 
-        ASIOError asioError2 = ASIOCreateBuffers( stream->asioBufferInfos,
-                inputChannelCount+outputChannelCount,
-                 framesPerHostBuffer, &asioCallbacks_ );
-        if( asioError2 == ASE_OK )
+        ASIOError asioError2 = ASIOCreateBuffers (stream->asioBufferInfos,
+                               inputChannelCount+outputChannelCount,
+                               framesPerHostBuffer, &asioCallbacks_);
+
+        if (asioError2 == ASE_OK)
             asioError = ASE_OK;
     }
 
-    if( asioError != ASE_OK )
-    {
+    if (asioError != ASE_OK) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
-        PA_DEBUG(("OpenStream ERROR9\n"));
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+        PA_DEBUG ( ("OpenStream ERROR9\n"));
         goto error;
     }
 
     asioBuffersCreated = 1;
 
-    stream->asioChannelInfos = (ASIOChannelInfo*)PaUtil_AllocateMemory(
-            sizeof(ASIOChannelInfo) * (inputChannelCount + outputChannelCount) );
-    if( !stream->asioChannelInfos )
-    {
+    stream->asioChannelInfos = (ASIOChannelInfo*) PaUtil_AllocateMemory (
+                                   sizeof (ASIOChannelInfo) * (inputChannelCount + outputChannelCount));
+
+    if (!stream->asioChannelInfos) {
         result = paInsufficientMemory;
-        PA_DEBUG(("OpenStream ERROR10\n"));
+        PA_DEBUG ( ("OpenStream ERROR10\n"));
         goto error;
     }
 
-    for( i=0; i < inputChannelCount + outputChannelCount; ++i )
-    {
+    for (i=0; i < inputChannelCount + outputChannelCount; ++i) {
         stream->asioChannelInfos[i].channel = stream->asioBufferInfos[i].channelNum;
         stream->asioChannelInfos[i].isInput = stream->asioBufferInfos[i].isInput;
-        asioError = ASIOGetChannelInfo( &stream->asioChannelInfos[i] );
-        if( asioError != ASE_OK )
-        {
+        asioError = ASIOGetChannelInfo (&stream->asioChannelInfos[i]);
+
+        if (asioError != ASE_OK) {
             result = paUnanticipatedHostError;
-            PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
-            PA_DEBUG(("OpenStream ERROR11\n"));
+            PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
+            PA_DEBUG ( ("OpenStream ERROR11\n"));
             goto error;
         }
     }
 
-    stream->bufferPtrs = (void**)PaUtil_AllocateMemory(
-            2 * sizeof(void*) * (inputChannelCount + outputChannelCount) );
-    if( !stream->bufferPtrs )
-    {
+    stream->bufferPtrs = (void**) PaUtil_AllocateMemory (
+                             2 * sizeof (void*) * (inputChannelCount + outputChannelCount));
+
+    if (!stream->bufferPtrs) {
         result = paInsufficientMemory;
-        PA_DEBUG(("OpenStream ERROR12\n"));
+        PA_DEBUG ( ("OpenStream ERROR12\n"));
         goto error;
     }
 
-    if( inputChannelCount > 0 )
-    {
+    if (inputChannelCount > 0) {
         stream->inputBufferPtrs[0] = stream-> bufferPtrs;
         stream->inputBufferPtrs[1] = &stream->bufferPtrs[inputChannelCount];
 
-        for( i=0; i<inputChannelCount; ++i )
-        {
+        for (i=0; i<inputChannelCount; ++i) {
             stream->inputBufferPtrs[0][i] = stream->asioBufferInfos[i].buffers[0];
             stream->inputBufferPtrs[1][i] = stream->asioBufferInfos[i].buffers[1];
         }
-    }
-    else
-    {
+    } else {
         stream->inputBufferPtrs[0] = 0;
         stream->inputBufferPtrs[1] = 0;
     }
 
-    if( outputChannelCount > 0 )
-    {
+    if (outputChannelCount > 0) {
         stream->outputBufferPtrs[0] = &stream->bufferPtrs[inputChannelCount*2];
         stream->outputBufferPtrs[1] = &stream->bufferPtrs[inputChannelCount*2 + outputChannelCount];
 
-        for( i=0; i<outputChannelCount; ++i )
-        {
+        for (i=0; i<outputChannelCount; ++i) {
             stream->outputBufferPtrs[0][i] = stream->asioBufferInfos[inputChannelCount+i].buffers[0];
             stream->outputBufferPtrs[1][i] = stream->asioBufferInfos[inputChannelCount+i].buffers[1];
         }
-    }
-    else
-    {
+    } else {
         stream->outputBufferPtrs[0] = 0;
         stream->outputBufferPtrs[1] = 0;
     }
 
-    if( inputChannelCount > 0 )
-    {
+    if (inputChannelCount > 0) {
         /* FIXME: assume all channels use the same type for now */
         ASIOSampleType inputType = stream->asioChannelInfos[0].type;
 
-        PA_DEBUG(("ASIO Input  type:%d",inputType));
-        AsioSampleTypeLOG(inputType);
-        hostInputSampleFormat = AsioSampleTypeToPaNativeSampleFormat( inputType );
+        PA_DEBUG ( ("ASIO Input  type:%d",inputType));
+        AsioSampleTypeLOG (inputType);
+        hostInputSampleFormat = AsioSampleTypeToPaNativeSampleFormat (inputType);
 
-        SelectAsioToPaConverter( inputType, &stream->inputBufferConverter, &stream->inputShift );
-    }
-    else
-    {
+        SelectAsioToPaConverter (inputType, &stream->inputBufferConverter, &stream->inputShift);
+    } else {
         hostInputSampleFormat = 0;
         stream->inputBufferConverter = 0;
     }
 
-    if( outputChannelCount > 0 )
-    {
+    if (outputChannelCount > 0) {
         /* FIXME: assume all channels use the same type for now */
         ASIOSampleType outputType = stream->asioChannelInfos[inputChannelCount].type;
 
-        PA_DEBUG(("ASIO Output type:%d",outputType));
-        AsioSampleTypeLOG(outputType);
-        hostOutputSampleFormat = AsioSampleTypeToPaNativeSampleFormat( outputType );
+        PA_DEBUG ( ("ASIO Output type:%d",outputType));
+        AsioSampleTypeLOG (outputType);
+        hostOutputSampleFormat = AsioSampleTypeToPaNativeSampleFormat (outputType);
 
-        SelectPaToAsioConverter( outputType, &stream->outputBufferConverter, &stream->outputShift );
-    }
-    else
-    {
+        SelectPaToAsioConverter (outputType, &stream->outputBufferConverter, &stream->outputShift);
+    } else {
         hostOutputSampleFormat = 0;
         stream->outputBufferConverter = 0;
     }
 
 
-    ASIOGetLatencies( &stream->inputLatency, &stream->outputLatency );
+    ASIOGetLatencies (&stream->inputLatency, &stream->outputLatency);
 
 
     /* Using blocking i/o interface... */
-    if( usingBlockingIo )
-    {
+    if (usingBlockingIo) {
         /* Allocate the blocking i/o input ring buffer memory. */
-        stream->blockingState = (PaAsioStreamBlockingState*)PaUtil_AllocateMemory( sizeof(PaAsioStreamBlockingState) );
-        if( !stream->blockingState )
-        {
+        stream->blockingState = (PaAsioStreamBlockingState*) PaUtil_AllocateMemory (sizeof (PaAsioStreamBlockingState));
+
+        if (!stream->blockingState) {
             result = paInsufficientMemory;
-            PA_DEBUG(("ERROR! Blocking i/o interface struct allocation failed in OpenStream()\n"));
+            PA_DEBUG ( ("ERROR! Blocking i/o interface struct allocation failed in OpenStream()\n"));
             goto error;
         }
 
@@ -2294,75 +2272,78 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
 
         /* If the user buffer is unspecified */
-        if( framesPerBuffer == paFramesPerBufferUnspecified )
-        {
+        if (framesPerBuffer == paFramesPerBufferUnspecified) {
             /* Make the user buffer the same size as the host buffer. */
             framesPerBuffer = framesPerHostBuffer;
         }
 
 
         /* Initialize callback buffer processor. */
-        result = PaUtil_InitializeBufferProcessor( &stream->bufferProcessor               ,
-                                                    inputChannelCount                     ,
-                                                    inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
-                                                    hostInputSampleFormat                 , /* Host format. */
-                                                    outputChannelCount                    ,
-                                                    outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
-                                                    hostOutputSampleFormat                , /* Host format. */
-                                                    sampleRate                            ,
-                                                    streamFlags                           ,
-                                                    framesPerBuffer                       , /* Frames per ring buffer block. */
-                                                    framesPerHostBuffer                   , /* Frames per asio buffer. */
-                                                    paUtilFixedHostBufferSize             ,
-                                                    streamCallback                        ,
-                                                    userData                               );
-        if( result != paNoError ){
-            PA_DEBUG(("OpenStream ERROR13\n"));
+        result = PaUtil_InitializeBufferProcessor (&stream->bufferProcessor               ,
+                 inputChannelCount                     ,
+                 inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
+                 hostInputSampleFormat                 , /* Host format. */
+                 outputChannelCount                    ,
+                 outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
+                 hostOutputSampleFormat                , /* Host format. */
+                 sampleRate                            ,
+                 streamFlags                           ,
+                 framesPerBuffer                       , /* Frames per ring buffer block. */
+                 framesPerHostBuffer                   , /* Frames per asio buffer. */
+                 paUtilFixedHostBufferSize             ,
+                 streamCallback                        ,
+                 userData);
+
+        if (result != paNoError) {
+            PA_DEBUG ( ("OpenStream ERROR13\n"));
             goto error;
         }
+
         callbackBufferProcessorInited = TRUE;
 
         /* Initialize the blocking i/o buffer processor. */
-        result = PaUtil_InitializeBufferProcessor(&stream->blockingState->bufferProcessor,
-                                                   inputChannelCount                     ,
-                                                   inputSampleFormat                     , /* User format. */
-                                                   inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
-                                                   outputChannelCount                    ,
-                                                   outputSampleFormat                    , /* User format. */
-                                                   outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
-                                                   sampleRate                            ,
-                                                   paClipOff | paDitherOff               , /* Don't use dither nor clipping. */
-                                                   framesPerBuffer                       , /* Frames per user buffer. */
-                                                   framesPerBuffer                       , /* Frames per ring buffer block. */
-                                                   paUtilBoundedHostBufferSize           ,
-                                                   NULL, NULL                            );/* No callback! */
-        if( result != paNoError ){
-            PA_DEBUG(("ERROR! Blocking i/o buffer processor initialization failed in OpenStream()\n"));
+        result = PaUtil_InitializeBufferProcessor (&stream->blockingState->bufferProcessor,
+                 inputChannelCount                     ,
+                 inputSampleFormat                     , /* User format. */
+                 inputSampleFormat & ~paNonInterleaved , /* Ring buffer. */
+                 outputChannelCount                    ,
+                 outputSampleFormat                    , /* User format. */
+                 outputSampleFormat & ~paNonInterleaved, /* Ring buffer. */
+                 sampleRate                            ,
+                 paClipOff | paDitherOff               , /* Don't use dither nor clipping. */
+                 framesPerBuffer                       , /* Frames per user buffer. */
+                 framesPerBuffer                       , /* Frames per ring buffer block. */
+                 paUtilBoundedHostBufferSize           ,
+                 NULL, NULL);                            /* No callback! */
+
+        if (result != paNoError) {
+            PA_DEBUG ( ("ERROR! Blocking i/o buffer processor initialization failed in OpenStream()\n"));
             goto error;
         }
+
         blockingBufferProcessorInited = TRUE;
 
         /* If input is requested. */
-        if( inputChannelCount )
-        {
+        if (inputChannelCount) {
             /* Create the callback sync-event. */
-            stream->blockingState->readFramesReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
-            if( stream->blockingState->readFramesReadyEvent == NULL )
-            {
+            stream->blockingState->readFramesReadyEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
+
+            if (stream->blockingState->readFramesReadyEvent == NULL) {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
-                PA_DEBUG(("ERROR! Blocking i/o \"read frames ready\" event creation failed in OpenStream()\n"));
+                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+                PA_DEBUG ( ("ERROR! Blocking i/o \"read frames ready\" event creation failed in OpenStream()\n"));
                 goto error;
             }
+
             blockingReadFramesReadyEventInitialized = 1;
 
 
             /* Create pointer buffer to access non-interleaved data in ReadStream() */
-            stream->blockingState->readStreamBuffer = (void**)PaUtil_AllocateMemory( sizeof(void*) * inputChannelCount );
-            if( !stream->blockingState->readStreamBuffer )
-            {
+            stream->blockingState->readStreamBuffer = (void**) PaUtil_AllocateMemory (sizeof (void*) * inputChannelCount);
+
+            if (!stream->blockingState->readStreamBuffer) {
                 result = paInsufficientMemory;
-                PA_DEBUG(("ERROR! Blocking i/o read stream buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG ( ("ERROR! Blocking i/o read stream buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
@@ -2387,68 +2368,70 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
             /* Get the next larger or equal power-of-two buffersize. */
             lBlockingBufferSizePow2 = 1;
-            while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) );
+
+            while (lBlockingBufferSize > (lBlockingBufferSizePow2<<=1));
+
             lBlockingBufferSize = lBlockingBufferSizePow2;
 
             /* Compute total intput latency in seconds */
             stream->streamRepresentation.streamInfo.inputLatency =
-                (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor               )
-                        + PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor)
-                        + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
-                        + stream->inputLatency )
+                (double) (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor)
+                          + PaUtil_GetBufferProcessorInputLatency (&stream->blockingState->bufferProcessor)
+                          + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
+                          + stream->inputLatency)
                 / sampleRate;
 
             /* The code below prints the ASIO latency which doesn't include
                the buffer processor latency nor the blocking i/o latency. It
                reports the added latency separately.
             */
-            PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
-                stream->inputLatency,
-                (long)( stream->inputLatency * (1000.0 / sampleRate) ),
-                PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
-                (long)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor) * (1000.0 / sampleRate) ),
-                PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
-                (long)( (PaUtil_GetBufferProcessorInputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) )
-                ));
+            PA_DEBUG ( ("PaAsio : ASIO InputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
+                        stream->inputLatency,
+                        (long) (stream->inputLatency * (1000.0 / sampleRate)),
+                        PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor),
+                        (long) (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor) * (1000.0 / sampleRate)),
+                        PaUtil_GetBufferProcessorInputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
+                        (long) ( (PaUtil_GetBufferProcessorInputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate))
+                       ));
 
             /* Determine the size of ring buffer in bytes. */
-            lBytesPerFrame = inputChannelCount * Pa_GetSampleSize(inputSampleFormat );
+            lBytesPerFrame = inputChannelCount * Pa_GetSampleSize (inputSampleFormat);
 
             /* Allocate the blocking i/o input ring buffer memory. */
-            stream->blockingState->readRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame );
-            if( !stream->blockingState->readRingBufferData )
-            {
+            stream->blockingState->readRingBufferData = (void*) PaUtil_AllocateMemory (lBlockingBufferSize * lBytesPerFrame);
+
+            if (!stream->blockingState->readRingBufferData) {
                 result = paInsufficientMemory;
-                PA_DEBUG(("ERROR! Blocking i/o input ring buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG ( ("ERROR! Blocking i/o input ring buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
             /* Initialize the input ring buffer struct. */
-            PaUtil_InitializeRingBuffer( &stream->blockingState->readRingBuffer    ,
-                                          lBytesPerFrame                           ,
-                                          lBlockingBufferSize                      ,
-                                          stream->blockingState->readRingBufferData );
+            PaUtil_InitializeRingBuffer (&stream->blockingState->readRingBuffer    ,
+                                         lBytesPerFrame                           ,
+                                         lBlockingBufferSize                      ,
+                                         stream->blockingState->readRingBufferData);
         }
 
         /* If output is requested. */
-        if( outputChannelCount )
-        {
-            stream->blockingState->writeBuffersReadyEvent = CreateEvent( NULL, FALSE, FALSE, NULL );
-            if( stream->blockingState->writeBuffersReadyEvent == NULL )
-            {
+        if (outputChannelCount) {
+            stream->blockingState->writeBuffersReadyEvent = CreateEvent (NULL, FALSE, FALSE, NULL);
+
+            if (stream->blockingState->writeBuffersReadyEvent == NULL) {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
-                PA_DEBUG(("ERROR! Blocking i/o \"write buffers ready\" event creation failed in OpenStream()\n"));
+                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+                PA_DEBUG ( ("ERROR! Blocking i/o \"write buffers ready\" event creation failed in OpenStream()\n"));
                 goto error;
             }
+
             blockingWriteBuffersReadyEventInitialized = 1;
 
             /* Create pointer buffer to access non-interleaved data in WriteStream() */
-            stream->blockingState->writeStreamBuffer = (const void**)PaUtil_AllocateMemory( sizeof(const void*) * outputChannelCount );
-            if( !stream->blockingState->writeStreamBuffer )
-            {
+            stream->blockingState->writeStreamBuffer = (const void**) PaUtil_AllocateMemory (sizeof (const void*) * outputChannelCount);
+
+            if (!stream->blockingState->writeStreamBuffer) {
                 result = paInsufficientMemory;
-                PA_DEBUG(("ERROR! Blocking i/o write stream buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG ( ("ERROR! Blocking i/o write stream buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
@@ -2478,90 +2461,92 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
             /* Get the next larger or equal power-of-two buffersize. */
             lBlockingBufferSizePow2 = 1;
-            while( lBlockingBufferSize > (lBlockingBufferSizePow2<<=1) );
+
+            while (lBlockingBufferSize > (lBlockingBufferSizePow2<<=1));
+
             lBlockingBufferSize = lBlockingBufferSizePow2;
 
             /* Compute total output latency in seconds */
             stream->streamRepresentation.streamInfo.outputLatency =
-                (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor               )
-                        + PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor)
-                        + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
-                        + stream->outputLatency )
+                (double) (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor)
+                          + PaUtil_GetBufferProcessorOutputLatency (&stream->blockingState->bufferProcessor)
+                          + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer
+                          + stream->outputLatency)
                 / sampleRate;
 
             /* The code below prints the ASIO latency which doesn't include
                the buffer processor latency nor the blocking i/o latency. It
                reports the added latency separately.
             */
-            PA_DEBUG(("PaAsio : ASIO OutputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
-                stream->outputLatency,
-                (long)( stream->inputLatency * (1000.0 / sampleRate) ),
-                PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
-                (long)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor) * (1000.0 / sampleRate) ),
-                PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
-                (long)( (PaUtil_GetBufferProcessorOutputLatency(&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate) )
-                ));
+            PA_DEBUG ( ("PaAsio : ASIO OutputLatency = %ld (%ld ms),\n         added buffProc:%ld (%ld ms),\n         added blocking:%ld (%ld ms)\n",
+                        stream->outputLatency,
+                        (long) (stream->inputLatency * (1000.0 / sampleRate)),
+                        PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor),
+                        (long) (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor) * (1000.0 / sampleRate)),
+                        PaUtil_GetBufferProcessorOutputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer,
+                        (long) ( (PaUtil_GetBufferProcessorOutputLatency (&stream->blockingState->bufferProcessor) + (lBlockingBufferSize / framesPerBuffer - 1) * framesPerBuffer) * (1000.0 / sampleRate))
+                       ));
 
             /* Determine the size of ring buffer in bytes. */
-            lBytesPerFrame = outputChannelCount * Pa_GetSampleSize(outputSampleFormat);
+            lBytesPerFrame = outputChannelCount * Pa_GetSampleSize (outputSampleFormat);
 
             /* Allocate the blocking i/o output ring buffer memory. */
-            stream->blockingState->writeRingBufferData = (void*)PaUtil_AllocateMemory( lBlockingBufferSize * lBytesPerFrame );
-            if( !stream->blockingState->writeRingBufferData )
-            {
+            stream->blockingState->writeRingBufferData = (void*) PaUtil_AllocateMemory (lBlockingBufferSize * lBytesPerFrame);
+
+            if (!stream->blockingState->writeRingBufferData) {
                 result = paInsufficientMemory;
-                PA_DEBUG(("ERROR! Blocking i/o output ring buffer allocation failed in OpenStream()\n"));
+                PA_DEBUG ( ("ERROR! Blocking i/o output ring buffer allocation failed in OpenStream()\n"));
                 goto error;
             }
 
             /* Initialize the output ring buffer struct. */
-            PaUtil_InitializeRingBuffer( &stream->blockingState->writeRingBuffer    ,
-                                          lBytesPerFrame                            ,
-                                          lBlockingBufferSize                       ,
-                                          stream->blockingState->writeRingBufferData );
+            PaUtil_InitializeRingBuffer (&stream->blockingState->writeRingBuffer    ,
+                                         lBytesPerFrame                            ,
+                                         lBlockingBufferSize                       ,
+                                         stream->blockingState->writeRingBufferData);
         }
 
         stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
 
 
-    }
-    else /* Using callback interface... */
-    {
-        result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
-                        inputChannelCount, inputSampleFormat, hostInputSampleFormat,
-                        outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
-                        sampleRate, streamFlags, framesPerBuffer,
-                        framesPerHostBuffer, paUtilFixedHostBufferSize,
-                        streamCallback, userData );
-        if( result != paNoError ){
-            PA_DEBUG(("OpenStream ERROR13\n"));
+    } else { /* Using callback interface... */
+        result =  PaUtil_InitializeBufferProcessor (&stream->bufferProcessor,
+                  inputChannelCount, inputSampleFormat, hostInputSampleFormat,
+                  outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
+                  sampleRate, streamFlags, framesPerBuffer,
+                  framesPerHostBuffer, paUtilFixedHostBufferSize,
+                  streamCallback, userData);
+
+        if (result != paNoError) {
+            PA_DEBUG ( ("OpenStream ERROR13\n"));
             goto error;
         }
+
         callbackBufferProcessorInited = TRUE;
 
         stream->streamRepresentation.streamInfo.inputLatency =
-                (double)( PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)
-                    + stream->inputLatency) / sampleRate;   // seconds
+            (double) (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor)
+                      + stream->inputLatency) / sampleRate;   // seconds
         stream->streamRepresentation.streamInfo.outputLatency =
-                (double)( PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)
-                    + stream->outputLatency) / sampleRate; // seconds
+            (double) (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor)
+                      + stream->outputLatency) / sampleRate; // seconds
         stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
 
         // the code below prints the ASIO latency which doesn't include the
         // buffer processor latency. it reports the added latency separately
-        PA_DEBUG(("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
-                stream->inputLatency,
-                (long)((stream->inputLatency*1000)/ sampleRate),  
-                PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor),
-                (long)((PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
-                ));
+        PA_DEBUG ( ("PaAsio : ASIO InputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
+                    stream->inputLatency,
+                    (long) ( (stream->inputLatency*1000) / sampleRate),
+                    PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor),
+                    (long) ( (PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor) *1000) / sampleRate)
+                   ));
 
-        PA_DEBUG(("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
-                stream->outputLatency,
-                (long)((stream->outputLatency*1000)/ sampleRate), 
-                PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor),
-                (long)((PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)*1000)/ sampleRate)
-                ));
+        PA_DEBUG ( ("PaAsio : ASIO OuputLatency = %ld (%ld ms), added buffProc:%ld (%ld ms)\n",
+                    stream->outputLatency,
+                    (long) ( (stream->outputLatency*1000) / sampleRate),
+                    PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor),
+                    (long) ( (PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor) *1000) / sampleRate)
+                   ));
     }
 
     stream->asioHostApi = asioHostApi;
@@ -2572,65 +2557,68 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     stream->postOutput = driverInfo->postOutput;
     stream->isStopped = 1;
     stream->isActive = 0;
-    
+
     asioHostApi->openAsioDeviceIndex = asioDeviceIndex;
 
     theAsioStream = stream;
-    *s = (PaStream*)stream;
+    *s = (PaStream*) stream;
 
     return result;
 
 error:
-    PA_DEBUG(("goto errored\n"));
-    if( stream )
-    {
-        if( stream->blockingState )
-        {
-            if( blockingBufferProcessorInited )
-                PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor );
-
-            if( stream->blockingState->writeRingBufferData )
-                PaUtil_FreeMemory( stream->blockingState->writeRingBufferData );
-            if( stream->blockingState->writeStreamBuffer )
-                PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer );
-            if( blockingWriteBuffersReadyEventInitialized )
-                CloseHandle( stream->blockingState->writeBuffersReadyEvent );
-
-            if( stream->blockingState->readRingBufferData )
-                PaUtil_FreeMemory( stream->blockingState->readRingBufferData );
-            if( stream->blockingState->readStreamBuffer )
-                PaUtil_FreeMemory( stream->blockingState->readStreamBuffer );
-            if( blockingReadFramesReadyEventInitialized )
-                CloseHandle( stream->blockingState->readFramesReadyEvent );
-
-            PaUtil_FreeMemory( stream->blockingState );
+    PA_DEBUG ( ("goto errored\n"));
+
+    if (stream) {
+        if (stream->blockingState) {
+            if (blockingBufferProcessorInited)
+                PaUtil_TerminateBufferProcessor (&stream->blockingState->bufferProcessor);
+
+            if (stream->blockingState->writeRingBufferData)
+                PaUtil_FreeMemory (stream->blockingState->writeRingBufferData);
+
+            if (stream->blockingState->writeStreamBuffer)
+                PaUtil_FreeMemory (stream->blockingState->writeStreamBuffer);
+
+            if (blockingWriteBuffersReadyEventInitialized)
+                CloseHandle (stream->blockingState->writeBuffersReadyEvent);
+
+            if (stream->blockingState->readRingBufferData)
+                PaUtil_FreeMemory (stream->blockingState->readRingBufferData);
+
+            if (stream->blockingState->readStreamBuffer)
+                PaUtil_FreeMemory (stream->blockingState->readStreamBuffer);
+
+            if (blockingReadFramesReadyEventInitialized)
+                CloseHandle (stream->blockingState->readFramesReadyEvent);
+
+            PaUtil_FreeMemory (stream->blockingState);
         }
 
-        if( callbackBufferProcessorInited )
-            PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
+        if (callbackBufferProcessorInited)
+            PaUtil_TerminateBufferProcessor (&stream->bufferProcessor);
 
-        if( completedBuffersPlayedEventInited )
-            CloseHandle( stream->completedBuffersPlayedEvent );
+        if (completedBuffersPlayedEventInited)
+            CloseHandle (stream->completedBuffersPlayedEvent);
 
-        if( stream->asioBufferInfos )
-            PaUtil_FreeMemory( stream->asioBufferInfos );
+        if (stream->asioBufferInfos)
+            PaUtil_FreeMemory (stream->asioBufferInfos);
 
-        if( stream->asioChannelInfos )
-            PaUtil_FreeMemory( stream->asioChannelInfos );
+        if (stream->asioChannelInfos)
+            PaUtil_FreeMemory (stream->asioChannelInfos);
 
-        if( stream->bufferPtrs )
-            PaUtil_FreeMemory( stream->bufferPtrs );
+        if (stream->bufferPtrs)
+            PaUtil_FreeMemory (stream->bufferPtrs);
 
-        PaUtil_FreeMemory( stream );
+        PaUtil_FreeMemory (stream);
     }
 
-    if( asioBuffersCreated )
+    if (asioBuffersCreated)
         ASIODisposeBuffers();
 
-    if( asioIsInitialized )
-	{
-		UnloadAsioDriver();
-	}
+    if (asioIsInitialized) {
+        UnloadAsioDriver();
+    }
+
     return result;
 }
 
@@ -2639,46 +2627,46 @@ error:
     When CloseStream() is called, the multi-api layer ensures that
     the stream has already been stopped or aborted.
 */
-static PaError CloseStream( PaStream* s )
+static PaError CloseStream (PaStream* s)
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
 
     /*
         IMPLEMENT ME:
             - additional stream closing + cleanup
     */
 
-    PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
-    PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
+    PaUtil_TerminateBufferProcessor (&stream->bufferProcessor);
+    PaUtil_TerminateStreamRepresentation (&stream->streamRepresentation);
 
     stream->asioHostApi->openAsioDeviceIndex = paNoDevice;
 
-    CloseHandle( stream->completedBuffersPlayedEvent );
+    CloseHandle (stream->completedBuffersPlayedEvent);
 
     /* Using blocking i/o interface... */
-    if( stream->blockingState )
-    {
-        PaUtil_TerminateBufferProcessor( &stream->blockingState->bufferProcessor );
-
-        if( stream->inputChannelCount ) {
-            PaUtil_FreeMemory( stream->blockingState->readRingBufferData );
-            PaUtil_FreeMemory( stream->blockingState->readStreamBuffer  );
-            CloseHandle( stream->blockingState->readFramesReadyEvent );
+    if (stream->blockingState) {
+        PaUtil_TerminateBufferProcessor (&stream->blockingState->bufferProcessor);
+
+        if (stream->inputChannelCount) {
+            PaUtil_FreeMemory (stream->blockingState->readRingBufferData);
+            PaUtil_FreeMemory (stream->blockingState->readStreamBuffer);
+            CloseHandle (stream->blockingState->readFramesReadyEvent);
         }
-        if( stream->outputChannelCount ) {
-            PaUtil_FreeMemory( stream->blockingState->writeRingBufferData );
-            PaUtil_FreeMemory( stream->blockingState->writeStreamBuffer );
-            CloseHandle( stream->blockingState->writeBuffersReadyEvent );
+
+        if (stream->outputChannelCount) {
+            PaUtil_FreeMemory (stream->blockingState->writeRingBufferData);
+            PaUtil_FreeMemory (stream->blockingState->writeStreamBuffer);
+            CloseHandle (stream->blockingState->writeBuffersReadyEvent);
         }
 
-        PaUtil_FreeMemory( stream->blockingState );
+        PaUtil_FreeMemory (stream->blockingState);
     }
 
-    PaUtil_FreeMemory( stream->asioBufferInfos );
-    PaUtil_FreeMemory( stream->asioChannelInfos );
-    PaUtil_FreeMemory( stream->bufferPtrs );
-    PaUtil_FreeMemory( stream );
+    PaUtil_FreeMemory (stream->asioBufferInfos);
+    PaUtil_FreeMemory (stream->asioChannelInfos);
+    PaUtil_FreeMemory (stream->bufferPtrs);
+    PaUtil_FreeMemory (stream);
 
     ASIODisposeBuffers();
     UnloadAsioDriver();
@@ -2689,7 +2677,7 @@ static PaError CloseStream( PaStream* s )
 }
 
 
-static void bufferSwitch(long index, ASIOBool directProcess)
+static void bufferSwitch (long index, ASIOBool directProcess)
 {
 //TAKEN FROM THE ASIO SDK
 
@@ -2703,27 +2691,27 @@ static void bufferSwitch(long index, ASIOBool directProcess)
     // timeInfo.systemTime fields and the according flags
 
     ASIOTime  timeInfo;
-    memset( &timeInfo, 0, sizeof (timeInfo) );
+    memset (&timeInfo, 0, sizeof (timeInfo));
 
     // get the time stamp of the buffer, not necessary if no
     // synchronization to other media is required
-    if( ASIOGetSamplePosition(&timeInfo.timeInfo.samplePosition, &timeInfo.timeInfo.systemTime) == ASE_OK)
-            timeInfo.timeInfo.flags = kSystemTimeValid | kSamplePositionValid;
+    if (ASIOGetSamplePosition (&timeInfo.timeInfo.samplePosition, &timeInfo.timeInfo.systemTime) == ASE_OK)
+        timeInfo.timeInfo.flags = kSystemTimeValid | kSamplePositionValid;
 
     // Call the real callback
-    bufferSwitchTimeInfo( &timeInfo, index, directProcess );
+    bufferSwitchTimeInfo (&timeInfo, index, directProcess);
 }
 
 
 // conversion from 64 bit ASIOSample/ASIOTimeStamp to double float
 #if NATIVE_INT64
-    #define ASIO64toDouble(a)  (a)
+#define ASIO64toDouble(a)  (a)
 #else
-    const double twoRaisedTo32 = 4294967296.;
-    #define ASIO64toDouble(a)  ((a).lo + (a).hi * twoRaisedTo32)
+const double twoRaisedTo32 = 4294967296.;
+#define ASIO64toDouble(a)  ((a).lo + (a).hi * twoRaisedTo32)
 #endif
 
-static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool directProcess )
+static ASIOTime *bufferSwitchTimeInfo (ASIOTime *timeInfo, long index, ASIOBool directProcess)
 {
     // the actual processing callback.
     // Beware that this is normally in a seperate thread, hence be sure that
@@ -2752,19 +2740,19 @@ static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool
     // synchronization to other media is required
 
     if (timeInfo->timeInfo.flags & kSystemTimeValid)
-            asioDriverInfo.nanoSeconds = ASIO64toDouble(timeInfo->timeInfo.systemTime);
+        asioDriverInfo.nanoSeconds = ASIO64toDouble (timeInfo->timeInfo.systemTime);
     else
-            asioDriverInfo.nanoSeconds = 0;
+        asioDriverInfo.nanoSeconds = 0;
 
     if (timeInfo->timeInfo.flags & kSamplePositionValid)
-            asioDriverInfo.samples = ASIO64toDouble(timeInfo->timeInfo.samplePosition);
+        asioDriverInfo.samples = ASIO64toDouble (timeInfo->timeInfo.samplePosition);
     else
-            asioDriverInfo.samples = 0;
+        asioDriverInfo.samples = 0;
 
     if (timeInfo->timeCode.flags & kTcValid)
-            asioDriverInfo.tcSamples = ASIO64toDouble(timeInfo->timeCode.timeCodeSamples);
+        asioDriverInfo.tcSamples = ASIO64toDouble (timeInfo->timeCode.timeCodeSamples);
     else
-            asioDriverInfo.tcSamples = 0;
+        asioDriverInfo.tcSamples = 0;
 
     // get the system reference time
     asioDriverInfo.sysRefTime = get_sys_reference_time();
@@ -2776,13 +2764,13 @@ static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool
     // the event notification.
     static double last_samples = 0;
     char tmp[128];
-    sprintf (tmp, "diff: %d / %d ms / %d ms / %d samples                 \n", asioDriverInfo.sysRefTime - (long)(asioDriverInfo.nanoSeconds / 1000000.0), asioDriverInfo.sysRefTime, (long)(asioDriverInfo.nanoSeconds / 1000000.0), (long)(asioDriverInfo.samples - last_samples));
+    sprintf (tmp, "diff: %d / %d ms / %d ms / %d samples                 \n", asioDriverInfo.sysRefTime - (long) (asioDriverInfo.nanoSeconds / 1000000.0), asioDriverInfo.sysRefTime, (long) (asioDriverInfo.nanoSeconds / 1000000.0), (long) (asioDriverInfo.samples - last_samples));
     OutputDebugString (tmp);
     last_samples = asioDriverInfo.samples;
 #endif
 
 
-    if( !theAsioStream )
+    if (!theAsioStream)
         return 0L;
 
     // Keep sample position
@@ -2790,57 +2778,49 @@ static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool
 
 
     // protect against reentrancy
-    if( PaAsio_AtomicIncrement(&theAsioStream->reenterCount) )
-    {
+    if (PaAsio_AtomicIncrement (&theAsioStream->reenterCount)) {
         theAsioStream->reenterError++;
         //DBUG(("bufferSwitchTimeInfo : reentrancy detection = %d\n", asioDriverInfo.reenterError));
         return 0L;
     }
 
     int buffersDone = 0;
-    
-    do
-    {
-        if( buffersDone > 0 )
-        {
+
+    do {
+        if (buffersDone > 0) {
             // this is a reentered buffer, we missed processing it on time
             // set the input overflow and output underflow flags as appropriate
-            
-            if( theAsioStream->inputChannelCount > 0 )
+
+            if (theAsioStream->inputChannelCount > 0)
                 theAsioStream->callbackFlags |= paInputOverflow;
-                
-            if( theAsioStream->outputChannelCount > 0 )
+
+            if (theAsioStream->outputChannelCount > 0)
                 theAsioStream->callbackFlags |= paOutputUnderflow;
-        }
-        else
-        {
-            if( theAsioStream->zeroOutput )
-            {
-                ZeroOutputBuffers( theAsioStream, index );
+        } else {
+            if (theAsioStream->zeroOutput) {
+                ZeroOutputBuffers (theAsioStream, index);
 
                 // Finally if the driver supports the ASIOOutputReady() optimization,
                 // do it here, all data are in place
-                if( theAsioStream->postOutput )
+                if (theAsioStream->postOutput)
                     ASIOOutputReady();
 
-                if( theAsioStream->stopProcessing )
-                {
-                    if( theAsioStream->stopPlayoutCount < 2 )
-                    {
+                if (theAsioStream->stopProcessing) {
+                    if (theAsioStream->stopPlayoutCount < 2) {
                         ++theAsioStream->stopPlayoutCount;
-                        if( theAsioStream->stopPlayoutCount == 2 )
-                        {
+
+                        if (theAsioStream->stopPlayoutCount == 2) {
                             theAsioStream->isActive = 0;
-                            if( theAsioStream->streamRepresentation.streamFinishedCallback != 0 )
-                                theAsioStream->streamRepresentation.streamFinishedCallback( theAsioStream->streamRepresentation.userData );
+
+                            if (theAsioStream->streamRepresentation.streamFinishedCallback != 0)
+                                theAsioStream->streamRepresentation.streamFinishedCallback (theAsioStream->streamRepresentation.userData);
+
                             theAsioStream->streamFinishedCallbackCalled = true;
-                            SetEvent( theAsioStream->completedBuffersPlayedEvent );
+                            SetEvent (theAsioStream->completedBuffersPlayedEvent);
                         }
                     }
                 }
-            }
-            else
-            {
+            } else {
 
 #if 0
 // test code to try to detect slip conditions... these may work on some systems
@@ -2848,165 +2828,163 @@ static ASIOTime *bufferSwitchTimeInfo( ASIOTime *timeInfo, long index, ASIOBool
 
 // check that sample delta matches buffer size (otherwise we must have skipped
 // a buffer.
-static double last_samples = -512;
-double samples;
+                static double last_samples = -512;
+                double samples;
 //if( timeInfo->timeCode.flags & kTcValid )
 //    samples = ASIO64toDouble(timeInfo->timeCode.timeCodeSamples);
 //else
-    samples = ASIO64toDouble(timeInfo->timeInfo.samplePosition);
-int delta = samples - last_samples;
+                samples = ASIO64toDouble (timeInfo->timeInfo.samplePosition);
+                int delta = samples - last_samples;
 //printf( "%d\n", delta);
-last_samples = samples;
+                last_samples = samples;
 
-if( delta > theAsioStream->framesPerHostCallback )
-{
-    if( theAsioStream->inputChannelCount > 0 )
-        theAsioStream->callbackFlags |= paInputOverflow;
+                if (delta > theAsioStream->framesPerHostCallback) {
+                    if (theAsioStream->inputChannelCount > 0)
+                        theAsioStream->callbackFlags |= paInputOverflow;
 
-    if( theAsioStream->outputChannelCount > 0 )
-        theAsioStream->callbackFlags |= paOutputUnderflow;
-}
+                    if (theAsioStream->outputChannelCount > 0)
+                        theAsioStream->callbackFlags |= paOutputUnderflow;
+                }
 
 // check that the buffer index is not the previous index (which would indicate
 // that a buffer was skipped.
-static int previousIndex = 1;
-if( index == previousIndex )
-{
-    if( theAsioStream->inputChannelCount > 0 )
-        theAsioStream->callbackFlags |= paInputOverflow;
+                static int previousIndex = 1;
 
-    if( theAsioStream->outputChannelCount > 0 )
-        theAsioStream->callbackFlags |= paOutputUnderflow;
-}
-previousIndex = index;
+                if (index == previousIndex) {
+                    if (theAsioStream->inputChannelCount > 0)
+                        theAsioStream->callbackFlags |= paInputOverflow;
+
+                    if (theAsioStream->outputChannelCount > 0)
+                        theAsioStream->callbackFlags |= paOutputUnderflow;
+                }
+
+                previousIndex = index;
 #endif
 
                 int i;
 
-                PaUtil_BeginCpuLoadMeasurement( &theAsioStream->cpuLoadMeasurer );
+                PaUtil_BeginCpuLoadMeasurement (&theAsioStream->cpuLoadMeasurer);
 
                 PaStreamCallbackTimeInfo paTimeInfo;
 
                 // asio systemTime is supposed to be measured according to the same
                 // clock as timeGetTime
-                paTimeInfo.currentTime = (ASIO64toDouble( timeInfo->timeInfo.systemTime ) * .000000001);
+                paTimeInfo.currentTime = (ASIO64toDouble (timeInfo->timeInfo.systemTime) * .000000001);
 
                 /* patch from Paul Boege */
                 paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime -
-                    ((double)theAsioStream->inputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
+                                                ( (double) theAsioStream->inputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
 
                 paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime +
-                    ((double)theAsioStream->outputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
+                                                 ( (double) theAsioStream->outputLatency/theAsioStream->streamRepresentation.streamInfo.sampleRate);
 
                 /* old version is buggy because the buffer processor also adds in its latency to the time parameters
                 paTimeInfo.inputBufferAdcTime = paTimeInfo.currentTime - theAsioStream->streamRepresentation.streamInfo.inputLatency;
                 paTimeInfo.outputBufferDacTime = paTimeInfo.currentTime + theAsioStream->streamRepresentation.streamInfo.outputLatency;
                 */
 
-/* Disabled! Stopping and re-starting the stream causes an input overflow / output undeflow. S.Fischer */
+                /* Disabled! Stopping and re-starting the stream causes an input overflow / output undeflow. S.Fischer */
 #if 0
 // detect underflows by checking inter-callback time > 2 buffer period
-static double previousTime = -1;
-if( previousTime > 0 ){
+                static double previousTime = -1;
 
-    double delta = paTimeInfo.currentTime - previousTime;
+                if (previousTime > 0) {
 
-    if( delta >= 2. * (theAsioStream->framesPerHostCallback / theAsioStream->streamRepresentation.streamInfo.sampleRate) ){
-        if( theAsioStream->inputChannelCount > 0 )
-            theAsioStream->callbackFlags |= paInputOverflow;
+                    double delta = paTimeInfo.currentTime - previousTime;
 
-        if( theAsioStream->outputChannelCount > 0 )
-            theAsioStream->callbackFlags |= paOutputUnderflow;
-    }
-}
-previousTime = paTimeInfo.currentTime;
+                    if (delta >= 2. * (theAsioStream->framesPerHostCallback / theAsioStream->streamRepresentation.streamInfo.sampleRate)) {
+                        if (theAsioStream->inputChannelCount > 0)
+                            theAsioStream->callbackFlags |= paInputOverflow;
+
+                        if (theAsioStream->outputChannelCount > 0)
+                            theAsioStream->callbackFlags |= paOutputUnderflow;
+                    }
+                }
+
+                previousTime = paTimeInfo.currentTime;
 #endif
 
                 // note that the above input and output times do not need to be
                 // adjusted for the latency of the buffer processor -- the buffer
                 // processor handles that.
 
-                if( theAsioStream->inputBufferConverter )
-                {
-                    for( i=0; i<theAsioStream->inputChannelCount; i++ )
-                    {
-                        theAsioStream->inputBufferConverter( theAsioStream->inputBufferPtrs[index][i],
-                                theAsioStream->inputShift, theAsioStream->framesPerHostCallback );
+                if (theAsioStream->inputBufferConverter) {
+                    for (i=0; i<theAsioStream->inputChannelCount; i++) {
+                        theAsioStream->inputBufferConverter (theAsioStream->inputBufferPtrs[index][i],
+                                                             theAsioStream->inputShift, theAsioStream->framesPerHostCallback);
                     }
                 }
 
-                PaUtil_BeginBufferProcessing( &theAsioStream->bufferProcessor, &paTimeInfo, theAsioStream->callbackFlags );
+                PaUtil_BeginBufferProcessing (&theAsioStream->bufferProcessor, &paTimeInfo, theAsioStream->callbackFlags);
 
                 /* reset status flags once they've been passed to the callback */
                 theAsioStream->callbackFlags = 0;
 
-                PaUtil_SetInputFrameCount( &theAsioStream->bufferProcessor, 0 /* default to host buffer size */ );
-                for( i=0; i<theAsioStream->inputChannelCount; ++i )
-                    PaUtil_SetNonInterleavedInputChannel( &theAsioStream->bufferProcessor, i, theAsioStream->inputBufferPtrs[index][i] );
+                PaUtil_SetInputFrameCount (&theAsioStream->bufferProcessor, 0 /* default to host buffer size */);
 
-                PaUtil_SetOutputFrameCount( &theAsioStream->bufferProcessor, 0 /* default to host buffer size */ );
-                for( i=0; i<theAsioStream->outputChannelCount; ++i )
-                    PaUtil_SetNonInterleavedOutputChannel( &theAsioStream->bufferProcessor, i, theAsioStream->outputBufferPtrs[index][i] );
+                for (i=0; i<theAsioStream->inputChannelCount; ++i)
+                    PaUtil_SetNonInterleavedInputChannel (&theAsioStream->bufferProcessor, i, theAsioStream->inputBufferPtrs[index][i]);
+
+                PaUtil_SetOutputFrameCount (&theAsioStream->bufferProcessor, 0 /* default to host buffer size */);
+
+                for (i=0; i<theAsioStream->outputChannelCount; ++i)
+                    PaUtil_SetNonInterleavedOutputChannel (&theAsioStream->bufferProcessor, i, theAsioStream->outputBufferPtrs[index][i]);
 
                 int callbackResult;
-                if( theAsioStream->stopProcessing )
+
+                if (theAsioStream->stopProcessing)
                     callbackResult = paComplete;
                 else
                     callbackResult = paContinue;
-                unsigned long framesProcessed = PaUtil_EndBufferProcessing( &theAsioStream->bufferProcessor, &callbackResult );
-
-                if( theAsioStream->outputBufferConverter )
-                {
-                    for( i=0; i<theAsioStream->outputChannelCount; i++ )
-                    {
-                        theAsioStream->outputBufferConverter( theAsioStream->outputBufferPtrs[index][i],
-                                theAsioStream->outputShift, theAsioStream->framesPerHostCallback );
+
+                unsigned long framesProcessed = PaUtil_EndBufferProcessing (&theAsioStream->bufferProcessor, &callbackResult);
+
+                if (theAsioStream->outputBufferConverter) {
+                    for (i=0; i<theAsioStream->outputChannelCount; i++) {
+                        theAsioStream->outputBufferConverter (theAsioStream->outputBufferPtrs[index][i],
+                                                              theAsioStream->outputShift, theAsioStream->framesPerHostCallback);
                     }
                 }
 
-                PaUtil_EndCpuLoadMeasurement( &theAsioStream->cpuLoadMeasurer, framesProcessed );
+                PaUtil_EndCpuLoadMeasurement (&theAsioStream->cpuLoadMeasurer, framesProcessed);
 
                 // Finally if the driver supports the ASIOOutputReady() optimization,
                 // do it here, all data are in place
-                if( theAsioStream->postOutput )
+                if (theAsioStream->postOutput)
                     ASIOOutputReady();
 
-                if( callbackResult == paContinue )
-                {
+                if (callbackResult == paContinue) {
                     /* nothing special to do */
-                }
-                else if( callbackResult == paAbort )
-                {
+                } else if (callbackResult == paAbort) {
                     /* finish playback immediately  */
                     theAsioStream->isActive = 0;
-                    if( theAsioStream->streamRepresentation.streamFinishedCallback != 0 )
-                        theAsioStream->streamRepresentation.streamFinishedCallback( theAsioStream->streamRepresentation.userData );
+
+                    if (theAsioStream->streamRepresentation.streamFinishedCallback != 0)
+                        theAsioStream->streamRepresentation.streamFinishedCallback (theAsioStream->streamRepresentation.userData);
+
                     theAsioStream->streamFinishedCallbackCalled = true;
-                    SetEvent( theAsioStream->completedBuffersPlayedEvent );
+                    SetEvent (theAsioStream->completedBuffersPlayedEvent);
                     theAsioStream->zeroOutput = true;
-                }
-                else /* paComplete or other non-zero value indicating complete */
-                {
+                } else { /* paComplete or other non-zero value indicating complete */
                     /* Finish playback once currently queued audio has completed. */
                     theAsioStream->stopProcessing = true;
 
-                    if( PaUtil_IsBufferProcessorOutputEmpty( &theAsioStream->bufferProcessor ) )
-                    {
+                    if (PaUtil_IsBufferProcessorOutputEmpty (&theAsioStream->bufferProcessor)) {
                         theAsioStream->zeroOutput = true;
                         theAsioStream->stopPlayoutCount = 0;
                     }
                 }
             }
         }
-        
+
         ++buffersDone;
-    }while( PaAsio_AtomicDecrement(&theAsioStream->reenterCount) >= 0 );
+    } while (PaAsio_AtomicDecrement (&theAsioStream->reenterCount) >= 0);
 
     return 0L;
 }
 
 
-static void sampleRateChanged(ASIOSampleRate sRate)
+static void sampleRateChanged (ASIOSampleRate sRate)
 {
     // TAKEN FROM THE ASIO SDK
     // do whatever you need to do if the sample rate changed
@@ -3017,10 +2995,10 @@ static void sampleRateChanged(ASIOSampleRate sRate)
     // You might have to update time/sample related conversion routines, etc.
 
     (void) sRate; /* unused parameter */
-    PA_DEBUG( ("sampleRateChanged : %d \n", sRate));
+    PA_DEBUG ( ("sampleRateChanged : %d \n", sRate));
 }
 
-static long asioMessages(long selector, long value, void* message, double* opt)
+static long asioMessages (long selector, long value, void* message, double* opt)
 {
 // TAKEN FROM THE ASIO SDK
     // currently the parameters "value", "message" and "opt" are not used.
@@ -3029,20 +3007,21 @@ static long asioMessages(long selector, long value, void* message, double* opt)
     (void) message; /* unused parameters */
     (void) opt;
 
-    PA_DEBUG( ("asioMessages : %d , %d \n", selector, value));
+    PA_DEBUG ( ("asioMessages : %d , %d \n", selector, value));
 
-    switch(selector)
-    {
+    switch (selector) {
         case kAsioSelectorSupported:
-            if(value == kAsioResetRequest
-            || value == kAsioEngineVersion
-            || value == kAsioResyncRequest
-            || value == kAsioLatenciesChanged
-            // the following three were added for ASIO 2.0, you don't necessarily have to support them
-            || value == kAsioSupportsTimeInfo
-            || value == kAsioSupportsTimeCode
-            || value == kAsioSupportsInputMonitor)
-                    ret = 1L;
+
+            if (value == kAsioResetRequest
+                    || value == kAsioEngineVersion
+                    || value == kAsioResyncRequest
+                    || value == kAsioLatenciesChanged
+                    // the following three were added for ASIO 2.0, you don't necessarily have to support them
+                    || value == kAsioSupportsTimeInfo
+                    || value == kAsioSupportsTimeCode
+                    || value == kAsioSupportsInputMonitor)
+                ret = 1L;
+
             break;
 
         case kAsioBufferSizeChange:
@@ -3100,24 +3079,24 @@ static long asioMessages(long selector, long value, void* message, double* opt)
             ret = 0;
             break;
     }
+
     return ret;
 }
 
 
-static PaError StartStream( PaStream *s )
+static PaError StartStream (PaStream *s)
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
     ASIOError asioError;
 
-    if( stream->outputChannelCount > 0 )
-    {
-        ZeroOutputBuffers( stream, 0 );
-        ZeroOutputBuffers( stream, 1 );
+    if (stream->outputChannelCount > 0) {
+        ZeroOutputBuffers (stream, 0);
+        ZeroOutputBuffers (stream, 1);
     }
 
-    PaUtil_ResetBufferProcessor( &stream->bufferProcessor );
+    PaUtil_ResetBufferProcessor (&stream->bufferProcessor);
     stream->stopProcessing = false;
     stream->zeroOutput = false;
 
@@ -3127,50 +3106,44 @@ static PaError StartStream( PaStream *s )
 
     stream->callbackFlags = 0;
 
-    if( ResetEvent( stream->completedBuffersPlayedEvent ) == 0 )
-    {
+    if (ResetEvent (stream->completedBuffersPlayedEvent) == 0) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+        PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
     }
 
 
     /* Using blocking i/o interface... */
-    if( blockingState )
-    {
+    if (blockingState) {
         /* Reset blocking i/o buffer processor. */
-        PaUtil_ResetBufferProcessor( &blockingState->bufferProcessor );
+        PaUtil_ResetBufferProcessor (&blockingState->bufferProcessor);
 
         /* If we're about to process some input data. */
-        if( stream->inputChannelCount )
-        {
+        if (stream->inputChannelCount) {
             /* Reset callback-ReadStream sync event. */
-            if( ResetEvent( blockingState->readFramesReadyEvent ) == 0 )
-            {
+            if (ResetEvent (blockingState->readFramesReadyEvent) == 0) {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
             }
 
             /* Flush blocking i/o ring buffer. */
-            PaUtil_FlushRingBuffer( &blockingState->readRingBuffer );
-            (*blockingState->bufferProcessor.inputZeroer)( blockingState->readRingBuffer.buffer, 1, blockingState->bufferProcessor.inputChannelCount * blockingState->readRingBuffer.bufferSize );
+            PaUtil_FlushRingBuffer (&blockingState->readRingBuffer);
+            (*blockingState->bufferProcessor.inputZeroer) (blockingState->readRingBuffer.buffer, 1, blockingState->bufferProcessor.inputChannelCount * blockingState->readRingBuffer.bufferSize);
         }
 
         /* If we're about to process some output data. */
-        if( stream->outputChannelCount )
-        {
+        if (stream->outputChannelCount) {
             /* Reset callback-WriteStream sync event. */
-            if( ResetEvent( blockingState->writeBuffersReadyEvent ) == 0 )
-            {
+            if (ResetEvent (blockingState->writeBuffersReadyEvent) == 0) {
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
             }
 
             /* Flush blocking i/o ring buffer. */
-            PaUtil_FlushRingBuffer( &blockingState->writeRingBuffer );
-            (*blockingState->bufferProcessor.outputZeroer)( blockingState->writeRingBuffer.buffer, 1, blockingState->bufferProcessor.outputChannelCount * blockingState->writeRingBuffer.bufferSize );
+            PaUtil_FlushRingBuffer (&blockingState->writeRingBuffer);
+            (*blockingState->bufferProcessor.outputZeroer) (blockingState->writeRingBuffer.buffer, 1, blockingState->bufferProcessor.outputChannelCount * blockingState->writeRingBuffer.bufferSize);
 
             /* Initialize the output ring buffer to "silence". */
-            PaUtil_AdvanceRingBufferWriteIndex( &blockingState->writeRingBuffer, blockingState->writeRingBufferInitialFrames );
+            PaUtil_AdvanceRingBufferWriteIndex (&blockingState->writeRingBuffer, blockingState->writeRingBufferInitialFrames);
         }
 
         /* Clear requested frames / buffers count. */
@@ -3184,9 +3157,8 @@ static PaError StartStream( PaStream *s )
     }
 
 
-    if( result == paNoError )
-    {
-        assert( theAsioStream == stream ); /* theAsioStream should be set correctly in OpenStream */
+    if (result == paNoError) {
+        assert (theAsioStream == stream);  /* theAsioStream should be set correctly in OpenStream */
 
         /* initialize these variables before the callback has a chance to be invoked */
         stream->isStopped = 0;
@@ -3194,44 +3166,42 @@ static PaError StartStream( PaStream *s )
         stream->streamFinishedCallbackCalled = false;
 
         asioError = ASIOStart();
-        if( asioError != ASE_OK )
-        {
+
+        if (asioError != ASE_OK) {
             stream->isStopped = 1;
             stream->isActive = 0;
 
             result = paUnanticipatedHostError;
-            PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+            PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         }
     }
 
     return result;
 }
 
-static void EnsureCallbackHasCompleted( PaAsioStream *stream )
+static void EnsureCallbackHasCompleted (PaAsioStream *stream)
 {
     // make sure that the callback is not still in-flight after ASIOStop()
     // returns. This has been observed to happen on the Hoontech DSP24 for
     // example.
     int count = 2000;  // only wait for 2 seconds, rather than hanging.
-    while( stream->reenterCount != -1 && count > 0 )
-    {
-        Sleep(1);
+
+    while (stream->reenterCount != -1 && count > 0) {
+        Sleep (1);
         --count;
     }
 }
 
-static PaError StopStream( PaStream *s )
+static PaError StopStream (PaStream *s)
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
     ASIOError asioError;
 
-    if( stream->isActive )
-    {
+    if (stream->isActive) {
         /* If blocking i/o output is in use */
-        if( blockingState && stream->outputChannelCount )
-        {
+        if (blockingState && stream->outputChannelCount) {
             /* Request the whole output buffer to be available. */
             blockingState->writeBuffersRequested = blockingState->writeRingBuffer.bufferSize;
             /* Signalize that additional buffers are need. */
@@ -3242,20 +3212,17 @@ static PaError StopStream( PaStream *s )
             /* Wait until requested number of buffers has been freed. Time
                out after twice the blocking i/o ouput buffer could have
                been consumed. */
-            DWORD timeout = (DWORD)( 2 * blockingState->writeRingBuffer.bufferSize * 1000
-                                       / stream->streamRepresentation.streamInfo.sampleRate );
-            DWORD waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout );
+            DWORD timeout = (DWORD) (2 * blockingState->writeRingBuffer.bufferSize * 1000
+                                     / stream->streamRepresentation.streamInfo.sampleRate);
+            DWORD waitResult = WaitForSingleObject (blockingState->writeBuffersReadyEvent, timeout);
 
             /* If something seriously went wrong... */
-            if( waitResult == WAIT_FAILED )
-            {
-                PA_DEBUG(("WaitForSingleObject() failed in StopStream()\n"));
+            if (waitResult == WAIT_FAILED) {
+                PA_DEBUG ( ("WaitForSingleObject() failed in StopStream()\n"));
                 result = paUnanticipatedHostError;
-                PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
-            }
-            else if( waitResult == WAIT_TIMEOUT )
-            {
-                PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n"));
+                PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
+            } else if (waitResult == WAIT_TIMEOUT) {
+                PA_DEBUG ( ("WaitForSingleObject() timed out in StopStream()\n"));
                 result = paTimedOut;
             }
         }
@@ -3269,97 +3236,90 @@ static PaError StopStream( PaStream *s )
             length is longer than the asio buffer size then that should
             be taken into account.
         */
-        if( WaitForSingleObject( stream->completedBuffersPlayedEvent,
-                (DWORD)(stream->streamRepresentation.streamInfo.outputLatency * 1000. * 4.) )
-                    == WAIT_TIMEOUT )
-        {
-            PA_DEBUG(("WaitForSingleObject() timed out in StopStream()\n" ));
+        if (WaitForSingleObject (stream->completedBuffersPlayedEvent,
+                                 (DWORD) (stream->streamRepresentation.streamInfo.outputLatency * 1000. * 4.))
+                == WAIT_TIMEOUT) {
+            PA_DEBUG ( ("WaitForSingleObject() timed out in StopStream()\n"));
         }
     }
 
     asioError = ASIOStop();
-    if( asioError == ASE_OK )
-    {
-        EnsureCallbackHasCompleted( stream );
-    }
-    else
-    {
+
+    if (asioError == ASE_OK) {
+        EnsureCallbackHasCompleted (stream);
+    } else {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
     }
 
     stream->isStopped = 1;
     stream->isActive = 0;
 
-    if( !stream->streamFinishedCallbackCalled )
-    {
-        if( stream->streamRepresentation.streamFinishedCallback != 0 )
-            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+    if (!stream->streamFinishedCallbackCalled) {
+        if (stream->streamRepresentation.streamFinishedCallback != 0)
+            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
     }
 
     return result;
 }
 
-static PaError AbortStream( PaStream *s )
+static PaError AbortStream (PaStream *s)
 {
     PaError result = paNoError;
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
     ASIOError asioError;
 
     stream->zeroOutput = true;
 
     asioError = ASIOStop();
-    if( asioError == ASE_OK )
-    {
-        EnsureCallbackHasCompleted( stream );
-    }
-    else
-    {
+
+    if (asioError == ASE_OK) {
+        EnsureCallbackHasCompleted (stream);
+    } else {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
     }
 
     stream->isStopped = 1;
     stream->isActive = 0;
 
-    if( !stream->streamFinishedCallbackCalled )
-    {
-        if( stream->streamRepresentation.streamFinishedCallback != 0 )
-            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+    if (!stream->streamFinishedCallbackCalled) {
+        if (stream->streamRepresentation.streamFinishedCallback != 0)
+            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
     }
 
     return result;
 }
 
 
-static PaError IsStreamStopped( PaStream *s )
+static PaError IsStreamStopped (PaStream *s)
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
-    
+    PaAsioStream *stream = (PaAsioStream*) s;
+
     return stream->isStopped;
 }
 
 
-static PaError IsStreamActive( PaStream *s )
+static PaError IsStreamActive (PaStream *s)
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
 
     return stream->isActive;
 }
 
 
-static PaTime GetStreamTime( PaStream *s )
+static PaTime GetStreamTime (PaStream *s)
 {
     (void) s; /* unused parameter */
-    return (double)timeGetTime() * .001;
+    return (double) timeGetTime() * .001;
 }
 
 
-static double GetStreamCpuLoad( PaStream* s )
+static double GetStreamCpuLoad (PaStream* s)
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
 
-    return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer );
+    return PaUtil_GetCpuLoad (&stream->cpuLoadMeasurer);
 }
 
 
@@ -3369,12 +3329,12 @@ static double GetStreamCpuLoad( PaStream* s )
     for blocking streams.
 */
 
-static PaError ReadStream( PaStream      *s     ,
+static PaError ReadStream (PaStream      *s     ,
                            void          *buffer,
-                           unsigned long  frames )
+                           unsigned long  frames)
 {
     PaError result = paNoError; /* Initial return value. */
-    PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */
+    PaAsioStream *stream = (PaAsioStream*) s; /* The PA ASIO stream. */
 
     /* Pointer to the blocking i/o data struct. */
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
@@ -3403,45 +3363,42 @@ static PaError ReadStream( PaStream      *s     ,
     unsigned int i; /* Just a counter. */
 
     /* About the time, needed to process 8 data blocks. */
-    DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate );
+    DWORD timeout = (DWORD) (8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate);
     DWORD waitResult = 0;
 
 
     /* Check if the stream is still available ready to gather new data. */
-    if( blockingState->stopFlag || !stream->isActive )
-    {
-        PA_DEBUG(("Warning! Stream no longer available for reading in ReadStream()\n"));
+    if (blockingState->stopFlag || !stream->isActive) {
+        PA_DEBUG ( ("Warning! Stream no longer available for reading in ReadStream()\n"));
         result = paStreamIsStopped;
         return result;
     }
 
     /* If the stream is a input stream. */
-    if( stream->inputChannelCount )
-    {
+    if (stream->inputChannelCount) {
         /* Prepare buffer access. */
-        if( !pBp->userOutputIsInterleaved )
-        {
+        if (!pBp->userOutputIsInterleaved) {
             userBuffer = blockingState->readStreamBuffer;
-            for( i = 0; i<pBp->inputChannelCount; ++i )
-            {
-                ((void**)userBuffer)[i] = ((void**)buffer)[i];
+
+            for (i = 0; i<pBp->inputChannelCount; ++i) {
+                ( (void**) userBuffer) [i] = ( (void**) buffer) [i];
             }
         } /* Use the unchanged buffer. */
-        else { userBuffer = buffer; }
+        else {
+            userBuffer = buffer;
+        }
 
-        do /* Internal block processing for too large user data buffers. */
-        {
+        do { /* Internal block processing for too large user data buffers. */
             /* Get the size of the current data block to be processed. */
-            lFramesPerBlock =(lFramesPerBlock < lFramesRemaining)
-                            ? lFramesPerBlock : lFramesRemaining;
+            lFramesPerBlock = (lFramesPerBlock < lFramesRemaining)
+                              ? lFramesPerBlock : lFramesRemaining;
             /* Use predefined block size for as long there are enough
                buffers available, thereafter reduce the processing block
                size to match the number of remaining buffers. So the final
                data block is processed although it may be incomplete. */
 
             /* If the available amount of data frames is insufficient. */
-            if( PaUtil_GetRingBufferReadAvailable(pRb) < (long) lFramesPerBlock )
-            {
+            if (PaUtil_GetRingBufferReadAvailable (pRb) < (long) lFramesPerBlock) {
                 /* Make sure, the event isn't already set! */
                 /* ResetEvent( blockingState->readFramesReadyEvent ); */
 
@@ -3452,27 +3409,27 @@ static PaError ReadStream( PaStream      *s     ,
                 blockingState->readFramesRequestedFlag = TRUE;
 
                 /* Wait until requested number of buffers has been freed. */
-                waitResult = WaitForSingleObject( blockingState->readFramesReadyEvent, timeout );
+                waitResult = WaitForSingleObject (blockingState->readFramesReadyEvent, timeout);
 
                 /* If something seriously went wrong... */
-                if( waitResult == WAIT_FAILED )
-                {
-                    PA_DEBUG(("WaitForSingleObject() failed in ReadStream()\n"));
+                if (waitResult == WAIT_FAILED) {
+                    PA_DEBUG ( ("WaitForSingleObject() failed in ReadStream()\n"));
                     result = paUnanticipatedHostError;
-                    PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                    PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
                     return result;
-                }
-                else if( waitResult == WAIT_TIMEOUT )
-                {
-                    PA_DEBUG(("WaitForSingleObject() timed out in ReadStream()\n"));
+                } else if (waitResult == WAIT_TIMEOUT) {
+                    PA_DEBUG ( ("WaitForSingleObject() timed out in ReadStream()\n"));
 
                     /* If block processing has stopped, abort! */
-                    if( blockingState->stopFlag ) { return result = paStreamIsStopped; }
+                    if (blockingState->stopFlag) {
+                        return result = paStreamIsStopped;
+                    }
 
                     /* If a timeout is encountered, give up eventually. */
                     return result = paTimedOut;
                 }
             }
+
             /* Now, the ring buffer contains the required amount of data
                frames.
                (Therefor we don't need to check the return argument of
@@ -3485,47 +3442,47 @@ static PaError ReadStream( PaStream      *s     ,
                segment is returned. Otherwise, i.e. if the first segment
                is large enough, the second segment's pointer will be NULL.
             */
-            PaUtil_GetRingBufferReadRegions(pRb                ,
-                                            lFramesPerBlock    ,
-                                            &pRingBufferData1st,
-                                            &lRingBufferSize1st,
-                                            &pRingBufferData2nd,
-                                            &lRingBufferSize2nd);
+            PaUtil_GetRingBufferReadRegions (pRb                ,
+                                             lFramesPerBlock    ,
+                                             &pRingBufferData1st,
+                                             &lRingBufferSize1st,
+                                             &pRingBufferData2nd,
+                                             &lRingBufferSize2nd);
 
             /* Set number of frames to be copied from the ring buffer. */
-            PaUtil_SetInputFrameCount( pBp, lRingBufferSize1st ); 
+            PaUtil_SetInputFrameCount (pBp, lRingBufferSize1st);
             /* Setup ring buffer access. */
-            PaUtil_SetInterleavedInputChannels(pBp               ,  /* Buffer processor. */
-                                               0                 ,  /* The first channel's index. */
-                                               pRingBufferData1st,  /* First ring buffer segment. */
-                                               0                 ); /* Use all available channels. */
+            PaUtil_SetInterleavedInputChannels (pBp               , /* Buffer processor. */
+                                                0                 ,  /* The first channel's index. */
+                                                pRingBufferData1st,  /* First ring buffer segment. */
+                                                0);                  /* Use all available channels. */
 
             /* If a second ring buffer segment is required. */
-            if( lRingBufferSize2nd ) {
+            if (lRingBufferSize2nd) {
                 /* Set number of frames to be copied from the ring buffer. */
-                PaUtil_Set2ndInputFrameCount( pBp, lRingBufferSize2nd );
+                PaUtil_Set2ndInputFrameCount (pBp, lRingBufferSize2nd);
                 /* Setup ring buffer access. */
-                PaUtil_Set2ndInterleavedInputChannels(pBp               ,  /* Buffer processor. */
-                                                      0                 ,  /* The first channel's index. */
-                                                      pRingBufferData2nd,  /* Second ring buffer segment. */
-                                                      0                 ); /* Use all available channels. */
+                PaUtil_Set2ndInterleavedInputChannels (pBp               , /* Buffer processor. */
+                                                       0                 ,  /* The first channel's index. */
+                                                       pRingBufferData2nd,  /* Second ring buffer segment. */
+                                                       0);                  /* Use all available channels. */
             }
 
             /* Let the buffer processor handle "copy and conversion" and
                update the ring buffer indices manually. */
-            lFramesCopied = PaUtil_CopyInput( pBp, &buffer, lFramesPerBlock );
-            PaUtil_AdvanceRingBufferReadIndex( pRb, lFramesCopied );
+            lFramesCopied = PaUtil_CopyInput (pBp, &buffer, lFramesPerBlock);
+            PaUtil_AdvanceRingBufferReadIndex (pRb, lFramesCopied);
 
             /* Decrease number of unprocessed frames. */
             lFramesRemaining -= lFramesCopied;
 
         } /* Continue with the next data chunk. */
-        while( lFramesRemaining );
+
+        while (lFramesRemaining);
 
 
         /* If there has been an input overflow within the callback */
-        if( blockingState->inputOverflowFlag )
-        {
+        if (blockingState->inputOverflowFlag) {
             blockingState->inputOverflowFlag = FALSE;
 
             /* Return the corresponding error code. */
@@ -3540,12 +3497,12 @@ static PaError ReadStream( PaStream      *s     ,
     return result;
 }
 
-static PaError WriteStream( PaStream      *s     ,
+static PaError WriteStream (PaStream      *s     ,
                             const void    *buffer,
-                            unsigned long  frames )
+                            unsigned long  frames)
 {
     PaError result = paNoError; /* Initial return value. */
-    PaAsioStream *stream = (PaAsioStream*)s; /* The PA ASIO stream. */
+    PaAsioStream *stream = (PaAsioStream*) s; /* The PA ASIO stream. */
 
     /* Pointer to the blocking i/o data struct. */
     PaAsioStreamBlockingState *blockingState = stream->blockingState;
@@ -3570,7 +3527,7 @@ static PaError WriteStream( PaStream      *s     ,
     unsigned long lFramesRemaining = frames;
 
     /* About the time, needed to process 8 data blocks. */
-    DWORD timeout = (DWORD)( 8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate );
+    DWORD timeout = (DWORD) (8 * lFramesPerBlock * 1000 / stream->streamRepresentation.streamInfo.sampleRate);
     DWORD waitResult = 0;
 
     /* Copy the input argument to avoid pointer increment! */
@@ -3579,41 +3536,38 @@ static PaError WriteStream( PaStream      *s     ,
 
 
     /* Check if the stream ist still available ready to recieve new data. */
-    if( blockingState->stopFlag || !stream->isActive )
-    {
-        PA_DEBUG(("Warning! Stream no longer available for writing in WriteStream()\n"));
+    if (blockingState->stopFlag || !stream->isActive) {
+        PA_DEBUG ( ("Warning! Stream no longer available for writing in WriteStream()\n"));
         result = paStreamIsStopped;
         return result;
     }
 
     /* If the stream is a output stream. */
-    if( stream->outputChannelCount )
-    {
+    if (stream->outputChannelCount) {
         /* Prepare buffer access. */
-        if( !pBp->userOutputIsInterleaved )
-        {
+        if (!pBp->userOutputIsInterleaved) {
             userBuffer = blockingState->writeStreamBuffer;
-            for( i = 0; i<pBp->outputChannelCount; ++i )
-            {
-                ((const void**)userBuffer)[i] = ((const void**)buffer)[i];
+
+            for (i = 0; i<pBp->outputChannelCount; ++i) {
+                ( (const void**) userBuffer) [i] = ( (const void**) buffer) [i];
             }
         } /* Use the unchanged buffer. */
-        else { userBuffer = buffer; }
+        else {
+            userBuffer = buffer;
+        }
 
 
-        do /* Internal block processing for too large user data buffers. */
-        {
+        do { /* Internal block processing for too large user data buffers. */
             /* Get the size of the current data block to be processed. */
-            lFramesPerBlock =(lFramesPerBlock < lFramesRemaining)
-                            ? lFramesPerBlock : lFramesRemaining;
+            lFramesPerBlock = (lFramesPerBlock < lFramesRemaining)
+                              ? lFramesPerBlock : lFramesRemaining;
             /* Use predefined block size for as long there are enough
                frames available, thereafter reduce the processing block
                size to match the number of remaining frames. So the final
                data block is processed although it may be incomplete. */
 
             /* If the available amount of buffers is insufficient. */
-            if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) lFramesPerBlock )
-            {
+            if (PaUtil_GetRingBufferWriteAvailable (pRb) < (long) lFramesPerBlock) {
                 /* Make sure, the event isn't already set! */
                 /* ResetEvent( blockingState->writeBuffersReadyEvent ); */
 
@@ -3624,27 +3578,27 @@ static PaError WriteStream( PaStream      *s     ,
                 blockingState->writeBuffersRequestedFlag = TRUE;
 
                 /* Wait until requested number of buffers has been freed. */
-                waitResult = WaitForSingleObject( blockingState->writeBuffersReadyEvent, timeout );
+                waitResult = WaitForSingleObject (blockingState->writeBuffersReadyEvent, timeout);
 
                 /* If something seriously went wrong... */
-                if( waitResult == WAIT_FAILED )
-                {
-                    PA_DEBUG(("WaitForSingleObject() failed in WriteStream()\n"));
+                if (waitResult == WAIT_FAILED) {
+                    PA_DEBUG ( ("WaitForSingleObject() failed in WriteStream()\n"));
                     result = paUnanticipatedHostError;
-                    PA_ASIO_SET_LAST_SYSTEM_ERROR( GetLastError() );
+                    PA_ASIO_SET_LAST_SYSTEM_ERROR (GetLastError());
                     return result;
-                }
-                else if( waitResult == WAIT_TIMEOUT )
-                {
-                    PA_DEBUG(("WaitForSingleObject() timed out in WriteStream()\n"));
+                } else if (waitResult == WAIT_TIMEOUT) {
+                    PA_DEBUG ( ("WaitForSingleObject() timed out in WriteStream()\n"));
 
                     /* If block processing has stopped, abort! */
-                    if( blockingState->stopFlag ) { return result = paStreamIsStopped; }
-                    
+                    if (blockingState->stopFlag) {
+                        return result = paStreamIsStopped;
+                    }
+
                     /* If a timeout is encountered, give up eventually. */
                     return result = paTimedOut;
                 }
             }
+
             /* Now, the ring buffer contains the required amount of free
                space to store the provided number of data frames.
                (Therefor we don't need to check the return argument of
@@ -3657,47 +3611,47 @@ static PaError WriteStream( PaStream      *s     ,
                segment is returned. Otherwise, i.e. if the first segment
                is large enough, the second segment's pointer will be NULL.
             */
-            PaUtil_GetRingBufferWriteRegions(pRb                ,
-                                             lFramesPerBlock    ,
-                                             &pRingBufferData1st,
-                                             &lRingBufferSize1st,
-                                             &pRingBufferData2nd,
-                                             &lRingBufferSize2nd);
+            PaUtil_GetRingBufferWriteRegions (pRb                ,
+                                              lFramesPerBlock    ,
+                                              &pRingBufferData1st,
+                                              &lRingBufferSize1st,
+                                              &pRingBufferData2nd,
+                                              &lRingBufferSize2nd);
 
             /* Set number of frames to be copied to the ring buffer. */
-            PaUtil_SetOutputFrameCount( pBp, lRingBufferSize1st ); 
+            PaUtil_SetOutputFrameCount (pBp, lRingBufferSize1st);
             /* Setup ring buffer access. */
-            PaUtil_SetInterleavedOutputChannels(pBp               ,  /* Buffer processor. */
-                                                0                 ,  /* The first channel's index. */
-                                                pRingBufferData1st,  /* First ring buffer segment. */
-                                                0                 ); /* Use all available channels. */
+            PaUtil_SetInterleavedOutputChannels (pBp               , /* Buffer processor. */
+                                                 0                 ,  /* The first channel's index. */
+                                                 pRingBufferData1st,  /* First ring buffer segment. */
+                                                 0);                  /* Use all available channels. */
 
             /* If a second ring buffer segment is required. */
-            if( lRingBufferSize2nd ) {
+            if (lRingBufferSize2nd) {
                 /* Set number of frames to be copied to the ring buffer. */
-                PaUtil_Set2ndOutputFrameCount( pBp, lRingBufferSize2nd );
+                PaUtil_Set2ndOutputFrameCount (pBp, lRingBufferSize2nd);
                 /* Setup ring buffer access. */
-                PaUtil_Set2ndInterleavedOutputChannels(pBp               ,  /* Buffer processor. */
-                                                       0                 ,  /* The first channel's index. */
-                                                       pRingBufferData2nd,  /* Second ring buffer segment. */
-                                                       0                 ); /* Use all available channels. */
+                PaUtil_Set2ndInterleavedOutputChannels (pBp               , /* Buffer processor. */
+                                                        0                 ,  /* The first channel's index. */
+                                                        pRingBufferData2nd,  /* Second ring buffer segment. */
+                                                        0);                  /* Use all available channels. */
             }
 
             /* Let the buffer processor handle "copy and conversion" and
                update the ring buffer indices manually. */
-            lFramesCopied = PaUtil_CopyOutput( pBp, &userBuffer, lFramesPerBlock );
-            PaUtil_AdvanceRingBufferWriteIndex( pRb, lFramesCopied );
+            lFramesCopied = PaUtil_CopyOutput (pBp, &userBuffer, lFramesPerBlock);
+            PaUtil_AdvanceRingBufferWriteIndex (pRb, lFramesCopied);
 
             /* Decrease number of unprocessed frames. */
             lFramesRemaining -= lFramesCopied;
 
         } /* Continue with the next data chunk. */
-        while( lFramesRemaining );
+
+        while (lFramesRemaining);
 
 
         /* If there has been an output underflow within the callback */
-        if( blockingState->outputUnderflowFlag )
-        {
+        if (blockingState->outputUnderflowFlag) {
             blockingState->outputUnderflowFlag = FALSE;
 
             /* Return the corresponding error code. */
@@ -3705,8 +3659,7 @@ static PaError WriteStream( PaStream      *s     ,
         }
 
     } /* If this is not an output stream. */
-    else
-    {
+    else {
         result = paCanNotWriteToAnInputOnlyStream;
     }
 
@@ -3714,21 +3667,21 @@ static PaError WriteStream( PaStream      *s     ,
 }
 
 
-static signed long GetStreamReadAvailable( PaStream* s )
+static signed long GetStreamReadAvailable (PaStream* s)
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
 
     /* Call buffer utility routine to get the number of available frames. */
-    return PaUtil_GetRingBufferReadAvailable( &stream->blockingState->readRingBuffer );
+    return PaUtil_GetRingBufferReadAvailable (&stream->blockingState->readRingBuffer);
 }
 
 
-static signed long GetStreamWriteAvailable( PaStream* s )
+static signed long GetStreamWriteAvailable (PaStream* s)
 {
-    PaAsioStream *stream = (PaAsioStream*)s;
+    PaAsioStream *stream = (PaAsioStream*) s;
 
     /* Call buffer utility routine to get the number of empty buffers. */
-    return PaUtil_GetRingBufferWriteAvailable( &stream->blockingState->writeRingBuffer );
+    return PaUtil_GetRingBufferWriteAvailable (&stream->blockingState->writeRingBuffer);
 }
 
 
@@ -3736,15 +3689,15 @@ static signed long GetStreamWriteAvailable( PaStream* s )
 ** It may called at interrupt level on some machines so don't do anything
 ** that could mess up the system like calling malloc() or free().
 */
-static int BlockingIoPaCallback(const void                     *inputBuffer    ,
-                                      void                     *outputBuffer   ,
-                                      unsigned long             framesPerBuffer,
-                                const PaStreamCallbackTimeInfo *timeInfo       ,
-                                      PaStreamCallbackFlags     statusFlags    ,
-                                      void                     *userData       )
+static int BlockingIoPaCallback (const void                     *inputBuffer    ,
+                                 void                     *outputBuffer   ,
+                                 unsigned long             framesPerBuffer,
+                                 const PaStreamCallbackTimeInfo *timeInfo       ,
+                                 PaStreamCallbackFlags     statusFlags    ,
+                                 void                     *userData)
 {
     PaError result = paNoError; /* Initial return value. */
-    PaAsioStream *stream = *(PaAsioStream**)userData; /* The PA ASIO stream. */
+    PaAsioStream *stream = * (PaAsioStream**) userData; /* The PA ASIO stream. */
     PaAsioStreamBlockingState *blockingState = stream->blockingState; /* Persume blockingState is valid, otherwise the callback wouldn't be running. */
 
     /* Get a pointer to the stream's blocking i/o buffer processor. */
@@ -3752,11 +3705,10 @@ static int BlockingIoPaCallback(const void                     *inputBuffer    ,
     PaUtilRingBuffer      *pRb = NULL;
 
     /* If output data has been requested. */
-    if( stream->outputChannelCount )
-    {
+    if (stream->outputChannelCount) {
         /* If the callback input argument signalizes a output underflow,
            make sure the WriteStream() function knows about it, too! */
-        if( statusFlags & paOutputUnderflowed ) {
+        if (statusFlags & paOutputUnderflowed) {
             blockingState->outputUnderflowFlag = TRUE;
         }
 
@@ -3764,36 +3716,31 @@ static int BlockingIoPaCallback(const void                     *inputBuffer    ,
         pRb = &blockingState->writeRingBuffer;
 
         /* If the blocking i/o buffer contains enough output data, */
-        if( PaUtil_GetRingBufferReadAvailable(pRb) >= (long) framesPerBuffer )
-        {
+        if (PaUtil_GetRingBufferReadAvailable (pRb) >= (long) framesPerBuffer) {
             /* Extract the requested data from the ring buffer. */
-            PaUtil_ReadRingBuffer( pRb, outputBuffer, framesPerBuffer );
-        }
-        else /* If no output data is available :-( */
-        {
+            PaUtil_ReadRingBuffer (pRb, outputBuffer, framesPerBuffer);
+        } else { /* If no output data is available :-( */
             /* Signalize a write-buffer underflow. */
             blockingState->outputUnderflowFlag = TRUE;
 
             /* Fill the output buffer with silence. */
-            (*pBp->outputZeroer)( outputBuffer, 1, pBp->outputChannelCount * framesPerBuffer );
+            (*pBp->outputZeroer) (outputBuffer, 1, pBp->outputChannelCount * framesPerBuffer);
 
             /* If playback is to be stopped */
-            if( blockingState->stopFlag && PaUtil_GetRingBufferReadAvailable(pRb) < (long) framesPerBuffer )
-            {
+            if (blockingState->stopFlag && PaUtil_GetRingBufferReadAvailable (pRb) < (long) framesPerBuffer) {
                 /* Extract all the remaining data from the ring buffer,
                    whether it is a complete data block or not. */
-                PaUtil_ReadRingBuffer( pRb, outputBuffer, PaUtil_GetRingBufferReadAvailable(pRb) );
+                PaUtil_ReadRingBuffer (pRb, outputBuffer, PaUtil_GetRingBufferReadAvailable (pRb));
             }
         }
 
         /* Set blocking i/o event? */
-        if( blockingState->writeBuffersRequestedFlag && PaUtil_GetRingBufferWriteAvailable(pRb) >= (long) blockingState->writeBuffersRequested )
-        {
+        if (blockingState->writeBuffersRequestedFlag && PaUtil_GetRingBufferWriteAvailable (pRb) >= (long) blockingState->writeBuffersRequested) {
             /* Reset buffer request. */
             blockingState->writeBuffersRequestedFlag = FALSE;
             blockingState->writeBuffersRequested     = 0;
             /* Signalize that requested buffers are ready. */
-            SetEvent( blockingState->writeBuffersReadyEvent );
+            SetEvent (blockingState->writeBuffersReadyEvent);
             /* What do we do if SetEvent() returns zero, i.e. the event
                could not be set? How to return errors from within the
                callback? - S.Fischer */
@@ -3801,11 +3748,10 @@ static int BlockingIoPaCallback(const void                     *inputBuffer    ,
     }
 
     /* If input data has been supplied. */
-    if( stream->inputChannelCount )
-    {
+    if (stream->inputChannelCount) {
         /* If the callback input argument signalizes a input overflow,
            make sure the ReadStream() function knows about it, too! */
-        if( statusFlags & paInputOverflowed ) {
+        if (statusFlags & paInputOverflowed) {
             blockingState->inputOverflowFlag = TRUE;
         }
 
@@ -3813,26 +3759,24 @@ static int BlockingIoPaCallback(const void                     *inputBuffer    ,
         pRb = &blockingState->readRingBuffer;
 
         /* If the blocking i/o buffer contains not enough input buffers */
-        if( PaUtil_GetRingBufferWriteAvailable(pRb) < (long) framesPerBuffer )
-        {
+        if (PaUtil_GetRingBufferWriteAvailable (pRb) < (long) framesPerBuffer) {
             /* Signalize a read-buffer overflow. */
             blockingState->inputOverflowFlag = TRUE;
 
             /* Remove some old data frames from the buffer. */
-            PaUtil_AdvanceRingBufferReadIndex( pRb, framesPerBuffer );
+            PaUtil_AdvanceRingBufferReadIndex (pRb, framesPerBuffer);
         }
 
         /* Insert the current input data into the ring buffer. */
-        PaUtil_WriteRingBuffer( pRb, inputBuffer, framesPerBuffer );
+        PaUtil_WriteRingBuffer (pRb, inputBuffer, framesPerBuffer);
 
         /* Set blocking i/o event? */
-        if( blockingState->readFramesRequestedFlag && PaUtil_GetRingBufferReadAvailable(pRb) >= (long) blockingState->readFramesRequested )
-        {
+        if (blockingState->readFramesRequestedFlag && PaUtil_GetRingBufferReadAvailable (pRb) >= (long) blockingState->readFramesRequested) {
             /* Reset buffer request. */
             blockingState->readFramesRequestedFlag = FALSE;
             blockingState->readFramesRequested     = 0;
             /* Signalize that requested buffers are ready. */
-            SetEvent( blockingState->readFramesReadyEvent );
+            SetEvent (blockingState->readFramesReadyEvent);
             /* What do we do if SetEvent() returns zero, i.e. the event
                could not be set? How to return errors from within the
                callback? - S.Fischer */
@@ -3844,7 +3788,7 @@ static int BlockingIoPaCallback(const void                     *inputBuffer    ,
 }
 
 
-PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific )
+PaError PaAsio_ShowControlPanel (PaDeviceIndex device, void* systemSpecific)
 {
     PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
@@ -3856,12 +3800,14 @@ PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific )
     PaAsioDeviceInfo *asioDeviceInfo;
 
 
-    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
-    if( result != paNoError )
+    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
+
+    if (result != paNoError)
         goto error;
 
-    result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
-    if( result != paNoError )
+    result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
+
+    if (result != paNoError)
         goto error;
 
     /*
@@ -3872,84 +3818,82 @@ PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific )
         done safely while a stream is open.
     */
 
-    asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
-    if( asioHostApi->openAsioDeviceIndex != paNoDevice )
-    {
+    asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
+
+    if (asioHostApi->openAsioDeviceIndex != paNoDevice) {
         result = paDeviceUnavailable;
         goto error;
     }
 
-    asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
+    asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
 
     /* See notes about CoInitialize(0) in LoadAsioDriver(). */
-	CoInitialize(0);
+    CoInitialize (0);
 
-    if( !asioHostApi->asioDrivers->loadDriver( const_cast<char*>(asioDeviceInfo->commonDeviceInfo.name) ) )
-    {
+    if (!asioHostApi->asioDrivers->loadDriver (const_cast<char*> (asioDeviceInfo->commonDeviceInfo.name))) {
         result = paUnanticipatedHostError;
         goto error;
     }
 
     /* CRUCIAL!!! */
-    memset( &asioDriverInfo, 0, sizeof(ASIODriverInfo) );
+    memset (&asioDriverInfo, 0, sizeof (ASIODriverInfo));
     asioDriverInfo.asioVersion = 2;
     asioDriverInfo.sysRef = systemSpecific;
-    asioError = ASIOInit( &asioDriverInfo );
-    if( asioError != ASE_OK )
-    {
+    asioError = ASIOInit (&asioDriverInfo);
+
+    if (asioError != ASE_OK) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         goto error;
-    }
-    else
-    {
+    } else {
         asioIsInitialized = 1;
     }
 
-PA_DEBUG(("PaAsio_ShowControlPanel: ASIOInit(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
-PA_DEBUG(("asioVersion: ASIOInit(): %ld\n",   asioDriverInfo.asioVersion )); 
-PA_DEBUG(("driverVersion: ASIOInit(): %ld\n", asioDriverInfo.driverVersion )); 
-PA_DEBUG(("Name: ASIOInit(): %s\n",           asioDriverInfo.name )); 
-PA_DEBUG(("ErrorMessage: ASIOInit(): %s\n",   asioDriverInfo.errorMessage )); 
+    PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOInit(): %s\n", PaAsio_GetAsioErrorText (asioError)));
+    PA_DEBUG ( ("asioVersion: ASIOInit(): %ld\n",   asioDriverInfo.asioVersion));
+    PA_DEBUG ( ("driverVersion: ASIOInit(): %ld\n", asioDriverInfo.driverVersion));
+    PA_DEBUG ( ("Name: ASIOInit(): %s\n",           asioDriverInfo.name));
+    PA_DEBUG ( ("ErrorMessage: ASIOInit(): %s\n",   asioDriverInfo.errorMessage));
 
     asioError = ASIOControlPanel();
-    if( asioError != ASE_OK )
-    {
-        PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
+
+    if (asioError != ASE_OK) {
+        PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText (asioError)));
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         goto error;
     }
 
-PA_DEBUG(("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
+    PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOControlPanel(): %s\n", PaAsio_GetAsioErrorText (asioError)));
 
     asioError = ASIOExit();
-    if( asioError != ASE_OK )
-    {
+
+    if (asioError != ASE_OK) {
         result = paUnanticipatedHostError;
-        PA_ASIO_SET_LAST_ASIO_ERROR( asioError );
+        PA_ASIO_SET_LAST_ASIO_ERROR (asioError);
         asioIsInitialized = 0;
         goto error;
     }
 
-	CoUninitialize();
-PA_DEBUG(("PaAsio_ShowControlPanel: ASIOExit(): %s\n", PaAsio_GetAsioErrorText(asioError) ));
+    CoUninitialize();
+    PA_DEBUG ( ("PaAsio_ShowControlPanel: ASIOExit(): %s\n", PaAsio_GetAsioErrorText (asioError)));
 
     return result;
 
 error:
-    if( asioIsInitialized )
-	{
-		ASIOExit();
-	}
-	CoUninitialize();
+
+    if (asioIsInitialized) {
+        ASIOExit();
+    }
+
+    CoUninitialize();
 
     return result;
 }
 
 
-PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex,
-        const char** channelName )
+PaError PaAsio_GetInputChannelName (PaDeviceIndex device, int channelIndex,
+                                    const char** channelName)
 {
     PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
@@ -3957,17 +3901,19 @@ PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex,
     PaAsioDeviceInfo *asioDeviceInfo;
 
 
-    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
-    if( result != paNoError )
+    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
+
+    if (result != paNoError)
         goto error;
 
-    result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
-    if( result != paNoError )
+    result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
+
+    if (result != paNoError)
         goto error;
 
-    asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
+    asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
 
-    if( channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxInputChannels ){
+    if (channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxInputChannels) {
         result = paInvalidChannelCount;
         goto error;
     }
@@ -3975,14 +3921,14 @@ PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex,
     *channelName = asioDeviceInfo->asioChannelInfos[channelIndex].name;
 
     return paNoError;
-    
+
 error:
     return result;
 }
 
 
-PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,
-        const char** channelName )
+PaError PaAsio_GetOutputChannelName (PaDeviceIndex device, int channelIndex,
+                                     const char** channelName)
 {
     PaError result = paNoError;
     PaUtilHostApiRepresentation *hostApi;
@@ -3990,26 +3936,28 @@ PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,
     PaAsioDeviceInfo *asioDeviceInfo;
 
 
-    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
-    if( result != paNoError )
+    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
+
+    if (result != paNoError)
         goto error;
 
-    result = PaUtil_DeviceIndexToHostApiDeviceIndex( &hostApiDevice, device, hostApi );
-    if( result != paNoError )
+    result = PaUtil_DeviceIndexToHostApiDeviceIndex (&hostApiDevice, device, hostApi);
+
+    if (result != paNoError)
         goto error;
 
-    asioDeviceInfo = (PaAsioDeviceInfo*)hostApi->deviceInfos[hostApiDevice];
+    asioDeviceInfo = (PaAsioDeviceInfo*) hostApi->deviceInfos[hostApiDevice];
 
-    if( channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxOutputChannels ){
+    if (channelIndex < 0 || channelIndex >= asioDeviceInfo->commonDeviceInfo.maxOutputChannels) {
         result = paInvalidChannelCount;
         goto error;
     }
 
     *channelName = asioDeviceInfo->asioChannelInfos[
-            asioDeviceInfo->commonDeviceInfo.maxInputChannels + channelIndex].name;
+                       asioDeviceInfo->commonDeviceInfo.maxInputChannels + channelIndex].name;
 
     return paNoError;
-    
+
 error:
     return result;
 }
@@ -4020,46 +3968,46 @@ error:
     we don't have the benefit of pa_front.c's parameter checking.
 */
 
-static PaError GetAsioStreamPointer( PaAsioStream **stream, PaStream *s )
+static PaError GetAsioStreamPointer (PaAsioStream **stream, PaStream *s)
 {
     PaError result;
     PaUtilHostApiRepresentation *hostApi;
     PaAsioHostApiRepresentation *asioHostApi;
-    
-    result = PaUtil_ValidateStreamPointer( s );
-    if( result != paNoError )
+
+    result = PaUtil_ValidateStreamPointer (s);
+
+    if (result != paNoError)
         return result;
 
-    result = PaUtil_GetHostApiRepresentation( &hostApi, paASIO );
-    if( result != paNoError )
+    result = PaUtil_GetHostApiRepresentation (&hostApi, paASIO);
+
+    if (result != paNoError)
         return result;
 
-    asioHostApi = (PaAsioHostApiRepresentation*)hostApi;
-    
-    if( PA_STREAM_REP( s )->streamInterface == &asioHostApi->callbackStreamInterface
-            || PA_STREAM_REP( s )->streamInterface == &asioHostApi->blockingStreamInterface )
-    {
+    asioHostApi = (PaAsioHostApiRepresentation*) hostApi;
+
+    if (PA_STREAM_REP (s)->streamInterface == &asioHostApi->callbackStreamInterface
+            || PA_STREAM_REP (s)->streamInterface == &asioHostApi->blockingStreamInterface) {
         /* s is an ASIO  stream */
-        *stream = (PaAsioStream *)s;
+        *stream = (PaAsioStream *) s;
         return paNoError;
-    }
-    else
-    {
+    } else {
         return paIncompatibleStreamHostApi;
     }
 }
 
 
-PaError PaAsio_SetStreamSampleRate( PaStream* s, double sampleRate )
+PaError PaAsio_SetStreamSampleRate (PaStream* s, double sampleRate)
 {
     PaAsioStream *stream;
-    PaError result = GetAsioStreamPointer( &stream, s );
-    if( result != paNoError )
+    PaError result = GetAsioStreamPointer (&stream, s);
+
+    if (result != paNoError)
         return result;
 
-    if( stream != theAsioStream )
+    if (stream != theAsioStream)
         return paBadStreamPtr;
 
-    return ValidateAndSetSampleRate( sampleRate );
+    return ValidateAndSetSampleRate (sampleRate);
 }
 
diff --git a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp
index 498fc6c442d629146256fb025d6e2b42bada30cc..d5663f839d5e893adf40767b68400124eadc819b 100644
--- a/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp
+++ b/sflphone-common/libs/pjproject/third_party/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp
@@ -26,13 +26,13 @@
  */
 
 /*
- * The text above constitutes the entire PortAudio license; however, 
+ * The text above constitutes the entire PortAudio license; however,
  * the PortAudio community also makes the following non-binding requests:
  *
  * Any person wishing to distribute modifications to the Software is
  * requested to send the modifications to the original developer so that
- * they can be incorporated into the canonical version. It is also 
- * requested that these non-binding requests be included along with the 
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
  * license above.
  */
 
@@ -85,11 +85,10 @@
 /* prototypes for functions declared in this file */
 
 #ifdef __cplusplus
-extern "C"
-{
+extern "C" {
 #endif /* __cplusplus */
 
-PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index );
+    PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex index);
 
 #ifdef __cplusplus
 }
@@ -98,12 +97,12 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
 
 
 
-static void Terminate( struct PaUtilHostApiRepresentation *hostApi );
-static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+static void Terminate (struct PaUtilHostApiRepresentation *hostApi);
+static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
                                   const PaStreamParameters *inputParameters,
                                   const PaStreamParameters *outputParameters,
-                                  double sampleRate );
-static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+                                  double sampleRate);
+static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -111,19 +110,19 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData );
-static PaError CloseStream( PaStream* stream );
-static PaError StartStream( PaStream *stream );
-static PaError StopStream( PaStream *stream );
-static PaError AbortStream( PaStream *stream );
-static PaError IsStreamStopped( PaStream *s );
-static PaError IsStreamActive( PaStream *stream );
-static PaTime GetStreamTime( PaStream *stream );
-static double GetStreamCpuLoad( PaStream* stream );
-static PaError ReadStream( PaStream* stream, void *buffer, unsigned long frames );
-static PaError WriteStream( PaStream* stream, const void *buffer, unsigned long frames );
-static signed long GetStreamReadAvailable( PaStream* stream );
-static signed long GetStreamWriteAvailable( PaStream* stream );
+                           void *userData);
+static PaError CloseStream (PaStream* stream);
+static PaError StartStream (PaStream *stream);
+static PaError StopStream (PaStream *stream);
+static PaError AbortStream (PaStream *stream);
+static PaError IsStreamStopped (PaStream *s);
+static PaError IsStreamActive (PaStream *stream);
+static PaTime GetStreamTime (PaStream *stream);
+static double GetStreamCpuLoad (PaStream* stream);
+static PaError ReadStream (PaStream* stream, void *buffer, unsigned long frames);
+static PaError WriteStream (PaStream* stream, const void *buffer, unsigned long frames);
+static signed long GetStreamReadAvailable (PaStream* stream);
+static signed long GetStreamWriteAvailable (PaStream* stream);
 
 
 /* IMPLEMENT ME: a macro like the following one should be used for reporting
@@ -139,7 +138,8 @@ static signed long GetStreamWriteAvailable( PaStream* stream );
 //currently built using RC1 SDK (5600)
 #if _MSC_VER < 1400
 
-PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex ){
+PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
+{
     return paNoError;
 }
 
@@ -156,8 +156,7 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
  i assume that neither of these will cause the Driver to "load",
  but again, who knows how they implement their stuff
  */
-typedef struct PaWinWasapiDeviceInfo
-{
+typedef struct PaWinWasapiDeviceInfo {
     //hmm is it wise to keep a reference until Terminate?
     //TODO Check if that interface requires the driver to be loaded!
     IMMDevice * device;
@@ -181,8 +180,7 @@ typedef struct PaWinWasapiDeviceInfo
 } PaWinWasapiDeviceInfo;
 
 
-typedef struct
-{
+typedef struct {
     PaUtilHostApiRepresentation inheritedHostApiRep;
     PaUtilStreamInterface callbackStreamInterface;
     PaUtilStreamInterface blockingStreamInterface;
@@ -201,22 +199,21 @@ typedef struct
     WCHAR defaultCapturer [MAX_STR_LEN];
 
     PaWinWasapiDeviceInfo   *devInfo;
-}PaWinWasapiHostApiRepresentation;
+} PaWinWasapiHostApiRepresentation;
 
 
 /* PaWinWasapiStream - a stream data structure specifically for this implementation */
 
-typedef struct PaWinWasapiSubStream{
+typedef struct PaWinWasapiSubStream {
     IAudioClient        *client;
     WAVEFORMATEXTENSIBLE wavex;
     UINT32               bufferSize;
     REFERENCE_TIME       latency;
     REFERENCE_TIME       period;
     unsigned long framesPerHostCallback; /* just an example */
-}PaWinWasapiSubStream;
+} PaWinWasapiSubStream;
 
-typedef struct PaWinWasapiStream
-{ /* IMPLEMENT ME: rename this */
+typedef struct PaWinWasapiStream { /* IMPLEMENT ME: rename this */
     PaUtilStreamRepresentation streamRepresentation;
     PaUtilCpuLoadMeasurer cpuLoadMeasurer;
     PaUtilBufferProcessor bufferProcessor;
@@ -227,84 +224,141 @@ typedef struct PaWinWasapiStream
 
 
     //input
-	PaWinWasapiSubStream in;
+    PaWinWasapiSubStream in;
     IAudioCaptureClient *cclient;
     IAudioEndpointVolume *inVol;
-	//output
-	PaWinWasapiSubStream out;
+    //output
+    PaWinWasapiSubStream out;
     IAudioRenderClient  *rclient;
-	IAudioEndpointVolume *outVol;
+    IAudioEndpointVolume *outVol;
 
     bool running;
     bool closeRequest;
 
     DWORD dwThreadId;
     HANDLE hThread;
-	HANDLE hNotificationEvent; 
+    HANDLE hNotificationEvent;
 
     GUID  session;
 
-}PaWinWasapiStream;
+} PaWinWasapiStream;
 
 #define PRINT(x) PA_DEBUG(x);
 
 void
-logAUDCLNT_E(HRESULT res){
+logAUDCLNT_E (HRESULT res)
+{
 
     char *text = 0;
-    switch(res){
-        case S_OK: return; break;
-        case E_POINTER                              :text ="E_POINTER"; break;
-        case E_INVALIDARG                           :text ="E_INVALIDARG"; break;
-
-        case AUDCLNT_E_NOT_INITIALIZED              :text ="AUDCLNT_E_NOT_INITIALIZED"; break;
-        case AUDCLNT_E_ALREADY_INITIALIZED          :text ="AUDCLNT_E_ALREADY_INITIALIZED"; break;
-        case AUDCLNT_E_WRONG_ENDPOINT_TYPE          :text ="AUDCLNT_E_WRONG_ENDPOINT_TYPE"; break;
-        case AUDCLNT_E_DEVICE_INVALIDATED           :text ="AUDCLNT_E_DEVICE_INVALIDATED"; break;
-        case AUDCLNT_E_NOT_STOPPED                  :text ="AUDCLNT_E_NOT_STOPPED"; break;
-        case AUDCLNT_E_BUFFER_TOO_LARGE             :text ="AUDCLNT_E_BUFFER_TOO_LARGE"; break;
-        case AUDCLNT_E_OUT_OF_ORDER                 :text ="AUDCLNT_E_OUT_OF_ORDER"; break;
-        case AUDCLNT_E_UNSUPPORTED_FORMAT           :text ="AUDCLNT_E_UNSUPPORTED_FORMAT"; break;
-        case AUDCLNT_E_INVALID_SIZE                 :text ="AUDCLNT_E_INVALID_SIZE"; break;
-        case AUDCLNT_E_DEVICE_IN_USE                :text ="AUDCLNT_E_DEVICE_IN_USE"; break;
-        case AUDCLNT_E_BUFFER_OPERATION_PENDING     :text ="AUDCLNT_E_BUFFER_OPERATION_PENDING"; break;
-        case AUDCLNT_E_THREAD_NOT_REGISTERED        :text ="AUDCLNT_E_THREAD_NOT_REGISTERED"; break;      
-		case AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED   :text ="AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED"; break;
-        case AUDCLNT_E_ENDPOINT_CREATE_FAILED       :text ="AUDCLNT_E_ENDPOINT_CREATE_FAILED"; break;
-        case AUDCLNT_E_SERVICE_NOT_RUNNING          :text ="AUDCLNT_E_SERVICE_NOT_RUNNING"; break;
-     //  case AUDCLNT_E_CPUUSAGE_EXCEEDED            :text ="AUDCLNT_E_CPUUSAGE_EXCEEDED"; break;
-     //Header error?
-        case AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     :text ="AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED"; break;
-        case AUDCLNT_E_EXCLUSIVE_MODE_ONLY          :text ="AUDCLNT_E_EXCLUSIVE_MODE_ONLY"; break;
-        case AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL :text ="AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL"; break;
-        case AUDCLNT_E_EVENTHANDLE_NOT_SET          :text ="AUDCLNT_E_EVENTHANDLE_NOT_SET"; break;
-        case AUDCLNT_E_INCORRECT_BUFFER_SIZE        :text ="AUDCLNT_E_INCORRECT_BUFFER_SIZE"; break;
-        case AUDCLNT_E_BUFFER_SIZE_ERROR            :text ="AUDCLNT_E_BUFFER_SIZE_ERROR"; break;
-        case AUDCLNT_S_BUFFER_EMPTY                 :text ="AUDCLNT_S_BUFFER_EMPTY"; break;
-        case AUDCLNT_S_THREAD_ALREADY_REGISTERED    :text ="AUDCLNT_S_THREAD_ALREADY_REGISTERED"; break;
+
+    switch (res) {
+        case S_OK:
+            return;
+            break;
+        case E_POINTER                              :
+            text ="E_POINTER";
+            break;
+        case E_INVALIDARG                           :
+            text ="E_INVALIDARG";
+            break;
+
+        case AUDCLNT_E_NOT_INITIALIZED              :
+            text ="AUDCLNT_E_NOT_INITIALIZED";
+            break;
+        case AUDCLNT_E_ALREADY_INITIALIZED          :
+            text ="AUDCLNT_E_ALREADY_INITIALIZED";
+            break;
+        case AUDCLNT_E_WRONG_ENDPOINT_TYPE          :
+            text ="AUDCLNT_E_WRONG_ENDPOINT_TYPE";
+            break;
+        case AUDCLNT_E_DEVICE_INVALIDATED           :
+            text ="AUDCLNT_E_DEVICE_INVALIDATED";
+            break;
+        case AUDCLNT_E_NOT_STOPPED                  :
+            text ="AUDCLNT_E_NOT_STOPPED";
+            break;
+        case AUDCLNT_E_BUFFER_TOO_LARGE             :
+            text ="AUDCLNT_E_BUFFER_TOO_LARGE";
+            break;
+        case AUDCLNT_E_OUT_OF_ORDER                 :
+            text ="AUDCLNT_E_OUT_OF_ORDER";
+            break;
+        case AUDCLNT_E_UNSUPPORTED_FORMAT           :
+            text ="AUDCLNT_E_UNSUPPORTED_FORMAT";
+            break;
+        case AUDCLNT_E_INVALID_SIZE                 :
+            text ="AUDCLNT_E_INVALID_SIZE";
+            break;
+        case AUDCLNT_E_DEVICE_IN_USE                :
+            text ="AUDCLNT_E_DEVICE_IN_USE";
+            break;
+        case AUDCLNT_E_BUFFER_OPERATION_PENDING     :
+            text ="AUDCLNT_E_BUFFER_OPERATION_PENDING";
+            break;
+        case AUDCLNT_E_THREAD_NOT_REGISTERED        :
+            text ="AUDCLNT_E_THREAD_NOT_REGISTERED";
+            break;
+        case AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED   :
+            text ="AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED";
+            break;
+        case AUDCLNT_E_ENDPOINT_CREATE_FAILED       :
+            text ="AUDCLNT_E_ENDPOINT_CREATE_FAILED";
+            break;
+        case AUDCLNT_E_SERVICE_NOT_RUNNING          :
+            text ="AUDCLNT_E_SERVICE_NOT_RUNNING";
+            break;
+            //  case AUDCLNT_E_CPUUSAGE_EXCEEDED            :text ="AUDCLNT_E_CPUUSAGE_EXCEEDED"; break;
+            //Header error?
+        case AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     :
+            text ="AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED";
+            break;
+        case AUDCLNT_E_EXCLUSIVE_MODE_ONLY          :
+            text ="AUDCLNT_E_EXCLUSIVE_MODE_ONLY";
+            break;
+        case AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL :
+            text ="AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL";
+            break;
+        case AUDCLNT_E_EVENTHANDLE_NOT_SET          :
+            text ="AUDCLNT_E_EVENTHANDLE_NOT_SET";
+            break;
+        case AUDCLNT_E_INCORRECT_BUFFER_SIZE        :
+            text ="AUDCLNT_E_INCORRECT_BUFFER_SIZE";
+            break;
+        case AUDCLNT_E_BUFFER_SIZE_ERROR            :
+            text ="AUDCLNT_E_BUFFER_SIZE_ERROR";
+            break;
+        case AUDCLNT_S_BUFFER_EMPTY                 :
+            text ="AUDCLNT_S_BUFFER_EMPTY";
+            break;
+        case AUDCLNT_S_THREAD_ALREADY_REGISTERED    :
+            text ="AUDCLNT_S_THREAD_ALREADY_REGISTERED";
+            break;
         default:
             text =" dunno!";
             return ;
-        break;
+            break;
 
     }
-    PRINT(("WASAPI ERROR HRESULT: 0x%X : %s\n",res,text));
+
+    PRINT ( ("WASAPI ERROR HRESULT: 0x%X : %s\n",res,text));
 }
 
 inline double
-nano100ToMillis(const REFERENCE_TIME &ref){
+nano100ToMillis (const REFERENCE_TIME &ref)
+{
     //  1 nano = 0.000000001 seconds
     //100 nano = 0.0000001   seconds
     //100 nano = 0.0001   milliseconds
-    return ((double)ref)*0.0001;
+    return ( (double) ref) *0.0001;
 }
 
 inline double
-nano100ToSeconds(const REFERENCE_TIME &ref){
+nano100ToSeconds (const REFERENCE_TIME &ref)
+{
     //  1 nano = 0.000000001 seconds
     //100 nano = 0.0000001   seconds
     //100 nano = 0.0001   milliseconds
-    return ((double)ref)*0.0000001;
+    return ( (double) ref) *0.0000001;
 }
 
 #ifndef IF_FAILED_JUMP
@@ -315,11 +369,11 @@ nano100ToSeconds(const REFERENCE_TIME &ref){
 
 //AVRT is the new "multimedia schedulling stuff"
 
-typedef BOOL   (WINAPI *FAvRtCreateThreadOrderingGroup) (PHANDLE,PLARGE_INTEGER,GUID*,PLARGE_INTEGER);
-typedef BOOL   (WINAPI *FAvRtDeleteThreadOrderingGroup) (HANDLE);
-typedef BOOL   (WINAPI *FAvRtWaitOnThreadOrderingGroup) (HANDLE);
-typedef HANDLE (WINAPI *FAvSetMmThreadCharacteristics)  (LPCTSTR,LPDWORD);
-typedef BOOL   (WINAPI *FAvSetMmThreadPriority)         (HANDLE,AVRT_PRIORITY);
+typedef BOOL (WINAPI *FAvRtCreateThreadOrderingGroup) (PHANDLE,PLARGE_INTEGER,GUID*,PLARGE_INTEGER);
+typedef BOOL (WINAPI *FAvRtDeleteThreadOrderingGroup) (HANDLE);
+typedef BOOL (WINAPI *FAvRtWaitOnThreadOrderingGroup) (HANDLE);
+typedef HANDLE (WINAPI *FAvSetMmThreadCharacteristics) (LPCTSTR,LPDWORD);
+typedef BOOL (WINAPI *FAvSetMmThreadPriority) (HANDLE,AVRT_PRIORITY);
 
 HMODULE  hDInputDLL = 0;
 FAvRtCreateThreadOrderingGroup pAvRtCreateThreadOrderingGroup=0;
@@ -337,46 +391,50 @@ FAvSetMmThreadPriority         pAvSetMmThreadPriority=0;
                                             return false;                                   \
                                         }                                                   \
                                     }                                                       \
-
+ 
 bool
-setupAVRT(){
+setupAVRT()
+{
+
+    hDInputDLL = LoadLibraryA ("avrt.dll");
 
-    hDInputDLL = LoadLibraryA("avrt.dll");
-    if(hDInputDLL == NULL)
+    if (hDInputDLL == NULL)
         return false;
 
-    setupPTR(pAvRtCreateThreadOrderingGroup, FAvRtCreateThreadOrderingGroup, "AvRtCreateThreadOrderingGroup");
-    setupPTR(pAvRtDeleteThreadOrderingGroup, FAvRtDeleteThreadOrderingGroup, "AvRtDeleteThreadOrderingGroup");
-    setupPTR(pAvRtWaitOnThreadOrderingGroup, FAvRtWaitOnThreadOrderingGroup, "AvRtWaitOnThreadOrderingGroup");
-    setupPTR(pAvSetMmThreadCharacteristics,  FAvSetMmThreadCharacteristics,  "AvSetMmThreadCharacteristicsA");
-    setupPTR(pAvSetMmThreadPriority,         FAvSetMmThreadPriority,         "AvSetMmThreadPriority");
+    setupPTR (pAvRtCreateThreadOrderingGroup, FAvRtCreateThreadOrderingGroup, "AvRtCreateThreadOrderingGroup");
+    setupPTR (pAvRtDeleteThreadOrderingGroup, FAvRtDeleteThreadOrderingGroup, "AvRtDeleteThreadOrderingGroup");
+    setupPTR (pAvRtWaitOnThreadOrderingGroup, FAvRtWaitOnThreadOrderingGroup, "AvRtWaitOnThreadOrderingGroup");
+    setupPTR (pAvSetMmThreadCharacteristics,  FAvSetMmThreadCharacteristics,  "AvSetMmThreadCharacteristicsA");
+    setupPTR (pAvSetMmThreadPriority,         FAvSetMmThreadPriority,         "AvSetMmThreadPriority");
 
     return true;
 }
 
 
 
-PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex )
+PaError PaWinWasapi_Initialize (PaUtilHostApiRepresentation **hostApi, PaHostApiIndex hostApiIndex)
 {
-    if (!setupAVRT()){
-        PRINT(("Windows WASAPI : No AVRT! (not VISTA?)"));
+    if (!setupAVRT()) {
+        PRINT ( ("Windows WASAPI : No AVRT! (not VISTA?)"));
         return paNoError;
     }
 
-    CoInitialize(NULL);
+    CoInitialize (NULL);
 
     PaError result = paNoError;
     PaWinWasapiHostApiRepresentation *paWasapi;
     PaDeviceInfo *deviceInfoArray;
 
-    paWasapi = (PaWinWasapiHostApiRepresentation*)PaUtil_AllocateMemory( sizeof(PaWinWasapiHostApiRepresentation) );
-    if( !paWasapi ){
+    paWasapi = (PaWinWasapiHostApiRepresentation*) PaUtil_AllocateMemory (sizeof (PaWinWasapiHostApiRepresentation));
+
+    if (!paWasapi) {
         result = paInsufficientMemory;
         goto error;
     }
 
     paWasapi->allocations = PaUtil_CreateAllocationGroup();
-    if( !paWasapi->allocations ){
+
+    if (!paWasapi->allocations) {
         result = paInsufficientMemory;
         goto error;
     }
@@ -394,168 +452,172 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
     IMMDeviceCollection* spEndpoints=0;
     paWasapi->enumerator = 0;
 
-    hResult = CoCreateInstance(
-             __uuidof(MMDeviceEnumerator), NULL,CLSCTX_INPROC_SERVER,
-             __uuidof(IMMDeviceEnumerator),
-             (void**)&paWasapi->enumerator);
+    hResult = CoCreateInstance (
+                  __uuidof (MMDeviceEnumerator), NULL,CLSCTX_INPROC_SERVER,
+                  __uuidof (IMMDeviceEnumerator),
+                  (void**) &paWasapi->enumerator);
 
-    IF_FAILED_JUMP(hResult, error);
+    IF_FAILED_JUMP (hResult, error);
 
     //getting default device ids in the eMultimedia "role"
     {
         {
             IMMDevice* defaultRenderer=0;
-            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &defaultRenderer);
-            IF_FAILED_JUMP(hResult, error);
+            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint (eRender, eMultimedia, &defaultRenderer);
+            IF_FAILED_JUMP (hResult, error);
             WCHAR* pszDeviceId = NULL;
-            hResult = defaultRenderer->GetId(&pszDeviceId);
-            IF_FAILED_JUMP(hResult, error);
-            StringCchCopyW(paWasapi->defaultRenderer, MAX_STR_LEN-1, pszDeviceId);
-            CoTaskMemFree(pszDeviceId);
+            hResult = defaultRenderer->GetId (&pszDeviceId);
+            IF_FAILED_JUMP (hResult, error);
+            StringCchCopyW (paWasapi->defaultRenderer, MAX_STR_LEN-1, pszDeviceId);
+            CoTaskMemFree (pszDeviceId);
             defaultRenderer->Release();
         }
 
         {
             IMMDevice* defaultCapturer=0;
-            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint(eCapture, eMultimedia, &defaultCapturer);
-            IF_FAILED_JUMP(hResult, error);
+            hResult = paWasapi->enumerator->GetDefaultAudioEndpoint (eCapture, eMultimedia, &defaultCapturer);
+            IF_FAILED_JUMP (hResult, error);
             WCHAR* pszDeviceId = NULL;
-            hResult = defaultCapturer->GetId(&pszDeviceId);
-            IF_FAILED_JUMP(hResult, error);
-            StringCchCopyW(paWasapi->defaultCapturer, MAX_STR_LEN-1, pszDeviceId);
-            CoTaskMemFree(pszDeviceId);
+            hResult = defaultCapturer->GetId (&pszDeviceId);
+            IF_FAILED_JUMP (hResult, error);
+            StringCchCopyW (paWasapi->defaultCapturer, MAX_STR_LEN-1, pszDeviceId);
+            CoTaskMemFree (pszDeviceId);
             defaultCapturer->Release();
         }
     }
 
 
-    hResult = paWasapi->enumerator->EnumAudioEndpoints(eAll, DEVICE_STATE_ACTIVE, &spEndpoints);
-    IF_FAILED_JUMP(hResult, error);
+    hResult = paWasapi->enumerator->EnumAudioEndpoints (eAll, DEVICE_STATE_ACTIVE, &spEndpoints);
+    IF_FAILED_JUMP (hResult, error);
 
-    hResult = spEndpoints->GetCount(&paWasapi->deviceCount);
-    IF_FAILED_JUMP(hResult, error);
+    hResult = spEndpoints->GetCount (&paWasapi->deviceCount);
+    IF_FAILED_JUMP (hResult, error);
 
     paWasapi->devInfo = new PaWinWasapiDeviceInfo[paWasapi->deviceCount];
     {
-        for (size_t step=0;step<paWasapi->deviceCount;++step)
-            memset(&paWasapi->devInfo[step],0,sizeof(PaWinWasapiDeviceInfo));
+        for (size_t step=0; step<paWasapi->deviceCount; ++step)
+            memset (&paWasapi->devInfo[step],0,sizeof (PaWinWasapiDeviceInfo));
     }
 
 
 
-    if( paWasapi->deviceCount > 0 )
-    {
-        (*hostApi)->deviceInfos = (PaDeviceInfo**)PaUtil_GroupAllocateMemory(
-                paWasapi->allocations, sizeof(PaDeviceInfo*) * paWasapi->deviceCount );
-        if( !(*hostApi)->deviceInfos ){
+    if (paWasapi->deviceCount > 0) {
+        (*hostApi)->deviceInfos = (PaDeviceInfo**) PaUtil_GroupAllocateMemory (
+                                      paWasapi->allocations, sizeof (PaDeviceInfo*) * paWasapi->deviceCount);
+
+        if (! (*hostApi)->deviceInfos) {
             result = paInsufficientMemory;
             goto error;
         }
 
         /* allocate all device info structs in a contiguous block */
-        deviceInfoArray = (PaDeviceInfo*)PaUtil_GroupAllocateMemory(
-                paWasapi->allocations, sizeof(PaDeviceInfo) * paWasapi->deviceCount );
-        if( !deviceInfoArray ){
+        deviceInfoArray = (PaDeviceInfo*) PaUtil_GroupAllocateMemory (
+                              paWasapi->allocations, sizeof (PaDeviceInfo) * paWasapi->deviceCount);
+
+        if (!deviceInfoArray) {
             result = paInsufficientMemory;
             goto error;
         }
 
-        for( UINT i=0; i < paWasapi->deviceCount; ++i ){
+        for (UINT i=0; i < paWasapi->deviceCount; ++i) {
 
-			PA_DEBUG(("i:%d\n",i));
+            PA_DEBUG ( ("i:%d\n",i));
             PaDeviceInfo *deviceInfo = &deviceInfoArray[i];
             deviceInfo->structVersion = 2;
             deviceInfo->hostApi = hostApiIndex;
 
-            hResult = spEndpoints->Item(i, &paWasapi->devInfo[i].device);
-            IF_FAILED_JUMP(hResult, error);
+            hResult = spEndpoints->Item (i, &paWasapi->devInfo[i].device);
+            IF_FAILED_JUMP (hResult, error);
 
             //getting ID
             {
                 WCHAR* pszDeviceId = NULL;
-                hResult = paWasapi->devInfo[i].device->GetId(&pszDeviceId);
-                IF_FAILED_JUMP(hResult, error);
-                StringCchCopyW(paWasapi->devInfo[i].szDeviceID, MAX_STR_LEN-1, pszDeviceId);
-                CoTaskMemFree(pszDeviceId);
+                hResult = paWasapi->devInfo[i].device->GetId (&pszDeviceId);
+                IF_FAILED_JUMP (hResult, error);
+                StringCchCopyW (paWasapi->devInfo[i].szDeviceID, MAX_STR_LEN-1, pszDeviceId);
+                CoTaskMemFree (pszDeviceId);
 
-                if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultCapturer)==0){
+                if (lstrcmpW (paWasapi->devInfo[i].szDeviceID, paWasapi->defaultCapturer) ==0) {
                     //we found the default input!
                     (*hostApi)->info.defaultInputDevice = (*hostApi)->info.deviceCount;
                 }
-                if (lstrcmpW(paWasapi->devInfo[i].szDeviceID, paWasapi->defaultRenderer)==0){
+
+                if (lstrcmpW (paWasapi->devInfo[i].szDeviceID, paWasapi->defaultRenderer) ==0) {
                     //we found the default output!
                     (*hostApi)->info.defaultOutputDevice = (*hostApi)->info.deviceCount;
                 }
             }
 
             DWORD state=0;
-            hResult = paWasapi->devInfo[i].device->GetState(&paWasapi->devInfo[i].state);
-            IF_FAILED_JUMP(hResult, error);
+            hResult = paWasapi->devInfo[i].device->GetState (&paWasapi->devInfo[i].state);
+            IF_FAILED_JUMP (hResult, error);
 
-            if (paWasapi->devInfo[i].state != DEVICE_STATE_ACTIVE){
-                PRINT(("WASAPI device:%d is not currently available (state:%d)\n",i,state));
+            if (paWasapi->devInfo[i].state != DEVICE_STATE_ACTIVE) {
+                PRINT ( ("WASAPI device:%d is not currently available (state:%d)\n",i,state));
                 //spDevice->Release();
                 //continue;
             }
 
             {
                 IPropertyStore* spProperties;
-                hResult = paWasapi->devInfo[i].device->OpenPropertyStore(STGM_READ, &spProperties);
-                IF_FAILED_JUMP(hResult, error);
+                hResult = paWasapi->devInfo[i].device->OpenPropertyStore (STGM_READ, &spProperties);
+                IF_FAILED_JUMP (hResult, error);
 
                 //getting "Friendly" Name
                 {
                     PROPVARIANT value;
-                    PropVariantInit(&value);
-                    hResult = spProperties->GetValue(PKEY_Device_FriendlyName, &value);
-                    IF_FAILED_JUMP(hResult, error);
+                    PropVariantInit (&value);
+                    hResult = spProperties->GetValue (PKEY_Device_FriendlyName, &value);
+                    IF_FAILED_JUMP (hResult, error);
                     deviceInfo->name = 0;
-                    char* deviceName = (char*)PaUtil_GroupAllocateMemory( paWasapi->allocations, MAX_STR_LEN + 1 );
-                    if( !deviceName ){
+                    char* deviceName = (char*) PaUtil_GroupAllocateMemory (paWasapi->allocations, MAX_STR_LEN + 1);
+
+                    if (!deviceName) {
                         result = paInsufficientMemory;
                         goto error;
                     }
-					if (value.pwszVal)
-						wcstombs(deviceName,   value.pwszVal,MAX_STR_LEN-1); //todo proper size	
-					else{
-						_snprintf_s(deviceName,MAX_STR_LEN-1,MAX_STR_LEN-1,"baddev%d",i);
-					}
+
+                    if (value.pwszVal)
+                        wcstombs (deviceName,   value.pwszVal,MAX_STR_LEN-1); //todo proper size
+                    else {
+                        _snprintf_s (deviceName,MAX_STR_LEN-1,MAX_STR_LEN-1,"baddev%d",i);
+                    }
 
                     deviceInfo->name = deviceName;
-                    PropVariantClear(&value);
+                    PropVariantClear (&value);
                 }
 
 #if 0
                 DWORD numProps = 0;
-                hResult = spProperties->GetCount(&numProps);
-                IF_FAILED_JUMP(hResult, error);
+                hResult = spProperties->GetCount (&numProps);
+                IF_FAILED_JUMP (hResult, error);
                 {
-                    for (DWORD i=0;i<numProps;++i){
+                    for (DWORD i=0; i<numProps; ++i) {
                         PROPERTYKEY pkey;
-                        hResult = spProperties->GetAt(i,&pkey);
+                        hResult = spProperties->GetAt (i,&pkey);
 
                         PROPVARIANT value;
-                        PropVariantInit(&value);
-                        hResult = spProperties->GetValue(pkey, &value);
+                        PropVariantInit (&value);
+                        hResult = spProperties->GetValue (pkey, &value);
 
-                        switch(value.vt){
+                        switch (value.vt) {
                             case 11:
-                                PRINT(("property*%u*\n",value.ulVal));
-                            break;
+                                PRINT ( ("property*%u*\n",value.ulVal));
+                                break;
                             case 19:
-                                PRINT(("property*%d*\n",value.boolVal));
-                            break;
-                            case 31:
-                            {
+                                PRINT ( ("property*%d*\n",value.boolVal));
+                                break;
+                            case 31: {
                                 char temp[512];
-                                wcstombs(temp,    value.pwszVal,MAX_STR_LEN-1);
-                                PRINT(("property*%s*\n",temp));
+                                wcstombs (temp,    value.pwszVal,MAX_STR_LEN-1);
+                                PRINT ( ("property*%s*\n",temp));
                             }
                             break;
-                            default:break;
+                            default:
+                                break;
                         }
 
-                        PropVariantClear(&value);
+                        PropVariantClear (&value);
                     }
                 }
 #endif
@@ -574,9 +636,10 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
             //getting the Endpoint data
             {
                 IMMEndpoint *endpoint=0;
-                hResult = paWasapi->devInfo[i].device->QueryInterface(__uuidof(IMMEndpoint),(void **)&endpoint);
-                if (SUCCEEDED(hResult)){
-                    hResult = endpoint->GetDataFlow(&paWasapi->devInfo[i].flow);
+                hResult = paWasapi->devInfo[i].device->QueryInterface (__uuidof (IMMEndpoint), (void **) &endpoint);
+
+                if (SUCCEEDED (hResult)) {
+                    hResult = endpoint->GetDataFlow (&paWasapi->devInfo[i].flow);
                     endpoint->Release();
                 }
             }
@@ -586,23 +649,23 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
             {
                 IAudioClient *myClient=0;
 
-                hResult = paWasapi->devInfo[i].device->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&myClient);
-                IF_FAILED_JUMP(hResult, error);
+                hResult = paWasapi->devInfo[i].device->Activate (__uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**) &myClient);
+                IF_FAILED_JUMP (hResult, error);
 
-                hResult = myClient->GetDevicePeriod(
-                    &paWasapi->devInfo[i].DefaultDevicePeriod,
-                    &paWasapi->devInfo[i].MinimumDevicePeriod);
-                IF_FAILED_JUMP(hResult, error);
+                hResult = myClient->GetDevicePeriod (
+                              &paWasapi->devInfo[i].DefaultDevicePeriod,
+                              &paWasapi->devInfo[i].MinimumDevicePeriod);
+                IF_FAILED_JUMP (hResult, error);
 
-                hResult = myClient->GetMixFormat(&paWasapi->devInfo[i].MixFormat);
+                hResult = myClient->GetMixFormat (&paWasapi->devInfo[i].MixFormat);
 
-				if (hResult != S_OK){
-					/*davidv: this happened with my hardware, previously for that same device in DirectSound:
-					  Digital Output (Realtek AC'97 Audio)'s GUID: {0x38f2cf50,0x7b4c,0x4740,0x86,0xeb,0xd4,0x38,0x66,0xd8,0xc8, 0x9f} 
-					  so something must be _really_ wrong with this device, TODO handle this better. We kind of need GetMixFormat*/
-					logAUDCLNT_E(hResult);
-					goto error;
-				}
+                if (hResult != S_OK) {
+                    /*davidv: this happened with my hardware, previously for that same device in DirectSound:
+                      Digital Output (Realtek AC'97 Audio)'s GUID: {0x38f2cf50,0x7b4c,0x4740,0x86,0xeb,0xd4,0x38,0x66,0xd8,0xc8, 0x9f}
+                      so something must be _really_ wrong with this device, TODO handle this better. We kind of need GetMixFormat*/
+                    logAUDCLNT_E (hResult);
+                    goto error;
+                }
 
                 myClient->Release();
             }
@@ -611,31 +674,31 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
             deviceInfo->maxInputChannels  = 0;  //for now
             deviceInfo->maxOutputChannels = 0;  //for now
 
-            switch(paWasapi->devInfo[i].flow){
+            switch (paWasapi->devInfo[i].flow) {
                 case eRender:
                     //hum not exaclty maximum, more like "default"
                     deviceInfo->maxOutputChannels = paWasapi->devInfo[i].MixFormat->nChannels;
 
-                    deviceInfo->defaultHighOutputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod);
-                    deviceInfo->defaultLowOutputLatency  = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod);
-                break;
+                    deviceInfo->defaultHighOutputLatency = nano100ToSeconds (paWasapi->devInfo[i].DefaultDevicePeriod);
+                    deviceInfo->defaultLowOutputLatency  = nano100ToSeconds (paWasapi->devInfo[i].MinimumDevicePeriod);
+                    break;
                 case eCapture:
                     //hum not exaclty maximum, more like "default"
                     deviceInfo->maxInputChannels  = paWasapi->devInfo[i].MixFormat->nChannels;
 
-                    deviceInfo->defaultHighInputLatency = nano100ToSeconds(paWasapi->devInfo[i].DefaultDevicePeriod);
-                    deviceInfo->defaultLowInputLatency  = nano100ToSeconds(paWasapi->devInfo[i].MinimumDevicePeriod);
-                break;
+                    deviceInfo->defaultHighInputLatency = nano100ToSeconds (paWasapi->devInfo[i].DefaultDevicePeriod);
+                    deviceInfo->defaultLowInputLatency  = nano100ToSeconds (paWasapi->devInfo[i].MinimumDevicePeriod);
+                    break;
                 default:
-                    PRINT(("WASAPI device:%d bad Data FLow! \n",i));
+                    PRINT ( ("WASAPI device:%d bad Data FLow! \n",i));
                     goto error;
-                break;
+                    break;
             }
 
-            deviceInfo->defaultSampleRate = (double)paWasapi->devInfo[i].MixFormat->nSamplesPerSec;
+            deviceInfo->defaultSampleRate = (double) paWasapi->devInfo[i].MixFormat->nSamplesPerSec;
 
             (*hostApi)->deviceInfos[i] = deviceInfo;
-            ++(*hostApi)->info.deviceCount;
+            ++ (*hostApi)->info.deviceCount;
         }
     }
 
@@ -645,16 +708,16 @@ PaError PaWinWasapi_Initialize( PaUtilHostApiRepresentation **hostApi, PaHostApi
     (*hostApi)->OpenStream = OpenStream;
     (*hostApi)->IsFormatSupported = IsFormatSupported;
 
-    PaUtil_InitializeStreamInterface( &paWasapi->callbackStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface (&paWasapi->callbackStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, GetStreamCpuLoad,
                                       PaUtil_DummyRead, PaUtil_DummyWrite,
-                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable );
+                                      PaUtil_DummyGetReadAvailable, PaUtil_DummyGetWriteAvailable);
 
-    PaUtil_InitializeStreamInterface( &paWasapi->blockingStreamInterface, CloseStream, StartStream,
+    PaUtil_InitializeStreamInterface (&paWasapi->blockingStreamInterface, CloseStream, StartStream,
                                       StopStream, AbortStream, IsStreamStopped, IsStreamActive,
                                       GetStreamTime, PaUtil_DummyGetCpuLoad,
-                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable );
+                                      ReadStream, WriteStream, GetStreamReadAvailable, GetStreamWriteAvailable);
 
     return result;
 
@@ -666,92 +729,99 @@ error:
     if (paWasapi->enumerator)
         paWasapi->enumerator->Release();
 
-    if( paWasapi )
-    {
-        if( paWasapi->allocations )
-        {
-            PaUtil_FreeAllAllocations( paWasapi->allocations );
-            PaUtil_DestroyAllocationGroup( paWasapi->allocations );
+    if (paWasapi) {
+        if (paWasapi->allocations) {
+            PaUtil_FreeAllAllocations (paWasapi->allocations);
+            PaUtil_DestroyAllocationGroup (paWasapi->allocations);
         }
 
-        PaUtil_FreeMemory( paWasapi );
+        PaUtil_FreeMemory (paWasapi);
     }
+
     return result;
 }
 
 
-static void Terminate( struct PaUtilHostApiRepresentation *hostApi )
+static void Terminate (struct PaUtilHostApiRepresentation *hostApi)
 {
-    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
+    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
 
     paWasapi->enumerator->Release();
 
-    for (UINT i=0;i<paWasapi->deviceCount;++i){
+    for (UINT i=0; i<paWasapi->deviceCount; ++i) {
         PaWinWasapiDeviceInfo *info = &paWasapi->devInfo[i];
 
         if (info->device)
             info->device->Release();
 
         if (info->MixFormat)
-            CoTaskMemFree(info->MixFormat);
+            CoTaskMemFree (info->MixFormat);
     }
+
     delete [] paWasapi->devInfo;
 
     CoUninitialize();
 
-    if( paWasapi->allocations ){
-        PaUtil_FreeAllAllocations( paWasapi->allocations );
-        PaUtil_DestroyAllocationGroup( paWasapi->allocations );
+    if (paWasapi->allocations) {
+        PaUtil_FreeAllAllocations (paWasapi->allocations);
+        PaUtil_DestroyAllocationGroup (paWasapi->allocations);
     }
 
-    PaUtil_FreeMemory( paWasapi );
+    PaUtil_FreeMemory (paWasapi);
 }
 
 static void
-LogWAVEFORMATEXTENSIBLE(const WAVEFORMATEXTENSIBLE *in){
-
-    const WAVEFORMATEX *old = (WAVEFORMATEX *)in;
-
-	switch (old->wFormatTag){
-		case WAVE_FORMAT_EXTENSIBLE:{
-
-			PRINT(("wFormatTag=WAVE_FORMAT_EXTENSIBLE\n"));
-
-			if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT){
-				PRINT(("SubFormat=KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\n"));
-			}
-			else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM){
-				PRINT(("SubFormat=KSDATAFORMAT_SUBTYPE_PCM\n"));
-			}
-			else{
-				PRINT(("SubFormat=CUSTOM GUID{%d:%d:%d:%d%d%d%d%d%d%d%d}\n",	
-											in->SubFormat.Data1,
-											in->SubFormat.Data2,
-											in->SubFormat.Data3,
-											(int)in->SubFormat.Data4[0],
-											(int)in->SubFormat.Data4[1],
-											(int)in->SubFormat.Data4[2],
-											(int)in->SubFormat.Data4[3],
-											(int)in->SubFormat.Data4[4],
-											(int)in->SubFormat.Data4[5],
-											(int)in->SubFormat.Data4[6],
-											(int)in->SubFormat.Data4[7]));
-			}
-			PRINT(("Samples.wValidBitsPerSample=%d\n",  in->Samples.wValidBitsPerSample));
-			PRINT(("dwChannelMask=0x%X\n",in->dwChannelMask));
-		}break;
-		
-		case WAVE_FORMAT_PCM:        PRINT(("wFormatTag=WAVE_FORMAT_PCM\n")); break;
-		case WAVE_FORMAT_IEEE_FLOAT: PRINT(("wFormatTag=WAVE_FORMAT_IEEE_FLOAT\n")); break;
-		default : PRINT(("wFormatTag=UNKNOWN(%d)\n",old->wFormatTag)); break;
-	}
-
-	PRINT(("nChannels      =%d\n",old->nChannels)); 
-	PRINT(("nSamplesPerSec =%d\n",old->nSamplesPerSec));  
-	PRINT(("nAvgBytesPerSec=%d\n",old->nAvgBytesPerSec));  
-	PRINT(("nBlockAlign    =%d\n",old->nBlockAlign));  
-	PRINT(("wBitsPerSample =%d\n",old->wBitsPerSample));  
-	PRINT(("cbSize         =%d\n",old->cbSize));  
+LogWAVEFORMATEXTENSIBLE (const WAVEFORMATEXTENSIBLE *in)
+{
+
+    const WAVEFORMATEX *old = (WAVEFORMATEX *) in;
+
+    switch (old->wFormatTag) {
+        case WAVE_FORMAT_EXTENSIBLE: {
+
+            PRINT ( ("wFormatTag=WAVE_FORMAT_EXTENSIBLE\n"));
+
+            if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT) {
+                PRINT ( ("SubFormat=KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\n"));
+            } else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM) {
+                PRINT ( ("SubFormat=KSDATAFORMAT_SUBTYPE_PCM\n"));
+            } else {
+                PRINT ( ("SubFormat=CUSTOM GUID{%d:%d:%d:%d%d%d%d%d%d%d%d}\n",
+                         in->SubFormat.Data1,
+                         in->SubFormat.Data2,
+                         in->SubFormat.Data3,
+                         (int) in->SubFormat.Data4[0],
+                         (int) in->SubFormat.Data4[1],
+                         (int) in->SubFormat.Data4[2],
+                         (int) in->SubFormat.Data4[3],
+                         (int) in->SubFormat.Data4[4],
+                         (int) in->SubFormat.Data4[5],
+                         (int) in->SubFormat.Data4[6],
+                         (int) in->SubFormat.Data4[7]));
+            }
+
+            PRINT ( ("Samples.wValidBitsPerSample=%d\n",  in->Samples.wValidBitsPerSample));
+            PRINT ( ("dwChannelMask=0x%X\n",in->dwChannelMask));
+        }
+        break;
+
+        case WAVE_FORMAT_PCM:
+            PRINT ( ("wFormatTag=WAVE_FORMAT_PCM\n"));
+            break;
+        case WAVE_FORMAT_IEEE_FLOAT:
+            PRINT ( ("wFormatTag=WAVE_FORMAT_IEEE_FLOAT\n"));
+            break;
+        default :
+            PRINT ( ("wFormatTag=UNKNOWN(%d)\n",old->wFormatTag));
+            break;
+    }
+
+    PRINT ( ("nChannels      =%d\n",old->nChannels));
+    PRINT ( ("nSamplesPerSec =%d\n",old->nSamplesPerSec));
+    PRINT ( ("nAvgBytesPerSec=%d\n",old->nAvgBytesPerSec));
+    PRINT ( ("nBlockAlign    =%d\n",old->nBlockAlign));
+    PRINT ( ("wBitsPerSample =%d\n",old->wBitsPerSample));
+    PRINT ( ("cbSize         =%d\n",old->cbSize));
 }
 
 
@@ -760,53 +830,70 @@ LogWAVEFORMATEXTENSIBLE(const WAVEFORMATEXTENSIBLE *in){
  WAVEFORMATXXX is always interleaved
  */
 static PaSampleFormat
-waveformatToPaFormat(const WAVEFORMATEXTENSIBLE *in){
+waveformatToPaFormat (const WAVEFORMATEXTENSIBLE *in)
+{
 
-    const WAVEFORMATEX *old = (WAVEFORMATEX*)in;
+    const WAVEFORMATEX *old = (WAVEFORMATEX*) in;
 
-    switch (old->wFormatTag){
+    switch (old->wFormatTag) {
 
-        case WAVE_FORMAT_EXTENSIBLE:
-        {
-            if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT){
+        case WAVE_FORMAT_EXTENSIBLE: {
+            if (in->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT) {
                 if (in->Samples.wValidBitsPerSample == 32)
                     return paFloat32;
                 else
                     return paCustomFormat;
-            }
-            else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM){
-                switch (old->wBitsPerSample){
-                    case 32: return paInt32; break;
-                    case 24: return paInt24;break;
-                    case  8: return paUInt8;break;
-                    case 16: return paInt16;break;
-                    default: return paCustomFormat;break;
+            } else if (in->SubFormat == KSDATAFORMAT_SUBTYPE_PCM) {
+                switch (old->wBitsPerSample) {
+                    case 32:
+                        return paInt32;
+                        break;
+                    case 24:
+                        return paInt24;
+                        break;
+                    case  8:
+                        return paUInt8;
+                        break;
+                    case 16:
+                        return paInt16;
+                        break;
+                    default:
+                        return paCustomFormat;
+                        break;
                 }
-            }
-            else
+            } else
                 return paCustomFormat;
         }
         break;
 
         case WAVE_FORMAT_IEEE_FLOAT:
             return paFloat32;
-        break;
-
-        case WAVE_FORMAT_PCM:
-        {
-            switch (old->wBitsPerSample){
-                case 32: return paInt32; break;
-                case 24: return paInt24;break;
-                case  8: return paUInt8;break;
-                case 16: return paInt16;break;
-                default: return paCustomFormat;break;
+            break;
+
+        case WAVE_FORMAT_PCM: {
+            switch (old->wBitsPerSample) {
+                case 32:
+                    return paInt32;
+                    break;
+                case 24:
+                    return paInt24;
+                    break;
+                case  8:
+                    return paUInt8;
+                    break;
+                case 16:
+                    return paInt16;
+                    break;
+                default:
+                    return paCustomFormat;
+                    break;
             }
         }
         break;
 
         default:
             return paCustomFormat;
-        break;
+            break;
     }
 
     return paCustomFormat;
@@ -815,56 +902,80 @@ waveformatToPaFormat(const WAVEFORMATEXTENSIBLE *in){
 
 
 static PaError
-waveformatFromParams(WAVEFORMATEXTENSIBLE*wavex,
-                          const PaStreamParameters * params,
-                          double sampleRate){
+waveformatFromParams (WAVEFORMATEXTENSIBLE*wavex,
+                      const PaStreamParameters * params,
+                      double sampleRate)
+{
 
     size_t bytesPerSample = 0;
-    switch( params->sampleFormat & ~paNonInterleaved ){
+
+    switch (params->sampleFormat & ~paNonInterleaved) {
         case paFloat32:
-        case paInt32: bytesPerSample=4;break;
-        case paInt16: bytesPerSample=2;break;
-        case paInt24: bytesPerSample=3;break;
+        case paInt32:
+            bytesPerSample=4;
+            break;
+        case paInt16:
+            bytesPerSample=2;
+            break;
+        case paInt24:
+            bytesPerSample=3;
+            break;
         case paInt8:
-        case paUInt8: bytesPerSample=1;break;
+        case paUInt8:
+            bytesPerSample=1;
+            break;
         case paCustomFormat:
-        default: return paSampleFormatNotSupported;break;
+        default:
+            return paSampleFormatNotSupported;
+            break;
     }
 
-    memset(wavex,0,sizeof(WAVEFORMATEXTENSIBLE));
+    memset (wavex,0,sizeof (WAVEFORMATEXTENSIBLE));
 
-    WAVEFORMATEX *old    = (WAVEFORMATEX *)wavex;
-    old->nChannels       = (WORD)params->channelCount;
-    old->nSamplesPerSec  = (DWORD)sampleRate;
-    old->wBitsPerSample  = (WORD)(bytesPerSample*8);
-    old->nAvgBytesPerSec = (DWORD)(old->nSamplesPerSec * old->nChannels * bytesPerSample);
-    old->nBlockAlign     = (WORD)(old->nChannels * bytesPerSample);
+    WAVEFORMATEX *old    = (WAVEFORMATEX *) wavex;
+    old->nChannels       = (WORD) params->channelCount;
+    old->nSamplesPerSec  = (DWORD) sampleRate;
+    old->wBitsPerSample  = (WORD) (bytesPerSample*8);
+    old->nAvgBytesPerSec = (DWORD) (old->nSamplesPerSec * old->nChannels * bytesPerSample);
+    old->nBlockAlign     = (WORD) (old->nChannels * bytesPerSample);
 
     //WAVEFORMATEX
-    if (params->channelCount <=2 && (bytesPerSample == 2 || bytesPerSample == 1)){
+    if (params->channelCount <=2 && (bytesPerSample == 2 || bytesPerSample == 1)) {
         old->cbSize          = 0;
         old->wFormatTag      = WAVE_FORMAT_PCM;
     }
     //WAVEFORMATEXTENSIBLE
-    else{
+    else {
         old->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
 
         old->cbSize = sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX);
 
-        if ((params->sampleFormat & ~paNonInterleaved) == paFloat32)
+        if ( (params->sampleFormat & ~paNonInterleaved) == paFloat32)
             wavex->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
         else
             wavex->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
 
         wavex->Samples.wValidBitsPerSample = old->wBitsPerSample; //no extra padding!
 
-        switch(params->channelCount){
-            case 1:  wavex->dwChannelMask = SPEAKER_FRONT_CENTER; break;
-            case 2:  wavex->dwChannelMask = 0x1 | 0x2; break;
-            case 4:  wavex->dwChannelMask = 0x1 | 0x2 | 0x10 | 0x20; break;
-            case 6:  wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20; break;
-            case 8:  wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80; break;
-            default: wavex->dwChannelMask = 0; break;
+        switch (params->channelCount) {
+            case 1:
+                wavex->dwChannelMask = SPEAKER_FRONT_CENTER;
+                break;
+            case 2:
+                wavex->dwChannelMask = 0x1 | 0x2;
+                break;
+            case 4:
+                wavex->dwChannelMask = 0x1 | 0x2 | 0x10 | 0x20;
+                break;
+            case 6:
+                wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20;
+                break;
+            case 8:
+                wavex->dwChannelMask = 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80;
+                break;
+            default:
+                wavex->dwChannelMask = 0;
+                break;
         }
     }
 
@@ -883,51 +994,47 @@ waveformatFromParams(WAVEFORMATEXTENSIBLE*wavex,
 #define paInt16          ((PaSampleFormat) 0x00000008) 
 */
 //lifted from pa_wdmks
-static void wasapiFillWFEXT( WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount)
+static void wasapiFillWFEXT (WAVEFORMATEXTENSIBLE* pwfext, PaSampleFormat sampleFormat, double sampleRate, int channelCount)
 {
-    PA_DEBUG(( "sampleFormat = %lx\n" , sampleFormat ));
-    PA_DEBUG(( "sampleRate = %f\n" , sampleRate ));
-    PA_DEBUG(( "chanelCount = %d\n", channelCount ));
+    PA_DEBUG ( ("sampleFormat = %lx\n" , sampleFormat));
+    PA_DEBUG ( ("sampleRate = %f\n" , sampleRate));
+    PA_DEBUG ( ("chanelCount = %d\n", channelCount));
 
     pwfext->Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE;
     pwfext->Format.nChannels = channelCount;
-    pwfext->Format.nSamplesPerSec = (int)sampleRate;
-    if(channelCount == 1)
+    pwfext->Format.nSamplesPerSec = (int) sampleRate;
+
+    if (channelCount == 1)
         pwfext->dwChannelMask = KSAUDIO_SPEAKER_DIRECTOUT;
     else
         pwfext->dwChannelMask = KSAUDIO_SPEAKER_STEREO;
-    if(sampleFormat == paFloat32)
-    {
+
+    if (sampleFormat == paFloat32) {
         pwfext->Format.nBlockAlign = channelCount * 4;
         pwfext->Format.wBitsPerSample = 32;
-        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 32;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
-    }
-    else if(sampleFormat == paInt32)
-    {
+    } else if (sampleFormat == paInt32) {
         pwfext->Format.nBlockAlign = channelCount * 4;
         pwfext->Format.wBitsPerSample = 32;
-        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 32;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
-    }
-    else if(sampleFormat == paInt24)
-    {
+    } else if (sampleFormat == paInt24) {
         pwfext->Format.nBlockAlign = channelCount * 3;
         pwfext->Format.wBitsPerSample = 24;
-        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 24;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
-    }
-    else if(sampleFormat == paInt16)
-    {
+    } else if (sampleFormat == paInt16) {
         pwfext->Format.nBlockAlign = channelCount * 2;
         pwfext->Format.wBitsPerSample = 16;
-        pwfext->Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX);
+        pwfext->Format.cbSize = sizeof (WAVEFORMATEXTENSIBLE)-sizeof (WAVEFORMATEX);
         pwfext->Samples.wValidBitsPerSample = 16;
         pwfext->SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
     }
+
     pwfext->Format.nAvgBytesPerSec = pwfext->Format.nSamplesPerSec * pwfext->Format.nBlockAlign;
 }
 
@@ -943,198 +1050,195 @@ const int BestToWorst[FORMATTESTS]={paFloat32,paInt24,paInt16};
 
 
 static PaError
-GetClosestFormat(IAudioClient * myClient, double sampleRate,const  PaStreamParameters * params, 
-				 AUDCLNT_SHAREMODE *shareMode, WAVEFORMATEXTENSIBLE *outWavex)
+GetClosestFormat (IAudioClient * myClient, double sampleRate,const  PaStreamParameters * params,
+                  AUDCLNT_SHAREMODE *shareMode, WAVEFORMATEXTENSIBLE *outWavex)
 {
-	//TODO we should try exclusive first and shared after
-	*shareMode = PORTAUDIO_SHAREMODE;
-
-	PaError answer = paInvalidSampleRate;
-
-    waveformatFromParams(outWavex,params,sampleRate);
-	WAVEFORMATEX *sharedClosestMatch=0;
-	HRESULT hResult=!S_OK;
-
-	if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-		hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE,&outWavex->Format,NULL);
-	else
-		hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED,   &outWavex->Format,&sharedClosestMatch);
-
-	if (hResult == S_OK)
-		answer = paFormatIsSupported;
-    else if (sharedClosestMatch){
-        WAVEFORMATEXTENSIBLE* ext = (WAVEFORMATEXTENSIBLE*)sharedClosestMatch;
-		
-		int closestMatchSR = (int)sharedClosestMatch->nSamplesPerSec;
-
-		if (sharedClosestMatch->wFormatTag == WAVE_FORMAT_EXTENSIBLE)
-			memcpy(outWavex,sharedClosestMatch,sizeof(WAVEFORMATEXTENSIBLE));
-		else
-			memcpy(outWavex,sharedClosestMatch,sizeof(WAVEFORMATEX));
-
-        CoTaskMemFree(sharedClosestMatch);
-
-		if ((int)sampleRate == closestMatchSR)
-		answer = paFormatIsSupported;
-		else
-			answer = paInvalidSampleRate;
-	
-	}else {
-
-		//it doesnt suggest anything?? ok lets show it the MENU!
-
-		//ok fun time as with pa_win_mme, we know only a refusal of the user-requested
-		//sampleRate+num Channel is disastrous, as the portaudio buffer processor converts between anything
-		//so lets only use the number 
-		for (int i=0;i<FORMATTESTS;++i){
-			WAVEFORMATEXTENSIBLE ext;
-			wasapiFillWFEXT(&ext,BestToWorst[i],sampleRate,params->channelCount);		
-			if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE,&ext.Format,NULL);
-			else
-				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED,   &ext.Format,&sharedClosestMatch);
-
-			if (hResult == S_OK){
-				memcpy(outWavex,&ext,sizeof(WAVEFORMATEXTENSIBLE));
-				answer = paFormatIsSupported;
-				break;
-			}
-		}
-
-		if (answer!=paFormatIsSupported) {
-			//try MIX format?
-			//why did it HAVE to come to this ....
-			WAVEFORMATEX pcm16WaveFormat;
-			memset(&pcm16WaveFormat,0,sizeof(WAVEFORMATEX));
-			pcm16WaveFormat.wFormatTag = WAVE_FORMAT_PCM; 
-			pcm16WaveFormat.nChannels = 2; 
-			pcm16WaveFormat.nSamplesPerSec = (DWORD)sampleRate; 
-			pcm16WaveFormat.nBlockAlign = 4; 
-			pcm16WaveFormat.nAvgBytesPerSec = pcm16WaveFormat.nSamplesPerSec*pcm16WaveFormat.nBlockAlign; 
-			pcm16WaveFormat.wBitsPerSample = 16; 
-			pcm16WaveFormat.cbSize = 0;
-
-			if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_EXCLUSIVE,&pcm16WaveFormat,NULL);
-			else
-				hResult = myClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED,   &pcm16WaveFormat,&sharedClosestMatch);
-
-			if (hResult == S_OK){
-				memcpy(outWavex,&pcm16WaveFormat,sizeof(WAVEFORMATEX));
-				answer = paFormatIsSupported;
-			}
-		}
-
-		logAUDCLNT_E(hResult);
-	}
-
-	return answer;
+    //TODO we should try exclusive first and shared after
+    *shareMode = PORTAUDIO_SHAREMODE;
+
+    PaError answer = paInvalidSampleRate;
+
+    waveformatFromParams (outWavex,params,sampleRate);
+    WAVEFORMATEX *sharedClosestMatch=0;
+    HRESULT hResult=!S_OK;
+
+    if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+        hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_EXCLUSIVE,&outWavex->Format,NULL);
+    else
+        hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_SHARED,   &outWavex->Format,&sharedClosestMatch);
+
+    if (hResult == S_OK)
+        answer = paFormatIsSupported;
+    else if (sharedClosestMatch) {
+        WAVEFORMATEXTENSIBLE* ext = (WAVEFORMATEXTENSIBLE*) sharedClosestMatch;
+
+        int closestMatchSR = (int) sharedClosestMatch->nSamplesPerSec;
+
+        if (sharedClosestMatch->wFormatTag == WAVE_FORMAT_EXTENSIBLE)
+            memcpy (outWavex,sharedClosestMatch,sizeof (WAVEFORMATEXTENSIBLE));
+        else
+            memcpy (outWavex,sharedClosestMatch,sizeof (WAVEFORMATEX));
+
+        CoTaskMemFree (sharedClosestMatch);
+
+        if ( (int) sampleRate == closestMatchSR)
+            answer = paFormatIsSupported;
+        else
+            answer = paInvalidSampleRate;
+
+    } else {
+
+        //it doesnt suggest anything?? ok lets show it the MENU!
+
+        //ok fun time as with pa_win_mme, we know only a refusal of the user-requested
+        //sampleRate+num Channel is disastrous, as the portaudio buffer processor converts between anything
+        //so lets only use the number
+        for (int i=0; i<FORMATTESTS; ++i) {
+            WAVEFORMATEXTENSIBLE ext;
+            wasapiFillWFEXT (&ext,BestToWorst[i],sampleRate,params->channelCount);
+
+            if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_EXCLUSIVE,&ext.Format,NULL);
+            else
+                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_SHARED,   &ext.Format,&sharedClosestMatch);
+
+            if (hResult == S_OK) {
+                memcpy (outWavex,&ext,sizeof (WAVEFORMATEXTENSIBLE));
+                answer = paFormatIsSupported;
+                break;
+            }
+        }
+
+        if (answer!=paFormatIsSupported) {
+            //try MIX format?
+            //why did it HAVE to come to this ....
+            WAVEFORMATEX pcm16WaveFormat;
+            memset (&pcm16WaveFormat,0,sizeof (WAVEFORMATEX));
+            pcm16WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
+            pcm16WaveFormat.nChannels = 2;
+            pcm16WaveFormat.nSamplesPerSec = (DWORD) sampleRate;
+            pcm16WaveFormat.nBlockAlign = 4;
+            pcm16WaveFormat.nAvgBytesPerSec = pcm16WaveFormat.nSamplesPerSec*pcm16WaveFormat.nBlockAlign;
+            pcm16WaveFormat.wBitsPerSample = 16;
+            pcm16WaveFormat.cbSize = 0;
+
+            if (*shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE)
+                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_EXCLUSIVE,&pcm16WaveFormat,NULL);
+            else
+                hResult = myClient->IsFormatSupported (AUDCLNT_SHAREMODE_SHARED,   &pcm16WaveFormat,&sharedClosestMatch);
+
+            if (hResult == S_OK) {
+                memcpy (outWavex,&pcm16WaveFormat,sizeof (WAVEFORMATEX));
+                answer = paFormatIsSupported;
+            }
+        }
+
+        logAUDCLNT_E (hResult);
+    }
+
+    return answer;
 }
 
 
-static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
+static PaError IsFormatSupported (struct PaUtilHostApiRepresentation *hostApi,
                                   const  PaStreamParameters *inputParameters,
                                   const  PaStreamParameters *outputParameters,
-                                  double sampleRate )
+                                  double sampleRate)
 {
 
     int inputChannelCount, outputChannelCount;
     PaSampleFormat inputSampleFormat, outputSampleFormat;
 
-    if( inputParameters )
-    {
+    if (inputParameters) {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-        if( inputSampleFormat & paCustomFormat )
+        if (inputSampleFormat & paCustomFormat)
             return paSampleFormatNotSupported;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         /* check that input device can support inputChannelCount */
-        if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels )
+        if (inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels)
             return paInvalidChannelCount;
 
         /* validate inputStreamInfo */
-        if( inputParameters->hostApiSpecificStreamInfo )
+        if (inputParameters->hostApiSpecificStreamInfo)
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
-        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
+        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
+
 
+        IAudioClient *myClient=0;
+        HRESULT hResult = paWasapi->devInfo[inputParameters->device].device->Activate (
+                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**) &myClient);
 
-		IAudioClient *myClient=0;
-		HRESULT hResult = paWasapi->devInfo[inputParameters->device].device->Activate(
-			__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&myClient);
-		if (hResult != S_OK){
-			logAUDCLNT_E(hResult);
-			return paInvalidDevice;
-		}
+        if (hResult != S_OK) {
+            logAUDCLNT_E (hResult);
+            return paInvalidDevice;
+        }
 
         WAVEFORMATEXTENSIBLE wavex;
-		AUDCLNT_SHAREMODE shareMode;
-		PaError answer = GetClosestFormat(myClient,sampleRate,inputParameters,&shareMode,&wavex);
-		myClient->Release();
+        AUDCLNT_SHAREMODE shareMode;
+        PaError answer = GetClosestFormat (myClient,sampleRate,inputParameters,&shareMode,&wavex);
+        myClient->Release();
 
-		if (answer !=paFormatIsSupported)
-			return answer;
-    }
-    else
-    {
+        if (answer !=paFormatIsSupported)
+            return answer;
+    } else {
         inputChannelCount = 0;
     }
 
-    if( outputParameters )
-    {
+    if (outputParameters) {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
 
         /* all standard sample formats are supported by the buffer adapter,
             this implementation doesn't support any custom sample formats */
-        if( outputSampleFormat & paCustomFormat )
+        if (outputSampleFormat & paCustomFormat)
             return paSampleFormatNotSupported;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         /* check that output device can support outputChannelCount */
-        if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels )
+        if (outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels)
             return paInvalidChannelCount;
 
         /* validate outputStreamInfo */
-        if( outputParameters->hostApiSpecificStreamInfo )
+        if (outputParameters->hostApiSpecificStreamInfo)
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
-        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
+        PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
+
+        IAudioClient *myClient=0;
+        HRESULT hResult = paWasapi->devInfo[outputParameters->device].device->Activate (
+                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**) &myClient);
 
-		IAudioClient *myClient=0;
-		HRESULT hResult = paWasapi->devInfo[outputParameters->device].device->Activate(
-			__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, (void**)&myClient);
-		if (hResult != S_OK){
-			logAUDCLNT_E(hResult);
-			return paInvalidDevice;
-		}
+        if (hResult != S_OK) {
+            logAUDCLNT_E (hResult);
+            return paInvalidDevice;
+        }
 
         WAVEFORMATEXTENSIBLE wavex;
-		AUDCLNT_SHAREMODE shareMode;
-		PaError answer = GetClosestFormat(myClient,sampleRate,outputParameters,&shareMode,&wavex);
-		myClient->Release();
+        AUDCLNT_SHAREMODE shareMode;
+        PaError answer = GetClosestFormat (myClient,sampleRate,outputParameters,&shareMode,&wavex);
+        myClient->Release();
 
-		if (answer !=paFormatIsSupported)
-			return answer;		
-    }
-    else
-    {
+        if (answer !=paFormatIsSupported)
+            return answer;
+    } else {
         outputChannelCount = 0;
     }
 
@@ -1146,7 +1250,7 @@ static PaError IsFormatSupported( struct PaUtilHostApiRepresentation *hostApi,
 
 /* see pa_hostapi.h for a list of validity guarantees made about OpenStream parameters */
 
-static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
+static PaError OpenStream (struct PaUtilHostApiRepresentation *hostApi,
                            PaStream** s,
                            const PaStreamParameters *inputParameters,
                            const PaStreamParameters *outputParameters,
@@ -1154,200 +1258,199 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
                            unsigned long framesPerBuffer,
                            PaStreamFlags streamFlags,
                            PaStreamCallback *streamCallback,
-                           void *userData )
+                           void *userData)
 {
     PaError result = paNoError;
-    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*)hostApi;
+    PaWinWasapiHostApiRepresentation *paWasapi = (PaWinWasapiHostApiRepresentation*) hostApi;
     PaWinWasapiStream *stream = 0;
     int inputChannelCount, outputChannelCount;
     PaSampleFormat inputSampleFormat, outputSampleFormat;
     PaSampleFormat hostInputSampleFormat, hostOutputSampleFormat;
 
 
-    stream = (PaWinWasapiStream*)PaUtil_AllocateMemory( sizeof(PaWinWasapiStream) );
-    if( !stream ){
+    stream = (PaWinWasapiStream*) PaUtil_AllocateMemory (sizeof (PaWinWasapiStream));
+
+    if (!stream) {
         result = paInsufficientMemory;
         goto error;
     }
 
-    if( inputParameters )
-    {
+    if (inputParameters) {
         inputChannelCount = inputParameters->channelCount;
         inputSampleFormat = inputParameters->sampleFormat;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if( inputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (inputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         /* check that input device can support inputChannelCount */
-        if( inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels )
+        if (inputChannelCount > hostApi->deviceInfos[ inputParameters->device ]->maxInputChannels)
             return paInvalidChannelCount;
 
         /* validate inputStreamInfo */
-        if( inputParameters->hostApiSpecificStreamInfo )
+        if (inputParameters->hostApiSpecificStreamInfo)
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
         PaWinWasapiDeviceInfo &info = paWasapi->devInfo[inputParameters->device];
 
-        HRESULT hResult = info.device->Activate(
-            __uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL,
-            (void**)&stream->in.client);
+        HRESULT hResult = info.device->Activate (
+                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL,
+                              (void**) &stream->in.client);
 
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = info.device->Activate(
-            __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
-            (void**)&stream->inVol);
+        hResult = info.device->Activate (
+                      __uuidof (IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
+                      (void**) &stream->inVol);
 
         if (hResult != S_OK)
             return paInvalidDevice;
-	
-		AUDCLNT_SHAREMODE shareMode;
-		PaError answer = GetClosestFormat(stream->in.client,sampleRate,inputParameters,&shareMode,&stream->in.wavex);
-		
-		if (answer !=paFormatIsSupported)
-			return answer;
+
+        AUDCLNT_SHAREMODE shareMode;
+        PaError answer = GetClosestFormat (stream->in.client,sampleRate,inputParameters,&shareMode,&stream->in.wavex);
+
+        if (answer !=paFormatIsSupported)
+            return answer;
 
         //stream->out.period = info.DefaultDevicePeriod;
         stream->in.period = info.MinimumDevicePeriod;
 
-        hResult = stream->in.client->Initialize(
-            shareMode,
-            0,  //no flags
-            stream->in.period,
-            0,//stream->out.period,
-            (WAVEFORMATEX*)&stream->in.wavex,
-            &stream->session
-            );
-
-        if (hResult != S_OK){
-            logAUDCLNT_E(hResult);
+        hResult = stream->in.client->Initialize (
+                      shareMode,
+                      0,  //no flags
+                      stream->in.period,
+                      0,//stream->out.period,
+                      (WAVEFORMATEX*) &stream->in.wavex,
+                      &stream->session
+                  );
+
+        if (hResult != S_OK) {
+            logAUDCLNT_E (hResult);
             return paInvalidDevice;
         }
 
-        hResult = stream->in.client->GetBufferSize(&stream->in.bufferSize);
+        hResult = stream->in.client->GetBufferSize (&stream->in.bufferSize);
+
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = stream->in.client->GetStreamLatency(&stream->in.latency);
+        hResult = stream->in.client->GetStreamLatency (&stream->in.latency);
+
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        double periodsPerSecond = 1.0/nano100ToSeconds(stream->in.period);
-        double samplesPerPeriod = (double)(stream->in.wavex.Format.nSamplesPerSec)/periodsPerSecond;
+        double periodsPerSecond = 1.0/nano100ToSeconds (stream->in.period);
+        double samplesPerPeriod = (double) (stream->in.wavex.Format.nSamplesPerSec) /periodsPerSecond;
 
         //this is the number of samples that are required at each period
-        stream->in.framesPerHostCallback = (unsigned long)samplesPerPeriod;//unrelated to channels
+        stream->in.framesPerHostCallback = (unsigned long) samplesPerPeriod;//unrelated to channels
 
         /* IMPLEMENT ME - establish which  host formats are available */
         hostInputSampleFormat =
-            PaUtil_SelectClosestAvailableFormat( waveformatToPaFormat(&stream->in.wavex), inputSampleFormat );
-	}
-    else
-    {
+            PaUtil_SelectClosestAvailableFormat (waveformatToPaFormat (&stream->in.wavex), inputSampleFormat);
+    } else {
         inputChannelCount = 0;
         inputSampleFormat = hostInputSampleFormat = paInt16; /* Surpress 'uninitialised var' warnings. */
     }
 
-    if( outputParameters )
-    {
+    if (outputParameters) {
         outputChannelCount = outputParameters->channelCount;
         outputSampleFormat = outputParameters->sampleFormat;
 
         /* unless alternate device specification is supported, reject the use of
             paUseHostApiSpecificDeviceSpecification */
 
-        if( outputParameters->device == paUseHostApiSpecificDeviceSpecification )
+        if (outputParameters->device == paUseHostApiSpecificDeviceSpecification)
             return paInvalidDevice;
 
         /* check that output device can support inputChannelCount */
-        if( outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels )
+        if (outputChannelCount > hostApi->deviceInfos[ outputParameters->device ]->maxOutputChannels)
             return paInvalidChannelCount;
 
         /* validate outputStreamInfo */
-        if( outputParameters->hostApiSpecificStreamInfo )
+        if (outputParameters->hostApiSpecificStreamInfo)
             return paIncompatibleHostApiSpecificStreamInfo; /* this implementation doesn't use custom stream info */
 
 
         PaWinWasapiDeviceInfo &info = paWasapi->devInfo[outputParameters->device];
 
-        HRESULT hResult = info.device->Activate(
-            __uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL,
-            (void**)&stream->out.client);
+        HRESULT hResult = info.device->Activate (
+                              __uuidof (IAudioClient), CLSCTX_INPROC_SERVER, NULL,
+                              (void**) &stream->out.client);
 
         if (hResult != S_OK)
             return paInvalidDevice;
 
-		AUDCLNT_SHAREMODE shareMode;
-		PaError answer = GetClosestFormat(stream->out.client,sampleRate,outputParameters,&shareMode,&stream->out.wavex);
-		
-		if (answer !=paFormatIsSupported)
-			return answer;
-		LogWAVEFORMATEXTENSIBLE(&stream->out.wavex);
+        AUDCLNT_SHAREMODE shareMode;
+        PaError answer = GetClosestFormat (stream->out.client,sampleRate,outputParameters,&shareMode,&stream->out.wavex);
+
+        if (answer !=paFormatIsSupported)
+            return answer;
 
-       // stream->out.period = info.DefaultDevicePeriod;
+        LogWAVEFORMATEXTENSIBLE (&stream->out.wavex);
+
+        // stream->out.period = info.DefaultDevicePeriod;
         stream->out.period = info.MinimumDevicePeriod;
 
-		/*For an exclusive-mode stream that uses event-driven buffering, 
-		the caller must specify nonzero values for hnsPeriodicity and hnsBufferDuration, 
-		and the values of these two parameters must be equal */
-		if (shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE){
-			hResult = stream->out.client->Initialize(
-				shareMode,
-				AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 
-				stream->out.period,
-				stream->out.period,
-				(WAVEFORMATEX*)&stream->out.wavex,
-				&stream->session
-				);
-		}
-		else{
-			hResult = stream->out.client->Initialize(
-				shareMode,
-				AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 
-				0,
-				0,
-				(WAVEFORMATEX*)&stream->out.wavex,
-				&stream->session
-				);
-		}
-	
-
-        if (hResult != S_OK){
-            logAUDCLNT_E(hResult);
+        /*For an exclusive-mode stream that uses event-driven buffering,
+        the caller must specify nonzero values for hnsPeriodicity and hnsBufferDuration,
+        and the values of these two parameters must be equal */
+        if (shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) {
+            hResult = stream->out.client->Initialize (
+                          shareMode,
+                          AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
+                          stream->out.period,
+                          stream->out.period,
+                          (WAVEFORMATEX*) &stream->out.wavex,
+                          &stream->session
+                      );
+        } else {
+            hResult = stream->out.client->Initialize (
+                          shareMode,
+                          AUDCLNT_STREAMFLAGS_EVENTCALLBACK,
+                          0,
+                          0,
+                          (WAVEFORMATEX*) &stream->out.wavex,
+                          &stream->session
+                      );
+        }
+
+
+        if (hResult != S_OK) {
+            logAUDCLNT_E (hResult);
             return paInvalidDevice;
         }
 
-        hResult = info.device->Activate(
-            __uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
-            (void**)&stream->outVol);
+        hResult = info.device->Activate (
+                      __uuidof (IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL,
+                      (void**) &stream->outVol);
 
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = stream->out.client->GetBufferSize(&stream->out.bufferSize);
+        hResult = stream->out.client->GetBufferSize (&stream->out.bufferSize);
+
         if (hResult != S_OK)
             return paInvalidDevice;
 
-        hResult = stream->out.client->GetStreamLatency(&stream->out.latency);
+        hResult = stream->out.client->GetStreamLatency (&stream->out.latency);
+
         if (hResult != S_OK)
             return paInvalidDevice;
-		
-        double periodsPerSecond = 1.0/nano100ToSeconds(stream->out.period);
-        double samplesPerPeriod = (double)(stream->out.wavex.Format.nSamplesPerSec)/periodsPerSecond;
+
+        double periodsPerSecond = 1.0/nano100ToSeconds (stream->out.period);
+        double samplesPerPeriod = (double) (stream->out.wavex.Format.nSamplesPerSec) /periodsPerSecond;
 
         //this is the number of samples that are required at each period
         stream->out.framesPerHostCallback = stream->out.bufferSize; //(unsigned long)samplesPerPeriod;//unrelated to channels
 
         /* IMPLEMENT ME - establish which  host formats are available */
-        hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat( waveformatToPaFormat(&stream->out.wavex), outputSampleFormat );
-    }
-    else
-    {
+        hostOutputSampleFormat = PaUtil_SelectClosestAvailableFormat (waveformatToPaFormat (&stream->out.wavex), outputSampleFormat);
+    } else {
         outputChannelCount = 0;
         outputSampleFormat = hostOutputSampleFormat = paInt16; /* Surpress 'uninitialized var' warnings. */
     }
@@ -1381,56 +1484,54 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
 
 
     /* validate platform specific flags */
-    if( (streamFlags & paPlatformSpecificFlags) != 0 )
+    if ( (streamFlags & paPlatformSpecificFlags) != 0)
         return paInvalidFlag; /* unexpected platform specific flag */
 
 
 
-    if( streamCallback )
-    {
-        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
-                                               &paWasapi->callbackStreamInterface, streamCallback, userData );
-    }
-    else
-    {
-        PaUtil_InitializeStreamRepresentation( &stream->streamRepresentation,
-                                               &paWasapi->blockingStreamInterface, streamCallback, userData );
+    if (streamCallback) {
+        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
+                                               &paWasapi->callbackStreamInterface, streamCallback, userData);
+    } else {
+        PaUtil_InitializeStreamRepresentation (&stream->streamRepresentation,
+                                               &paWasapi->blockingStreamInterface, streamCallback, userData);
     }
 
-    PaUtil_InitializeCpuLoadMeasurer( &stream->cpuLoadMeasurer, sampleRate );
+    PaUtil_InitializeCpuLoadMeasurer (&stream->cpuLoadMeasurer, sampleRate);
 
 
-	if (outputParameters && inputParameters){
+    if (outputParameters && inputParameters) {
 
-		//serious problem #1
-		if (stream->in.period != stream->out.period){
-			PRINT(("OpenStream: period discrepancy\n"));
-			goto error;
-		}
+        //serious problem #1
+        if (stream->in.period != stream->out.period) {
+            PRINT ( ("OpenStream: period discrepancy\n"));
+            goto error;
+        }
 
-		//serious problem #2
-		if (stream->out.framesPerHostCallback != stream->in.framesPerHostCallback){
-			PRINT(("OpenStream: framesPerHostCallback discrepancy\n"));
-			goto error;
-		}
-	}
+        //serious problem #2
+        if (stream->out.framesPerHostCallback != stream->in.framesPerHostCallback) {
+            PRINT ( ("OpenStream: framesPerHostCallback discrepancy\n"));
+            goto error;
+        }
+    }
 
-	unsigned long framesPerHostCallback = (outputParameters)?
-		stream->out.framesPerHostCallback: 
-		stream->in.framesPerHostCallback;
+    unsigned long framesPerHostCallback = (outputParameters) ?
+                                          stream->out.framesPerHostCallback:
+                                          stream->in.framesPerHostCallback;
 
     /* we assume a fixed host buffer size in this example, but the buffer processor
         can also support bounded and unknown host buffer sizes by passing
         paUtilBoundedHostBufferSize or paUtilUnknownHostBufferSize instead of
         paUtilFixedHostBufferSize below. */
 
-    result =  PaUtil_InitializeBufferProcessor( &stream->bufferProcessor,
+    result =  PaUtil_InitializeBufferProcessor (&stream->bufferProcessor,
               inputChannelCount, inputSampleFormat, hostInputSampleFormat,
               outputChannelCount, outputSampleFormat, hostOutputSampleFormat,
               sampleRate, streamFlags, framesPerBuffer,
               framesPerHostCallback, paUtilFixedHostBufferSize,
-              streamCallback, userData );
-    if( result != paNoError )
+              streamCallback, userData);
+
+    if (result != paNoError)
         goto error;
 
 
@@ -1439,24 +1540,25 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         values.
     */
     stream->streamRepresentation.streamInfo.inputLatency =
-            PaUtil_GetBufferProcessorInputLatency(&stream->bufferProcessor)
-			+ ((inputParameters)?nano100ToSeconds(stream->in.latency) :0);
+        PaUtil_GetBufferProcessorInputLatency (&stream->bufferProcessor)
+        + ( (inputParameters) ?nano100ToSeconds (stream->in.latency) :0);
 
     stream->streamRepresentation.streamInfo.outputLatency =
-            PaUtil_GetBufferProcessorOutputLatency(&stream->bufferProcessor)
-			+ ((outputParameters)?nano100ToSeconds(stream->out.latency) :0);
+        PaUtil_GetBufferProcessorOutputLatency (&stream->bufferProcessor)
+        + ( (outputParameters) ?nano100ToSeconds (stream->out.latency) :0);
 
     stream->streamRepresentation.streamInfo.sampleRate = sampleRate;
 
 
-    *s = (PaStream*)stream;
+    *s = (PaStream*) stream;
 
 
     return result;
 
 error:
-    if( stream )
-        PaUtil_FreeMemory( stream );
+
+    if (stream)
+        PaUtil_FreeMemory (stream);
 
     return result;
 }
@@ -1472,60 +1574,62 @@ error:
               if ((punk) != NULL)  \
                 { (punk)->Release(); (punk) = NULL; }
 
-static PaError CloseStream( PaStream* s )
+static PaError CloseStream (PaStream* s)
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /*
         IMPLEMENT ME:
             - additional stream closing + cleanup
     */
 
-    SAFE_RELEASE(stream->out.client);
-    SAFE_RELEASE(stream->in.client);
-    SAFE_RELEASE(stream->cclient);
-    SAFE_RELEASE(stream->rclient);
-	SAFE_RELEASE(stream->inVol);
-	SAFE_RELEASE(stream->outVol);
-    CloseHandle(stream->hThread);
-	CloseHandle(stream->hNotificationEvent);
+    SAFE_RELEASE (stream->out.client);
+    SAFE_RELEASE (stream->in.client);
+    SAFE_RELEASE (stream->cclient);
+    SAFE_RELEASE (stream->rclient);
+    SAFE_RELEASE (stream->inVol);
+    SAFE_RELEASE (stream->outVol);
+    CloseHandle (stream->hThread);
+    CloseHandle (stream->hNotificationEvent);
 
-    PaUtil_TerminateBufferProcessor( &stream->bufferProcessor );
-    PaUtil_TerminateStreamRepresentation( &stream->streamRepresentation );
-    PaUtil_FreeMemory( stream );
+    PaUtil_TerminateBufferProcessor (&stream->bufferProcessor);
+    PaUtil_TerminateStreamRepresentation (&stream->streamRepresentation);
+    PaUtil_FreeMemory (stream);
 
     return result;
 }
 
-DWORD WINAPI ProcThread(void *client);
+DWORD WINAPI ProcThread (void *client);
 
-static PaError StartStream( PaStream *s )
+static PaError StartStream (PaStream *s)
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
-
-    PaUtil_ResetBufferProcessor( &stream->bufferProcessor );
-	
-	HRESULT hResult=S_OK;
-
-	if (stream->out.client){
-		hResult = stream->out.client->GetService(__uuidof(IAudioRenderClient),(void**)&stream->rclient);
-		logAUDCLNT_E(hResult);
-		if (hResult!=S_OK)
-			return paUnanticipatedHostError;
-	}
-	
-	if (stream->in.client){
-	 hResult = stream->in.client->GetService(__uuidof(IAudioCaptureClient),(void**)&stream->cclient);
-		logAUDCLNT_E(hResult);
-		if (hResult!=S_OK)
-			return paUnanticipatedHostError;
-	}
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
+
+    PaUtil_ResetBufferProcessor (&stream->bufferProcessor);
+
+    HRESULT hResult=S_OK;
+
+    if (stream->out.client) {
+        hResult = stream->out.client->GetService (__uuidof (IAudioRenderClient), (void**) &stream->rclient);
+        logAUDCLNT_E (hResult);
+
+        if (hResult!=S_OK)
+            return paUnanticipatedHostError;
+    }
+
+    if (stream->in.client) {
+        hResult = stream->in.client->GetService (__uuidof (IAudioCaptureClient), (void**) &stream->cclient);
+        logAUDCLNT_E (hResult);
+
+        if (hResult!=S_OK)
+            return paUnanticipatedHostError;
+    }
 
     // Create a thread for this client.
     stream->hThread = CREATE_THREAD;
-        
+
     if (stream->hThread == NULL)
         return paUnanticipatedHostError;
 
@@ -1533,16 +1637,17 @@ static PaError StartStream( PaStream *s )
 }
 
 
-static PaError StopStream( PaStream *s )
+static PaError StopStream (PaStream *s)
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     stream->closeRequest = true;
+
     //todo something MUCH better than this
-    while(stream->closeRequest)
-        Sleep(100);
+    while (stream->closeRequest)
+        Sleep (100);
 
     /* IMPLEMENT ME, see portaudio.h for required behavior */
 
@@ -1552,16 +1657,17 @@ static PaError StopStream( PaStream *s )
 }
 
 
-static PaError AbortStream( PaStream *s )
+static PaError AbortStream (PaStream *s)
 {
     PaError result = paNoError;
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     stream->closeRequest = true;
+
     //todo something MUCH better than this
-    while(stream->closeRequest)
-        Sleep(100);
+    while (stream->closeRequest)
+        Sleep (100);
 
     /* IMPLEMENT ME, see portaudio.h for required behavior */
 
@@ -1569,42 +1675,42 @@ static PaError AbortStream( PaStream *s )
 }
 
 
-static PaError IsStreamStopped( PaStream *s )
+static PaError IsStreamStopped (PaStream *s)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     return !stream->running;
 }
 
 
-static PaError IsStreamActive( PaStream *s )
+static PaError IsStreamActive (PaStream *s)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
     return stream->running;
 }
 
 
-static PaTime GetStreamTime( PaStream *s )
+static PaTime GetStreamTime (PaStream *s)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     (void) stream;
 
     /* IMPLEMENT ME, see portaudio.h for required behavior*/
 
-	//this is lame ds and mme does the same thing, quite useless method imho
-	//why dont we fetch the time in the pa callbacks?
-	//at least its doing to be clocked to something
+    //this is lame ds and mme does the same thing, quite useless method imho
+    //why dont we fetch the time in the pa callbacks?
+    //at least its doing to be clocked to something
     return PaUtil_GetTime();
 }
 
 
-static double GetStreamCpuLoad( PaStream* s )
+static double GetStreamCpuLoad (PaStream* s)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
-    return PaUtil_GetCpuLoad( &stream->cpuLoadMeasurer );
+    return PaUtil_GetCpuLoad (&stream->cpuLoadMeasurer);
 }
 
 
@@ -1614,11 +1720,11 @@ static double GetStreamCpuLoad( PaStream* s )
     for blocking streams.
 */
 
-static PaError ReadStream( PaStream* s,
+static PaError ReadStream (PaStream* s,
                            void *buffer,
-                           unsigned long frames )
+                           unsigned long frames)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     (void) buffer;
@@ -1631,11 +1737,11 @@ static PaError ReadStream( PaStream* s,
 }
 
 
-static PaError WriteStream( PaStream* s,
+static PaError WriteStream (PaStream* s,
                             const void *buffer,
-                            unsigned long frames )
+                            unsigned long frames)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     (void) buffer;
@@ -1648,9 +1754,9 @@ static PaError WriteStream( PaStream* s,
 }
 
 
-static signed long GetStreamReadAvailable( PaStream* s )
+static signed long GetStreamReadAvailable (PaStream* s)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     (void) stream;
@@ -1661,9 +1767,9 @@ static signed long GetStreamReadAvailable( PaStream* s )
 }
 
 
-static signed long GetStreamWriteAvailable( PaStream* s )
+static signed long GetStreamWriteAvailable (PaStream* s)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)s;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) s;
 
     /* suppress unused variable warnings */
     (void) stream;
@@ -1680,16 +1786,16 @@ static signed long GetStreamWriteAvailable( PaStream* s )
     occur in a host implementation.
 
 */
-static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
+static void WaspiHostProcessingLoop (void *inputBuffer,  long inputFrames,
                                      void *outputBuffer, long outputFrames,
-                                     void *userData )
+                                     void *userData)
 {
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)userData;
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) userData;
     PaStreamCallbackTimeInfo timeInfo = {0,0,0}; /* IMPLEMENT ME */
     int callbackResult;
     unsigned long framesProcessed;
 
-    PaUtil_BeginCpuLoadMeasurement( &stream->cpuLoadMeasurer );
+    PaUtil_BeginCpuLoadMeasurement (&stream->cpuLoadMeasurer);
 
 
     /*
@@ -1705,7 +1811,7 @@ static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
 
 
 
-    PaUtil_BeginBufferProcessing( &stream->bufferProcessor, &timeInfo, 0 /* IMPLEMENT ME: pass underflow/overflow flags when necessary */ );
+    PaUtil_BeginBufferProcessing (&stream->bufferProcessor, &timeInfo, 0 /* IMPLEMENT ME: pass underflow/overflow flags when necessary */);
 
     /*
         depending on whether the host buffers are interleaved, non-interleaved
@@ -1713,22 +1819,20 @@ static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
         PaUtil_SetNonInterleaved*Channel() or PaUtil_Set*Channel() here.
     */
 
-    if( stream->bufferProcessor.inputChannelCount > 0 )
-    {
-        PaUtil_SetInputFrameCount( &stream->bufferProcessor, inputFrames );
-        PaUtil_SetInterleavedInputChannels( &stream->bufferProcessor,
-            0, /* first channel of inputBuffer is channel 0 */
-            inputBuffer,
-            0 ); /* 0 - use inputChannelCount passed to init buffer processor */
+    if (stream->bufferProcessor.inputChannelCount > 0) {
+        PaUtil_SetInputFrameCount (&stream->bufferProcessor, inputFrames);
+        PaUtil_SetInterleavedInputChannels (&stream->bufferProcessor,
+                                            0, /* first channel of inputBuffer is channel 0 */
+                                            inputBuffer,
+                                            0);  /* 0 - use inputChannelCount passed to init buffer processor */
     }
 
-    if( stream->bufferProcessor.outputChannelCount > 0 )
-    {
-        PaUtil_SetOutputFrameCount( &stream->bufferProcessor, outputFrames);
-        PaUtil_SetInterleavedOutputChannels( &stream->bufferProcessor,
-            0, /* first channel of outputBuffer is channel 0 */
-            outputBuffer,
-            0 ); /* 0 - use outputChannelCount passed to init buffer processor */
+    if (stream->bufferProcessor.outputChannelCount > 0) {
+        PaUtil_SetOutputFrameCount (&stream->bufferProcessor, outputFrames);
+        PaUtil_SetInterleavedOutputChannels (&stream->bufferProcessor,
+                                             0, /* first channel of outputBuffer is channel 0 */
+                                             outputBuffer,
+                                             0);  /* 0 - use outputChannelCount passed to init buffer processor */
     }
 
     /* you must pass a valid value of callback result to PaUtil_EndBufferProcessing()
@@ -1738,7 +1842,7 @@ static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
         using PaUtil_IsBufferProcessorOuputEmpty( bufferProcessor )
     */
     callbackResult = paContinue;
-    framesProcessed = PaUtil_EndBufferProcessing( &stream->bufferProcessor, &callbackResult );
+    framesProcessed = PaUtil_EndBufferProcessing (&stream->bufferProcessor, &callbackResult);
 
 
     /*
@@ -1746,134 +1850,143 @@ static void WaspiHostProcessingLoop( void *inputBuffer,  long inputFrames,
         host format, do it here.
     */
 
-    PaUtil_EndCpuLoadMeasurement( &stream->cpuLoadMeasurer, framesProcessed );
+    PaUtil_EndCpuLoadMeasurement (&stream->cpuLoadMeasurer, framesProcessed);
 
 
-    if( callbackResult == paContinue )
-    {
+    if (callbackResult == paContinue) {
         /* nothing special to do */
-    }
-    else if( callbackResult == paAbort )
-    {
+    } else if (callbackResult == paAbort) {
         /* IMPLEMENT ME - finish playback immediately  */
 
         /* once finished, call the finished callback */
-        if( stream->streamRepresentation.streamFinishedCallback != 0 )
-            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
-    }
-    else
-    {
+        if (stream->streamRepresentation.streamFinishedCallback != 0)
+            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
+    } else {
         /* User callback has asked us to stop with paComplete or other non-zero value */
 
         /* IMPLEMENT ME - finish playback once currently queued audio has completed  */
 
         /* once finished, call the finished callback */
-        if( stream->streamRepresentation.streamFinishedCallback != 0 )
-            stream->streamRepresentation.streamFinishedCallback( stream->streamRepresentation.userData );
+        if (stream->streamRepresentation.streamFinishedCallback != 0)
+            stream->streamRepresentation.streamFinishedCallback (stream->streamRepresentation.userData);
     }
 }
 
 
-void 
-MMCSS_activate(){
+void
+MMCSS_activate()
+{
 
     DWORD stuff=0;
-    HANDLE thCarac = pAvSetMmThreadCharacteristics("Pro Audio",&stuff);
-    if (!thCarac){
-        PRINT(("AvSetMmThreadCharacteristics failed!\n"));
+    HANDLE thCarac = pAvSetMmThreadCharacteristics ("Pro Audio",&stuff);
+
+    if (!thCarac) {
+        PRINT ( ("AvSetMmThreadCharacteristics failed!\n"));
     }
 
-    BOOL prio = pAvSetMmThreadPriority(thCarac,AVRT_PRIORITY_NORMAL);
-    if (!prio){
-        PRINT(("AvSetMmThreadPriority failed!\n"));
+    BOOL prio = pAvSetMmThreadPriority (thCarac,AVRT_PRIORITY_NORMAL);
+
+    if (!prio) {
+        PRINT ( ("AvSetMmThreadPriority failed!\n"));
     }
 
-	//debug
+    //debug
     {
         HANDLE hh       = GetCurrentThread();
-        int  currprio   = GetThreadPriority(hh);
-        DWORD currclass = GetPriorityClass(GetCurrentProcess());
-        PRINT(("currprio 0x%X currclass 0x%X\n",currprio,currclass));
+        int  currprio   = GetThreadPriority (hh);
+        DWORD currclass = GetPriorityClass (GetCurrentProcess());
+        PRINT ( ("currprio 0x%X currclass 0x%X\n",currprio,currclass));
     }
 }
 
 
 DWORD WINAPI
-ProcThread(void* param){
-	HRESULT hResult;
-	MMCSS_activate();
-
-    PaWinWasapiStream *stream = (PaWinWasapiStream*)param;
-
-	stream->hNotificationEvent = CreateEvent(NULL, 
-	                                         FALSE,  //bManualReset are we sure??
-											 FALSE, 
-											 "PAWASA");
-	hResult = stream->out.client->SetEventHandle(stream->hNotificationEvent);
-	if (hResult != S_OK)
-		logAUDCLNT_E(hResult);
-
-	if (stream->out.client){
-		hResult = stream->out.client->Start();
-		if (hResult != S_OK)
-			logAUDCLNT_E(hResult);
-	}
-
-	stream->running = true;
-	bool bOne = false;
-
-	while( !stream->closeRequest ) 
-    { 
-	    //lets wait but have a 1 second timeout
-        DWORD dwResult = WaitForSingleObject(stream->hNotificationEvent, 1000);
-        switch( dwResult ) {
-		case WAIT_OBJECT_0: {
-
-			unsigned long usingBS = stream->out.framesPerHostCallback;
-
-			BYTE* indata  = 0;
-			BYTE* outdata = 0;
-
-			hResult = stream->rclient->GetBuffer(usingBS, &outdata);
-
-			if (hResult != S_OK || !outdata) {
-				//logAUDCLNT_E(hResult);
-				//most probably shared mode and hResult=AUDCLNT_E_BUFFER_TOO_LARGE
-				UINT32 padding = 0;
-				hResult = stream->out.client->GetCurrentPadding(&padding);
-				if (padding == 0)
-					break;	
-				usingBS = usingBS-padding;
-				if (usingBS == 0)
-					break;//huh?
-				hResult = stream->rclient->GetBuffer(usingBS, &outdata);
-				if (hResult != S_OK)//what can we do NOW??
-					break;
-				//logAUDCLNT_E(hResult);			
-			}
-	
-			WaspiHostProcessingLoop(indata, usingBS ,outdata, usingBS, stream);
-
-			hResult = stream->rclient->ReleaseBuffer(usingBS, 0);
-			if (hResult != S_OK)
-				logAUDCLNT_E(hResult);
-
-			 /*	This was suggested, but in my tests it doesnt seem to improve the 
-                locking behaviour some drivers have running in exclusive mode.
-                if(!ResetEvent(stream->hNotificationEvent)){
-					logAUDCLNT_E(hResult);
-				}
-             */
-
-		} 
-		break;
+ProcThread (void* param)
+{
+    HRESULT hResult;
+    MMCSS_activate();
+
+    PaWinWasapiStream *stream = (PaWinWasapiStream*) param;
+
+    stream->hNotificationEvent = CreateEvent (NULL,
+                                 FALSE,  //bManualReset are we sure??
+                                 FALSE,
+                                 "PAWASA");
+    hResult = stream->out.client->SetEventHandle (stream->hNotificationEvent);
+
+    if (hResult != S_OK)
+        logAUDCLNT_E (hResult);
+
+    if (stream->out.client) {
+        hResult = stream->out.client->Start();
+
+        if (hResult != S_OK)
+            logAUDCLNT_E (hResult);
+    }
+
+    stream->running = true;
+    bool bOne = false;
+
+    while (!stream->closeRequest) {
+        //lets wait but have a 1 second timeout
+        DWORD dwResult = WaitForSingleObject (stream->hNotificationEvent, 1000);
+
+        switch (dwResult) {
+            case WAIT_OBJECT_0: {
+
+                unsigned long usingBS = stream->out.framesPerHostCallback;
+
+                BYTE* indata  = 0;
+                BYTE* outdata = 0;
+
+                hResult = stream->rclient->GetBuffer (usingBS, &outdata);
+
+                if (hResult != S_OK || !outdata) {
+                    //logAUDCLNT_E(hResult);
+                    //most probably shared mode and hResult=AUDCLNT_E_BUFFER_TOO_LARGE
+                    UINT32 padding = 0;
+                    hResult = stream->out.client->GetCurrentPadding (&padding);
+
+                    if (padding == 0)
+                        break;
+
+                    usingBS = usingBS-padding;
+
+                    if (usingBS == 0)
+                        break;//huh?
+
+                    hResult = stream->rclient->GetBuffer (usingBS, &outdata);
+
+                    if (hResult != S_OK) //what can we do NOW??
+                        break;
+
+                    //logAUDCLNT_E(hResult);
+                }
+
+                WaspiHostProcessingLoop (indata, usingBS ,outdata, usingBS, stream);
+
+                hResult = stream->rclient->ReleaseBuffer (usingBS, 0);
+
+                if (hResult != S_OK)
+                    logAUDCLNT_E (hResult);
+
+                /*	This was suggested, but in my tests it doesnt seem to improve the
+                   locking behaviour some drivers have running in exclusive mode.
+                   if(!ResetEvent(stream->hNotificationEvent)){
+                   	logAUDCLNT_E(hResult);
+                   }
+                */
+
+            }
+            break;
 
         }
     }
-	stream->out.client->Stop();
+
+    stream->out.client->Stop();
     stream->closeRequest = false;
-    
-	return 0; 
+
+    return 0;
 }
 
 
@@ -1885,28 +1998,36 @@ ProcThread(void* param){
 
 
 #if 0
-			if(bFirst) {			
-				float masteur;
-				hResult = stream->outVol->GetMasterVolumeLevelScalar(&masteur);
-				if (hResult != S_OK)
-					logAUDCLNT_E(hResult);
-				float chan1, chan2;
-				hResult = stream->outVol->GetChannelVolumeLevelScalar(0, &chan1);
-				if (hResult != S_OK)
-					logAUDCLNT_E(hResult);
-				hResult = stream->outVol->GetChannelVolumeLevelScalar(1, &chan2);
-				if (hResult != S_OK)
-					logAUDCLNT_E(hResult);
-
-				BOOL bMute;
-				hResult = stream->outVol->GetMute(&bMute);
-				if (hResult != S_OK)
-					logAUDCLNT_E(hResult);
-
-				stream->outVol->SetMasterVolumeLevelScalar(0.5, NULL);
-				stream->outVol->SetChannelVolumeLevelScalar(0, 0.5, NULL);
-				stream->outVol->SetChannelVolumeLevelScalar(1, 0.5, NULL);
-				stream->outVol->SetMute(FALSE, NULL);
-				bFirst = false;
-			}
+
+if (bFirst)
+{
+    float masteur;
+    hResult = stream->outVol->GetMasterVolumeLevelScalar (&masteur);
+
+    if (hResult != S_OK)
+        logAUDCLNT_E (hResult);
+
+    float chan1, chan2;
+    hResult = stream->outVol->GetChannelVolumeLevelScalar (0, &chan1);
+
+    if (hResult != S_OK)
+        logAUDCLNT_E (hResult);
+
+    hResult = stream->outVol->GetChannelVolumeLevelScalar (1, &chan2);
+
+    if (hResult != S_OK)
+        logAUDCLNT_E (hResult);
+
+    BOOL bMute;
+    hResult = stream->outVol->GetMute (&bMute);
+
+    if (hResult != S_OK)
+        logAUDCLNT_E (hResult);
+
+    stream->outVol->SetMasterVolumeLevelScalar (0.5, NULL);
+    stream->outVol->SetChannelVolumeLevelScalar (0, 0.5, NULL);
+    stream->outVol->SetChannelVolumeLevelScalar (1, 0.5, NULL);
+    stream->outVol->SetMute (FALSE, NULL);
+    bFirst = false;
+}
 #endif
\ No newline at end of file
diff --git a/sflphone-common/libs/utilspp/singleton/LifetimeLibrary.cpp b/sflphone-common/libs/utilspp/singleton/LifetimeLibrary.cpp
index 7f7afac3b23beb5eeeba4ee3c951a1dca5d81c48..6e71baddaad90bc1922457fcae4791c3b53cea3d 100644
--- a/sflphone-common/libs/utilspp/singleton/LifetimeLibrary.cpp
+++ b/sflphone-common/libs/utilspp/singleton/LifetimeLibrary.cpp
@@ -4,17 +4,14 @@
 utilspp::LifetimeLibraryImpl::LifetimeLibraryImpl()
         :
         mTrackerArray (NULL),
-        mNbElements (0)
-{}
+        mNbElements (0) {}
 
-utilspp::LifetimeLibraryImpl::~LifetimeLibraryImpl()
-{
+utilspp::LifetimeLibraryImpl::~LifetimeLibraryImpl() {
     terminate();
 }
 
 void
-utilspp::LifetimeLibraryImpl::add (utilspp::PrivateMembers::LifetimeTracker *tracker)
-{
+utilspp::LifetimeLibraryImpl::add (utilspp::PrivateMembers::LifetimeTracker *tracker) {
     utilspp::PrivateMembers::TrackerArray newArray = static_cast<
             utilspp::PrivateMembers::TrackerArray > (std::realloc (mTrackerArray,
                     mNbElements + 1));
@@ -39,8 +36,7 @@ utilspp::LifetimeLibraryImpl::add (utilspp::PrivateMembers::LifetimeTracker *tra
 };
 
 void
-utilspp::LifetimeLibraryImpl::terminate()
-{
+utilspp::LifetimeLibraryImpl::terminate() {
     //The number of elements MUST always be equal or over zero.
     assert (mNbElements >= 0);
 
@@ -64,8 +60,7 @@ utilspp::LifetimeLibraryImpl::terminate()
 }
 
 unsigned int
-utilspp::getLongevity (utilspp::LifetimeLibraryImpl *)
-{
+utilspp::getLongevity (utilspp::LifetimeLibraryImpl *) {
     return 0;
 }
 
diff --git a/sflphone-common/libs/utilspp/singleton/PrivateMembers.cpp b/sflphone-common/libs/utilspp/singleton/PrivateMembers.cpp
index 194fbda664470c36a6f0d4264c8058726d82139d..a033e0c54c6255fca5144b7963c50ea2ace9ab07 100644
--- a/sflphone-common/libs/utilspp/singleton/PrivateMembers.cpp
+++ b/sflphone-common/libs/utilspp/singleton/PrivateMembers.cpp
@@ -10,24 +10,20 @@ int utilspp::PrivateMembers::mNbElements = 0;
 utilspp::PrivateMembers::LifetimeTracker::LifetimeTracker (unsigned int
         longevity)
         :
-        mLongevity (longevity)
-{}
+        mLongevity (longevity) {}
 
-utilspp::PrivateMembers::LifetimeTracker::~LifetimeTracker()
-{}
+utilspp::PrivateMembers::LifetimeTracker::~LifetimeTracker() {}
 
 bool
 utilspp::PrivateMembers::LifetimeTracker::compare (
     const LifetimeTracker *l,
     const LifetimeTracker *r
-)
-{
+) {
     return l->mLongevity < r->mLongevity;
 }
 
 void
-utilspp::PrivateMembers::atExitFunc()
-{
+utilspp::PrivateMembers::atExitFunc() {
     assert ( (mTrackerArray != NULL) &&
              (mNbElements > 0));
 
diff --git a/sflphone-common/src/Makefile.am b/sflphone-common/src/Makefile.am
index 09ce81355ddddb126ca478e8cd91f42fd59ce1e9..c3b4b75d1f60103d26250161eec99f40d51f42a5 100644
--- a/sflphone-common/src/Makefile.am
+++ b/sflphone-common/src/Makefile.am
@@ -3,13 +3,14 @@ include ../globals.mak
 libexecdir=$(libdir)/sflphone
 libexec_PROGRAMS = sflphoned
 
-SUBDIRS = dbus audio config plug-in hooks history sip iax
+SUBDIRS = dbus audio config plug-in hooks history sip iax im
 
 # Add here the cpp files to be build with sflphone
 sflphoned_SOURCES = \
 		conference.cpp \
 		voiplink.cpp \
 		main.cpp \
+		preferences.cpp \
 		managerimpl.cpp \
 		managerimpl_registration.cpp \
 		observer.cpp \
@@ -37,32 +38,17 @@ endif
 
 sflphoned_CXXFLAGS = \
 		-DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\" $(IAX_CXXFLAG) $(NETWORKMANAGER) \
-		-DVERSION=\"$(VERSION)\" \
-		@ZRTPCPP_CFLAGS@ \
-		@libssl_CFLAGS@
-
-
-# Add here the dynamic libraries sflphoned should be linked against
-sflphoned_LDADD = \
-		./libsflphone.la \
-		@CCGNU2_LIBS@ \
-		@CCEXT2_LIBS@ \
-		@ZRTPCPP_LIBS@ \
-		$(PJSIP_LIBS) \
-		@CCRTP_LIBS@ \
-		@ALSA_LIBS@ \
-		@PULSEAUDIO_LIBS@ \
-		@SAMPLERATE_LIBS@ \
-		@libssl_LIBS@
+		-DVERSION=\"$(VERSION)\"
 
-# sflphoned_LDFLAGS= -pg -luuid
-sflphoned_LDFLAGS= $(UUID_LIBS)
+# libsflphone 
 
+sflphoned_LDADD = ./libsflphone.la
 noinst_LTLIBRARIES = libsflphone.la
 
 noinst_HEADERS = \
 		conference.h \
 		voiplink.h \
+		preferences.h \
 		managerimpl.h \
 		manager.h \
 		global.h \
@@ -80,25 +66,43 @@ libsflphone_la_LIBADD = \
 	$(src)/libs/iax2/libiax2.la \
 	$(src)/libs/dbus-c++/src/libdbus-c++-1.la \
 	$(IAX_LIB) \
+	./im/libim.la \
 	./sip/libsiplink.la \
 	./audio/libaudio.la \
-	./audio/audiortp/libaudiortp.la \
-	./audio/sound/libsound.la \
-	./audio/codecs/libcodecdescriptor.la \
-	./audio/alsa/libalsalayer.la \
-	./audio/pulseaudio/libpulselayer.la \
 	./dbus/libdbus.la \
 	./config/libconfig.la \
 	./plug-in/libplugin.la \
-	./plug-in/audiorecorder/libaudiorecorder.la \
 	./hooks/libhooks.la \
 	./history/libhistory.la
 
-libsflphone_la_SOURCES =
+libsflphone_la_LDFLAGS = \
+		@CCGNU2_LIBS@ \
+		@CCEXT2_LIBS@ \
+		@ZRTPCPP_LIBS@ \
+		$(PJSIP_LIBS) \
+		@CCRTP_LIBS@ \
+		@ALSA_LIBS@ \
+		@PULSEAUDIO_LIBS@ \
+		@SAMPLERATE_LIBS@ \
+		@libssl_LIBS@ \
+		@UUID_LIBS@ \
+		@yaml_LIBS@ \
+		@xml_LIBS@
 
-indent:
-	@echo "Indenting code:"
-	if [ -f $(ASTYLERC) ] ; then \
-		$(indent) --options=$(ASTYLERC) --recursive *.cpp *.h; \
-	fi
+libsflphone_la_CFLAGS = \
+		@CCGNU2_CFLAGS@ \
+		@CCEXT2_CFLAGS@ \
+		@ZRTPCPP_CFLAGS@ \
+		$(PJSIP_CFLAGS) \
+		@CCRTP_CFLAGS@ \
+		@ALSA_CFLAGS@ \
+		@PULSEAUDIO_CFLAGS@ \
+		@SAMPLERATE_CFLAGS@ \
+		@libssl_CFLAGS@ \
+		@UUID_CFLAGS@ \
+		@yaml_CFLAGS@ \
+	 	@xml_CFLAGS@
+
+libsflphone_la_SOURCES =
 
+all: indent
diff --git a/sflphone-common/src/account.cpp b/sflphone-common/src/account.cpp
index 74c2e621f8691bd9a9964485dcbb2161661869ef..fa5bc545f43567afafae2ae1f59b2c51494be993 100644
--- a/sflphone-common/src/account.cpp
+++ b/sflphone-common/src/account.cpp
@@ -34,91 +34,88 @@
 #include "manager.h"
 
 Account::Account (const AccountID& accountID, std::string type) :
-	_accountID (accountID)
-	, _link (NULL)
-	, _enabled (false)
-	, _type (type)
-	, _codecOrder ()
+        _accountID (accountID)
+        , _link (NULL)
+        , _enabled (true)
+        , _type (type)
+        , _codecOrder ()
+        , _codecStr ("0/")
+        , _ringtonePath ("/usr/share/sflphone/ringtones/konga.ul")
+        , _ringtoneEnabled (true)
+        , _displayName ("")
+        , _useragent ("SFLphone")
 {
-	setRegistrationState (Unregistered);
+    setRegistrationState (Unregistered);
 }
 
 Account::~Account()
 {
 }
 
-void Account::loadConfig() {
-
-	std::string p;
+void Account::loadConfig()
+{
 
-	p =  Manager::instance().getConfigString (_accountID , CONFIG_ACCOUNT_TYPE);
-#ifdef USE_IAX
-	_enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false;
-#else
+    // If IAX is not supported, do not register this account
+#ifndef USE_IAX
 
-	if (p == "IAX")
-		_enabled = false;
-	else
-		_enabled = (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_ENABLE) == "true") ? true : false;
+    if (_type == "IAX")
+        _enabled = false;
 
 #endif
 
-	loadAudioCodecs ();
+    loadAudioCodecs ();
 }
 
-void Account::setRegistrationState (RegistrationState state) {
-
-	if (state != _registrationState) {
-		_debug ("Account: set registration state");
-		_registrationState = state;
+void Account::setRegistrationState (RegistrationState state)
+{
 
-		// Notify the client
-		Manager::instance().connectionStatusNotification();
-	}
-}
+    if (state != _registrationState) {
+        _debug ("Account: set registration state");
+        _registrationState = state;
 
-void Account::loadAudioCodecs (void) {
-
-	// if the user never set the codec list, use the default configuration for this account
-	if (Manager::instance ().getConfigString (_accountID, "ActiveCodecs") == "") {
-		_info ("Account: use the default order");
-		Manager::instance ().getCodecDescriptorMap ().setDefaultOrder();
-	}
-
-	// else retrieve the one set in the user config file
-	else {
-		std::vector<std::string> active_list = Manager::instance ().retrieveActiveCodecs();
-		// This property is now set per account basis
-		std::string s = Manager::instance ().getConfigString (_accountID, "ActiveCodecs");
-		setActiveCodecs (Manager::instance ().unserialize (s));
-	}
+        // Notify the client
+        Manager::instance().connectionStatusNotification();
+    }
 }
 
-void Account::setActiveCodecs (const std::vector <std::string> &list) {
+void Account::loadAudioCodecs (void)
+{
 
-	_codecOrder.clear();
-	// list contains the ordered payload of active codecs picked by the user for this account
-	// we used the CodecOrder vector to save the order.
-	int i=0;
-	int payload;
-	size_t size = list.size();
+    // if the user never set the codec list, use the default configuration for this account
+    if (_codecStr == "") {
+        _info ("Account: Use default codec order");
+        Manager::instance ().getCodecDescriptorMap ().setDefaultOrder();
+    }
+    // else retrieve the one set in the user config file
+    else {
+        _debug ("Account: Set codec order from configuration file");
+        std::vector<std::string> active_list = Manager::instance ().retrieveActiveCodecs();
+        // This property is now set per account basis
+        // std::string s = Manager::instance ().getConfigString (_accountID, "ActiveCodecs");
+        setActiveCodecs (Manager::instance ().unserialize (_codecStr));
+    }
+}
 
-	_info ("Account: Set the custom order %i", list.size ());
+void Account::setActiveCodecs (const std::vector <std::string> &list)
+{
 
-	while ( (unsigned int) i < size) {
-		payload = std::atoi (list[i].data());
-		_info ("Account: Adding codec with RTP payload=%i", payload);
-		//if (Manager::instance ().getCodecDescriptorMap ().isCodecLoaded (payload)) {
-		_codecOrder.push_back ( (AudioCodecType) payload);
-		//}
-		i++;
-	}
+    _codecOrder.clear();
+    // list contains the ordered payload of active codecs picked by the user for this account
+    // we used the CodecOrder vector to save the order.
+    int i=0;
+    int payload;
+    size_t size = list.size();
+
+    while ( (unsigned int) i < size) {
+        payload = std::atoi (list[i].data());
+        _info ("Account: Adding codec with RTP payload=%i", payload);
+        //if (Manager::instance ().getCodecDescriptorMap ().isCodecLoaded (payload)) {
+        _codecOrder.push_back ( (AudioCodecType) payload);
+        //}
+        i++;
+    }
 
     // setConfig
-    std::string s = Manager::instance ().serialize (list);
-    _info ("Account: Setting codec with payload number %s to the active list", s.c_str());
-	// Set the config per account
-	Manager::instance().setConfig (_accountID, "ActiveCodecs", s);
-
+    _codecStr = Manager::instance ().serialize (list);
 
 }
diff --git a/sflphone-common/src/account.h b/sflphone-common/src/account.h
index 80bfbd36ba1838b9e0c2d6dc482b3185f3e44219..10ca4f887bdd40030751edf99d10c116c5b97f69 100644
--- a/sflphone-common/src/account.h
+++ b/sflphone-common/src/account.h
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  Author: Yan Morin <yan.morin@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.
@@ -37,6 +37,7 @@
 
 #include "config/config.h"
 #include "voiplink.h"
+#include "config/serializable.h"
 
 class VoIPLink;
 
@@ -51,25 +52,25 @@ typedef std::string AccountID;
 
 /** Contains all the state an Voip can be in */
 typedef enum RegistrationState {
-        Unregistered, 
-        Trying, 
-        Registered, 
-        Error, 
-        ErrorAuth , 
-        ErrorNetwork , 
-        ErrorHost, 
-        ErrorExistStun, 
-        ErrorConfStun,
-        NumberOfState
+    Unregistered,
+    Trying,
+    Registered,
+    Error,
+    ErrorAuth ,
+    ErrorNetwork ,
+    ErrorHost,
+    ErrorExistStun,
+    ErrorConfStun,
+    NumberOfState
 } RegistrationState;
 
 #define AccountNULL ""
 
-// Account identifier                       
+// Account identifier
 #define ACCOUNT_ID                          "Account.id"
 
 // Common account parameters
-#define CONFIG_ACCOUNT_TYPE                 "Account.type"  
+#define CONFIG_ACCOUNT_TYPE                 "Account.type"
 #define CONFIG_ACCOUNT_ALIAS                "Account.alias"
 #define CONFIG_ACCOUNT_MAILBOX	            "Account.mailbox"
 #define CONFIG_ACCOUNT_ENABLE               "Account.enable"
@@ -77,6 +78,8 @@ typedef enum RegistrationState {
 #define CONFIG_ACCOUNT_REGISTRATION_EXPIRE  "Account.expire"
 #define CONFIG_CREDENTIAL_NUMBER            "Credential.count"
 #define ACCOUNT_DTMF_TYPE                   "Account.dtmfType"
+#define CONFIG_RINGTONE_PATH                "Account.ringtonePath"
+#define CONFIG_RINGTONE_ENABLED             "Account.ringtoneEnabled"
 
 #define HOSTNAME                            "hostname"
 #define USERNAME                            "username"
@@ -122,26 +125,61 @@ typedef enum RegistrationState {
 #define TLS_SERVER_NAME                     "TLS.serverName"
 #define TLS_VERIFY_SERVER                   "TLS.verifyServer"
 #define TLS_VERIFY_CLIENT                   "TLS.verifyClient"
-#define TLS_REQUIRE_CLIENT_CERTIFICATE      "TLS.requireClientCertificate"  
+#define TLS_REQUIRE_CLIENT_CERTIFICATE      "TLS.requireClientCertificate"
 #define TLS_NEGOTIATION_TIMEOUT_SEC         "TLS.negotiationTimeoutSec"
 #define TLS_NEGOTIATION_TIMEOUT_MSEC        "TLS.negotiationTimemoutMsec"
 
 #define REGISTRATION_STATUS                 "Status"
-#define REGISTRATION_STATE_CODE             "Registration.code" 
+#define REGISTRATION_STATE_CODE             "Registration.code"
 #define REGISTRATION_STATE_DESCRIPTION      "Registration.description"
 
 
-class Account{
+// General configuration keys for accounts
+const Conf::Key aliasKey ("alias");
+const Conf::Key typeKey ("type");
+const Conf::Key idKey ("id");
+const Conf::Key usernameKey ("username");
+const Conf::Key passwordKey ("password");
+const Conf::Key hostnameKey ("hostname");
+const Conf::Key accountEnableKey ("enable");
+const Conf::Key mailboxKey ("mailbox");
+
+const Conf::Key codecsKey ("codecs");  // 0/9/110/111/112/
+const Conf::Key ringtonePathKey ("ringtonePath");
+const Conf::Key ringtoneEnabledKey ("ringtoneEnabled");
+const Conf::Key displayNameKey ("displayName");
+
+#define find_in_map(X, Y)  if((iter = map_cpy.find(X)) != map_cpy.end()) { Y = iter->second; }
+
+class Account : public Serializable
+{
 
     public:
 
-        Account(const AccountID& accountID, std::string type);
+        Account (const AccountID& accountID, std::string type);
 
         /**
          * Virtual destructor
          */
         virtual ~Account();
 
+        /**
+         * Method called by the configuration engine to serialize instance's information
+         * into configuration file.
+         */
+        virtual void serialize (Conf::YamlEmitter *emitter) = 0;
+
+        /**
+         * Method called by the configuration engine to restore instance internal state
+         * from configuration file.
+         */
+        virtual void unserialize (Conf::MappingNode *map) = 0;
+
+        virtual void setAccountDetails (const std::map<std::string, std::string>& details) = 0;
+
+        virtual std::map<std::string, std::string> getAccountDetails() = 0;
+
+
         /**
          * Load the settings for this account.
          */
@@ -151,13 +189,17 @@ class Account{
          * Get the account ID
          * @return constant account id
          */
-        inline const AccountID& getAccountID() { return _accountID; }
+        inline const AccountID& getAccountID() {
+            return _accountID;
+        }
 
         /**
          * Get the voiplink pointer
          * @return VoIPLink* the pointer or 0
          */
-        inline VoIPLink* getVoIPLink() { return _link; }
+        inline VoIPLink* getVoIPLink() {
+            return _link;
+        }
 
         virtual void setVoIPLink () = 0;
 
@@ -174,78 +216,140 @@ class Account{
         virtual int unregisterVoIPLink() = 0;
 
         /**
-         * Tell if the account is enable or not. 
+         * Tell if the account is enable or not.
          * @return true if enabled
          *	     false otherwise
          */
-        bool isEnabled() { return _enabled; }
+        bool isEnabled() {
+            return _enabled;
+        }
+
+        void setEnabled (bool enabl) {
+            _enabled = enabl;
+        }
 
         /**
          * Get the registration state of the specified link
          * @return RegistrationState	The registration state of underlying VoIPLink
          */
-        inline RegistrationState getRegistrationState() { return _registrationState; }
+        inline RegistrationState getRegistrationState() {
+            return _registrationState;
+        }
 
         /**
          * Set the registration state of the specified link
          * @param state	The registration state of underlying VoIPLink
          */
-        void setRegistrationState( RegistrationState state );
-        
+        void setRegistrationState (RegistrationState state);
+
         /**
          * Set the latest up-to-date state code
-         * for that account. These codes are 
+         * for that account. These codes are
          * those used in SIP and IAX (eg. 200, 500 ...)
          * @param state The Code:Description state
          * @return void
          */
-        void setRegistrationStateDetailed(std::pair<int, std::string> state) { _registrationStateDetailed = state; }
-        
+        void setRegistrationStateDetailed (std::pair<int, std::string> state) {
+            _registrationStateDetailed = state;
+        }
+
         /**
          * Get the latest up-to-date state code
-         * for that account. These codes are 
+         * for that account. These codes are
          * those used in SIP and IAX (eg. 200, 500 ...)
          * @param void
          * @return std::pair<int, std::string> A Code:Description state
          */
-        std::pair<int, std::string> getRegistrationStateDetailed(void) { return _registrationStateDetailed; }
-                        
+        std::pair<int, std::string> getRegistrationStateDetailed (void) {
+            return _registrationStateDetailed;
+        }
+
 
         /* inline functions */
         /* They should be treated like macro definitions by the C++ compiler */
-        inline std::string getUsername( void ) { return _username; }
-        inline void setUsername( std::string username) { _username = username; }
-
-        inline std::string getHostname( void ) { return _hostname; }
-        inline void setHostname( std::string hostname) { _hostname = hostname; }
-
-        inline std::string getPassword( void ) { return _password; }
-        inline void setPassword( std::string password ) { _password = password; }
-
-        inline std::string getAlias( void ) { return _alias; }
-        inline void setAlias( std::string alias ) { _alias = alias; }
-
-        inline std::string getType( void ) { return _type; }
-        inline void setType( std::string type ) { _type = type; }
-	
-		/**
-		 * Accessor to data structures
-		 * @return CodecOrder& The list that reflects the user's choice
-		 */
-		inline CodecOrder& getActiveCodecs() { return _codecOrder; }
+        inline std::string getUsername (void) {
+            return _username;
+        }
+        inline void setUsername (std::string username) {
+            _username = username;
+        }
+
+        inline std::string getHostname (void) {
+            return _hostname;
+        }
+        inline void setHostname (std::string hostname) {
+            _hostname = hostname;
+        }
+
+        inline std::string getPassword (void) {
+            return _password;
+        }
+        inline void setPassword (std::string password) {
+            _password = password;
+        }
+
+        inline std::string getAlias (void) {
+            return _alias;
+        }
+        inline void setAlias (std::string alias) {
+            _alias = alias;
+        }
+
+        inline std::string getType (void) {
+            return _type;
+        }
+        inline void setType (std::string type) {
+            _type = type;
+        }
 
-		void setActiveCodecs (const std::vector <std::string>& list);
+        /**
+         * Accessor to data structures
+         * @return CodecOrder& The list that reflects the user's choice
+         */
+        inline CodecOrder& getActiveCodecs (void) {
+            return _codecOrder;
+        }
+        void setActiveCodecs (const std::vector <std::string>& list);
+
+        inline std::string getRingtonePath (void) {
+            return _ringtonePath;
+        }
+        inline void setRingtonePath (std::string path) {
+            _ringtonePath = path;
+        }
+
+        inline bool getRingtoneEnabled (void) {
+            return _ringtoneEnabled;
+        }
+        inline void setRingtoneEnabled (bool enabl) {
+            _ringtoneEnabled = enabl;
+        }
+
+        inline std::string getDisplayName (void) {
+            return _displayName;
+        }
+        inline void setDisplayName (std::string name) {
+            _displayName = name;
+        }
+
+        std::string getUseragent (void) {
+            return _useragent;
+        }
+        void setUseragent (std::string ua) {
+            _useragent = ua;
+        }
 
     private:
         // copy constructor
-        Account(const Account& rh);
+        Account (const Account& rh);
 
         // assignment operator
-        Account& operator=(const Account& rh);
-
-		void loadAudioCodecs (void);
+        Account& operator= (const Account& rh);
 
     protected:
+
+        void loadAudioCodecs (void);
+
         /**
          * Account ID are assign in constructor and shall not changed
          */
@@ -290,21 +394,47 @@ class Account{
         std::string _type;
 
         /*
-         * The general, protocol neutral registration 
+         * The general, protocol neutral registration
          * state of the account
          */
         RegistrationState _registrationState;
-        
+
         /*
          * Details about the registration state.
-         * This is a protocol Code:Description pair. 
+         * This is a protocol Code:Description pair.
          */
         std::pair<int, std::string> _registrationStateDetailed;
 
-		/**
-		 * Vector containing the order of the codecs
-		 */
-		CodecOrder _codecOrder;
+        /**
+         * Vector containing the order of the codecs
+         */
+        CodecOrder _codecOrder;
+
+        /**
+         * List of codec obtained when parsing configuration and used
+         * to generate codec order list
+         */
+        std::string _codecStr;
+
+        /**
+         * Ringtone .au file used for this account
+         */
+        std::string _ringtonePath;
+
+        /**
+         * Play ringtone when receiving a call
+         */
+        bool _ringtoneEnabled;
+
+        /**
+         * Display name when calling
+         */
+        std::string _displayName;
+
+        /**
+         * Useragent used for registration
+         */
+        std::string _useragent;
 
 };
 
diff --git a/sflphone-common/src/accountcreator.cpp b/sflphone-common/src/accountcreator.cpp
index c0b2abc383a972223cff6d44928d7c916f00b1be..92bfa59376d1a3c8c8e8479ef4007802342a6f5c 100644
--- a/sflphone-common/src/accountcreator.cpp
+++ b/sflphone-common/src/accountcreator.cpp
@@ -50,19 +50,26 @@ AccountCreator::createAccount (AccountType type, AccountID accountID)
 {
     switch (type) {
 
-        case SIP_ACCOUNT:
+        case SIP_ACCOUNT: {
+            _debug ("AccountCreator: create account %s", accountID.c_str());
             return new SIPAccount (accountID);
             break;
-
-        case SIP_DIRECT_IP_ACCOUNT:
+        }
+        case SIP_DIRECT_IP_ACCOUNT: {
+            _debug ("AccountCreator: create account IP2IP_PROFILE");
             return new SIPAccount (IP2IP_PROFILE);
             break;
+        }
 #ifdef USE_IAX
 
-        case IAX_ACCOUNT:
+        case IAX_ACCOUNT: {
+            _debug ("AccountCreator: create account %s", accountID.c_str());
             return new IAXAccount (accountID);
             break;
+        }
 #endif
+        default:
+            _error ("AccountCreator: Error: unknown account type");
     }
 
     return 0;
diff --git a/sflphone-common/src/accountcreator.h b/sflphone-common/src/accountcreator.h
index b0c93191201635f99c84d5061478f178865e3000..71f8e36ab8295d886fb205c15d9a3516445df07f 100644
--- a/sflphone-common/src/accountcreator.h
+++ b/sflphone-common/src/accountcreator.h
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
  *  Author: Yan Morin <yan.morin@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.
@@ -39,24 +39,25 @@ class Account;
  * @file accountcreator.h
  * @brief Create protocol-specific account
  */
-class AccountCreator{
-public:
-  ~AccountCreator();
-  /**
-   * Public account type
-   */
-  enum AccountType {SIP_ACCOUNT, SIP_DIRECT_IP_ACCOUNT, IAX_ACCOUNT };
-  
-  /**
-   * Create a new account or null
-   * @param type type of the account
-   * @param accountID   accountID (must be unique for each account)
-   */
-  static Account* createAccount(AccountType type, AccountID accountID);
+class AccountCreator
+{
+    public:
+        ~AccountCreator();
+        /**
+         * Public account type
+         */
+        enum AccountType {SIP_ACCOUNT, SIP_DIRECT_IP_ACCOUNT, IAX_ACCOUNT };
+
+        /**
+         * Create a new account or null
+         * @param type type of the account
+         * @param accountID   accountID (must be unique for each account)
+         */
+        static Account* createAccount (AccountType type, AccountID accountID);
 
-private:
-  /** Hidden constructor */
-  AccountCreator();
+    private:
+        /** Hidden constructor */
+        AccountCreator();
 };
 
 #endif
diff --git a/sflphone-common/src/audio/Makefile.am b/sflphone-common/src/audio/Makefile.am
index d6ad9388a83014b2bae79ce21cb6b44cc0897864..67542c2a6c469e6513d61c4d34187346bb7a668e 100644
--- a/sflphone-common/src/audio/Makefile.am
+++ b/sflphone-common/src/audio/Makefile.am
@@ -4,31 +4,55 @@ noinst_LTLIBRARIES = libaudio.la
 
 SUBDIRS = codecs audiortp sound alsa pulseaudio 
 
+# if ENABLE_SPEEXDSP
+# SPEEXDSP=-DHAVE_SPEEXDSP_LIB
+# endif
+
 libaudio_la_SOURCES = \
 		audioloop.cpp \
 		ringbuffer.cpp \
 		mainbuffer.cpp \
+		audiorecord.cpp \
+		audiorecorder.cpp \
 		recordable.cpp \
 		audiolayer.cpp \
 		audiodevice.cpp \
 		samplerateconverter.cpp \
+		delaydetection.cpp \
 		echocancel.cpp \
+		speexechocancel.cpp \
+		noisesuppress.cpp \
 		audioprocessing.cpp \
 		dcblocker.cpp \
+		jitterbuf.cpp \
 		$(SPEEX_SOURCES_CPP)
 
 noinst_HEADERS = \
 		audioloop.h \
 		common.h \
 		ringbuffer.h \
+		mainbuffer.h \
+		audiorecord.h \
+		audiorecorder.h \
 		audiolayer.h \
 		audiodevice.h \
-		mainbuffer.h \
 	 	recordable.h \
 		algorithm.h \
+		delaydetection.h \
 		echocancel.h \
+		speexechocancel.h \
+		noisesuppress.h \
 		audioprocessing.h \
 		dcblocker.h \
+		jitterbuf.h \
 		samplerateconverter.h
 
+libaudio_la_LIBADD = \
+	./audiortp/libaudiortp.la \
+	./codecs/libcodecdescriptor.la \
+	./alsa/libalsalayer.la \
+	./pulseaudio/libpulselayer.la \
+	./sound/libsound.la 
+
+
 
diff --git a/sflphone-common/src/audio/algorithm.h b/sflphone-common/src/audio/algorithm.h
index b0bec2023f687a505ec841c3ecbc231bfff3169e..84f9d8136cc9b2f9b2441a75b613a8077c8e1ed6 100644
--- a/sflphone-common/src/audio/algorithm.h
+++ b/sflphone-common/src/audio/algorithm.h
@@ -35,32 +35,46 @@
 
 /**
  * \class Algorithm
- * 
+ *
  * Abstract interface used to implement audio processing algorithm
  */
-class Algorithm {
+class Algorithm
+{
+
+    public:
+
+        virtual void reset (void) = 0;
+
+        /**
+         * Put data to be processed
+         */
+        virtual void putData (SFLDataFormat *inputData, int nbBytes) = 0;
 
- public:
+        /**
+         *
+         */
+        virtual int getData (SFLDataFormat *outputData) = 0;
 
-  /**
-   * Put data to be processed
-   */
-  virtual void putData(SFLDataFormat *inputData) = 0;
+        /**
+         * Class implementing this interface must define this function
+         * for audio processing that require synchronization between spkrdata and
+         */
+        virtual void process (SFLDataFormat *inputData, int nbBytes) = 0;
 
-  /**
-   * Class implementing this interface must define this function 
-   * for audio processing that require synchronization between spkrdata and
-   */
-  virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData) = 0;
+        /**
+         * Class implementing this interface must define this function
+         * for audio processing that require synchronization between spkrdata and
+         */
+        virtual int process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) = 0;
 
-  /**
-   * Class implementing this interface must define this function 
-   * for audio processing that require synchronization between spkr and mic 
-   * \param micData
-   * \param spkrData
-   * \param outputData
-   */
-  virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) = 0;
+        /**
+         * Class implementing this interface must define this function
+         * for audio processing that require synchronization between spkr and mic
+         * \param micData
+         * \param spkrData
+         * \param outputData
+         */
+        virtual void process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) = 0;
 
 };
 
diff --git a/sflphone-common/src/audio/alsa/Makefile.am b/sflphone-common/src/audio/alsa/Makefile.am
index bcc584432ff498be653d216053a3b925f067b3c7..8f67710b33ea530dc6a44016121f6802d51276c7 100644
--- a/sflphone-common/src/audio/alsa/Makefile.am
+++ b/sflphone-common/src/audio/alsa/Makefile.am
@@ -4,5 +4,5 @@ noinst_LTLIBRARIES = libalsalayer.la
 
 libalsalayer_la_SOURCES = alsalayer.cpp 
 
-noinst_HEADERS = alsalayer.h 
+noinst_HEADERS = alsalayer.h
 
diff --git a/sflphone-common/src/audio/alsa/alsalayer.cpp b/sflphone-common/src/audio/alsa/alsalayer.cpp
index 972ec721dad9d6fcecf1667af6347d6fec625da9..83bec76ab13815ed782f5ff225cb920fe4f32745 100644
--- a/sflphone-common/src/audio/alsa/alsalayer.cpp
+++ b/sflphone-common/src/audio/alsa/alsalayer.cpp
@@ -1,6 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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
@@ -38,9 +39,10 @@ int framesPerBufferAlsa = 2048;
 AlsaLayer::AlsaLayer (ManagerImpl* manager)
         : AudioLayer (manager , ALSA)
         , _PlaybackHandle (NULL)
+        , _RingtoneHandle (NULL)
         , _CaptureHandle (NULL)
-        , _periodSize()
-        , _audioPlugin()
+        , _periodSize (160)
+        , _audioPlugin ("default")
         , IDSoundCards()
         , _is_prepared_playback (false)
         , _is_prepared_capture (false)
@@ -52,19 +54,24 @@ AlsaLayer::AlsaLayer (ManagerImpl* manager)
         , _audioThread (NULL)
 
 {
-    _debug (" Constructor of AlsaLayer called");
+    _debug ("Audio: Build ALSA layer");
     /* Instanciate the audio thread */
     // _audioThread = new AudioThread (this);
     // _audioThread = NULL;
     _urgentRingBuffer.createReadPointer();
 
-    dcblocker = new DcBlocker();
+    _audioPlugin = AudioLayer::_manager->audioPreference.getPlugin();
+
+    AudioLayer::_noisesuppressstate = true;
+
+    // captureFile = new ofstream ("probeFile", ofstream::binary);
+
 }
 
 // Destructor
 AlsaLayer::~AlsaLayer (void)
 {
-    _debug ("Destructor of AlsaLayer called");
+    _debug ("Audio: Destroy of ALSA layer");
     closeLayer();
 
     if (_converter) {
@@ -72,43 +79,41 @@ AlsaLayer::~AlsaLayer (void)
         _converter = NULL;
     }
 
-    if (dcblocker) {
-        delete dcblocker;
-        dcblocker = NULL;
-    }
+    // captureFile->close();
+    // delete captureFile;
 }
 
 bool
 AlsaLayer::closeLayer()
 {
-    _debugAlsa ("Close ALSA streams");
+    _debugAlsa ("Audio: Close ALSA streams");
 
     try {
         /* Stop the audio thread first */
         if (_audioThread) {
-            _debug ("Stop Audio Thread");
+            _debug ("Audio: Stop Audio Thread");
             delete _audioThread;
             _audioThread=NULL;
         }
     } catch (...) {
-        _debugException ("! ARTP Exception: when stopping audiortp");
+        _debugException ("Audio: Exception: when stopping audiortp");
         throw;
     }
 
+
     /* Then close the audio devices */
     closeCaptureStream();
-
     closePlaybackStream();
 
-    _CaptureHandle = 0;
-
-    _PlaybackHandle = 0;
+    _CaptureHandle = NULL;
+    _PlaybackHandle = NULL;
+    _RingtoneHandle = NULL;
 
     return true;
 }
 
 bool
-AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize, int stream , std::string plugin)
+AlsaLayer::openDevice (int indexIn, int indexOut, int indexRing, int sampleRate, int frameSize, int stream , std::string plugin)
 {
     /* Close the devices before open it */
     if (stream == SFL_PCM_BOTH && is_capture_open() == true && is_playback_open() == true) {
@@ -119,59 +124,72 @@ AlsaLayer::openDevice (int indexIn, int indexOut, int sampleRate, int frameSize,
     else if ( (stream == SFL_PCM_PLAYBACK || stream == SFL_PCM_BOTH) && is_playback_open () == true)
         closePlaybackStream ();
 
-
     _indexIn = indexIn;
-
     _indexOut = indexOut;
+    _indexRing = indexRing;
 
     _audioSampleRate = sampleRate;
-
     _frameSize = frameSize;
 
     _audioPlugin = std::string (plugin);
 
-    _debugAlsa (" Setting AlsaLayer: device     in=%2d, out=%2d", _indexIn, _indexOut);
-
+    _debugAlsa (" Setting AlsaLayer: device     in=%2d, out=%2d, ring=%2d", _indexIn, _indexOut, _indexRing);
     _debugAlsa ("                   : alsa plugin=%s", _audioPlugin.c_str());
-
     _debugAlsa ("                   : nb channel in=%2d, out=%2d", _inChannel, _outChannel);
-
     _debugAlsa ("                   : sample rate=%5d, format=%s", _audioSampleRate, SFLDataFormatString);
 
     _audioThread = NULL;
 
-    ost::MutexLock lock (_mutex);
-
-    std::string pcmp = buildDeviceTopo (plugin, indexOut, 0);
-
-    std::string pcmc = buildDeviceTopo (plugin, indexIn, 0);
-
     // use 1 sec buffer for resampling
     _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
-    // open_device (pcmp, pcmc, stream);
-    return true; // open_device (pcmp, pcmc, stream);
+    AudioLayer::_dcblocker = new DcBlocker();
+    AudioLayer::_audiofilter = new AudioProcessing (static_cast<Algorithm *> (_dcblocker));
+
+
+    return true;
 }
 
 void
 AlsaLayer::startStream (void)
 {
-    _debug ("AlsaLayer:: startStream");
+    _debug ("Audio: Start stream");
+
+    if (_audiofilter)
+        _audiofilter->resetAlgorithm();
+
+    if (is_playback_running() && is_capture_running())
+        return;
 
-    std::string pcmp = buildDeviceTopo (_audioPlugin, _indexOut, 0);
-    std::string pcmc = buildDeviceTopo (_audioPlugin, _indexIn, 0);
+    std::string pcmp;
+    std::string pcmr;
+    std::string pcmc;
+
+    if (_audioPlugin == PCM_DMIX_DSNOOP) {
+        pcmp = buildDeviceTopo (PCM_DMIX, _indexOut, 0);
+        pcmr = buildDeviceTopo (PCM_DMIX, _indexRing, 0);
+        pcmc = buildDeviceTopo (PCM_DSNOOP, _indexIn, 0);
+    } else {
+        pcmp = buildDeviceTopo (_audioPlugin, _indexOut, 0);
+        pcmr = buildDeviceTopo (_audioPlugin, _indexRing, 0);
+        pcmc = buildDeviceTopo (_audioPlugin, _indexIn, 0);
+    }
+
+    _debug ("pcmp: %s, index %d", pcmp.c_str(), _indexOut);
+    _debug ("pcmr: %s, index %d", pcmr.c_str(), _indexRing);
+    _debug ("pcmc: %s, index %d", pcmc.c_str(), _indexIn);
 
     if (!is_playback_open()) {
-        open_device (pcmp, pcmc, SFL_PCM_PLAYBACK);
+        open_device (pcmp, pcmc, pcmr, SFL_PCM_PLAYBACK);
     }
 
     if (!is_capture_open()) {
-        open_device (pcmp, pcmc, SFL_PCM_CAPTURE);
+        open_device (pcmp, pcmc, pcmr, SFL_PCM_CAPTURE);
     }
 
     prepareCaptureStream ();
-
     preparePlaybackStream ();
+
     startCaptureStream ();
     startPlaybackStream ();
 
@@ -183,7 +201,7 @@ AlsaLayer::startStream (void)
 
     if (_audioThread == NULL) {
         try {
-            _debug ("Start Audio Thread");
+            _debug ("Audio: Start Audio Thread");
             _audioThread = new AudioThread (this);
             _audioThread->start();
         } catch (...) {
@@ -196,24 +214,27 @@ AlsaLayer::startStream (void)
 void
 AlsaLayer::stopStream (void)
 {
-    _debug ("AlsaLayer:: stopStream");
+    _debug ("Audio: Stop stream");
 
     try {
         /* Stop the audio thread first */
         if (_audioThread) {
-            _debug ("Stop Audio Thread");
+            _debug ("Audio: Stop audio thread");
             delete _audioThread;
             _audioThread=NULL;
         }
     } catch (...) {
-        _debugException ("! ARTP Exception: when stopping audiortp");
+        _debugException ("Audio: Exception: when stopping audiortp");
         throw;
     }
 
     closeCaptureStream ();
-
     closePlaybackStream ();
 
+    _PlaybackHandle = NULL;
+    _CaptureHandle = NULL;
+    _RingtoneHandle = NULL;
+
     /* Flush the ring buffers */
     flushUrgent ();
     flushMain ();
@@ -231,6 +252,14 @@ bool AlsaLayer::isCaptureActive (void)
         return false;
 }
 
+void AlsaLayer::setNoiseSuppressState (bool state)
+{
+    // if a stream already opened
+    AudioLayer::_noisesuppressstate = state;
+
+}
+
+
 //////////////////////////////////////////////////////////////////////////////////////////////
 /////////////////   ALSA PRIVATE FUNCTIONS   ////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////
@@ -240,10 +269,10 @@ void AlsaLayer::stopCaptureStream (void)
     int err;
 
     if (_CaptureHandle) {
-        _debug ("AlsaLayer:: stop Alsa capture");
+        _debug ("Audio: Stop ALSA capture");
 
         if ( (err = snd_pcm_drop (_CaptureHandle)) < 0)
-            _debug ("AlsaLayer:: Error stopping ALSA capture: %s", snd_strerror (err));
+            _debug ("Audio: Error: stopping ALSA capture: %s", snd_strerror (err));
         else
             stop_capture ();
 
@@ -258,10 +287,10 @@ void AlsaLayer::closeCaptureStream (void)
         stopCaptureStream ();
 
     if (is_capture_open()) {
-        _debug ("AlsaLayer:: close ALSA capture");
+        _debug ("Audio: Close ALSA capture");
 
         if ( (err = snd_pcm_close (_CaptureHandle)) < 0)
-            _debug ("Error closing ALSA capture: %s", snd_strerror (err));
+            _debug ("Audio: Error: Closing ALSA capture: %s", snd_strerror (err));
         else
             close_capture ();
     }
@@ -272,7 +301,7 @@ void AlsaLayer::startCaptureStream (void)
     int err;
 
     if (_CaptureHandle && !is_capture_running()) {
-        _debug ("AlsaLayer:: start ALSA capture");
+        _debug ("Audio: Start ALSA capture");
 
         if ( (err = snd_pcm_start (_CaptureHandle)) < 0)
             _debug ("Error starting ALSA capture: %s",  snd_strerror (err));
@@ -286,10 +315,10 @@ void AlsaLayer::prepareCaptureStream (void)
     int err;
 
     if (is_capture_open() && !is_capture_prepared()) {
-        _debug ("AlsaLayer:: prepare ALSA capture");
+        _debug ("Audio: Prepare ALSA capture");
 
         if ( (err = snd_pcm_prepare (_CaptureHandle)) < 0)
-            _debug ("Error preparing ALSA capture: %s", snd_strerror (err));
+            _debug ("Audio: Error: preparing ALSA capture: %s", snd_strerror (err));
         else
             prepare_capture ();
     }
@@ -299,11 +328,19 @@ void AlsaLayer::stopPlaybackStream (void)
 {
     int err;
 
+    if (_RingtoneHandle && is_playback_running()) {
+        _debug ("Audio: Stop ALSA ringtone");
+
+        if ( (err = snd_pcm_drop (_RingtoneHandle)) < 0) {
+            _debug ("Audio: Error: Stop ALSA ringtone: %s", snd_strerror (err));
+        }
+    }
+
     if (_PlaybackHandle && is_playback_running()) {
-        _debug ("AlsaLayer:: stop ALSA playback");
+        _debug ("Audio: Stop ALSA playback");
 
         if ( (err = snd_pcm_drop (_PlaybackHandle)) < 0)
-            _debug ("Error stopping ALSA playback: %s", snd_strerror (err));
+            _debug ("Audio: Error: Stopping ALSA playback: %s", snd_strerror (err));
         else
             stop_playback ();
     }
@@ -317,14 +354,23 @@ void AlsaLayer::closePlaybackStream (void)
     if (is_playback_prepared() == true && is_playback_running() == true)
         stopPlaybackStream ();
 
+
     if (is_playback_open()) {
-        _debug ("AlsaLayer:: close ALSA playback");
+
+        _debug ("Audio: Close ALSA playback");
+
+        if (_RingtoneHandle) {
+            if ( (err = snd_pcm_close (_RingtoneHandle)) < 0) {
+                _warn ("Audio: Error: Closing ALSA ringtone: %s", snd_strerror (err));
+            }
+        }
 
         if ( (err = snd_pcm_close (_PlaybackHandle)) < 0)
-            _debug ("Error closing ALSA playback: %s", snd_strerror (err));
+            _warn ("Audio: Error: Closing ALSA playback: %s", snd_strerror (err));
         else
             close_playback ();
     }
+
 }
 
 void AlsaLayer::startPlaybackStream (void)
@@ -332,10 +378,10 @@ void AlsaLayer::startPlaybackStream (void)
     int err;
 
     if (_PlaybackHandle && !is_playback_running()) {
-        _debug ("AlsaLayer:: start ALSA playback");
+        _debug ("Audio: Start ALSA playback");
 
         if ( (err = snd_pcm_start (_PlaybackHandle)) < 0)
-            _debug ("Error starting ALSA playback: %s", snd_strerror (err));
+            _debug ("Audio: Error: Starting ALSA playback: %s", snd_strerror (err));
         else
             start_playback();
     }
@@ -346,10 +392,10 @@ void AlsaLayer::preparePlaybackStream (void)
     int err;
 
     if (is_playback_open() && !is_playback_prepared()) {
-        _debug ("AlsaLayer:: prepare playback stream");
+        _debug ("Audio: Prepare playback stream");
 
         if ( (err = snd_pcm_prepare (_PlaybackHandle)) < 0)
-            _debug ("Error preparing the device: %s", snd_strerror (err));
+            _debug ("Audio: Preparing the device: %s", snd_strerror (err));
         else
             prepare_playback ();
     }
@@ -395,21 +441,22 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     int err;
     int format;
     int periods = 4;
-    int periodsize = 2048;
+    int periodsize = 160;
 
     /* Allocate the snd_pcm_hw_params_t struct */
     snd_pcm_hw_params_malloc (&hwparams);
 
-    _periodSize = 2048;
+    // _periodSize = periodsize;
+    _periodSize = periodsize;
     /* Full configuration space */
 
     if ( (err = snd_pcm_hw_params_any (pcm_handle, hwparams)) < 0) {
-        _debugAlsa (" Cannot initialize hardware parameter structure (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot initialize hardware parameter structure (%s)", snd_strerror (err));
         return false;
     }
 
     if ( (err = snd_pcm_hw_params_set_access (pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0) {
-        _debugAlsa (" Cannot set access type (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set access type (%s)", snd_strerror (err));
         return false;
     }
 
@@ -417,7 +464,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     format = SND_PCM_FORMAT_S16_LE;
 
     if ( (err = snd_pcm_hw_params_set_format (pcm_handle, hwparams, (snd_pcm_format_t) format)) < 0) {
-        _debugAlsa (" Cannot set sample format (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set sample format (%s)", snd_strerror (err));
         return false;
     }
 
@@ -429,17 +476,18 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     exact_ivalue = rate;
 
     if ( (err = snd_pcm_hw_params_set_rate_near (pcm_handle, hwparams, &exact_ivalue, &dir) < 0)) {
-        _debugAlsa (" Cannot set sample rate (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set sample rate (%s)", snd_strerror (err));
         return false;
-    }
+    } else
+        _debug ("Audio: Set audio rate to %d", rate);
 
     if (dir!= 0) {
-        _debugAlsa (" (%i) The choosen rate %d Hz is not supported by your hardware.Using %d Hz instead. ",type ,rate, exact_ivalue);
+        _debugAlsa ("Audio: Error: (%i) The choosen rate %d Hz is not supported by your hardware.Using %d Hz instead. ",type ,rate, exact_ivalue);
     }
 
     /* Set the number of channels */
     if ( (err = snd_pcm_hw_params_set_channels (pcm_handle, hwparams, 1)) < 0) {
-        _debugAlsa (" Cannot set channel count (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set channel count (%s)", snd_strerror (err));
         return false;
     }
 
@@ -449,12 +497,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     dir=0;
 
     if ( (err = snd_pcm_hw_params_set_period_size_near (pcm_handle, hwparams, &exact_lvalue , &dir)) < 0) {
-        _debugAlsa (" Cannot set period time (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set period time (%s)", snd_strerror (err));
         return false;
     }
 
     if (dir!=0) {
-        _debugAlsa ("(%i) The choosen period size %d bytes is not supported by your hardware.Using %d instead. ", type, (int) periodsize, (int) exact_lvalue);
+        _debugAlsa ("Audio: Warning: (%i) The choosen period size %d bytes is not supported by your hardware.Using %d instead. ", type, (int) periodsize, (int) exact_lvalue);
     }
 
     periodsize = exact_lvalue;
@@ -465,12 +513,12 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     dir=0;
 
     if ( (err = snd_pcm_hw_params_set_periods_near (pcm_handle, hwparams, &exact_ivalue, &dir)) < 0) {
-        _debugAlsa (" Cannot set periods number (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set periods number (%s)", snd_strerror (err));
         return false;
     }
 
     if (dir!=0) {
-        _debugAlsa (" The choosen period number %i bytes is not supported by your hardware.Using %i instead. ", periods, exact_ivalue);
+        _debugAlsa ("Audio: Warning: The choosen period number %i bytes is not supported by your hardware.Using %i instead. ", periods, exact_ivalue);
     }
 
     periods=exact_ivalue;
@@ -478,7 +526,7 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
     /* Set the hw parameters */
 
     if ( (err = snd_pcm_hw_params (pcm_handle, hwparams)) < 0) {
-        _debugAlsa (" Cannot set hw parameters (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set hw parameters (%s)", snd_strerror (err));
         return false;
     }
 
@@ -490,13 +538,13 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
 
     /* Set the start threshold */
 
-    if ( (err = snd_pcm_sw_params_set_start_threshold (pcm_handle, swparams, 2700 /*periodsize*2*/)) < 0) {
-        _debugAlsa (" Cannot set start threshold (%s)", snd_strerror (err));
+    if ( (err = snd_pcm_sw_params_set_start_threshold (pcm_handle, swparams, _periodSize*2)) < 0) {
+        _debugAlsa ("Audio: Error: Cannot set start threshold (%s)", snd_strerror (err));
         return false;
     }
 
     if ( (err = snd_pcm_sw_params (pcm_handle, swparams)) < 0) {
-        _debugAlsa (" Cannot set sw parameters (%s)", snd_strerror (err));
+        _debugAlsa ("Audio: Error: Cannot set sw parameters (%s)", snd_strerror (err));
         return false;
     }
 
@@ -508,46 +556,60 @@ bool AlsaLayer::alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate)
 
 
 bool
-AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag)
+AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, std::string pcm_r, int flag)
 {
 
     int err;
 
     if (flag == SFL_PCM_BOTH || flag == SFL_PCM_PLAYBACK) {
 
-        _debug ("AlsaLayer:: open playback device");
-        // if((err = snd_pcm_open(&_PlaybackHandle, pcm_p.c_str(),  SND_PCM_STREAM_PLAYBACK, 0 )) < 0){
+        _debug ("Audio: Open playback device (and ringtone)");
 
-        if ( (err = snd_pcm_open (&_PlaybackHandle, pcm_p.c_str(),  SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
-            _debugAlsa ("Error while opening playback device %s",  pcm_p.c_str());
+        if ( (err = snd_pcm_open (&_PlaybackHandle, pcm_p.c_str(), SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
+            _warn ("Audio: Error while opening playback device %s",  pcm_p.c_str());
             setErrorMessage (ALSA_PLAYBACK_DEVICE);
             close_playback ();
             return false;
         }
 
         if (!alsa_set_params (_PlaybackHandle, 1, getSampleRate())) {
-            _debug ("playback failed");
+            _warn ("Audio: Error: Playback failed");
             snd_pcm_close (_PlaybackHandle);
             close_playback ();
             return false;
         }
 
+        if (getIndexOut() != getIndexRing()) {
+
+            if ( (err = snd_pcm_open (&_RingtoneHandle, pcm_r.c_str(), SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
+                _warn ("Audio: Error: Opening ringtone device %s", pcm_r.c_str());
+                // setErrorMessage(ALSA_RINGTONE_DEVICE);
+            }
+
+            if (!alsa_set_params (_RingtoneHandle, 1, getSampleRate())) {
+                _warn ("Audio: Error: Ringtone failed");
+                snd_pcm_close (_RingtoneHandle);
+
+            }
+        }
+
         open_playback ();
     }
 
     if (flag == SFL_PCM_BOTH || flag == SFL_PCM_CAPTURE) {
 
-        _debug ("AlsaLayer:: open capture device");
+        _debug ("Audio: Open capture device");
 
         if ( (err = snd_pcm_open (&_CaptureHandle,  pcm_c.c_str(),  SND_PCM_STREAM_CAPTURE, 0)) < 0) {
-            _debugAlsa ("Error while opening capture device %s",  pcm_c.c_str());
+            _warn ("Audio: Error: Opening capture device %s",  pcm_c.c_str());
+
             setErrorMessage (ALSA_CAPTURE_DEVICE);
             close_capture ();
             return false;
         }
 
         if (!alsa_set_params (_CaptureHandle, 0, 8000)) {
-            _debug ("capture failed");
+            _warn ("Audio: Error: Capture failed");
             snd_pcm_close (_CaptureHandle);
             close_capture ();
             return false;
@@ -558,32 +620,25 @@ AlsaLayer::open_device (std::string pcm_p, std::string pcm_c, int flag)
         // prepare_capture ();
     }
 
-    /* Start the secondary audio thread for callbacks */
-    /*
-    try {
-        _audioThread->start();
-    } catch (...) {
-        _debugException ("Fail to start audio thread");
-    }
-    */
+
 
     return true;
 }
 
 //TODO	first frame causes broken pipe (underrun) because not enough data are send --> make the handle wait to be ready
 int
-AlsaLayer::write (void* buffer, int length)
+AlsaLayer::write (void* buffer, int length, snd_pcm_t * handle)
 {
     if (_trigger_request == true) {
         _trigger_request = false;
         startPlaybackStream ();
     }
 
-    snd_pcm_uframes_t frames = snd_pcm_bytes_to_frames (_PlaybackHandle, length);
+    snd_pcm_uframes_t frames = snd_pcm_bytes_to_frames (handle, length);
 
     int err;
 
-    if ( (err=snd_pcm_writei (_PlaybackHandle , buffer , frames)) <0) {
+    if ( (err=snd_pcm_writei (handle, buffer , frames)) <0) {
         switch (err) {
 
             case -EPIPE:
@@ -592,17 +647,17 @@ AlsaLayer::write (void* buffer, int length)
 
             case -EIO:
                 //_debugAlsa(" XRUN playback ignored (%s)", snd_strerror(err));
-                handle_xrun_playback();
+                handle_xrun_playback (handle);
 
-                if (snd_pcm_writei (_PlaybackHandle , buffer , frames) <0)
-                    _debugAlsa ("XRUN handling failed");
+                if (snd_pcm_writei (handle, buffer , frames) <0)
+                    _debugAlsa ("Audio: XRUN handling failed");
 
                 _trigger_request = true;
 
                 break;
 
             default:
-                _debugAlsa ("Write error unknown - dropping frames **********************************: %s", snd_strerror (err));
+                _debugAlsa ("Audio: Write error unknown - dropping frames: %s", snd_strerror (err));
 
                 stopPlaybackStream ();
 
@@ -635,14 +690,14 @@ AlsaLayer::read (void* buffer, int toCopy)
             case -ESTRPIPE:
 
             case -EIO:
-                _debugAlsa (" XRUN capture ignored (%s)", snd_strerror (samples));
+                _debugAlsa ("Audio: XRUN capture ignored (%s)", snd_strerror (samples));
                 handle_xrun_capture();
                 //samples = snd_pcm_readi( _CaptureHandle, buffer, frames);
                 //if (samples<0)  samples=0;
                 break;
 
             case EPERM:
-                _debugAlsa (" Capture EPERM (%s)", snd_strerror (samples));
+                _debugAlsa ("Audio: Capture EPERM (%s)", snd_strerror (samples));
                 prepareCaptureStream ();
                 startCaptureStream ();
                 break;
@@ -662,7 +717,7 @@ AlsaLayer::read (void* buffer, int toCopy)
 void
 AlsaLayer::handle_xrun_capture (void)
 {
-    _debugAlsa ("handle_xrun_capture");
+    _debugAlsa ("Audio: Handle xrun capture");
 
     snd_pcm_status_t* status;
     snd_pcm_status_alloca (&status);
@@ -676,23 +731,25 @@ AlsaLayer::handle_xrun_capture (void)
             startCaptureStream ();
         }
     } else
-        _debugAlsa (" Get status failed");
+        _debugAlsa ("Audio: Get status failed");
 }
 
 void
-AlsaLayer::handle_xrun_playback (void)
+AlsaLayer::handle_xrun_playback (snd_pcm_t *handle)
 {
-    _debugAlsa ("AlsaLayer:: handle_xrun_playback");
+    _debugAlsa ("Audio: Handle xrun playback");
 
     int state;
     snd_pcm_status_t* status;
     snd_pcm_status_alloca (&status);
 
-    if ( (state = snd_pcm_status (_PlaybackHandle, status)) < 0)   _debugAlsa (" Error: Cannot get playback handle status (%s)" , snd_strerror (state));
+    if ( (state = snd_pcm_status (handle, status)) < 0)
+        _debugAlsa ("Audio: Error: Cannot get playback handle status (%s)" , snd_strerror (state));
     else {
         state = snd_pcm_status_get_state (status);
 
         if (state  == SND_PCM_STATE_XRUN) {
+            _debug ("Audio: audio device in state SND_PCM_STATE_XRUN, restart device");
             stopPlaybackStream ();
             preparePlaybackStream ();
 
@@ -705,10 +762,10 @@ AlsaLayer::handle_xrun_playback (void)
 std::string
 AlsaLayer::buildDeviceTopo (std::string plugin, int card, int subdevice)
 {
-    std::string pcm = plugin;
     std::stringstream ss,ss1;
+    std::string pcm = plugin;
 
-    if (pcm == "default" || pcm == "pulse")
+    if (pcm == PCM_DEFAULT)
         return pcm;
 
     ss << card;
@@ -723,6 +780,8 @@ AlsaLayer::buildDeviceTopo (std::string plugin, int card, int subdevice)
         pcm.append (ss1.str());
     }
 
+    _debug ("Audio: Device topo: %s", pcm.c_str());
+
     return pcm;
 }
 
@@ -732,6 +791,8 @@ AlsaLayer::getSoundCardsInfo (int stream)
     std::vector<std::string> cards_id;
     HwIDPair p;
 
+    _debug ("Audio: Get sound cards info: ");
+
     snd_ctl_t* handle;
     snd_ctl_card_info_t *info;
     snd_pcm_info_t* pcminfo;
@@ -768,6 +829,7 @@ AlsaLayer::getSoundCardsInfo (int stream)
                     // The number of the sound card is associated with a string description
                     p = HwIDPair (numCard , description);
                     IDSoundCards.push_back (p);
+
                 }
             }
 
@@ -824,67 +886,80 @@ AlsaLayer::soundCardGetIndex (std::string description)
 void AlsaLayer::audioCallback (void)
 {
 
-    int toGet, urgentAvailBytes, normalAvailBytes, maxBytes;
+    int toGet, urgentAvailBytes, normalAvailBytes;
     unsigned short spkrVolume, micVolume;
     AudioLoop *tone;
     AudioLoop *file_tone;
 
-    SFLDataFormat *out;
-    SFLDataFormat *rsmpl_out;
+    SFLDataFormat *out = NULL;
+    SFLDataFormat *rsmpl_out = NULL;
 
     spkrVolume = _manager->getSpkrVolume();
     micVolume  = _manager->getMicVolume();
 
-    /*
-    int writeableSize = snd_pcm_avail_update(_PlaybackHandle);
-    _debug("writeableSize %i", writeableSize);
-    */
+    tone = _manager->getTelephoneTone();
+    file_tone = _manager->getTelephoneFile();
 
     // AvailForGet tell the number of chars inside the buffer
     // framePerBuffer are the number of data for one channel (left)
     urgentAvailBytes = _urgentRingBuffer.AvailForGet();
 
+    if (!_PlaybackHandle || !_CaptureHandle)
+        return;
+
+    snd_pcm_wait (_PlaybackHandle, 20);
+
+    int playbackAvailSmpl = snd_pcm_avail_update (_PlaybackHandle);
+    int playbackAvailBytes = playbackAvailSmpl*sizeof (SFLDataFormat);
+    // _debug("PLAYBACK: %d", playbackAvailSmpl);
+
     if (urgentAvailBytes > 0) {
 
         // Urgent data (dtmf, incoming call signal) come first.
-        toGet = (urgentAvailBytes < (int) (framesPerBufferAlsa * sizeof (SFLDataFormat))) ? urgentAvailBytes : framesPerBufferAlsa * sizeof (SFLDataFormat);
-        out = (SFLDataFormat*) malloc (toGet * sizeof (SFLDataFormat));
-        _urgentRingBuffer.Get (out, toGet, spkrVolume);
+        toGet = (urgentAvailBytes < (int) (playbackAvailBytes)) ? urgentAvailBytes : playbackAvailBytes;
+        out = (SFLDataFormat*) malloc (toGet);
+        memset (out, 0, toGet);
 
-        /* Play the sound */
-        write (out, toGet);
+        if (out) {
+            _urgentRingBuffer.Get (out, toGet, spkrVolume);
+            write (out, toGet, _PlaybackHandle);
+            free (out);
+        }
 
-        free (out);
-        out=0;
+        out=NULL;
 
         // Consume the regular one as well (same amount of bytes)
         getMainBuffer()->discard (toGet);
 
     } else {
 
-        tone = _manager->getTelephoneTone();
-        file_tone = _manager->getTelephoneFile();
+        normalAvailBytes = getMainBuffer()->availForGet();
 
-        toGet = framesPerBufferAlsa;
-        maxBytes = toGet * sizeof (SFLDataFormat);
+        if (tone && (normalAvailBytes <= 0)) {
 
-        if (tone != 0) {
+            out = (SFLDataFormat *) malloc (playbackAvailBytes);
+            memset (out, 0, playbackAvailBytes);
 
-            out = (SFLDataFormat*) malloc (maxBytes * sizeof (SFLDataFormat));
-            tone->getNext (out, toGet, spkrVolume);
-            write (out , maxBytes);
+            if (out) {
+                tone->getNext (out, playbackAvailSmpl, spkrVolume);
+                write (out , playbackAvailBytes, _PlaybackHandle);
+                free (out);
+            }
 
-            free (out);
-            out = 0;
+            out = NULL;
 
-        } else if (file_tone != 0) {
+        } else if (file_tone && !_RingtoneHandle && (normalAvailBytes <= 0)) {
 
-            out = (SFLDataFormat*) malloc (maxBytes * sizeof (SFLDataFormat));
-            file_tone->getNext (out, toGet, spkrVolume);
-            write (out , maxBytes);
+            out = (SFLDataFormat *) malloc (playbackAvailBytes);
+            memset (out, 0, playbackAvailBytes);
 
-            free (out);
-            out = 0;
+            if (out) {
+                file_tone->getNext (out, playbackAvailSmpl, spkrVolume);
+                write (out, playbackAvailBytes, _PlaybackHandle);
+                free (out);
+            }
+
+            out = NULL;
 
         } else {
 
@@ -892,30 +967,23 @@ void AlsaLayer::audioCallback (void)
             // If nothing urgent, play the regular sound samples
 
             int _mainBufferSampleRate = getMainBuffer()->getInternalSamplingRate();
-            int maxNbSamplesToGet = 0;
-            int maxNbBytesToGet = 0;
+            int maxNbSamplesToGet = playbackAvailSmpl;
+            int maxNbBytesToGet = playbackAvailBytes;
 
             // Compute maximal value to get into the ring buffer
 
             if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
                 double upsampleFactor = (double) _audioSampleRate / _mainBufferSampleRate;
-
-                maxNbSamplesToGet = (int) ( (double) framesPerBufferAlsa / upsampleFactor);
-
-
-            } else {
-
-                maxNbSamplesToGet = framesPerBufferAlsa;
+                maxNbSamplesToGet = (int) ( (double) playbackAvailSmpl  / upsampleFactor);
+                maxNbBytesToGet = maxNbSamplesToGet * sizeof (SFLDataFormat);
 
             }
 
-            maxNbBytesToGet = maxNbSamplesToGet * sizeof (SFLDataFormat);
-
-            normalAvailBytes = getMainBuffer()->availForGet();
             toGet = (normalAvailBytes < (int) maxNbBytesToGet) ? normalAvailBytes : maxNbBytesToGet;
 
             out = (SFLDataFormat*) malloc (maxNbBytesToGet);
+            memset (out, 0, maxNbBytesToGet);
 
             if (normalAvailBytes) {
 
@@ -923,66 +991,95 @@ void AlsaLayer::audioCallback (void)
 
                 if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
-
-                    rsmpl_out = (SFLDataFormat*) malloc (framesPerBufferAlsa * sizeof (SFLDataFormat));
-
                     // Do sample rate conversion
                     int nb_sample_down = toGet / sizeof (SFLDataFormat);
 
-                    int nbSample = _converter->upsampleData ( (SFLDataFormat*) out, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_down);
+                    if (rsmpl_out) {
+                        rsmpl_out = (SFLDataFormat*) malloc (playbackAvailBytes);
+                        memset (out, 0, playbackAvailBytes);
 
+                        int nbSample = _converter->upsampleData ( (SFLDataFormat*) out, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_down);
+                        write (rsmpl_out, nbSample*sizeof (SFLDataFormat), _PlaybackHandle);
+                        free (rsmpl_out);
+                    }
 
-
-                    write (rsmpl_out, nbSample*sizeof (SFLDataFormat));
-
-                    free (rsmpl_out);
                     rsmpl_out = 0;
 
                 } else {
 
-                    write (out, toGet);
+                    write (out, toGet, _PlaybackHandle);
 
                 }
 
             } else {
 
-                if ( (tone == 0) && (file_tone == 0)) {
+                if (!tone && !file_tone) {
 
-                    SFLDataFormat* zeros = (SFLDataFormat*) malloc (framesPerBufferAlsa * sizeof (SFLDataFormat));
+                    SFLDataFormat *zeros = (SFLDataFormat*) malloc (playbackAvailBytes);
 
-                    bzero (zeros, framesPerBufferAlsa * sizeof (SFLDataFormat));
-                    write (zeros, framesPerBufferAlsa * sizeof (SFLDataFormat));
+                    if (zeros) {
+                        bzero (zeros, playbackAvailBytes);
+                        write (zeros, playbackAvailBytes, _PlaybackHandle);
+                        free (zeros);
+                    }
 
-                    free (zeros);
+                    zeros = NULL;
                 }
             }
 
             _urgentRingBuffer.Discard (toGet);
 
             free (out);
-            out = 0;
+            out = NULL;
 
         }
 
     }
 
-    // Additionally handle the mic's audio stream
-    int micAvailBytes;
+    if (file_tone && _RingtoneHandle) {
 
-    int micAvailPut;
+        int ringtoneAvailSmpl = snd_pcm_avail_update (_RingtoneHandle);
+        int ringtoneAvailBytes = ringtoneAvailSmpl*sizeof (SFLDataFormat);
 
-    int toPut;
+        // _debug("RINGTONE: %d", ringtoneAvailSmpl);
+
+        out = (SFLDataFormat *) malloc (ringtoneAvailBytes);
+
+        if (out) {
+            file_tone->getNext (out, ringtoneAvailSmpl, spkrVolume);
+            write (out, ringtoneAvailBytes, _RingtoneHandle);
+            free (out);
+        }
+
+        out = NULL;
+
+    } else if (_RingtoneHandle) {
 
-    SFLDataFormat* in;
+        int ringtoneAvailSmpl = snd_pcm_avail_update (_RingtoneHandle);
+        int ringtoneAvailBytes = ringtoneAvailSmpl*sizeof (SFLDataFormat);
 
+        out = (SFLDataFormat *) malloc (ringtoneAvailBytes);
 
-    // snd_pcm_sframes_t micAvailAlsa;
-    in = 0;
+        if (out) {
+            memset (out, 0, ringtoneAvailBytes);
+            write (out, ringtoneAvailBytes, _RingtoneHandle);
+            free (out);
+        }
+
+        out = NULL;
+    }
+
+    // Additionally handle the mic's audio stream
+    int micAvailBytes;
+    int micAvailPut;
+    int toPut;
+
+    SFLDataFormat* in = NULL;
 
     if (is_capture_running()) {
 
         micAvailBytes = snd_pcm_avail_update (_CaptureHandle);
-        // _debug("micAvailBytes %i", micAvailBytes);
+        // _debug("CAPTURE: %i", micAvailBytes);
 
         if (micAvailBytes > 0) {
             micAvailPut = getMainBuffer()->availForPut();
@@ -990,9 +1087,9 @@ void AlsaLayer::audioCallback (void)
             in = (SFLDataFormat*) malloc (toPut * sizeof (SFLDataFormat));
             toPut = read (in, toPut* sizeof (SFLDataFormat));
 
-            adjustVolume (in, toPut, SFL_PCM_CAPTURE);
+            if (in) {
+                adjustVolume (in, toPut, SFL_PCM_CAPTURE);
 
-            if (in != 0) {
                 int _mainBufferSampleRate = getMainBuffer()->getInternalSamplingRate();
 
                 if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
@@ -1005,7 +1102,7 @@ void AlsaLayer::audioCallback (void)
                     // _debug("nb_sample_up %i", nb_sample_up);
                     nbSample = _converter->downsampleData ( (SFLDataFormat*) in, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up);
 
-                    dcblocker->filter_signal (rsmpl_out, nbSample);
+                    _audiofilter->processAudio (rsmpl_out, nbSample*sizeof (SFLDataFormat));
 
                     getMainBuffer()->putData (rsmpl_out, nbSample * sizeof (SFLDataFormat), 100);
 
@@ -1014,7 +1111,16 @@ void AlsaLayer::audioCallback (void)
 
                 } else {
 
-                    getMainBuffer()->putData (in, toPut, 100);
+
+                    SFLDataFormat* filter_out = (SFLDataFormat*) malloc (framesPerBufferAlsa * sizeof (SFLDataFormat));
+
+                    if (filter_out) {
+                        _audiofilter->processAudio (in, filter_out, toPut);
+                        // captureFile->write ( (const char *) filter_out, toPut);
+                        getMainBuffer()->putData (filter_out, toPut, 100);
+                        free (filter_out);
+                    }
+
                 }
             }
 
@@ -1022,7 +1128,7 @@ void AlsaLayer::audioCallback (void)
 
             in=0;
         } else if (micAvailBytes < 0) {
-            _debug ("AlsaLayer::audioCallback (mic): error: %s", snd_strerror (micAvailBytes));
+            _debug ("Audio: Mic error: %s", snd_strerror (micAvailBytes));
         }
 
     }
diff --git a/sflphone-common/src/audio/alsa/alsalayer.h b/sflphone-common/src/audio/alsa/alsalayer.h
index 4bcdcf0fc99773e38bc0bf99cc59812cd59e9d11..7eebc11d5ad58121907eb137ec2215b4b2e8187b 100644
--- a/sflphone-common/src/audio/alsa/alsalayer.h
+++ b/sflphone-common/src/audio/alsa/alsalayer.h
@@ -1,17 +1,18 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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.
@@ -33,10 +34,11 @@
 
 #include "audio/audiolayer.h"
 #include "audio/samplerateconverter.h"
-#include "audio/dcblocker.h"
 #include "eventthread.h"
 #include <alsa/asoundlib.h>
 
+// #include <fstream>
+
 class RingBuffer;
 class ManagerImpl;
 
@@ -45,244 +47,298 @@ typedef std::pair<int , std::string> HwIDPair;
 
 /**
  * @file  AlsaLayer.h
- * @brief Main sound class. Manages the data transfers between the application and the hardware. 
+ * @brief Main sound class. Manages the data transfers between the application and the hardware.
  */
 
-class AlsaLayer : public AudioLayer {
-  public:
-    /**
-     * Constructor
-     * @param manager An instance of managerimpl
-     */
-    AlsaLayer( ManagerImpl* manager );  
-
-    /**
-     * Destructor
-     */
-    ~AlsaLayer(void);
-
-    bool closeLayer( void );
-
-    /**
-     * Check if no devices are opened, otherwise close them.
-     * Then open the specified devices by calling the private functions open_device
-     * @param indexIn	The number of the card choosen for capture
-     * @param indexOut	The number of the card choosen for playback
-     * @param sampleRate  The sample rate 
-     * @param frameSize	  The frame size
-     * @param stream	  To indicate which kind of stream you want to open
-     *			  SFL_PCM_CAPTURE
-     *			  SFL_PCM_PLAYBACK
-     *			  SFL_PCM_BOTH
-     * @param plugin	  The alsa plugin ( dmix , default , front , surround , ...)
-     */
-    bool openDevice(int indexIn, int indexOut, int sampleRate, int frameSize, int stream, std::string plugin);
-
-    /**
-     * Start the capture stream and prepare the playback stream. 
-     * The playback starts accordingly to its threshold
-     * ALSA Library API
-     */
-    void startStream(void);
-
-    /**
-     * Stop the playback and capture streams. 
-     * Drops the pending frames and put the capture and playback handles to PREPARED state
-     * ALSA Library API
-     */
-    void stopStream(void);
-    
-    /**
-     * Query the capture device for number of bytes available in the hardware ring buffer
-     * @return int The number of bytes available
-     */
-    int canGetMic();
-
-    /**
-     * Get data from the capture device
-     * @param buffer The buffer for data
-     * @param toCopy The number of bytes to get
-     * @return int The number of bytes acquired ( 0 if an error occured)
-     */
-    int getMic(void * buffer, int toCopy);
-    
-    /**
-     * Concatenate two strings. Used to build a valid pcm device name. 
-     * @param plugin the alsa PCM name
-     * @param card the sound card number
-     * @param subdevice the subdevice number
-     * @return std::string the concatenated string
-     */
-    std::string buildDeviceTopo( std::string plugin, int card, int subdevice );
-
-    /**
-     * Scan the sound card available on the system
-     * @param stream To indicate whether we are looking for capture devices or playback devices
-     *		   SFL_PCM_CAPTURE
-     *		   SFL_PCM_PLAYBACK
-     *		   SFL_PCM_BOTH
-     * @return std::vector<std::string> The vector containing the string description of the card
-     */
-    std::vector<std::string> getSoundCardsInfo( int stream );
-
-    /**
-     * Check if the given index corresponds to an existing sound card and supports the specified streaming mode
-     * @param card   An index
-     * @param stream  The stream mode
-     *		  SFL_PCM_CAPTURE
-     *		  SFL_PCM_PLAYBACK
-     *		  SFL_PCM_BOTH
-     * @return bool True if it exists and supports the mode
-     *		    false otherwise
-     */
-    bool soundCardIndexExist( int card , int stream );
-    
-    /**
-     * An index is associated with its string description
-     * @param description The string description
-     * @return	int	  Its index
-     */
-    int soundCardGetIndex( std::string description );
-
-    /**
-     * Get the current audio plugin.
-     * @return std::string  The name of the audio plugin
-     */
-    std::string getAudioPlugin( void ) { return _audioPlugin; }
-
-    void audioCallback (void);
-
-    bool isCaptureActive (void);
-
-  private:
-  
-    // Copy Constructor
-    AlsaLayer(const AlsaLayer& rh);
-
-    // Assignment Operator
-    AlsaLayer& operator=( const AlsaLayer& rh);
-
-    bool is_playback_prepared (void) { return _is_prepared_playback; }
-    bool is_capture_prepared (void) { return _is_prepared_capture; }
-    void prepare_playback (void) { _is_prepared_playback = true; }
-    void prepare_capture (void) { _is_prepared_capture = true; }
-    bool is_capture_running (void) { return _is_running_capture; }
-    bool is_playback_running (void) { return _is_running_playback; }
-    void start_playback (void) { _is_running_playback = true; }
-    void stop_playback (void) { _is_running_playback = false; _is_prepared_playback = false; }
-    void start_capture (void) { _is_running_capture = true; }
-    void stop_capture (void) { _is_running_capture = false; _is_prepared_capture = false; }
-    void close_playback (void) { _is_open_playback = false; }
-    void close_capture (void) { _is_open_capture = false; }
-    void open_playback (void) { _is_open_playback = true; }
-    void open_capture (void) { _is_open_capture = true; }
-    bool is_capture_open (void) { return _is_open_capture; }
-    bool is_playback_open (void) { return _is_open_playback; }
-    
-    /**
-     * Drop the pending frames and close the capture device
-     * ALSA Library API
-     */
-    void closeCaptureStream( void );
-    void stopCaptureStream( void );
-    void startCaptureStream( void );
-    void prepareCaptureStream( void );
-
-    void closePlaybackStream( void );
-    void stopPlaybackStream( void );
-    void startPlaybackStream( void );
-    void preparePlaybackStream( void );
-
-    /**
-     * Open the specified device.
-     * ALSA Library API
-     * @param pcm_p The string name for the playback device
-     * @param pcm_c The string name for the capture device
-     * @param flag  To indicate which kind of stream you want to open
-     *		    SFL_PCM_CAPTURE
-     *		    SFL_PCM_PLAYBACK
-     *		    SFL_PCM_BOTH
-     * @return true if successful
-     *	       false otherwise
-     */
-    bool open_device( std::string pcm_p, std::string pcm_c, int flag); 
-
-    bool alsa_set_params( snd_pcm_t *pcm_handle, int type, int rate );
-
-    /**
-     * Copy a data buffer in the internal ring buffer
-     * ALSA Library API
-     * @param buffer The data to be copied
-     * @param length The size of the buffer
-     * @return int The number of frames actually copied
-     */
-    int write( void* buffer, int length);
-    
-    /**
-     * Read data from the internal ring buffer
-     * ALSA Library API
-     * @param buffer  The buffer to stock the read data
-     * @param toCopy  The number of bytes to get
-     * @return int The number of frames actually read
-     */
-    int read( void* buffer, int toCopy);
-    
-    
-
-    /**
-     * Recover from XRUN state for capture
-     * ALSA Library API
-     */
-    void handle_xrun_capture( void );
-
-    /**
-     * Recover from XRUN state for playback
-     * ALSA Library API
-     */
-    void handle_xrun_playback( void );
-    
-    void* adjustVolume( void* buffer , int len, int stream );
-    
-/**
-     * Handles to manipulate playback stream
-     * ALSA Library API
-     */
-    snd_pcm_t* _PlaybackHandle;
-
-    /**
-     * Handles to manipulate capture stream
-     * ALSA Library API
-     */
-    snd_pcm_t* _CaptureHandle;
-    
-    /**
-     * Alsa parameter - Size of a period in the hardware ring buffer
-     */
-    snd_pcm_uframes_t _periodSize;
-
-    /**
-     * name of the alsa audio plugin used
-     */
-    std::string _audioPlugin;
-
-    /** Vector to manage all soundcard index - description association of the system */
-    std::vector<HwIDPair> IDSoundCards;
-
-	bool _is_prepared_playback;
-    bool _is_prepared_capture;
-    bool _is_running_playback;
-    bool _is_running_capture;
-    bool _is_open_playback;
-    bool _is_open_capture;
-    bool _trigger_request;
-    
-    AudioThread* _audioThread;
-
-    /** Sample rate converter object */
-    SamplerateConverter* _converter;
-
-    // Allpass filter to remove DC offset
-    DcBlocker* dcblocker;
+class AlsaLayer : public AudioLayer
+{
+    public:
+        /**
+         * Constructor
+         * @param manager An instance of managerimpl
+         */
+        AlsaLayer (ManagerImpl* manager);
+
+        /**
+         * Destructor
+         */
+        ~AlsaLayer (void);
+
+        bool closeLayer (void);
+
+        /**
+         * Check if no devices are opened, otherwise close them.
+         * Then open the specified devices by calling the private functions open_device
+         * @param indexIn	The number of the card chosen for capture
+         * @param indexOut	The number of the card chosen for playback
+         * @param sampleRate  The sample rate
+         * @param frameSize	  The frame size
+         * @param stream	  To indicate which kind of stream you want to open
+         *			  SFL_PCM_CAPTURE
+         *			  SFL_PCM_PLAYBACK
+         *			  SFL_PCM_BOTH
+         * @param plugin	  The alsa plugin ( dmix , default , front , surround , ...)
+         */
+        bool openDevice (int indexIn, int indexOut, int indexRing, int sampleRate, int frameSize, int stream, std::string plugin);
+
+        /**
+         * Start the capture stream and prepare the playback stream.
+         * The playback starts accordingly to its threshold
+         * ALSA Library API
+         */
+        void startStream (void);
+
+        /**
+         * Stop the playback and capture streams.
+         * Drops the pending frames and put the capture and playback handles to PREPARED state
+         * ALSA Library API
+         */
+        void stopStream (void);
+
+        /**
+         * Query the capture device for number of bytes available in the hardware ring buffer
+         * @return int The number of bytes available
+         */
+        int canGetMic();
+
+        /**
+         * Get data from the capture device
+         * @param buffer The buffer for data
+         * @param toCopy The number of bytes to get
+         * @return int The number of bytes acquired ( 0 if an error occured)
+         */
+        int getMic (void * buffer, int toCopy);
+
+        /**
+         * Concatenate two strings. Used to build a valid pcm device name.
+         * @param plugin the alsa PCM name
+         * @param card the sound card number
+         * @param subdevice the subdevice number
+         * @return std::string the concatenated string
+         */
+        std::string buildDeviceTopo (std::string plugin, int card, int subdevice);
+
+        /**
+         * Scan the sound card available on the system
+         * @param stream To indicate whether we are looking for capture devices or playback devices
+         *		   SFL_PCM_CAPTURE
+         *		   SFL_PCM_PLAYBACK
+         *		   SFL_PCM_BOTH
+         * @return std::vector<std::string> The vector containing the string description of the card
+         */
+        std::vector<std::string> getSoundCardsInfo (int stream);
+
+        /**
+         * Check if the given index corresponds to an existing sound card and supports the specified streaming mode
+         * @param card   An index
+         * @param stream  The stream mode
+         *		  SFL_PCM_CAPTURE
+         *		  SFL_PCM_PLAYBACK
+         *		  SFL_PCM_BOTH
+         * @return bool True if it exists and supports the mode
+         *		    false otherwise
+         */
+        bool soundCardIndexExist (int card , int stream);
+
+        /**
+         * An index is associated with its string description
+         * @param description The string description
+         * @return	int	  Its index
+         */
+        int soundCardGetIndex (std::string description);
+
+        /**
+         * Get the current audio plugin.
+         * @return std::string  The name of the audio plugin
+         */
+        std::string getAudioPlugin (void) {
+            return _audioPlugin;
+        }
+
+        void audioCallback (void);
+
+        bool isCaptureActive (void);
+
+        /**
+         * Get the noise suppressor state
+         * @return true if noise suppressor activated
+         */
+        virtual bool getNoiseSuppressState (void) {
+            return AudioLayer::_noisesuppressstate;
+        }
+
+        /**
+         * Set the noise suppressor state
+         * @param state true if noise suppressor active, false elsewhere
+         */
+        virtual void setNoiseSuppressState (bool state);
+
+    private:
+
+        // Copy Constructor
+        AlsaLayer (const AlsaLayer& rh);
+
+        // Assignment Operator
+        AlsaLayer& operator= (const AlsaLayer& rh);
+
+        bool is_playback_prepared (void) {
+            return _is_prepared_playback;
+        }
+        bool is_capture_prepared (void) {
+            return _is_prepared_capture;
+        }
+        void prepare_playback (void) {
+            _is_prepared_playback = true;
+        }
+        void prepare_capture (void) {
+            _is_prepared_capture = true;
+        }
+        bool is_capture_running (void) {
+            return _is_running_capture;
+        }
+        bool is_playback_running (void) {
+            return _is_running_playback;
+        }
+        void start_playback (void) {
+            _is_running_playback = true;
+        }
+        void stop_playback (void) {
+            _is_running_playback = false;
+            _is_prepared_playback = false;
+        }
+        void start_capture (void) {
+            _is_running_capture = true;
+        }
+        void stop_capture (void) {
+            _is_running_capture = false;
+            _is_prepared_capture = false;
+        }
+        void close_playback (void) {
+            _is_open_playback = false;
+        }
+        void close_capture (void) {
+            _is_open_capture = false;
+        }
+        void open_playback (void) {
+            _is_open_playback = true;
+        }
+        void open_capture (void) {
+            _is_open_capture = true;
+        }
+        bool is_capture_open (void) {
+            return _is_open_capture;
+        }
+        bool is_playback_open (void) {
+            return _is_open_playback;
+        }
+
+        /**
+         * Drop the pending frames and close the capture device
+         * ALSA Library API
+         */
+        void closeCaptureStream (void);
+        void stopCaptureStream (void);
+        void startCaptureStream (void);
+        void prepareCaptureStream (void);
+
+        void closePlaybackStream (void);
+        void stopPlaybackStream (void);
+        void startPlaybackStream (void);
+        void preparePlaybackStream (void);
+
+        /**
+         * Open the specified device.
+         * ALSA Library API
+         * @param pcm_p The string name for the playback device
+         * @param pcm_c The string name for the capture device
+         * @param flag  To indicate which kind of stream you want to open
+         *		    SFL_PCM_CAPTURE
+         *		    SFL_PCM_PLAYBACK
+         *		    SFL_PCM_BOTH
+         * @return true if successful
+         *	       false otherwise
+         */
+        bool open_device (std::string pcm_p, std::string pcm_c, std::string pcm_r,  int flag);
+
+        bool alsa_set_params (snd_pcm_t *pcm_handle, int type, int rate);
+
+        /**
+         * Copy a data buffer in the internal ring buffer
+         * ALSA Library API
+         * @param buffer The data to be copied
+         * @param length The size of the buffer
+         * @return int The number of frames actually copied
+         */
+        int write (void* buffer, int length, snd_pcm_t *handle);
+
+        /**
+         * Read data from the internal ring buffer
+         * ALSA Library API
+         * @param buffer  The buffer to stock the read data
+         * @param toCopy  The number of bytes to get
+         * @return int The number of frames actually read
+         */
+        int read (void* buffer, int toCopy);
+
+        /**
+         * Recover from XRUN state for capture
+         * ALSA Library API
+         */
+        void handle_xrun_capture (void);
+
+        /**
+         * Recover from XRUN state for playback
+         * ALSA Library API
+         */
+        void handle_xrun_playback (snd_pcm_t *handle);
+
+        void* adjustVolume (void* buffer , int len, int stream);
+
+        /**
+         * Handles to manipulate playback stream
+         * ALSA Library API
+         */
+        snd_pcm_t* _PlaybackHandle;
+
+        /**
+         * Handles to manipulate ringtone stream
+         *
+         */
+        snd_pcm_t *_RingtoneHandle;
+
+        /**
+         * Handles to manipulate capture stream
+         * ALSA Library API
+         */
+        snd_pcm_t* _CaptureHandle;
+
+        /**
+         * Alsa parameter - Size of a period in the hardware ring buffer
+         */
+        snd_pcm_uframes_t _periodSize;
+
+        /**
+         * name of the alsa audio plugin used
+         */
+        std::string _audioPlugin;
+
+        /** Vector to manage all soundcard index - description association of the system */
+        std::vector<HwIDPair> IDSoundCards;
+
+        bool _is_prepared_playback;
+        bool _is_prepared_capture;
+        bool _is_running_playback;
+        bool _is_running_capture;
+        bool _is_open_playback;
+        bool _is_open_capture;
+        bool _trigger_request;
+
+        AudioThread* _audioThread;
+
+        /** Sample rate converter object */
+        SamplerateConverter* _converter;
+
+        // ofstream *captureFile;
 
 };
 
diff --git a/sflphone-common/src/audio/audiodevice.h b/sflphone-common/src/audio/audiodevice.h
index 306afbeb8c24bc1d41a111f5b95d3683c34eb6e9..4fa6c25e922a934f7b11b247794ed90c747c2f9c 100644
--- a/sflphone-common/src/audio/audiodevice.h
+++ b/sflphone-common/src/audio/audiodevice.h
@@ -6,12 +6,12 @@
  *  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.
@@ -40,57 +40,66 @@
  * @brief Container device for attribute storage
  * Have almost only get/set method
  */
-class AudioDevice {
-public:
-  /**
-   * Constructor
-   * @param id Identifier
-   * @param name Name
-   */
-  AudioDevice(int id, const std::string& name);
-  
-  /**
-   * Destructor
-   */
-  ~AudioDevice();
-
-  /** Default sample rate */
-  const static double DEFAULT_RATE;
-
-  /**
-   * Read accessor to the ID
-   * @return int	The ID of the audiodevice
-   */
-  int getId() { return _id; }
-  
-  /**
-   * Read accessor to the name
-   * @return std::string&  A string description
-   */
-  const std::string& getName() {return _name; }
-
-  /**
-   * Write accessor to the sample rate
-   * @param rate  The sample rate
-   */
-  void setRate(double rate) { _rate = rate;}
-  
-  /**
-   * Read accessor to the sample rate
-   * @return double The sample rate
-   */
-  double getRate() { return _rate; }
-
-private:
-
-  /** Integer id of the device, can not be 0 */
-  int _id;
-
-  /** Name of the device */
-  std::string _name;
-  
-  /** Default rate in Hz, like 8000.0, default is AudioDevice::DEFAULT_RATE */
-  double _rate;
+class AudioDevice
+{
+    public:
+        /**
+         * Constructor
+         * @param id Identifier
+         * @param name Name
+         */
+        AudioDevice (int id, const std::string& name);
+
+        /**
+         * Destructor
+         */
+        ~AudioDevice();
+
+        /** Default sample rate */
+        const static double DEFAULT_RATE;
+
+        /**
+         * Read accessor to the ID
+         * @return int	The ID of the audiodevice
+         */
+        int getId() {
+            return _id;
+        }
+
+        /**
+         * Read accessor to the name
+         * @return std::string&  A string description
+         */
+        const std::string& getName() {
+            return _name;
+        }
+
+        /**
+         * Write accessor to the sample rate
+         * @param rate  The sample rate
+         */
+        void setRate (double rate) {
+            _rate = rate;
+        }
+
+        /**
+         * Read accessor to the sample rate
+         * @return double The sample rate
+         */
+        double getRate() {
+            return _rate;
+        }
+
+    private:
+
+        /** Integer id of the device, can not be 0 */
+        int _id;
+
+        /** Name of the device */
+        std::string _name;
+
+        /** Default rate in Hz, like 8000.0, default is AudioDevice::DEFAULT_RATE */
+        double _rate;
 };
 
 #endif // _AUDIO_DEVICE_H_
diff --git a/sflphone-common/src/audio/audiolayer.cpp b/sflphone-common/src/audio/audiolayer.cpp
index 45d23a7bd613515cf1c80513736b4b47289f4bfa..cc9e3c49481d5fc473e5e391a70aa3db5e2d6046 100644
--- a/sflphone-common/src/audio/audiolayer.cpp
+++ b/sflphone-common/src/audio/audiolayer.cpp
@@ -1,6 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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
diff --git a/sflphone-common/src/audio/audiolayer.h b/sflphone-common/src/audio/audiolayer.h
index 7eaece27d54b47799a74e8137a68acea9006a778..ade2e31ce4d4f40d515a47ae8d3bed05956e204b 100644
--- a/sflphone-common/src/audio/audiolayer.h
+++ b/sflphone-common/src/audio/audiolayer.h
@@ -1,19 +1,20 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
- *  Author:  Jerome Oufella <jerome.oufella@savoirfairelinux.com> 
+ *  Author:  Jerome Oufella <jerome.oufella@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
+ *  Authro: 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.
@@ -37,70 +38,64 @@
 #include "audiodevice.h"
 #include "ringbuffer.h"
 #include "mainbuffer.h"
-
-#include <cc++/thread.h> // for ost::Mutex
-
+#include "dcblocker.h"
+#include "speexechocancel.h"
 #include "echocancel.h"
-#include "algorithm.h"
-
 
-#define FRAME_PER_BUFFER	160
+#include <cc++/thread.h> // for ost::Mutex
 
 /**
  * @file  audiolayer.h
- * @brief Main sound class. Manages the data transfers between the application and the hardware. 
+ * @brief Main sound class. Manages the data transfers between the application and the hardware.
  */
 
-
-class Recordable;
 class ManagerImpl;
 
-
-class AudioLayer {
+class AudioLayer
+{
 
     private:
 
         //copy constructor
-        AudioLayer(const AudioLayer& rh);
+        AudioLayer (const AudioLayer& rh);
 
         // assignment operator
-        AudioLayer& operator=(const AudioLayer& rh);
+        AudioLayer& operator= (const AudioLayer& rh);
 
     public:
         /**
          * Constructor
          * @param manager An instance of managerimpl
          */
-        AudioLayer( ManagerImpl* manager , int type )
-            : _defaultVolume(100)
-	      , _layerType( type )
-              , _manager(manager)
-	      , _urgentRingBuffer( SIZEBUF, default_id )
-              , _indexIn ( 0 )
-              , _indexOut ( 0 )
-              , _audioSampleRate ( 0 )
-              , _frameSize ( 0 )
-              , _inChannel( 1 )
-              , _outChannel ( 1 )
-              , _errorMessage ( 0 )
-              , _mutex ()
-    {
-
-    }
+        AudioLayer (ManagerImpl* manager , int type)
+                : _defaultVolume (100)
+                , _layerType (type)
+                , _manager (manager)
+                , _urgentRingBuffer (SIZEBUF, default_id)
+                , _indexIn (0)
+                , _indexOut (0)
+                , _audioSampleRate (0)
+                , _frameSize (0)
+                , _inChannel (1)
+                , _outChannel (1)
+                , _errorMessage (0)
+                , _mutex () {
+
+        }
 
         /**
          * Destructor
          */
-        virtual ~AudioLayer(void) {} 
+        virtual ~AudioLayer (void) {}
 
-        virtual bool closeLayer( void ) = 0;
+        virtual bool closeLayer (void) = 0;
 
         /**
          * Check if no devices are opened, otherwise close them.
          * Then open the specified devices by calling the private functions open_device
-         * @param indexIn	The number of the card choosen for capture
-         * @param indexOut	The number of the card choosen for playback
-         * @param sampleRate  The sample rate 
+         * @param indexIn	The number of the card chosen for capture
+         * @param indexOut	The number of the card chosen for playback
+         * @param sampleRate  The sample rate
          * @param frameSize	  The frame size
          * @param stream	  To indicate which kind of stream you want to open
          *			  SFL_PCM_CAPTURE
@@ -108,30 +103,30 @@ class AudioLayer {
          *			  SFL_PCM_BOTH
          * @param plugin	  The alsa plugin ( dmix , default , front , surround , ...)
          */
-        virtual bool openDevice(int indexIn, int indexOut, int sampleRate, int frameSize, int stream , std::string plugin) = 0;
+        virtual bool openDevice (int indexIn, int indexOut, int indexRing, int sampleRate, int frameSize, int stream , std::string plugin) = 0;
 
         /**
-         * Start the capture stream and prepare the playback stream. 
+         * Start the capture stream and prepare the playback stream.
          * The playback starts accordingly to its threshold
          * ALSA Library API
          */
-        virtual void startStream(void) = 0;
+        virtual void startStream (void) = 0;
 
         /**
-         * Stop the playback and capture streams. 
+         * Stop the playback and capture streams.
          * Drops the pending frames and put the capture and playback handles to PREPARED state
          * ALSA Library API
          */
-        virtual void stopStream(void) = 0;
+        virtual void stopStream (void) = 0;
 
         /**
          * Send a chunk of data to the hardware buffer to start the playback
-         * Copy data in the urgent buffer. 
+         * Copy data in the urgent buffer.
          * @param buffer The buffer containing the data to be played ( ringtones )
          * @param toCopy The size of the buffer
          * @return int  The number of bytes copied in the urgent buffer
          */
-        int putUrgent(void* buffer, int toCopy);
+        int putUrgent (void* buffer, int toCopy);
 
         /**
          * Put voice data in the main sound buffer
@@ -139,7 +134,7 @@ class AudioLayer {
          * @param toCopy    The size of the buffer
          * @return int      The number of bytes copied
          */
-        int putMain(void* buffer, int toCopy, CallID call_id = default_id);
+        int putMain (void* buffer, int toCopy, CallID call_id = default_id);
 
         void flushMain (void);
 
@@ -153,85 +148,131 @@ class AudioLayer {
          * @param error The error code
          *		    Could be: ALSA_PLAYBACK_DEVICE
          *			      ALSA_CAPTURE_DEVICE
-         */  
-        void setErrorMessage(const int& error) { _errorMessage = error; }
+         */
+        void setErrorMessage (const int& error) {
+            _errorMessage = error;
+        }
 
         /**
          * Read accessor to the error state
          * @return int  The error code
          */
-        int getErrorMessage() { return _errorMessage; }
+        int getErrorMessage() {
+            return _errorMessage;
+        }
 
         /**
          * Get the index of the audio card for capture
          * @return int The index of the card used for capture
          *			0 for the first available card on the system, 1 ...
          */
-        int getIndexIn() { return _indexIn; }
+        int getIndexIn() {
+            return _indexIn;
+        }
 
         /**
          * Get the index of the audio card for playback
          * @return int The index of the card used for playback
          *			0 for the first available card on the system, 1 ...
          */
-        int getIndexOut() { return _indexOut; }
+        int getIndexOut() {
+            return _indexOut;
+        }
+
+        /**
+             * Get the index of the audio card for ringtone (could be differnet from playback)
+             * @return int The index of the card used for ringtone
+             *			0 for the first available card on the system, 1 ...
+             */
+        int getIndexRing() {
+            return _indexRing;
+        }
 
         /**
          * Get the sample rate of the audio layer
          * @return unsigned int The sample rate
          *			    default: 44100 HZ
          */
-        unsigned int getSampleRate() { return _audioSampleRate; }
+        unsigned int getSampleRate() {
+            return _audioSampleRate;
+        }
 
         /**
          * Get the frame size of the audio layer
          * @return unsigned int The frame size
          *			    default: 20 ms
          */
-        unsigned int getFrameSize() { return _frameSize; }
+        unsigned int getFrameSize() {
+            return _frameSize;
+        }
+
+        /**
+             * Get the layer type for this instance (either Alsa or PulseAudio)
+             * @return unsigned int The layer type
+             *
+             */
+        int getLayerType (void) {
+            return _layerType;
+        }
 
-	/**
-         * Get the layer type for this instance (either Alsa or PulseAudio)
-         * @return unsigned int The layer type
+        /**
+             * Get a pointer to the application MainBuffer class.
          *
-         */
-        int getLayerType( void ) { return _layerType; }
+         * In order to send signal to other parts of the application, one must pass through the mainbuffer.
+         * Audio instances must be registered into the MainBuffer and bound together via the ManagerImpl.
+         *
+             * @return MainBuffer* a pointer to the MainBuffer instance
+             */
+        MainBuffer* getMainBuffer (void) {
+            return _mainBuffer;
+        }
 
-	/**
-         * Get a pointer to the application MainBuffer class.
-	 *
-	 * In order to send signal to other parts of the application, one must pass through the mainbuffer.
-	 * Audio instances must be registered into the MainBuffer and bound together via the ManagerImpl.
-	 *
-         * @return MainBuffer* a pointer to the MainBuffer instance
+        /**
+         * Set the mainbuffer once the audiolayer is created
          */
-	MainBuffer* getMainBuffer( void ) { return _mainBuffer; }
-
-	/**
-	 * Set the mainbuffer once the audiolayer is created
-	 */
-	void setMainBuffer( MainBuffer* mainbuffer ) { _mainBuffer = mainbuffer; }
+        void setMainBuffer (MainBuffer* mainbuffer) {
+            _mainBuffer = mainbuffer;
+        }
 
         /**
          * Default volume for incoming RTP and Urgent sounds.
          */
         unsigned short _defaultVolume; // 100
 
-	
-	/**
-	 * Set the audio recorder
-	 */
-	inline void setRecorderInstance (Recordable* rec) {_recorder = NULL; _recorder = rec;}
 
-	/**
-	 * Get the audio recorder
-	 */
-	inline Recordable* getRecorderInstance (void) {return _recorder;}
+        /**
+         * Set the audio recorder
+         */
+        inline void setRecorderInstance (Recordable* rec) {
+            _recorder = NULL;
+            _recorder = rec;
+        }
 
-	/**
-	 * Get the mutex lock for the entire audio layer 
-	 */
-	inline ost::Mutex* getMutexLock(void) { return &_mutex; }
+        /**
+         * Get the audio recorder
+         */
+        inline Recordable* getRecorderInstance (void) {
+            return _recorder;
+        }
+
+        /**
+         * Get the noise suppressor state
+         * @return true if noise suppressor activated
+         */
+        virtual bool getNoiseSuppressState (void) = 0;
+
+        /**
+         * Set the noise suppressor state
+         * @param state true if noise suppressor active, false elsewhere
+         */
+        virtual void setNoiseSuppressState (bool state) = 0;
+
+        /**
+         * Get the mutex lock for the entire audio layer
+         */
+        inline ost::Mutex* getMutexLock (void) {
+            return &_mutex;
+        }
 
 
     protected:
@@ -241,47 +282,52 @@ class AudioLayer {
         /**
          * Drop the pending frames and close the capture device
          */
-        virtual void closeCaptureStream( void ) = 0;
+        virtual void closeCaptureStream (void) = 0;
 
         /**
          * Drop the pending frames and close the playback device
          */
-        virtual void closePlaybackStream( void ) = 0;
+        virtual void closePlaybackStream (void) = 0;
 
         /** Augment coupling, reduce indirect access */
-        ManagerImpl* _manager; 
+        ManagerImpl* _manager;
 
         /**
          * Urgent ring buffer used for ringtones
          */
         RingBuffer _urgentRingBuffer;
 
-	/**
-	 * Instance of the MainBuffer for the whole application
-	 *
-	 * In order to send signal to other parts of the application, one must pass through the mainbuffer.
-	 * Audio instances must be registered into the MainBuffer and bound together via the ManagerImpl.
-	 *
-	 */ 
-	MainBuffer* _mainBuffer;
+        /**
+         * Instance of the MainBuffer for the whole application
+         *
+         * In order to send signal to other parts of the application, one must pass through the mainbuffer.
+         * Audio instances must be registered into the MainBuffer and bound together via the ManagerImpl.
+         *
+         */
+        MainBuffer* _mainBuffer;
 
-	/**
-	 * A pointer to the recordable instance (may be a call or a conference)
-	 */
-	Recordable* _recorder;
+        /**
+         * A pointer to the recordable instance (may be a call or a conference)
+         */
+        Recordable* _recorder;
 
         /**
-         * Number of audio cards on which capture stream has been opened 
+         * Number of audio cards on which capture stream has been opened
          */
         int _indexIn;
 
         /**
-         * Number of audio cards on which playback stream has been opened 
+         * Number of audio cards on which playback stream has been opened
          */
         int _indexOut;
 
         /**
-         * Sample Rate SFLphone should send sound data to the sound card 
+         * Number of audio cards on which ringtone stream has been opened
+         */
+        int _indexRing;
+
+        /**
+         * Sample Rate SFLphone should send sound data to the sound card
          * The value can be set in the user config file- now: 44100HZ
          */
         unsigned int _audioSampleRate;
@@ -289,30 +335,31 @@ class AudioLayer {
         /**
          * Length of the sound frame we capture or read in ms
          * The value can be set in the user config file - now: 20ms
-         */	 		
+         */
         unsigned int _frameSize;
 
         /**
          * Input channel (mic) should be 1 mono
          */
-        unsigned int _inChannel; 
+        unsigned int _inChannel;
 
         /**
          * Output channel (stereo) should be 1 mono
          */
-        unsigned int _outChannel; 
+        unsigned int _outChannel;
 
         /** Contains the current error code */
         int _errorMessage;
 
-	/**
-	 * Lock for the entire audio layer
-	 */ 
+        /**
+         * Lock for the entire audio layer
+         */
         ost::Mutex _mutex;
 
-	EchoCancel *_echoCancel;
+        DcBlocker *_dcblocker;
+        AudioProcessing *_audiofilter;
 
-	AudioProcessing *_audioProcessing; 
+        bool _noisesuppressstate;
 
 };
 
diff --git a/sflphone-common/src/audio/audioloop.cpp b/sflphone-common/src/audio/audioloop.cpp
index 67626daa59f7936922d914efcb4b25fa5f7d9c2f..efa48629d32dd63d5fd2cfac371a6f839e823de7 100644
--- a/sflphone-common/src/audio/audioloop.cpp
+++ b/sflphone-common/src/audio/audioloop.cpp
@@ -64,7 +64,7 @@ AudioLoop::getNext (SFLDataFormat* output, int nb, short volume)
         bcopy (_buffer+pos, output, block*sizeof (SFLDataFormat)); // short>char conversion
 
         if (volume!=100) {
-            for (int i=0;i<block;i++) {
+            for (int i=0; i<block; i++) {
                 *output = (*output * volume) /100;
                 output++;
             }
diff --git a/sflphone-common/src/audio/audioloop.h b/sflphone-common/src/audio/audioloop.h
index 98f01726f12317ae8c8b60e3bcba671f2ce41a8b..adaa4087b4b571941a0b0a38d92327e772a0c7bf 100644
--- a/sflphone-common/src/audio/audioloop.h
+++ b/sflphone-common/src/audio/audioloop.h
@@ -2,9 +2,9 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *
- *  Inspired by tonegenerator of 
+ *  Inspired by tonegenerator of
  *   Laurielle Lea <laurielle.lea@savoirfairelinux.com> (2004)
- * 
+ *
  *  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
@@ -41,60 +41,65 @@
  * @brief Loop on a sound file
  */
 
-class AudioLoop {
-public:
-  /**
-   * Constructor
-   */
-  AudioLoop();
-  
-  /**
-   * Virtual destructor
-   */
-  virtual ~AudioLoop();
-
-  /**
-   * Get the next fragment of the tone
-   * the function change the intern position, and will loop
-   * @param output  The data buffer
-   * @param nb of int16 to send
-   * @param volume  The volume
-   * @return the number of int16 sent (nb*2)
-   */
-  int getNext(SFLDataFormat* output, int nb, short volume=100);
-  
-  /**
-   * Reset the pointer position
-   */ 
-  void reset() { _pos = 0; }
-
-  /**
-   * Accessor to the size of the buffer
-   * @return unsigned int The size
-   */
-  unsigned int getSize() { return _size; }
-  
-
-protected:
-  /** The data buffer */
-  SFLDataFormat* _buffer;
-
-  /** Number of int16 inside the buffer, not the delay */
-  int _size;  
-
-  /** current position, set to 0, when initialize */
-  int _pos;  
-
-  /** Sample rate */
-  int _sampleRate;
-
-private:
- 
-  // Copy Constructor
-  AudioLoop(const AudioLoop& rh);
-
-  // Assignment Operator
-  AudioLoop& operator=( const AudioLoop& rh);
+class AudioLoop
+{
+    public:
+        /**
+         * Constructor
+         */
+        AudioLoop();
+
+        /**
+         * Virtual destructor
+         */
+        virtual ~AudioLoop();
+
+        /**
+         * Get the next fragment of the tone
+         * the function change the intern position, and will loop
+         * @param output  The data buffer
+         * @param nb of int16 to send
+         * @param volume  The volume
+         * @return the number of int16 sent (nb*2)
+         */
+        int getNext (SFLDataFormat* output, int nb, short volume=100);
+
+        /**
+         * Reset the pointer position
+         */
+        void reset() {
+            _pos = 0;
+        }
+
+        /**
+         * Accessor to the size of the buffer
+         * @return unsigned int The size
+         */
+        unsigned int getSize() {
+            return _size;
+        }
+
+
+    protected:
+        /** The data buffer */
+        SFLDataFormat* _buffer;
+
+        /** Number of int16 inside the buffer, not the delay */
+        int _size;
+
+        /** current position, set to 0, when initialize */
+        int _pos;
+
+        /** Sample rate */
+        int _sampleRate;
+
+    private:
+
+        // Copy Constructor
+        AudioLoop (const AudioLoop& rh);
+
+        // Assignment Operator
+        AudioLoop& operator= (const AudioLoop& rh);
 };
 
 #endif // __AUDIOLOOP_H__
diff --git a/sflphone-common/src/audio/audioprocessing.cpp b/sflphone-common/src/audio/audioprocessing.cpp
index e1ede382595030e575a6c6ee789aa53cdd1f98c7..de68b1d146ae529b13a6c038751b0e35e1752023 100644
--- a/sflphone-common/src/audio/audioprocessing.cpp
+++ b/sflphone-common/src/audio/audioprocessing.cpp
@@ -33,25 +33,48 @@
 
 
 
-AudioProcessing::AudioProcessing(Algorithm *_algo) : _algorithm(_algo){} 
+AudioProcessing::AudioProcessing (Algorithm *_algo) : _algorithm (_algo) {}
 
 
-AudioProcessing::~AudioProcessing(void){}
+AudioProcessing::~AudioProcessing (void) {}
 
-void AudioProcessing::putData(SFLDataFormat *inputData)
+void AudioProcessing::resetAlgorithm (void)
 {
-  if(_algorithm)
-    _algorithm->putData(inputData);
+    if (_algorithm)
+        _algorithm->reset();
 }
 
-void AudioProcessing::processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData)
+int AudioProcessing::getData (SFLDataFormat *outputData)
 {
-  if(_algorithm)
-    _algorithm->process(inputData, outputData);
+    if (_algorithm)
+        return _algorithm->getData (outputData);
+    else
+        return 0;
 }
 
+void AudioProcessing::putData (SFLDataFormat *inputData, int nbBytes)
+{
+    if (_algorithm)
+        _algorithm->putData (inputData, nbBytes);
+}
+
+void AudioProcessing::processAudio (SFLDataFormat *inputData, int nbBytes)
+{
+    if (_algorithm)
+        _algorithm->process (inputData, nbBytes);
+}
 
-void AudioProcessing::processAudio(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData) {
-  if(_algorithm)
-    _algorithm->process(micData, spkrData, outputData);
+int AudioProcessing::processAudio (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes)
+{
+    if (_algorithm)
+        return _algorithm->process (inputData, outputData, nbBytes);
+    else
+        return 0;
+}
+
+
+void AudioProcessing::processAudio (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes)
+{
+    if (_algorithm)
+        _algorithm->process (micData, spkrData, outputData, nbBytes);
 }
diff --git a/sflphone-common/src/audio/audioprocessing.h b/sflphone-common/src/audio/audioprocessing.h
index d9a3aee33aa0c3dce999700f21ff76eb572f17c8..a26078b5473f099d12d63c345904d055d797ba2b 100644
--- a/sflphone-common/src/audio/audioprocessing.h
+++ b/sflphone-common/src/audio/audioprocessing.h
@@ -35,43 +35,62 @@
 #include "algorithm.h"
 
 /**
- * Process audio buffers using specified at instantiation which may be 
+ * Process audio buffers using specified at instantiation which may be
  * changed dynamically at runtime.
  */
-class AudioProcessing {
+class AudioProcessing
+{
 
-public:
+    public:
 
-  /**
-   * The constructor for this class
-   */
-  AudioProcessing(Algorithm *_algo);
+        /**
+         * The constructor for this class
+         */
+        AudioProcessing (Algorithm *_algo);
 
-  ~AudioProcessing(void);
+        ~AudioProcessing (void);
 
-  /**
-   * Set a new algorithm to process audio. Algorithm must be a subclass of abstract class Algorithm
-   */
-  void setAlgorithm(Algorithm *_algo) { _algorithm = _algo; }
+        /**
+         * Set a new algorithm to process audio. Algorithm must be a subclass of abstract class Algorithm
+         */
+        void setAlgorithm (Algorithm *_algo) {
+            _algorithm = _algo;
+        }
 
-  /**
-   * Put data in internal buffer
-   */
-  void putData(SFLDataFormat *inputData);
 
-  /**
-   * Process dome audio data
-   */
-  void processAudio(SFLDataFormat *inputData, SFLDataFormat *outputData);
+        /**
+         * Reset parameters for the algorithm
+         */
+        void resetAlgorithm();
 
-  /**
-   * Process some audio data.
-   */
-  void processAudio(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData);
+        /**
+         * Put data in internal buffer
+         */
+        void putData (SFLDataFormat *inputData, int nbBytes);
 
-private:
+        /**
+         * Get data from internal buffer
+         */
+        int getData (SFLDataFormat *outputData);
 
-  Algorithm *_algorithm;
+        /**
+         * Process some audio data
+         */
+        void processAudio (SFLDataFormat *inputData, int nbBytes);
+
+        /**
+         * Process some audio data
+         */
+        int processAudio (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes);
+
+        /**
+         * Process some audio data.
+         */
+        void processAudio (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes);
+
+    private:
+
+        Algorithm *_algorithm;
 
 };
 
diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp b/sflphone-common/src/audio/audiorecord.cpp
similarity index 87%
rename from sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
rename to sflphone-common/src/audio/audiorecord.cpp
index 4cc6d1779432412c61772a0a785dc5bfda8c8fcb..88f9619edda47e702231141ef9289de679c3163f 100644
--- a/sflphone-common/src/plug-in/audiorecorder/audiorecord.cpp
+++ b/sflphone-common/src/audio/audiorecord.cpp
@@ -49,21 +49,24 @@ struct wavhdr {
 };
 
 
-AudioRecord::AudioRecord()
+AudioRecord::AudioRecord() : fp (NULL)
+        , channels_ (1)
+        , byteCounter_ (0)
+        , sndSmplRate_ (8000)
+        , nbSamplesMic_ (0)
+        , nbSamplesSpk_ (0)
+        , nbSamplesMax_ (3000)
+        , recordingEnabled_ (false)
+        , mixBuffer_ (NULL)
+        , micBuffer_ (NULL)
+        , spkBuffer_ (NULL)
 {
 
-    sndSmplRate_ = 8000;
-    channels_ = 1;
-    byteCounter_ = 0;
-    recordingEnabled_ = false;
-    fp = 0;
-    nbSamplesMax_ = 3000;
-
-    createFilename();
-
     mixBuffer_ = new SFLDataFormat[nbSamplesMax_];
     micBuffer_ = new SFLDataFormat[nbSamplesMax_];
     spkBuffer_ = new SFLDataFormat[nbSamplesMax_];
+
+    createFilename();
 }
 
 AudioRecord::~AudioRecord()
@@ -82,7 +85,6 @@ void AudioRecord::setSndSamplingRate (int smplRate)
 void AudioRecord::setRecordingOption (FILE_TYPE type, SOUND_FORMAT format, int sndSmplRate, std::string path)
 {
 
-
     fileType_ = type;
     sndFormat_ = format;
     channels_ = 1;
@@ -104,12 +106,12 @@ void AudioRecord::initFileName (std::string peerNumber)
 
     if (fileType_ == FILE_RAW) {
         if (strstr (fileName_, ".raw") == NULL) {
-            _debug("AudioRecord: concatenate .raw file extension: name : %s", fileName_);
+            _debug ("AudioRecord: concatenate .raw file extension: name : %s", fileName_);
             fName.append (".raw");
         }
     } else if (fileType_ == FILE_WAV) {
         if (strstr (fileName_, ".wav") == NULL) {
-            _debug("AudioRecord: concatenate .wav file extension: name : %s", fileName_);
+            _debug ("AudioRecord: concatenate .wav file extension: name : %s", fileName_);
             fName.append (".wav");
         }
     }
@@ -120,8 +122,6 @@ void AudioRecord::initFileName (std::string peerNumber)
 void AudioRecord::openFile()
 {
 
-    _info ("AudioRecord: Open file()");
-
     bool result = false;
 
     _debug ("AudioRecord: Open file()");
@@ -198,18 +198,16 @@ bool AudioRecord::setRecording()
 {
 
     if (isOpenFile()) {
-      if (!recordingEnabled_) {
-	  _info ("AudioRecording: Start recording");
-	  recordingEnabled_ = true;
-      }
-      else {
-	  recordingEnabled_ = false;
-	  _info ("AudioRecording: Stop recording");
-      }
-    } 
-    else {
+        if (!recordingEnabled_) {
+            _info ("AudioRecording: Start recording");
+            recordingEnabled_ = true;
+        } else {
+            recordingEnabled_ = false;
+            _info ("AudioRecording: Stop recording");
+        }
+    } else {
         openFile();
-	
+
         recordingEnabled_ = true; // once opend file, start recording
     }
 
@@ -277,7 +275,7 @@ void AudioRecord::createFilename()
     // fileName_ = out.str();
     strncpy (fileName_, out.str().c_str(), 8192);
 
-    _info("AudioRecord: create filename for this call %s ", fileName_);
+    _info ("AudioRecord: create filename for this call %s ", fileName_);
 }
 
 bool AudioRecord::setRawFile()
@@ -303,11 +301,12 @@ bool AudioRecord::setRawFile()
 
 bool AudioRecord::setWavFile()
 {
+    _debug ("AudioRecord: Create wave file %s", savePath_.c_str());
 
     fp = fopen (savePath_.c_str(), "wb");
 
     if (!fp) {
-        _warn("AudioRecord: Error: could not create WAV file.");
+        _warn ("AudioRecord: Error: could not create WAV file.");
         return false;
     }
 
@@ -335,7 +334,7 @@ bool AudioRecord::setWavFile()
 
 
     if (fwrite (&hdr, 4, 11, fp) != 11) {
-        _warn("AudioRecord: Error: could not write WAV header for file. ");
+        _warn ("AudioRecord: Error: could not write WAV header for file. ");
         return false;
     }
 
@@ -365,7 +364,7 @@ bool AudioRecord::openExistingWavFile()
     fp = fopen (fileName_, "rb+");
 
     if (!fp) {
-        _warn("AudioRecord: Error: could not open WAV file!");
+        _warn ("AudioRecord: Error: could not open WAV file!");
         return false;
     }
 
@@ -375,7 +374,7 @@ bool AudioRecord::openExistingWavFile()
         _warn ("AudioRecord: Error: Couldn't seek offset 40 in the file ");
 
     if (fread (&byteCounter_, 4, 1, fp))
-        _warn("AudioRecord: Error: bytecounter Read successfully ");
+        _warn ("AudioRecord: Error: bytecounter Read successfully ");
 
     if (fseek (fp, 0 , SEEK_END) != 0)
         _warn ("AudioRecord: Error: Couldn't seek at the en of the file ");
@@ -408,27 +407,33 @@ void AudioRecord::closeWavFile()
         return;
     }
 
+    _debug ("AudioRecord: Close wave file");
+
 
     SINT32 bytes = byteCounter_ * channels_;
 
     fseek (fp, 40, SEEK_SET); // jump to data length
-    if (ferror (fp)) 
+
+    if (ferror (fp))
         _warn ("AudioRecord: Error: can't reach offset 40 while closing");
 
     fwrite (&bytes, sizeof (SINT32), 1, fp);
-    if (ferror (fp)) 
+
+    if (ferror (fp))
         _warn ("AudioRecord: Error: can't write bytes for data length ");
 
 
     bytes = byteCounter_ * channels_ + 44; // + 44 for the wave header
 
     fseek (fp, 4, SEEK_SET); // jump to file size
-    if (ferror (fp)) 
+
+    if (ferror (fp))
         _warn ("AudioRecord: Error: can't reach offset 4");
 
     fwrite (&bytes, 4, 1, fp);
-    if (ferror (fp)) 
-        _warn("AudioRecord: Error: can't reach offset 4");
+
+    if (ferror (fp))
+        _warn ("AudioRecord: Error: can't reach offset 4");
 
 
     if (fclose (fp) != 0)
@@ -494,11 +499,13 @@ void AudioRecord::recData (SFLDataFormat* buffer, int nSamples)
 }
 
 
-void AudioRecord::recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2)
+void AudioRecord::recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2 UNUSED)
 {
 
     if (recordingEnabled_) {
 
+        _debug ("Recording enabled");
+
         if (fp == 0) {
             _debug ("AudioRecord: Can't record data, a file has not yet been opened!");
             return;
diff --git a/sflphone-common/src/audio/audiorecord.h b/sflphone-common/src/audio/audiorecord.h
new file mode 100644
index 0000000000000000000000000000000000000000..f97401441ade6f6ead309c52b1ace4401d3a0a0e
--- /dev/null
+++ b/sflphone-common/src/audio/audiorecord.h
@@ -0,0 +1,240 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 _AUDIO_RECORD_H
+#define _AUDIO_RECORD_H
+
+#include <iostream>
+#include <string.h>
+#include <stdlib.h>
+#include <sstream>
+
+#include "global.h"
+
+using namespace std;
+
+typedef std::string CallID;
+
+class AudioRecord
+{
+
+    public:
+
+        AudioRecord();
+
+        ~AudioRecord();
+
+        void setSndSamplingRate (int smplRate);
+
+        void setRecordingOption (FILE_TYPE type, SOUND_FORMAT format, int sndSmplRate, std::string path);
+
+        void initFileName (std::string peerNumber);
+
+        /**
+         * Check if no otehr file is opened, then create a new one
+         * @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)
+         */
+        void openFile();
+
+        /**
+         * Close the opend recording file. If wave: cout the number of byte
+         */
+        void closeFile();
+
+        /**
+         * Check if a file is already opened
+         */
+        bool isOpenFile();
+
+        /**
+         * Check if a file already exist
+         */
+        bool isFileExist();
+
+        /**
+         * Check recording state
+         */
+        bool isRecording();
+
+        /**
+         * Set recording flag
+         */
+        bool setRecording();
+
+        /**
+         * Stop recording flag
+         */
+        void stopRecording();
+
+
+        /**
+         * Record a chunk of data in an internal buffer
+         * @param buffer  The data chunk to be recorded
+         * @param nSamples Number of samples (number of bytes) to be recorded
+         */
+        void recSpkrData (SFLDataFormat* buffer, int nSamples);
+
+        /**
+         * Record a chunk of data in an internal buffer
+         * @param buffer  The data chunk to be recorded
+         * @param nSamples Number of samples (number of bytes) to be recorded
+         */
+        void recMicData (SFLDataFormat* buffer, int nSamples);
+
+        /**
+         * Record a chunk of data in an openend file
+         * @param buffer  The data chunk to be recorded
+         * @param nSamples Number of samples (number of bytes) to be recorded
+         */
+        void recData (SFLDataFormat* buffer, int nSamples);
+
+        /**
+         * Record a chunk of data in an openend file, Mix two differnet buffer
+         * @param buffer_1  The first data chunk to be recorded
+         * @param buffer_2  The second data chunk to be recorded
+         * @param nSamples_1 Number of samples (number of bytes) of buffer_1
+         * @param nSamples_2 Number of samples (number of bytes) of buffer_2
+         */
+        void recData (SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2);
+
+
+    protected:
+
+        /**
+         * Create name file according to current date
+         */
+        void createFilename();
+
+        /**
+         * Set the header for raw files
+         */
+        bool setRawFile();
+
+        /**
+         * Set the header for wave files
+         */
+        bool setWavFile();
+
+        /**
+         * Open an existing raw file, used when the call is set on hold
+         */
+        bool openExistingRawFile();
+
+        /**
+         * Open an existing wav file, used when the call is set on hold
+         */
+        bool openExistingWavFile();
+
+        /**
+         * Compute the number of byte recorded and close the file
+         */
+        void closeWavFile();
+
+
+        /**
+         * Pointer to the recorded file
+         */
+        FILE *fp;                      //file pointer
+
+        /**
+         * File format (RAW / WAVE)
+         */
+        FILE_TYPE fileType_;
+
+        /**
+         * Sound format (SINT16/SINT32)
+         */
+        SOUND_FORMAT sndFormat_;
+
+        /**
+         * Number of channels
+         */
+        int channels_;
+
+        /**
+         * Number of byte recorded
+         */
+        unsigned long byteCounter_;
+
+        /**
+         * Sampling rate
+         */
+        int sndSmplRate_;
+
+        /**
+         * number of samples recorded for mic buffer
+         */
+        int nbSamplesMic_;
+
+        /**
+         * number of samples recorded for speaker buffer
+         */
+        int nbSamplesSpk_;
+
+        /**
+         * Maximum number of samples
+         */
+        int nbSamplesMax_;
+
+        /**
+         * Recording flage
+         */
+        bool recordingEnabled_;
+
+        /**
+         * Buffer used for mixing two channels
+         */
+        SFLDataFormat* mixBuffer_;
+
+        /**
+         * Buffer used to copy mic info
+         */
+        SFLDataFormat* micBuffer_;
+
+        /**
+         * Buffer used to copy spkr info
+         */
+        SFLDataFormat* spkBuffer_;
+
+        /**
+         * Filename for this recording
+         */
+        char fileName_[8192];
+
+        /**
+         * Path for this recording
+         */
+        std::string savePath_;
+
+};
+
+#endif // _AUDIO_RECORD_H
diff --git a/sflphone-common/src/audio/audiorecorder.cpp b/sflphone-common/src/audio/audiorecorder.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0adba9caa09b323fb17bfc37cec34ad17baf3552
--- /dev/null
+++ b/sflphone-common/src/audio/audiorecorder.cpp
@@ -0,0 +1,86 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "audiorecorder.h"
+#include "mainbuffer.h"
+
+int AudioRecorder::count = 0;
+
+AudioRecorder::AudioRecorder (AudioRecord  *arec, MainBuffer *mb) : Thread()
+{
+    setCancel (cancelDeferred);
+
+    ++count;
+
+    std::string id ("processid_");
+
+    // convert count into string
+    std::string s;
+    std::stringstream out;
+    out << count;
+    s = out.str();
+
+    recorderId = id.append (s);
+
+    arecord = arec;
+    mbuffer = mb;
+}
+
+
+/**
+ * Reimplementation of run()
+ */
+void AudioRecorder::run (void)
+{
+
+    int bufferLength = 10000;
+    SFLDataFormat buffer[bufferLength];
+
+    while (true) {
+
+        if (!mbuffer)
+            _warn ("AudioRecorder: Error: No instance of ringbuffer");
+
+        int availBytes = mbuffer->availForGet (recorderId);
+
+        int toGet = (availBytes < bufferLength) ? availBytes : bufferLength;
+
+        mbuffer->getData (buffer, toGet, 100, recorderId);
+
+        if (availBytes > 0) {
+
+            arecord->recData (buffer, availBytes/sizeof (SFLDataFormat));
+        }
+
+        sleep (20);
+
+    }
+
+}
diff --git a/sflphone-common/src/audio/audiorecorder.h b/sflphone-common/src/audio/audiorecorder.h
new file mode 100644
index 0000000000000000000000000000000000000000..66e79d4bc54cfaa155a5c1aba3439c1396364a7a
--- /dev/null
+++ b/sflphone-common/src/audio/audiorecorder.h
@@ -0,0 +1,69 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 __AUDIORECORDER_H_
+#define __AUDIORECORDER_H_
+
+#include <cc++/thread.h>
+#include "audiorecord.h"
+#include <string>
+
+class MainBuffer;
+
+class AudioRecorder : public ost::Thread
+{
+
+    public:
+        AudioRecorder (AudioRecord  *arec, MainBuffer *mb);
+
+        ~AudioRecorder (void) {
+            terminate();
+        }
+
+        static int count;
+
+        std::string getRecorderID() {
+            return recorderId;
+        }
+
+        virtual void run();
+
+    private:
+        AudioRecorder (const AudioRecorder& ar);
+        AudioRecorder& operator= (const AudioRecorder& ar);
+
+        std::string recorderId;
+
+        MainBuffer *mbuffer;
+
+        AudioRecord *arecord;
+};
+
+#endif
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
index 85f53cf09e5e31ca623104932c608b8d3e56283b..eabf054b16c08dd13c6cb93672fa118e8ac11452 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
@@ -36,6 +36,7 @@
 #include "manager.h"
 #include "account.h"
 #include "sip/sipcall.h"
+#include "sip/sipaccount.h"
 #include "sip/SdesNegotiator.h"
 
 #include <assert.h>
@@ -64,7 +65,7 @@ AudioRtpFactory::~AudioRtpFactory()
     stop();
 }
 
-void AudioRtpFactory::initAudioRtpConfig(SIPCall *ca)
+void AudioRtpFactory::initAudioRtpConfig (SIPCall *ca)
 {
     assert (ca);
 
@@ -76,27 +77,44 @@ void AudioRtpFactory::initAudioRtpConfig(SIPCall *ca)
 
     AccountID accountId = Manager::instance().getAccountFromCall (ca->getCallId());
 
-    // Check if it is an IP-to-IP call
-    if (accountId == AccountNULL) {
-        _srtpEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, SRTP_ENABLE);
-        _keyExchangeProtocol = Manager::instance().getConfigInt (IP2IP_PROFILE, SRTP_KEY_EXCHANGE);
-        _debug ("Ip-to-ip profile selected with key exchange protocol number %d", _keyExchangeProtocol);
-        _helloHashEnabled = Manager::instance().getConfigBool (IP2IP_PROFILE, ZRTP_HELLO_HASH);
-    } else {
-        _srtpEnabled = Manager::instance().getConfigBool (accountId, SRTP_ENABLE);
-        _keyExchangeProtocol = Manager::instance().getConfigInt (accountId, SRTP_KEY_EXCHANGE);
+    _debug ("AudioRtpFactory: Init rtp session for account %s", accountId.c_str());
+
+    // Manager::instance().getAccountLink (accountId);
+    Account *account = Manager::instance().getAccount (accountId);
+
+    if (!account)
+        _error ("AudioRtpFactory: Error no account found");
+
+    if (account->getType() == "SIP") {
+        SIPAccount *sipaccount = static_cast<SIPAccount *> (account);
+        _srtpEnabled = sipaccount->getSrtpEnable();
+        std::string tempkey = sipaccount->getSrtpKeyExchange();
+
+        if (tempkey == "sdes")
+            _keyExchangeProtocol = Sdes;
+        else if (tempkey == "zrtp")
+            _keyExchangeProtocol = Zrtp;
+        else
+            _keyExchangeProtocol = Symmetric;
+
         _debug ("Registered account %s profile selected with key exchange protocol number %d", accountId.c_str(), _keyExchangeProtocol);
-        _helloHashEnabled = Manager::instance().getConfigBool (accountId, ZRTP_HELLO_HASH);
+        _helloHashEnabled = sipaccount->getZrtpHelloHash();
+    } else {
+        _srtpEnabled = false;
+        _keyExchangeProtocol = Symmetric;
+        _helloHashEnabled = false;
     }
+
 }
 
 void AudioRtpFactory::initAudioRtpSession (SIPCall * ca)
 {
     ost::MutexLock m (_audioRtpThreadMutex);
 
-    _debug ("Srtp enable: %d ", _srtpEnabled);
+    _debug ("AudioRtpFactory: Srtp enable: %d ", _srtpEnabled);
+
     if (_srtpEnabled) {
-        std::string zidFilename (Manager::instance().getConfigString (SIGNALISATION, ZRTP_ZIDFILE));
+        std::string zidFilename (Manager::instance().voipPreferences.getZidFile());
 
         switch (_keyExchangeProtocol) {
 
@@ -115,14 +133,14 @@ void AudioRtpFactory::initAudioRtpSession (SIPCall * ca)
 
             case Sdes:
 
-	        _rtpSession = new AudioSrtpSession (&Manager::instance(), ca);
+                _rtpSession = new AudioSrtpSession (&Manager::instance(), ca);
                 _rtpSessionType = Sdes;
 
-		ca->getLocalSDP()->set_srtp_crypto(static_cast<AudioSrtpSession *> (_rtpSession)->getLocalCryptoInfo());
-		break;
+                ca->getLocalSDP()->set_srtp_crypto (static_cast<AudioSrtpSession *> (_rtpSession)->getLocalCryptoInfo());
+                break;
 
             default:
-	        _debug("Unsupported Rtp Session Exception Type!");
+                _debug ("Unsupported Rtp Session Exception Type!");
                 throw UnsupportedRtpSessionType();
         }
     } else {
@@ -141,15 +159,17 @@ void AudioRtpFactory::start (AudioCodec* audiocodec)
     switch (_rtpSessionType) {
 
         case Sdes:
-	    if (static_cast<AudioSrtpSession *> (_rtpSession)->startRtpThread(audiocodec) != 0) {
+
+            if (static_cast<AudioSrtpSession *> (_rtpSession)->startRtpThread (audiocodec) != 0) {
                 throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioSRtpSession thread");
             }
-	    break;
+
+            break;
 
         case Symmetric:
             _debug ("Starting symmetric rtp thread");
 
-            if (static_cast<AudioSymmetricRtpSession *> (_rtpSession)->startRtpThread(audiocodec) != 0) {
+            if (static_cast<AudioSymmetricRtpSession *> (_rtpSession)->startRtpThread (audiocodec) != 0) {
                 throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioSymmetricRtpSession thread");
             }
 
@@ -157,9 +177,10 @@ void AudioRtpFactory::start (AudioCodec* audiocodec)
 
         case Zrtp:
 
-            if (static_cast<AudioZrtpSession *> (_rtpSession)->startRtpThread(audiocodec) != 0) {
+            if (static_cast<AudioZrtpSession *> (_rtpSession)->startRtpThread (audiocodec) != 0) {
                 throw AudioRtpFactoryException ("RTP: Error: Failed to start AudioZrtpSession thread");
             }
+
             break;
     }
 }
@@ -167,7 +188,7 @@ void AudioRtpFactory::start (AudioCodec* audiocodec)
 void AudioRtpFactory::stop (void)
 {
     ost::MutexLock mutex (_audioRtpThreadMutex);
-    _info("RTP: Stopping audio rtp session");
+    _info ("RTP: Stopping audio rtp session");
 
     if (_rtpSession == NULL) {
         _debugException ("RTP: Error: _rtpSession is null when trying to stop. Returning.");
@@ -178,8 +199,8 @@ void AudioRtpFactory::stop (void)
         switch (_rtpSessionType) {
 
             case Sdes:
-            	delete static_cast<AudioSrtpSession *> (_rtpSession);
-            	break;
+                delete static_cast<AudioSrtpSession *> (_rtpSession);
+                break;
 
             case Symmetric:
                 delete static_cast<AudioSymmetricRtpSession *> (_rtpSession);
@@ -193,13 +214,14 @@ void AudioRtpFactory::stop (void)
         _rtpSession = NULL;
     } catch (...) {
         _debugException ("RTP: Error: Exception caught when stopping the audio rtp session");
-        throw AudioRtpFactoryException("RTP: Error: caught exception in AudioRtpFactory::stop");
+        throw AudioRtpFactoryException ("RTP: Error: caught exception in AudioRtpFactory::stop");
     }
 }
 
 void AudioRtpFactory::updateDestinationIpAddress (void)
 {
     _info ("RTP: Updating IP address");
+
     if (_rtpSession == NULL) {
         throw AudioRtpFactoryException ("RTP: Error: _rtpSession was null when trying to update IP address");
     }
@@ -207,26 +229,26 @@ void AudioRtpFactory::updateDestinationIpAddress (void)
     switch (_rtpSessionType) {
 
         case Sdes:
-	    static_cast<AudioSrtpSession *> (_rtpSession)->updateDestinationIpAddress();
-	    break;
+            static_cast<AudioSrtpSession *> (_rtpSession)->updateDestinationIpAddress();
+            break;
 
         case Symmetric:
             static_cast<AudioSymmetricRtpSession *> (_rtpSession)->updateDestinationIpAddress();
             break;
 
         case Zrtp:
-	    static_cast<AudioZrtpSession *> (_rtpSession)->updateDestinationIpAddress();
+            static_cast<AudioZrtpSession *> (_rtpSession)->updateDestinationIpAddress();
             break;
     }
 }
 
 sfl::AudioSymmetricRtpSession * AudioRtpFactory::getAudioSymetricRtpSession()
 {
-	if ( (_rtpSessionType == Symmetric) && (_rtpSessionType != NULL)) {
-	        return static_cast<AudioSymmetricRtpSession *> (_rtpSession);
-	    } else {
-	        throw AudioRtpFactoryException("RTP: Error: _rtpSession is NULL in getAudioSymetricRtpSession");
-	    }
+    if ( (_rtpSessionType == Symmetric) && (_rtpSessionType != NULL)) {
+        return static_cast<AudioSymmetricRtpSession *> (_rtpSession);
+    } else {
+        throw AudioRtpFactoryException ("RTP: Error: _rtpSession is NULL in getAudioSymetricRtpSession");
+    }
 }
 
 sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession()
@@ -234,35 +256,35 @@ sfl::AudioZrtpSession * AudioRtpFactory::getAudioZrtpSession()
     if ( (_rtpSessionType == Zrtp) && (_rtpSessionType != NULL)) {
         return static_cast<AudioZrtpSession *> (_rtpSession);
     } else {
-        throw AudioRtpFactoryException("RTP: Error: _rtpSession is NULL in getAudioZrtpSession");
+        throw AudioRtpFactoryException ("RTP: Error: _rtpSession is NULL in getAudioZrtpSession");
     }
 }
 
-void AudioRtpFactory::setRemoteCryptoInfo(sfl::SdesNegotiator& nego)
+void AudioRtpFactory::setRemoteCryptoInfo (sfl::SdesNegotiator& nego)
 {
-    if ( _rtpSession && _rtpSessionType && (_rtpSessionType == Sdes)) {
-        static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo(nego);
-    }
-    else {
-        throw AudioRtpFactoryException("RTP: Error: _rtpSession is NULL in setRemoteCryptoInfo");
+    if (_rtpSession && _rtpSessionType && (_rtpSessionType == Sdes)) {
+        static_cast<AudioSrtpSession *> (_rtpSession)->setRemoteCryptoInfo (nego);
+    } else {
+        throw AudioRtpFactoryException ("RTP: Error: _rtpSession is NULL in setRemoteCryptoInfo");
     }
 }
 
-void AudioRtpFactory::sendDtmfDigit(int digit) {
-	switch(_rtpSessionType) {
+void AudioRtpFactory::sendDtmfDigit (int digit)
+{
+    switch (_rtpSessionType) {
 
-	case Sdes:
-		static_cast<AudioSrtpSession *> (_rtpSession)->putDtmfEvent(digit);
-		break;
+        case Sdes:
+            static_cast<AudioSrtpSession *> (_rtpSession)->putDtmfEvent (digit);
+            break;
 
-	case Symmetric:
-		static_cast<AudioSymmetricRtpSession *> (_rtpSession)->putDtmfEvent(digit);
-		break;
+        case Symmetric:
+            static_cast<AudioSymmetricRtpSession *> (_rtpSession)->putDtmfEvent (digit);
+            break;
 
-	case Zrtp:
-		static_cast<AudioZrtpSession *> (_rtpSession)->putDtmfEvent(digit);
-		break;
-	}
+        case Zrtp:
+            static_cast<AudioZrtpSession *> (_rtpSession)->putDtmfEvent (digit);
+            break;
+    }
 }
 }
 
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
index 74de2364b94a16cf169aeadda853ec98ebc4becf..b870333fb055a655aa842e8cd1c833511b6a6d70 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.h
@@ -1,7 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Bacon <pierre-luc.bacon@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
@@ -10,7 +10,7 @@
  *  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.
@@ -39,146 +39,163 @@
 class SdesNegotiator;
 class SIPCall;
 
-namespace sfl {
-    class AudioZrtpSession;
-    class AudioSrtpSession;
-    class AudioSymmetricRtpSession;
+namespace sfl
+{
+class AudioZrtpSession;
+class AudioSrtpSession;
+class AudioSymmetricRtpSession;
 }
 
-namespace sfl {
+namespace sfl
+{
 
-    class AudioZrtpSession;
-    class AudioSrtpSession;
+class AudioZrtpSession;
+class AudioSrtpSession;
 
-    // Possible kind of rtp session
-    typedef enum RtpMethod {
-        Symmetric,
-        Zrtp,
-        Sdes
-    } RtpMethod;
+// Possible kind of rtp session
+typedef enum RtpMethod {
+    Symmetric,
+    Zrtp,
+    Sdes
+} RtpMethod;
 
 
-    class UnsupportedRtpSessionType : public std::logic_error {
-        public:
-        UnsupportedRtpSessionType(const std::string& msg = "") : std::logic_error(msg) {}
-    };
-    
-    class AudioRtpFactoryException : public std::logic_error {
-        public:
-        AudioRtpFactoryException(const std::string& msg = "") : std::logic_error(msg) {}
-    };
+class UnsupportedRtpSessionType : public std::logic_error
+{
+    public:
+        UnsupportedRtpSessionType (const std::string& msg = "") : std::logic_error (msg) {}
+};
+
+class AudioRtpFactoryException : public std::logic_error
+{
+    public:
+        AudioRtpFactoryException (const std::string& msg = "") : std::logic_error (msg) {}
+};
 
-    class AudioRtpFactory {
-        public:
+class AudioRtpFactory
+{
+    public:
         AudioRtpFactory();
-        AudioRtpFactory(SIPCall * ca);
+        AudioRtpFactory (SIPCall * ca);
         ~AudioRtpFactory();
 
-	void initAudioRtpConfig(SIPCall *ca);
-
-	/**
-	 * 	Lazy instantiation method. Create a new RTP session of a given
-	 * type according to the content of the configuration file.
-	 * @param ca A pointer on a SIP call
-	 * @return A new AudioRtpSession object
-	 */
-	void initAudioRtpSession(SIPCall *ca);
-
-	/**
-	 * Start the audio rtp thread of the type specified in the configuration
-	 * file. initAudioRtpSession must have been called prior to that.
-	 * @param None
-	 */
-	void start(AudioCodec*);
-
-	/**
-	 * Stop the audio rtp thread of the type specified in the configuration
-	 * file. initAudioRtpSession must have been called prior to that.
-	 * @param None
-	 */
-	void stop();
-
-	/**
-	 * Update current RTP destination address with one stored in call
-	 * @param None
-	 */
-	void updateDestinationIpAddress (void);
-          
-	/**
-	 * @param None
-	 * @return The internal audio rtp thread of the type specified in the configuration
-	 * file. initAudioRtpSession must have been called prior to that.
-	 */
-	inline void * getAudioRtpSession(void) { return _rtpSession; }
-
-	AudioSymmetricRtpSession * getAudioSymetricRtpSession();
-
-	/** 
-	 * @param None
-	 * @return The internal audio rtp session type
-	 *         Symmetric = 0
-	 *         Zrtp = 1
-	 *         Sdes = 2
-	 */
-	inline RtpMethod getAudioRtpType(void) { return _rtpSessionType; }
-	
-	/**
-	 * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes)
-	 */
-	inline void setAudioRtpType(RtpMethod type) { _rtpSessionType = type; }
-
-	/**
-	 * Manually set the srtpEnable option (usefull for RTP fallback)
-	 */
-	void setSrtpEnabled(bool enable){ _srtpEnabled = enable; }
-
-	/**
-	 * Manually set the keyExchangeProtocol parameter (usefull for RTP fallback)
-	 */
-	void setKeyExchangeProtocol(int proto){ _keyExchangeProtocol = proto; }
-
-	/**
-	 * Manually set the setHelloHashEnabled parameter (usefull for RTP fallback)
-	 */
-	void setHelloHashEnabled(bool enable){ _helloHashEnabled = enable; }
- 
-	/**
-	 * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException
-	 * if the current rtp thread is null, or if it's not of the correct type.
-	 * @return The current AudioZrtpSession thread.
-	 */
-	sfl::AudioZrtpSession * getAudioZrtpSession();
-
-	/**
-	 * Set remote cryptographic info. Should be called after negotiation in SDP
-	 * offer/answer session.
-	 */
-	void setRemoteCryptoInfo(sfl::SdesNegotiator& nego);
-
-	/**
-	 * Send DTMF over RTP (RFC2833). The timestamp and sequence number must be
-	 * incremented as if it was microphone audio. This function change the payload type of the rtp session,
-	 * send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get
-	 * back the codec payload for further audio processing.
-	 */
-	void sendDtmfDigit(int digit);
-        
-private:
-	void * _rtpSession;
-	RtpMethod _rtpSessionType;
-	ost::Mutex _audioRtpThreadMutex;
-
-	// Field used when initializinga udio rtp session
-	// May be set manually or from config using initAudioRtpConfig
-	bool _srtpEnabled;
-
-	// Field used when initializinga udio rtp session
-	// May be set manually or from config using initAudioRtpConfig
-	int _keyExchangeProtocol;
-
-	// Field used when initializinga udio rtp session
-	// May be set manually or from config using initAudioRtpConfig
-	bool _helloHashEnabled;
+        void initAudioRtpConfig (SIPCall *ca);
+
+        /**
+         * 	Lazy instantiation method. Create a new RTP session of a given
+         * type according to the content of the configuration file.
+         * @param ca A pointer on a SIP call
+         * @return A new AudioRtpSession object
+         */
+        void initAudioRtpSession (SIPCall *ca);
+
+        /**
+         * Start the audio rtp thread of the type specified in the configuration
+         * file. initAudioRtpSession must have been called prior to that.
+         * @param None
+         */
+        void start (AudioCodec*);
+
+        /**
+         * Stop the audio rtp thread of the type specified in the configuration
+         * file. initAudioRtpSession must have been called prior to that.
+         * @param None
+         */
+        void stop();
+
+        /**
+         * Update current RTP destination address with one stored in call
+         * @param None
+         */
+        void updateDestinationIpAddress (void);
+
+        /**
+         * @param None
+         * @return The internal audio rtp thread of the type specified in the configuration
+         * file. initAudioRtpSession must have been called prior to that.
+         */
+        inline void * getAudioRtpSession (void) {
+            return _rtpSession;
+        }
+
+        AudioSymmetricRtpSession * getAudioSymetricRtpSession();
+
+        /**
+         * @param None
+         * @return The internal audio rtp session type
+         *         Symmetric = 0
+         *         Zrtp = 1
+         *         Sdes = 2
+         */
+        inline RtpMethod getAudioRtpType (void) {
+            return _rtpSessionType;
+        }
+
+        /**
+         * @param Set internal audio rtp session type (Symmetric, Zrtp, Sdes)
+         */
+        inline void setAudioRtpType (RtpMethod type) {
+            _rtpSessionType = type;
+        }
+
+        /**
+         * Manually set the srtpEnable option (usefull for RTP fallback)
+         */
+        void setSrtpEnabled (bool enable) {
+            _srtpEnabled = enable;
+        }
+
+        /**
+         * Manually set the keyExchangeProtocol parameter (usefull for RTP fallback)
+         */
+        void setKeyExchangeProtocol (int proto) {
+            _keyExchangeProtocol = proto;
+        }
+
+        /**
+         * Manually set the setHelloHashEnabled parameter (usefull for RTP fallback)
+         */
+        void setHelloHashEnabled (bool enable) {
+            _helloHashEnabled = enable;
+        }
+
+        /**
+         * Get the current AudioZrtpSession. Throws an AudioRtpFactoryException
+         * if the current rtp thread is null, or if it's not of the correct type.
+         * @return The current AudioZrtpSession thread.
+         */
+        sfl::AudioZrtpSession * getAudioZrtpSession();
+
+        /**
+         * Set remote cryptographic info. Should be called after negotiation in SDP
+         * offer/answer session.
+         */
+        void setRemoteCryptoInfo (sfl::SdesNegotiator& nego);
+
+        /**
+         * Send DTMF over RTP (RFC2833). The timestamp and sequence number must be
+         * incremented as if it was microphone audio. This function change the payload type of the rtp session,
+         * send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get
+         * back the codec payload for further audio processing.
+         */
+        void sendDtmfDigit (int digit);
+
+    private:
+        void * _rtpSession;
+        RtpMethod _rtpSessionType;
+        ost::Mutex _audioRtpThreadMutex;
+
+        // Field used when initializinga udio rtp session
+        // May be set manually or from config using initAudioRtpConfig
+        bool _srtpEnabled;
+
+        // Field used when initializinga udio rtp session
+        // May be set manually or from config using initAudioRtpConfig
+        int _keyExchangeProtocol;
+
+        // Field used when initializinga udio rtp session
+        // May be set manually or from config using initAudioRtpConfig
+        bool _helloHashEnabled;
 };
 }
 #endif // __AUDIO_RTP_FACTORY_H__
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index cab3a977c668b9f4b853ed8bea7481b33331403a..e118b0361b4ebf257b35c98e7e434ecf909f29e0 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -15,7 +15,7 @@
  *  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.
@@ -45,669 +45,889 @@
 #include "audio/audiolayer.h"
 #include "audio/codecs/audiocodec.h"
 #include "audio/samplerateconverter.h"
+#include "audio/audioprocessing.h"
+#include "audio/noisesuppress.h"
+
 #include "managerimpl.h"
 
 #include <ccrtp/rtp.h>
 #include <cc++/numbers.h> // ost::Time
 
-namespace sfl {
-
-    static const int schedulingTimeout = 100000;
-    static const int expireTimeout = 1000000;
-    
-
-    class AudioRtpSessionException: public std::exception
-    {
-      virtual const char* what() const throw()
-      {
-        return "AudioRtpSessionException occured";
-      }
-    };
-    
-    typedef struct DtmfEvent {
-    	ost::RTPPacket::RFC2833Payload payload;
-    	int length;
-    	bool newevent;
-    } DtmfEvent;
-
-    typedef list<DtmfEvent *> EventQueue;
-
-    template <typename D>
-    class AudioRtpSession : public ost::Thread, public ost::TimerPort {
-        public:
-            /**
-            * Constructor
-            * @param sipcall The pointer on the SIP call
-            */
-            AudioRtpSession (ManagerImpl * manager, SIPCall* sipcall);
-
-            ~AudioRtpSession();
-
-            // Thread associated method
-            virtual void run ();
-            
-            int startRtpThread(AudioCodec*);
-
-            /**
-             * Used mostly when receiving a reinvite
-             */
-            void updateDestinationIpAddress(void);
-
-            void putDtmfEvent(int digit);
-
-            /**
-            	 * Send DTMF over RTP (RFC2833). The timestamp and sequence number must be
-            	 * incremented as if it was microphone audio. This function change the payload type of the rtp session,
-            	 * send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get
-            	 * back the codec payload for further audio processing.
-            	 */
-            void sendDtmfEvent(sfl::DtmfEvent *dtmf);
-
-            inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) {
-                return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
-            }
+#include <speex/speex_jitter.h>
 
-            int computeNbByteAudioLayer (float codecFrameSize) {
-                return (int) ( ((float) _converterSamplingRate * codecFrameSize * sizeof(SFLDataFormat))/ 1000.0);
-            }
+#include "audio/jitterbuf.h"
 
-        private:
-        
-            void initBuffers(void);
-            
-            void setSessionTimeouts(void);
-            void setSessionMedia(AudioCodec*);
-            void setDestinationIpAddress(void);
-                
-            int processDataEncode(void);
-            void processDataDecode(unsigned char * spkrData, unsigned int size);
-          
-            void sendMicData();
-            void receiveSpeakerData ();
-            
-            ost::Time * _time;
-   
-            // This semaphore is not used 
-            // but is needed in order to avoid 
-            // ambiguous compiling problem.
-            // It is set to 0, and since it is
-            // optional in ost::thread, then 
-            // it amounts to the same as doing
-            // start() with no semaphore at all. 
-            ost::Semaphore * _mainloopSemaphore;
-
-            // Main destination address for this rtp session.
-            // Stored in case or reINVITE, which may require to forget
-            // this destination and update a new one.
-            ost::InetHostAddress _remote_ip;
-
-
-            // Main destination port for this rtp session.
-            // Stored in case reINVITE, which may require to forget
-            // this destination and update a new one
-            unsigned short _remote_port;
-                     
-            AudioCodec * _audiocodec;
-            
-            AudioLayer * _audiolayer;
-                                                 
-            /** Mic-data related buffers */
-            SFLDataFormat* _micData;
-            SFLDataFormat* _micDataConverted;
-            unsigned char* _micDataEncoded;
-
-            /** Speaker-data related buffers */
-            SFLDataFormat* _spkrDataDecoded;
-            SFLDataFormat* _spkrDataConverted;
-
-            /** Sample rate converter object */
-            SamplerateConverter * _converter;
-
-            /** Variables to process audio stream: sample rate for playing sound (typically 44100HZ) */
-            int _layerSampleRate;  
-
-            /** Sample rate of the codec we use to encode and decode (most of time 8000HZ) */
-            int _codecSampleRate;
-
-            /** Length of the sound frame we capture in ms (typically 20ms) */
-            int _layerFrameSize; 
-
-            /** Codecs frame size in samples (20 ms => 882 at 44.1kHz)
-                The exact value is stored in the codec */
-            int _codecFrameSize;
-
-            /** Speaker buffer length in samples once the data are resampled
-             *  (used for mixing and recording)
-             */
-            int _nSamplesSpkr; 
-
-            /** Mic buffer length in samples once the data are resampled
-             *  (used for mixing and recording)
-             */
-            int _nSamplesMic;
-            
-            /**
-             * Maximum number of sample for audio buffers (mic and spkr)
-             */
-            int _nbSamplesMax; 
-            
-            /**
-             * Manager instance. 
-             */
-             ManagerImpl * _manager;
-
-             /**
-              * Sampling rate of audio converter
-              */
-             int _converterSamplingRate;
-
-             /**
-              * Timestamp for this session
-              */
-             int _timestamp;
-
-             /**
-              * Time counter used to trigger incoming call notification
-              */
-             int _countNotificationTime;
-
-             /**
-              * EventQueue used to store list of DTMF-
-              */
-             EventQueue _eventQueue;
-            
-        protected:
-             SIPCall * _ca;
-    };    
-    
-    template <typename D>
-    AudioRtpSession<D>::AudioRtpSession(ManagerImpl * manager, SIPCall * sipcall) :
-     _time (new ost::Time()), 
-     _mainloopSemaphore(0),
-     _audiocodec (NULL),
-     _audiolayer (NULL),
-     _micData (NULL), 
-     _micDataConverted (NULL), 
-     _micDataEncoded (NULL), 
-     _spkrDataDecoded (NULL), 
-     _spkrDataConverted (NULL),
-     _converter (NULL),
-     _layerSampleRate(0),
-     _codecSampleRate(0), 
-     _layerFrameSize(0),
-     _manager(manager),
-     _converterSamplingRate(0),
-     _timestamp(0),
-     _countNotificationTime(0),
-     _ca (sipcall)
-    {
-        setCancel (cancelDefault);
-
-        assert(_ca);
-        
-        _info ("Rtp: Local audio port %i will be used", _ca->getLocalAudioPort());
-
-        //mic, we receive from soundcard in stereo, and we send encoded
-        _audiolayer = _manager->getAudioDriver();
-        
-        if (_audiolayer == NULL) { throw AudioRtpSessionException(); }
-        
-        _layerFrameSize = _audiolayer->getFrameSize(); // in ms
-        _layerSampleRate = _audiolayer->getSampleRate();
+#include <fstream>
 
-    }
-    
-    template <typename D>
-    AudioRtpSession<D>::~AudioRtpSession()
-    {
-        _debug ("RTP: Delete AudioRtpSession instance");
-
-        try {
-            terminate();
-        } catch (...) {
-            _debugException ("Thread destructor didn't terminate correctly");
-            throw;
+// Frequency (in packet number)
+#define RTP_TIMESTAMP_RESET_FREQ 100
+
+// Factor use to increase volume in fade in
+#define FADEIN_STEP_SIZE 4;
+
+namespace sfl
+{
+
+static const int schedulingTimeout = 100000;
+static const int expireTimeout = 1000000;
+
+
+class AudioRtpSessionException: public std::exception
+{
+        virtual const char* what() const throw() {
+            return "AudioRtpSessionException occured";
         }
+};
+
+typedef struct DtmfEvent {
+    ost::RTPPacket::RFC2833Payload payload;
+    int length;
+    bool newevent;
+} DtmfEvent;
+
+typedef list<DtmfEvent *> EventQueue;
+
+
+template <typename D>
+class AudioRtpSession : public ost::Thread, public ost::TimerPort
+{
+    public:
+        /**
+        * Constructor
+        * @param sipcall The pointer on the SIP call
+        */
+        AudioRtpSession (ManagerImpl * manager, SIPCall* sipcall);
+
+        ~AudioRtpSession();
+
+        // Thread associated method
+        virtual void run ();
+
+        int startRtpThread (AudioCodec*);
+
+        /**
+         * Used mostly when receiving a reinvite
+         */
+        void updateDestinationIpAddress (void);
+
+        void putDtmfEvent (int digit);
 
-        _manager->getAudioDriver()->getMainBuffer()->unBindAll(_ca->getCallId());
+        /**
+        * Send DTMF over RTP (RFC2833). The timestamp and sequence number must be
+        * incremented as if it was microphone audio. This function change the payload type of the rtp session,
+        * send the appropriate DTMF digit using this payload, discard coresponding data from mainbuffer and get
+        * back the codec payload for further audio processing.
+        */
+        void sendDtmfEvent (sfl::DtmfEvent *dtmf);
 
+        inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) {
+            return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
+        }
+
+        int computeNbByteAudioLayer (float codecFrameSize) {
+            return (int) ( ( (float) _converterSamplingRate * codecFrameSize * sizeof (SFLDataFormat)) / 1000.0);
+        }
+
+    private:
+
+        /**
+         * Allocate memory for RTP buffers and fill them with zeros
+         */
+        void initBuffers (void);
+
+        /**
+         * Set RTP Sockets send/receive timeouts
+         */
+        void setSessionTimeouts (void);
+
+        /**
+         * Set the audio codec for this RTP session
+         */
+        void setSessionMedia (AudioCodec*);
+
+        /**
+         * Retreive destination address for this session. Stored in CALL
+         */
+        void setDestinationIpAddress (void);
+
+        /**
+         * Encode audio data from mainbuffer
+         */
+        int processDataEncode (void);
+
+        /**
+         * Decode audio data received from peer
+         */
+        void processDataDecode (unsigned char * spkrData, unsigned int size);
+
+        /**
+         * Send encoded data to peer
+         */
+        void sendMicData();
+
+        /**
+         * Receive data from peer
+         */
+        void receiveSpeakerData ();
+
+        /**
+        * Ramp In audio data to avoid audio click from peer
+        */
+        bool fadeIn (SFLDataFormat *audio, int size, SFLDataFormat *factor);
+
+        ost::Time * _time;
+
+        // This semaphore is not used
+        // but is needed in order to avoid
+        // ambiguous compiling problem.
+        // It is set to 0, and since it is
+        // optional in ost::thread, then
+        // it amounts to the same as doing
+        // start() with no semaphore at all.
+        ost::Semaphore * _mainloopSemaphore;
+
+        // Main destination address for this rtp session.
+        // Stored in case or reINVITE, which may require to forget
+        // this destination and update a new one.
+        ost::InetHostAddress _remote_ip;
+
+
+        // Main destination port for this rtp session.
+        // Stored in case reINVITE, which may require to forget
+        // this destination and update a new one
+        unsigned short _remote_port;
+
+        // Pointer to the session's codec
+        AudioCodec * _audiocodec;
+
+        // Pointer to audio layer
+        AudioLayer * _audiolayer;
+
+        /** Mic-data related buffers */
+        SFLDataFormat* _micData;
+        SFLDataFormat* _micDataConverted;
+        unsigned char* _micDataEncoded;
+
+        /** Speaker-data related buffers */
+        SFLDataFormat* _spkrDataDecoded;
+        SFLDataFormat* _spkrDataConverted;
+
+        /** Sample rate converter object */
+        SamplerateConverter * _converter;
+
+        /** Variables to process audio stream: sample rate for playing sound (typically 44100HZ) */
+        int _layerSampleRate;
+
+        /** Sample rate of the codec we use to encode and decode (most of time 8000HZ) */
+        int _codecSampleRate;
+
+        /** Length of the sound frame we capture in ms (typically 20ms) */
+        int _layerFrameSize;
+
+        /** Codecs frame size in samples (20 ms => 882 at 44.1kHz)
+            The exact value is stored in the codec */
+        int _codecFrameSize;
+
+        /** Speaker buffer length in samples once the data are resampled
+         *  (used for mixing and recording)
+         */
+        int _nSamplesSpkr;
+
+        /** Mic buffer length in samples once the data are resampled
+         *  (used for mixing and recording)
+         */
+        int _nSamplesMic;
+
+        /**
+         * Maximum number of sample for audio buffers (mic and spkr)
+         */
+        int _nbSamplesMax;
+
+        /**
+         * Manager instance.
+         */
+        ManagerImpl * _manager;
+
+        /**
+         * Sampling rate of audio converter
+         */
+        int _converterSamplingRate;
+
+        /**
+         * Timestamp for this session
+         */
+        int _timestamp;
+
+        /**
+         * Timestamp incrementation value based on codec period length (framesize)
+         * except for G722 which require a 8 kHz incrementation.
+         */
+        int _timestampIncrement;
+
+        /**
+         * Timestamp reset freqeuncy specified in number of packet sent
+         */
+        short _timestampCount;
+
+        /**
+         * Time counter used to trigger incoming call notification
+         */
+        int _countNotificationTime;
+
+        /**
+         * EventQueue used to store list of DTMF-
+         */
+        EventQueue _eventQueue;
+
+        /**
+         * Packet size in ms
+         */
+        int _packetLength;
+
+        int _ts;
+
+        /**
+         * Current time in ms
+         */
+        int _currentTime;
+
+        /**
+         * State of mic fade in
+         */
+        bool _micFadeInComplete;
+
+        /**
+           * State of spkr fade in
+         */
+        bool _spkrFadeInComplete;
+
+        /**
+         * Ampliturde factor to fade in mic data
+         */
+        SFLDataFormat _micAmplFactor;
+
+        /**
+         * Amplitude factor to fade in spkr data
+         */
+        SFLDataFormat _spkrAmplFactor;
+
+        /**
+         * Audio process containing noise reduction engine
+         */
+        AudioProcessing *_audioProcess;
+
+        /**
+         * Noise reduction engine
+         */
+        NoiseSuppress *_noiseSuppress;
+
+    protected:
+
+        SIPCall * _ca;
+
+        bool onRTPPacketRecv (ost::IncomingRTPPkt&);
+};
+
+template <typename D>
+AudioRtpSession<D>::AudioRtpSession (ManagerImpl * manager, SIPCall * sipcall) :
+        _time (new ost::Time()),
+        _mainloopSemaphore (0),
+        _audiocodec (NULL),
+        _audiolayer (NULL),
+        _micData (NULL),
+        _micDataConverted (NULL),
+        _micDataEncoded (NULL),
+        _spkrDataDecoded (NULL),
+        _spkrDataConverted (NULL),
+        _converter (NULL),
+        _layerSampleRate (0),
+        _codecSampleRate (0),
+        _layerFrameSize (0),
+        _manager (manager),
+        _converterSamplingRate (0),
+        _timestamp (0),
+        _timestampIncrement (0),
+        _timestampCount (0),
+        _countNotificationTime (0),
+        _micFadeInComplete (false),
+        _spkrFadeInComplete (false),
+        _micAmplFactor (32000),
+        _spkrAmplFactor (32000),
+        _audioProcess (NULL),
+        _noiseSuppress (NULL),
+        _ca (sipcall)
+{
+    setCancel (cancelDefault);
+
+    assert (_ca);
+
+    _info ("Rtp: Local audio port %i will be used", _ca->getLocalAudioPort());
+
+    //mic, we receive from soundcard in stereo, and we send encoded
+    _audiolayer = _manager->getAudioDriver();
+
+    if (_audiolayer == NULL) {
+        throw AudioRtpSessionException();
+    }
+
+    _layerFrameSize = _audiolayer->getFrameSize(); // in ms
+    _layerSampleRate = _audiolayer->getSampleRate();
+
+    _ts= 0;
+    _packetLength = 20;
+    _currentTime = 0;
+
+}
+
+template <typename D>
+AudioRtpSession<D>::~AudioRtpSession()
+{
+    _debug ("RTP: Delete AudioRtpSession instance");
+
+    try {
+        terminate();
+    } catch (...) {
+        _debugException ("Thread destructor didn't terminate correctly");
+        throw;
+    }
+
+    _manager->getAudioDriver()->getMainBuffer()->unBindAll (_ca->getCallId());
+
+    if (_micData) {
         delete [] _micData;
+        _micData = NULL;
+    }
+
+    if (_micDataConverted) {
         delete [] _micDataConverted;
+        _micDataConverted = NULL;
+    }
+
+    if (_micDataEncoded) {
         delete [] _micDataEncoded;
+        _micDataEncoded = NULL;
+    }
+
+    if (_spkrDataDecoded) {
         delete [] _spkrDataDecoded;
-        delete [] _spkrDataConverted;
-        delete _time;
-        delete _converter;
+        _spkrDataDecoded = NULL;
+    }
 
-        if (_audiocodec) {
-        	delete _audiocodec; _audiocodec = NULL;
-        }
+    if (_spkrDataConverted) {
+        delete [] _spkrDataConverted;
+        _spkrDataConverted = NULL;
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::initBuffers() 
-    {
-    	// Set sampling rate, main buffer choose the highest one
-        _manager->getAudioDriver()->getMainBuffer()->setInternalSamplingRate(_codecSampleRate);
-
-        // may be different than one already setted
-        _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
-        // initialize SampleRate converter using AudioLayer's sampling rate
-        // (internal buffers initialized with maximal sampling rate and frame size)
-        _converter = new SamplerateConverter(_layerSampleRate, _layerFrameSize);
+    delete _time;
+    delete _converter;
 
-        int nbSamplesMax = (int)(_codecSampleRate * _layerFrameSize /1000)*2;
-        _micData = new SFLDataFormat[nbSamplesMax];
-        _micDataConverted = new SFLDataFormat[nbSamplesMax];
-        _micDataEncoded = new unsigned char[nbSamplesMax];
-        _spkrDataConverted = new SFLDataFormat[nbSamplesMax];
-        _spkrDataDecoded = new SFLDataFormat[nbSamplesMax];
+    if (_audiocodec) {
+        delete _audiocodec;
+        _audiocodec = NULL;
+    }
 
-        _manager->addStream(_ca->getCallId());
+    if (_audioProcess) {
+        delete _audioProcess;
+        _audioProcess = NULL;
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::setSessionTimeouts(void) 
-    {
-        try {
-            static_cast<D*>(this)->setSchedulingTimeout (schedulingTimeout);
-            static_cast<D*>(this)->setExpireTimeout (expireTimeout);
-        } catch (...) {
-            _debugException ("Initialization failed while setting timeouts");
-            throw AudioRtpSessionException();
-        }
+
+    if (_noiseSuppress) {
+        delete _noiseSuppress;
+        _noiseSuppress = NULL;
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::setSessionMedia(AudioCodec* audiocodec)
-    {
-        _audiocodec = audiocodec;
-
-        _debug ("RTP: Init codec payload %i", _audiocodec->getPayload());
-
-        _codecSampleRate = _audiocodec->getClockRate();
-        _codecFrameSize = _audiocodec->getFrameSize();
-
-        _debug("RTP: Codec sampling rate: %d", _codecSampleRate);
-        _debug("RTP: Codec frame size: %d", _codecFrameSize);
-
-        //TODO: figure out why this is necessary.
-        if (_audiocodec->getPayload() == 9) {
-            _debug ("RTP: Setting payload format to G722");
-            static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
-        } else if (_audiocodec->hasDynamicPayload()) {
-            _debug ("RTP: Setting a dynamic payload format");
-            static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
-        } else if (!_audiocodec->hasDynamicPayload() && _audiocodec->getPayload() != 9) {
-            _debug ("RTP: Setting a static payload format");
-            static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
-        }
+}
+
+template <typename D>
+void AudioRtpSession<D>::initBuffers()
+{
+    // Set sampling rate, main buffer choose the highest one
+    _manager->getAudioDriver()->getMainBuffer()->setInternalSamplingRate (_codecSampleRate);
+
+    // may be different than one already set
+    _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+
+    // initialize SampleRate converter using AudioLayer's sampling rate
+    // (internal buffers initialized with maximal sampling rate and frame size)
+    _converter = new SamplerateConverter (_layerSampleRate, _layerFrameSize);
+
+    int nbSamplesMax = (int) (_codecSampleRate * _layerFrameSize /1000) *2;
+    _micData = new SFLDataFormat[nbSamplesMax];
+    _micDataConverted = new SFLDataFormat[nbSamplesMax];
+    _micDataEncoded = new unsigned char[nbSamplesMax*2];
+    _spkrDataConverted = new SFLDataFormat[nbSamplesMax];
+    _spkrDataDecoded = new SFLDataFormat[nbSamplesMax];
+
+
+    memset (_micData, 0, nbSamplesMax*sizeof (SFLDataFormat));
+    memset (_micDataConverted, 0, nbSamplesMax*sizeof (SFLDataFormat));
+    memset (_micDataEncoded, 0, nbSamplesMax*2);
+    memset (_spkrDataConverted, 0, nbSamplesMax*sizeof (SFLDataFormat));
+    memset (_spkrDataDecoded, 0, nbSamplesMax*sizeof (SFLDataFormat));
+
+    _manager->addStream (_ca->getCallId());
+}
+
+template <typename D>
+void AudioRtpSession<D>::setSessionTimeouts (void)
+{
+    try {
+        static_cast<D*> (this)->setSchedulingTimeout (schedulingTimeout);
+        static_cast<D*> (this)->setExpireTimeout (expireTimeout);
+    } catch (...) {
+        _debugException ("Initialization failed while setting timeouts");
+        throw AudioRtpSessionException();
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::setDestinationIpAddress(void)
-    {
-        if (_ca == NULL) {
-        	_error ("RTP: Sipcall is gone.");
-			throw AudioRtpSessionException();
-        }
-        
-        _info ("RTP: Setting IP address for the RTP session");
+}
 
-        // Store remote ip in case we would need to forget current destination
-        _remote_ip = ost::InetHostAddress(_ca->getLocalSDP()->get_remote_ip().c_str());
+template <typename D>
+void AudioRtpSession<D>::setSessionMedia (AudioCodec* audiocodec)
+{
+    _audiocodec = audiocodec;
+
+    _debug ("RTP: Init codec payload %i", _audiocodec->getPayload());
+
+    _codecSampleRate = _audiocodec->getClockRate();
+    _codecFrameSize = _audiocodec->getFrameSize();
+
+    // G722 requires timestamp to be incremented at 8 kHz
+    if (_audiocodec->getPayload() == 9)
+        _timestampIncrement = 160;
+    else
+        _timestampIncrement = _codecFrameSize;
+
+
+    _debug ("RTP: Codec sampling rate: %d", _codecSampleRate);
+    _debug ("RTP: Codec frame size: %d", _codecFrameSize);
+    _debug ("RTP: RTP timestamp increment: %d", _timestampIncrement);
+
+    // Even if specified as a 16 kHz codec, G722 requires rtp sending rate to be 8 kHz
+    if (_audiocodec->getPayload() == 9) {
+        _debug ("RTP: Setting G722 payload format");
+        static_cast<D*> (this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
+    } else if (_audiocodec->hasDynamicPayload()) {
+        _debug ("RTP: Setting dynamic payload format");
+        static_cast<D*> (this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
+    } else if (!_audiocodec->hasDynamicPayload() && _audiocodec->getPayload() != 9) {
+        _debug ("RTP: Setting static payload format");
+        static_cast<D*> (this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
+    }
 
-        if (!_remote_ip) {
-            _warn("RTP: Target IP address (%s) is not correct!",
-						_ca->getLocalSDP()->get_remote_ip().data());
-            return;
-        }
+}
 
-        // Store remote port in case we would need to forget current destination
-        _remote_port = (unsigned short) _ca->getLocalSDP()->get_remote_audio_port();
+template <typename D>
+void AudioRtpSession<D>::setDestinationIpAddress (void)
+{
+    if (_ca == NULL) {
+        _error ("RTP: Sipcall is gone.");
+        throw AudioRtpSessionException();
+    }
 
-        _info("RTP: New remote address for session: %s:%d",
-        _ca->getLocalSDP()->get_remote_ip().data(), _remote_port);
+    _info ("RTP: Setting IP address for the RTP session");
 
-        if (! static_cast<D*>(this)->addDestination (_remote_ip, _remote_port)) {
-        	_warn("RTP: Can't add new destination to session!");
-			return;
-        }
+    // Store remote ip in case we would need to forget current destination
+    _remote_ip = ost::InetHostAddress (_ca->getLocalSDP()->get_remote_ip().c_str());
+
+    if (!_remote_ip) {
+        _warn ("RTP: Target IP address (%s) is not correct!",
+               _ca->getLocalSDP()->get_remote_ip().data());
+        return;
     }
 
-    template <typename D>
-    void AudioRtpSession<D>::updateDestinationIpAddress(void)
-    {
-        // Destination address are stored in a list in ccrtp
-        // This method remove the current destination entry
+    // Store remote port in case we would need to forget current destination
+    _remote_port = (unsigned short) _ca->getLocalSDP()->get_remote_audio_port();
 
-        if(!static_cast<D*>(this)->forgetDestination(_remote_ip, _remote_port, _remote_port+1))
-        	_warn("RTP: Could not remove previous destination");
+    _info ("RTP: New remote address for session: %s:%d",
+           _ca->getLocalSDP()->get_remote_ip().data(), _remote_port);
 
-        // new destination is stored in call
-        // we just need to recall this method
-        setDestinationIpAddress();
+    if (! static_cast<D*> (this)->addDestination (_remote_ip, _remote_port)) {
+        _warn ("RTP: Can't add new destination to session!");
+        return;
     }
-    
-    template<typename D>
-    void AudioRtpSession<D>::putDtmfEvent(int digit)
-    {
+}
+
+template <typename D>
+void AudioRtpSession<D>::updateDestinationIpAddress (void)
+{
+    // Destination address are stored in a list in ccrtp
+    // This method remove the current destination entry
+
+    if (!static_cast<D*> (this)->forgetDestination (_remote_ip, _remote_port, _remote_port+1))
+        _warn ("RTP: Could not remove previous destination");
+
+    // new destination is stored in call
+    // we just need to recall this method
+    setDestinationIpAddress();
+}
+
+template<typename D>
+void AudioRtpSession<D>::putDtmfEvent (int digit)
+{
 
-    	sfl::DtmfEvent *dtmf = new sfl::DtmfEvent();
+    sfl::DtmfEvent *dtmf = new sfl::DtmfEvent();
 
-		dtmf->payload.event = digit;
-    	dtmf->payload.ebit = false; 			// end of event bit
-    	dtmf->payload.rbit = false;  		// reserved bit
-    	dtmf->payload.duration = 1; 	        // duration for this event
-    	dtmf->newevent = true;
-    	dtmf->length = 1000;
+    dtmf->payload.event = digit;
+    dtmf->payload.ebit = false; 			// end of event bit
+    dtmf->payload.rbit = false;  		// reserved bit
+    dtmf->payload.duration = 1; 	        // duration for this event
+    dtmf->newevent = true;
+    dtmf->length = 1000;
 
-    	_eventQueue.push_back(dtmf);
+    _eventQueue.push_back (dtmf);
 
-    	_debug("RTP: Put Dtmf Event %d", _eventQueue.size());
+    _debug ("RTP: Put Dtmf Event %d", _eventQueue.size());
 
+}
+
+template<typename D>
+void AudioRtpSession<D>::sendDtmfEvent (sfl::DtmfEvent *dtmf)
+{
+    _debug ("RTP: Send Dtmf %d", _eventQueue.size());
+
+    _timestamp += 160;
+
+    // discard equivalent size of audio
+    processDataEncode();
+
+    // change Payload type for DTMF payload
+    static_cast<D*> (this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) 101, 8000));
+
+    // Set marker in case this is a new Event
+    if (dtmf->newevent)
+        static_cast<D*> (this)->setMark (true);
+
+    static_cast<D*> (this)->putData (_timestamp, (const unsigned char*) (& (dtmf->payload)), sizeof (ost::RTPPacket::RFC2833Payload));
+
+    // This is no more a new event
+    if (dtmf->newevent) {
+        dtmf->newevent = false;
+        static_cast<D*> (this)->setMark (false);
     }
 
-    template<typename D>
-    void AudioRtpSession<D>::sendDtmfEvent(sfl::DtmfEvent *dtmf)
-    {
-		_debug("RTP: Send Dtmf %d", _eventQueue.size());
+    // get back the payload to audio
+    static_cast<D*> (this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
+
+    // decrease length remaining to process for this event
+    dtmf->length -= 160;
 
-		 _timestamp += 160;
+    dtmf->payload.duration += 1;
 
-		 // discard equivalent size of audio
-		processDataEncode();
+    // next packet is going to be the last one
+    if ( (dtmf->length - 160) < 160)
+        dtmf->payload.ebit = true;
 
-		 // change Payload type for DTMF payload
-		 static_cast<D*>(this)->setPayloadFormat (ost::DynamicPayloadFormat ( (ost::PayloadType) 101, 8000));
+    if (dtmf->length < 160) {
+        delete dtmf;
+        _eventQueue.pop_front();
+    }
+}
+
+template <typename D>
+bool onRTPPacketRecv (ost::IncomingRTPPkt&)
+{
+    _debug ("AudioRtpSession: onRTPPacketRecv");
+
+    return true;
+}
 
-		 // Set marker in case this is a new Event
-		 if(dtmf->newevent)
-			 static_cast<D*>(this)->setMark (true);
 
-		 static_cast<D*>(this)->putData (_timestamp, (const unsigned char*)(&(dtmf->payload)), sizeof(ost::RTPPacket::RFC2833Payload));
+template <typename D>
+int AudioRtpSession<D>::processDataEncode (void)
+{
+    assert (_audiocodec);
+    assert (_audiolayer);
 
-		 // This is no more a new event
-		 if(dtmf->newevent) {
-			 dtmf->newevent = false;
-			 static_cast<D*>(this)->setMark (false);
-		 }
+    int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
-		 // get back the payload to audio
-		 static_cast<D*>(this)->setPayloadFormat (ost::StaticPayloadFormat ( (ost::StaticPayloadType) _audiocodec->getPayload()));
+    // compute codec framesize in ms
+    float fixed_codec_framesize = computeCodecFrameSize (_audiocodec->getFrameSize(), _audiocodec->getClockRate());
 
-		 // decrease length remaining to process for this event
-		 dtmf->length -= 160;
+    // compute nb of byte to get coresponding to 20 ms at audio layer frame size (44.1 khz)
+    int maxBytesToGet = computeNbByteAudioLayer (fixed_codec_framesize);
 
-		 dtmf->payload.duration += 1;
+    // available bytes inside ringbuffer
+    int availBytesFromMic = _manager->getAudioDriver()->getMainBuffer()->availForGet (_ca->getCallId());
 
-		 // next packet is going to be the last one
-		 if((dtmf->length - 160) < 160)
-			dtmf->payload.ebit = true;
+    // set available byte to maxByteToGet
+    int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet;
 
-		 if(dtmf->length < 160) {
-			 delete dtmf;
-		     _eventQueue.pop_front();
-		 }
+    if (bytesAvail == 0) {
+        memset (_micDataEncoded, 0, sizeof (SFLDataFormat));
+        return _audiocodec->getFrameSize();
     }
 
-    template <typename D>
-    int AudioRtpSession<D>::processDataEncode(void)
-    {
-        assert(_audiocodec);
-        assert(_audiolayer);
+    // Get bytes from micRingBuffer to data_from_mic
+    int nbSample = _manager->getAudioDriver()->getMainBuffer()->getData (_micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat);
 
-	
-        int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+    if (!_micFadeInComplete)
+        _micFadeInComplete = fadeIn (_micData, nbSample, &_micAmplFactor);
+
+    if (nbSample == 0)
+        return nbSample;
+
+    // nb bytes to be sent over RTP
+    int compSize = 0;
+
+    // test if resampling is required
+    if (_audiocodec->getClockRate() != _mainBufferSampleRate) {
+        int nb_sample_up = nbSample;
 
-        // compute codec framesize in ms
-        float fixed_codec_framesize = computeCodecFrameSize (_audiocodec->getFrameSize(), _audiocodec->getClockRate());
+        _nSamplesMic = nbSample;
 
-        // compute nb of byte to get coresponding to 20 ms at audio layer frame size (44.1 khz)
-        int maxBytesToGet = computeNbByteAudioLayer (fixed_codec_framesize);
+        nbSample = _converter->downsampleData (_micData , _micDataConverted , _audiocodec->getClockRate(), _mainBufferSampleRate, nb_sample_up);
 
-        // available bytes inside ringbuffer
-        int availBytesFromMic = _manager->getAudioDriver()->getMainBuffer()->availForGet(_ca->getCallId());
+        if (_manager->audioPreference.getNoiseReduce())
+            _audioProcess->processAudio (_micDataConverted, nbSample*sizeof (SFLDataFormat));
 
-        // set available byte to maxByteToGet
-        int bytesAvail = (availBytesFromMic < maxBytesToGet) ? availBytesFromMic : maxBytesToGet;
+        compSize = _audiocodec->codecEncode (_micDataEncoded, _micDataConverted, nbSample*sizeof (SFLDataFormat));
 
-        if (bytesAvail == 0)
-            return 0;
+    } else {
 
-        // Get bytes from micRingBuffer to data_from_mic
-        int nbSample = _manager->getAudioDriver()->getMainBuffer()->getData(_micData , bytesAvail, 100, _ca->getCallId()) / sizeof (SFLDataFormat);
+        _nSamplesMic = nbSample;
 
-        // nb bytes to be sent over RTP
-        int compSize = 0;
+        if (_manager->audioPreference.getNoiseReduce())
+            _audioProcess->processAudio (_micData, nbSample*sizeof (SFLDataFormat));
+
+        // no resampling required
+        compSize = _audiocodec->codecEncode (_micDataEncoded, _micData, nbSample*sizeof (SFLDataFormat));
+
+    }
+
+    return compSize;
+}
+
+template <typename D>
+void AudioRtpSession<D>::processDataDecode (unsigned char * spkrData, unsigned int size)
+{
+    if (_audiocodec != NULL) {
+
+
+        int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+
+        // Return the size of data in bytes
+        int expandedSize = _audiocodec->codecDecode (_spkrDataDecoded , spkrData , size);
+
+        // buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes
+        int nbSample = expandedSize / sizeof (SFLDataFormat);
+
+        if (!_spkrFadeInComplete)
+            _spkrFadeInComplete = fadeIn (_spkrDataDecoded, nbSample, &_spkrAmplFactor);
 
         // test if resampling is required
         if (_audiocodec->getClockRate() != _mainBufferSampleRate) {
-            int nb_sample_up = nbSample;
 
-            _nSamplesMic = nbSample;
+            // Do sample rate conversion
+            int nb_sample_down = nbSample;
+
+            nbSample = _converter->upsampleData (_spkrDataDecoded, _spkrDataConverted, _codecSampleRate, _mainBufferSampleRate, nb_sample_down);
+
+            // Store the number of samples for recording
+            _nSamplesSpkr = nbSample;
 
-            nbSample = _converter->downsampleData (_micData , _micDataConverted , _audiocodec->getClockRate(), _mainBufferSampleRate, nb_sample_up);
+            // put data in audio layer, size in byte
+            _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId());
 
-            compSize = _audiocodec->codecEncode (_micDataEncoded, _micDataConverted, nbSample*sizeof (int16));
 
         } else {
+            // Store the number of samples for recording
+            _nSamplesSpkr = nbSample;
 
-        	_nSamplesMic = nbSample;
+            // put data in audio layer, size in byte
+            _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataDecoded, expandedSize, 100, _ca->getCallId());
+        }
+
+        // Notify (with a beep) an incoming call when there is already a call
+        if (_manager->incomingCallWaiting() > 0) {
+            _countNotificationTime += _time->getSecond();
+            int countTimeModulo = _countNotificationTime % 5000;
+
+            // _debug("countNotificationTime: %d\n", countNotificationTime);
+            // _debug("countTimeModulo: %d\n", countTimeModulo);
+            if ( (countTimeModulo - _countNotificationTime) < 0) {
+                _manager->notificationIncomingCall();
+            }
 
-            // no resampling required
-            compSize = _audiocodec->codecEncode (_micDataEncoded, _micData, nbSample*sizeof (int16));
+            _countNotificationTime = countTimeModulo;
         }
 
-        return compSize;
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::processDataDecode(unsigned char * spkrData, unsigned int size) {
+}
 
-        if (_audiocodec != NULL) {
+template <typename D>
+void AudioRtpSession<D>::sendMicData()
+{
+    // STEP:
+    //   1. get data from mic
+    //   2. convert it to int16 - good sample, good rate
+    //   3. encode it
+    //   4. send it
+
+    // Increment timestamp for outgoing packet
+    _timestamp += _timestampIncrement;
+
+    if (!_audiolayer) {
+        _debug ("No audiolayer available for MIC");
+        return;
+    }
 
+    if (!_audiocodec) {
+        _debug ("No audiocodec available for MIC");
+        return;
+    }
 
-	    int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+    int compSize = processDataEncode();
 
-            // Return the size of data in bytes
-            int expandedSize = _audiocodec->codecDecode (_spkrDataDecoded , spkrData , size);
+    // putData put the data on RTP queue, sendImmediate bypass this queue
+    static_cast<D*> (this)->putData (_timestamp, _micDataEncoded, compSize);
+}
 
-            // buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes
-            int nbSample = expandedSize / sizeof (SFLDataFormat);
 
-            // test if resampling is required
-            if (_audiocodec->getClockRate() != _mainBufferSampleRate) {
+template <typename D>
+void AudioRtpSession<D>::receiveSpeakerData ()
+{
 
-                // Do sample rate conversion
-                int nb_sample_down = nbSample;
+    if (!_audiolayer) {
+        _debug ("No audiolayer available for speaker");
+        return;
+    }
 
-                nbSample = _converter->upsampleData (_spkrDataDecoded, _spkrDataConverted, _codecSampleRate, _mainBufferSampleRate, nb_sample_down);
+    if (!_audiocodec) {
+        _debug ("No audiocodec available for speaker");
+        return;
+    }
 
-                // Store the number of samples for recording
-                _nSamplesSpkr = nbSample;
+    const ost::AppDataUnit* adu = NULL;
 
-                // put data in audio layer, size in byte
-		_manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId());
+    int packetTimestamp = static_cast<D*> (this)->getFirstTimestamp();
 
+    adu = static_cast<D*> (this)->getData (packetTimestamp);
 
-            } else {
-                // Store the number of samples for recording
-                _nSamplesSpkr = nbSample;
+    if (!adu) {
+        return;
+    }
 
+    unsigned char* spkrDataIn = NULL;
+    unsigned int size = 0;
 
-                // put data in audio layer, size in byte
-                _manager->getAudioDriver()->getMainBuffer()->putData (_spkrDataDecoded, expandedSize, 100, _ca->getCallId());
-            }
+    if (adu) {
 
-            // Notify (with a beep) an incoming call when there is already a call
-            if (_manager->incomingCallWaiting() > 0) {
-	        _countNotificationTime += _time->getSecond();
-	        int countTimeModulo = _countNotificationTime % 5000;
-		// _debug("countNotificationTime: %d\n", countNotificationTime);
-		// _debug("countTimeModulo: %d\n", countTimeModulo);
-                if ((countTimeModulo - _countNotificationTime) < 0) {
-                    _manager->notificationIncomingCall();
-                }
-
-		_countNotificationTime = countTimeModulo;
-            }
+        spkrDataIn  = (unsigned char*) adu->getData(); // data in char
+        size = adu->getSize(); // size in char
 
-        } 
+    } else {
+        _debug ("No RTP packet available !!!!!!!!!!!!!!!!!!!!!!!\n");
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::sendMicData()
-    {
-        // STEP:
-        //   1. get data from mic
-        //   2. convert it to int16 - good sample, good rate
-        //   3. encode it
-        //   4. send it
-
-        // Increment timestamp for outgoing packet
-        _timestamp += _codecFrameSize;
-
-        if (!_audiolayer) {
-            _debug ("No audiolayer available for MIC");
-            return;
-        }
 
-        if (!_audiocodec) {
-            _debug ("No audiocodec available for MIC");
-            return;
-        }
+    // DTMF over RTP, size must be over 4 in order to process it as voice data
+    if (size > 4) {
+        processDataDecode (spkrDataIn, size);
+    }
+
+    delete adu;
+}
 
-        int compSize = processDataEncode();
+template <typename D>
+bool AudioRtpSession<D>::fadeIn (SFLDataFormat *audio, int size, SFLDataFormat *factor)
+{
 
-        // putData put the data on RTP queue, sendImmediate bypass this queue
-        static_cast<D*>(this)->putData (_timestamp, _micDataEncoded, compSize);
+    // apply amplitude factor;
+    while (size) {
+        size--;
+        audio[size] /= *factor;
     }
-    
-    
-    template <typename D>
-    void AudioRtpSession<D>::receiveSpeakerData ()
-    {
-        if (!_audiolayer) {
-            _debug ("No audiolayer available for speaker");
-            return;
-        }
 
-        if (!_audiocodec) {
-            _debug ("No audiocodec available for speaker");
-            return;
-        }
+    // decrease factor
+    *factor /= FADEIN_STEP_SIZE;
 
-        const ost::AppDataUnit* adu = NULL;
+    // if factor reach 0, thsi function should no be called anymore
+    if (*factor == 0)
+        return true;
 
-        adu = static_cast<D*>(this)->getData(static_cast<D*>(this)->getFirstTimestamp());
+    return false;
+}
 
-        if (adu == NULL) {
-            // _debug("No RTP audio stream\n");
-            return;
-        }
+template <typename D>
+int AudioRtpSession<D>::startRtpThread (AudioCodec* audiocodec)
+{
+    _debug ("RTP: Starting main thread");
+    setSessionTimeouts();
+    setSessionMedia (audiocodec);
+    initBuffers();
+    return start (_mainloopSemaphore);
+}
 
-        unsigned char* spkrData  = (unsigned char*) adu->getData(); // data in char
+template <typename D>
+void AudioRtpSession<D>::run ()
+{
 
-        unsigned int size = adu->getSize(); // size in char
+    // Timestamp must be initialized randomly
+    _timestamp = static_cast<D*> (this)->getCurrentTimestamp();
 
-        // DTMF over RTP, size must be over 4 in order to process it as voice data
-        if(size > 4) {
-        	processDataDecode (spkrData, size);
-        }
-        else {
-        	// _debug("RTP: Received an RTP event with payload: %d", adu->getType());
-			// ost::RTPPacket::RFC2833Payload *dtmf = (ost::RTPPacket::RFC2833Payload *)adu->getData();
-			// _debug("RTP: Data received %d", dtmf->event);
+    int threadSleep = 0;
 
-        }
+    if (_codecSampleRate != 0) {
+        threadSleep = (_codecFrameSize * 1000) / _codecSampleRate;
+    } else {
+        threadSleep = _layerFrameSize;
     }
-    
-    template <typename D>
-    int AudioRtpSession<D>::startRtpThread (AudioCodec* audiocodec)
-    {
-        _debug("RTP: Starting main thread");
-        setSessionTimeouts();
-        setSessionMedia(audiocodec);
-        initBuffers();
-        return start(_mainloopSemaphore);
+
+    TimerPort::setTimer (threadSleep);
+
+    if (_audiolayer == NULL) {
+        _error ("RTP: Error: Audiolayer is null, cannot start the audio stream");
+        throw AudioRtpSessionException();
     }
-    
-    template <typename D>
-    void AudioRtpSession<D>::run ()
-    {
-	// Timestamp must be initialized randomly
-	_timestamp = static_cast<D*>(this)->getCurrentTimestamp();
-
-        int sessionWaiting;
-        int threadSleep = 0;
-
-		if (_codecSampleRate != 0){
-			threadSleep = (_codecFrameSize * 1000) / _codecSampleRate;
-		}
-        else {
-        	threadSleep = _layerFrameSize;
-        }
 
-        TimerPort::setTimer (threadSleep);
-        
-        if (_audiolayer == NULL) {
-            _error("RTP: Error: Audiolayer is null, cannot start the audio stream");
-            throw AudioRtpSessionException();
-        }
+    // Set recording sampling rate
+    _ca->setRecordingSmplRate (_audiocodec->getClockRate());
 
-        _ca->setRecordingSmplRate(_audiocodec->getClockRate());
- 
-        // Start audio stream (if not started) AND flush all buffers (main and urgent)
-		_manager->getAudioDriver()->startStream();
-        static_cast<D*>(this)->startRunning();
+    // init noise reduction process
+    _noiseSuppress = new NoiseSuppress (_codecFrameSize, _audiocodec->getClockRate());
+    _audioProcess = new AudioProcessing (_noiseSuppress);
 
+    // Start audio stream (if not started) AND flush all buffers (main and urgent)
+    _manager->getAudioDriver()->startStream();
+    static_cast<D*> (this)->startRunning();
 
-        _debug ("RTP: Entering mainloop for call %s",_ca->getCallId().c_str());
+    _debug ("RTP: Entering mainloop for call %s",_ca->getCallId().c_str());
 
-        while (!testCancel()) {
+    _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
-        	// ost::MutexLock lock(*(_manager->getAudioLayerMutex()));
+    while (!testCancel()) {
 
-        	_manager->getAudioLayerMutex()->enter();
+        // Reset timestamp to make sure the timing information are up to date
+        if (_timestampCount > RTP_TIMESTAMP_RESET_FREQ) {
+            _timestamp = static_cast<D*> (this)->getCurrentTimestamp();
+            _timestampCount = 0;
+        }
 
-        	// converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
-        	_converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
+        _timestampCount++;
 
 
-        	sessionWaiting = static_cast<D*>(this)->isWaiting();
+        _manager->getAudioLayerMutex()->enter();
 
-            // Send session
-            if(_eventQueue.size() > 0) {
-            	sendDtmfEvent(_eventQueue.front());
-            }
-            else {
-            	sendMicData ();
-            }
+        // converterSamplingRate = _audiolayer->getMainBuffer()->getInternalSamplingRate();
+        _converterSamplingRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
-            // Recv session
-            receiveSpeakerData ();
+        // Send session
+        if (_eventQueue.size() > 0) {
+            sendDtmfEvent (_eventQueue.front());
+        } else {
+            sendMicData ();
+        }
 
-            // Let's wait for the next transmit cycle
-            if (sessionWaiting == 1) {
-                // Record mic and speaker during conversation
-                _ca->recAudio.recData (_spkrDataDecoded, _micData, _nSamplesSpkr, _nSamplesMic);
-            } else {
-                // Record mic only while leaving a message
-                _ca->recAudio.recData (_micData,_nSamplesMic);
-            }
+        // Recv session
+        receiveSpeakerData ();
 
-            _manager->getAudioLayerMutex()->leave();
+        _manager->getAudioLayerMutex()->leave();
 
-            // Let's wait for the next transmit cycle
-            Thread::sleep (TimerPort::getTimer());
-            TimerPort::incTimer (threadSleep);
-        }
-        
-        _debug ("RTP: Left main loop for call%s", _ca->getCallId().c_str());
+        // Let's wait for the next transmit cycle
+        Thread::sleep (TimerPort::getTimer());
+        TimerPort::incTimer (threadSleep);
     }
-    
+
+    _debug ("RTP: Left main loop for call%s", _ca->getCallId().c_str());
+}
+
 }
 #endif // __AUDIO_RTP_SESSION_H__
 
diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
index a5608d997a234a9583890eb42bc557dfe2350f8d..1054624e58deb7395e275abb504ea15060efd31b 100644
--- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.cpp
@@ -51,12 +51,12 @@ namespace sfl
 AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) :
         ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()),
         AudioRtpSession<AudioSrtpSession> (manager, sipcall),
-        _localCryptoSuite(0),
-        _remoteCryptoSuite(0),
-        _localMasterKeyLength(0),
-        _localMasterSaltLength(0),
-        _remoteMasterKeyLength(0),
-        _remoteMasterSaltLength(0)
+        _localCryptoSuite (0),
+        _remoteCryptoSuite (0),
+        _localMasterKeyLength (0),
+        _localMasterSaltLength (0),
+        _remoteMasterKeyLength (0),
+        _remoteMasterSaltLength (0)
 
 {
 
@@ -66,19 +66,20 @@ AudioSrtpSession::AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall) :
     initializeLocalCryptoContext();
 
     // Set local crypto context in ccrtp
-    _localCryptoCtx->deriveSrtpKeys(0);
+    _localCryptoCtx->deriveSrtpKeys (0);
 
-    setOutQueueCryptoContext(_localCryptoCtx);
+    setOutQueueCryptoContext (_localCryptoCtx);
 }
 
- 
-std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo() {
 
-    _debug("Get Cryptographic info from this rtp session");
+std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo()
+{
+
+    _debug ("Get Cryptographic info from this rtp session");
 
     std::vector<std::string> crypto_vector;
 
-    // @TODO we should return a vector containing supported 
+    // @TODO we should return a vector containing supported
     // cryptographic context tagged 1, 2, 3...
     std::string tag = "1";
 
@@ -92,32 +93,33 @@ std::vector<std::string> AudioSrtpSession::getLocalCryptoInfo() {
     // srtp_keys.append("|2^20|1:32");
 
     // generate crypto attribute
-    std::string crypto_attr = tag.append(" ");
-    crypto_attr += crypto_suite.append(" ");
+    std::string crypto_attr = tag.append (" ");
+    crypto_attr += crypto_suite.append (" ");
     crypto_attr += srtp_keys;
 
-    _debug("%s", crypto_attr.c_str());
+    _debug ("%s", crypto_attr.c_str());
 
-    crypto_vector.push_back(crypto_attr);
+    crypto_vector.push_back (crypto_attr);
 
     return crypto_vector;
 }
 
 
-void AudioSrtpSession::setRemoteCryptoInfo(sfl::SdesNegotiator& nego) {
+void AudioSrtpSession::setRemoteCryptoInfo (sfl::SdesNegotiator& nego)
+{
 
-    _debug("Set remote Cryptographic info for Srtp");
+    _debug ("Set remote Cryptographic info for Srtp");
 
     // decode keys
-    unBase64ConcatenatedKeys(nego.getKeyInfo());
+    unBase64ConcatenatedKeys (nego.getKeyInfo());
 
     // init crypto content int Srtp session
     initializeRemoteCryptoContext();
-    setInQueueCryptoContext(_remoteCryptoCtx);
+    setInQueueCryptoContext (_remoteCryptoCtx);
 }
 
 
-void AudioSrtpSession::initializeLocalMasterKey(void)
+void AudioSrtpSession::initializeLocalMasterKey (void)
 {
 
     // @TODO key may have different length depending on cipher suite
@@ -128,10 +130,11 @@ void AudioSrtpSession::initializeLocalMasterKey(void)
 
     // Generate ryptographically strong pseudo-random bytes
     int err;
-    if((err = RAND_bytes(random_key, _localMasterKeyLength)) != 1)
-        _debug("Error occured while generating cryptographically strong pseudo-random key");
 
-    memcpy(_localMasterKey, random_key, _localMasterKeyLength);
+    if ( (err = RAND_bytes (random_key, _localMasterKeyLength)) != 1)
+        _debug ("Error occured while generating cryptographically strong pseudo-random key");
+
+    memcpy (_localMasterKey, random_key, _localMasterKeyLength);
 
     /*
     printf("Local Master: ");
@@ -144,21 +147,22 @@ void AudioSrtpSession::initializeLocalMasterKey(void)
 }
 
 
-void AudioSrtpSession::initializeLocalMasterSalt(void)
+void AudioSrtpSession::initializeLocalMasterSalt (void)
 {
 
-    // @TODO key may have different length depending on cipher suite 
-  _localMasterSaltLength = sfl::CryptoSuites[_localCryptoSuite].masterSaltLength / 8;
+    // @TODO key may have different length depending on cipher suite
+    _localMasterSaltLength = sfl::CryptoSuites[_localCryptoSuite].masterSaltLength / 8;
 
     // Allocate memory for key
     unsigned char *random_key = new unsigned char[_localMasterSaltLength];
 
     // Generate ryptographically strong pseudo-random bytes
     int err;
-    if((err = RAND_bytes(random_key, _localMasterSaltLength)) != 1)
-        _debug("Error occured while generating cryptographically strong pseudo-random key");
 
-    memcpy(_localMasterSalt, random_key, _localMasterSaltLength);
+    if ( (err = RAND_bytes (random_key, _localMasterSaltLength)) != 1)
+        _debug ("Error occured while generating cryptographically strong pseudo-random key");
+
+    memcpy (_localMasterSalt, random_key, _localMasterSaltLength);
 
     return;
 
@@ -174,22 +178,22 @@ std::string AudioSrtpSession::getBase64ConcatenatedKeys()
     uint8 concatKeys[concatLength];
 
     // concatenate keys
-    memcpy((void*)concatKeys, (void*)_localMasterKey, _localMasterKeyLength);
-    memcpy((void*)(concatKeys + _localMasterKeyLength), (void*)_localMasterSalt, _localMasterSaltLength);
+    memcpy ( (void*) concatKeys, (void*) _localMasterKey, _localMasterKeyLength);
+    memcpy ( (void*) (concatKeys + _localMasterKeyLength), (void*) _localMasterSalt, _localMasterSaltLength);
 
     // encode concatenated keys in base64
-    char *output = encodeBase64((unsigned char*)concatKeys, concatLength);
+    char *output = encodeBase64 ( (unsigned char*) concatKeys, concatLength);
 
     // init string containing encoded data
-    std::string keys(output);
+    std::string keys (output);
 
-    free(output);
+    free (output);
 
     return keys;
 }
 
 
-void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys)
+void AudioSrtpSession::unBase64ConcatenatedKeys (std::string base64keys)
 {
 
     _remoteMasterKeyLength = sfl::CryptoSuites[1].masterKeyLength / 8;
@@ -199,112 +203,113 @@ void AudioSrtpSession::unBase64ConcatenatedKeys(std::string base64keys)
     int length;
 
     // pointer to binary data
-    char *dataptr = (char*)base64keys.data();
+    char *dataptr = (char*) base64keys.data();
 
     // decode concatenated binary keys
-    char *output = decodeBase64((unsigned char*)dataptr, strlen(dataptr), &length);
+    char *output = decodeBase64 ( (unsigned char*) dataptr, strlen (dataptr), &length);
 
     // copy master and slt respectively
-    memcpy((void*)_remoteMasterKey, (void*)output, _remoteMasterKeyLength);
-    memcpy((void*)_remoteMasterSalt, (void*)(output + _remoteMasterKeyLength), _remoteMasterSaltLength);
+    memcpy ( (void*) _remoteMasterKey, (void*) output, _remoteMasterKeyLength);
+    memcpy ( (void*) _remoteMasterSalt, (void*) (output + _remoteMasterKeyLength), _remoteMasterSaltLength);
 
-    free(output);
+    free (output);
 }
 
 
-void AudioSrtpSession::initializeRemoteCryptoContext(void)
+void AudioSrtpSession::initializeRemoteCryptoContext (void)
 {
     CryptoSuiteDefinition crypto = sfl::CryptoSuites[_localCryptoSuite];
 
-    _remoteCryptoCtx = new ost::CryptoContext(0x0,
-					     0,                               // roc,
-					     0L,                              // keydr,
-					     SrtpEncryptionAESCM,             // encryption algo
-					     SrtpAuthenticationSha1Hmac,      // authtication algo
-					     _remoteMasterKey,            
-					     _remoteMasterKeyLength,      
-					     _remoteMasterSalt,           
-					     _remoteMasterSaltLength,       
-					     crypto.encryptionKeyLength / 8, 
-					     crypto.srtpAuthKeyLength / 8,
-					     112 / 8,                         // session salt len
-					     crypto.srtpAuthTagLength / 8);
-    
+    _remoteCryptoCtx = new ost::CryptoContext (0x0,
+            0,                               // roc,
+            0L,                              // keydr,
+            SrtpEncryptionAESCM,             // encryption algo
+            SrtpAuthenticationSha1Hmac,      // authtication algo
+            _remoteMasterKey,
+            _remoteMasterKeyLength,
+            _remoteMasterSalt,
+            _remoteMasterSaltLength,
+            crypto.encryptionKeyLength / 8,
+            crypto.srtpAuthKeyLength / 8,
+            112 / 8,                         // session salt len
+            crypto.srtpAuthTagLength / 8);
+
 }
 
-void AudioSrtpSession::initializeLocalCryptoContext(void)
+void AudioSrtpSession::initializeLocalCryptoContext (void)
 {
     CryptoSuiteDefinition crypto = sfl::CryptoSuites[_localCryptoSuite];
 
-    _localCryptoCtx = new ost::CryptoContext(OutgoingDataQueue::getLocalSSRC(),
-					      0,                               // roc,
-					      0L,                              // keydr,
-					      SrtpEncryptionAESCM,             // encryption algo
-					      SrtpAuthenticationSha1Hmac,      // authtication algo
-					      _localMasterKey,             
-					      _localMasterKeyLength,       
-					      _localMasterSalt,            
-					      _localMasterSaltLength,      
-					      crypto.encryptionKeyLength / 8,
-					      crypto.srtpAuthKeyLength / 8,
-					      112 / 8,                         // session salt len
-					      crypto.srtpAuthTagLength / 8);
+    _localCryptoCtx = new ost::CryptoContext (OutgoingDataQueue::getLocalSSRC(),
+            0,                               // roc,
+            0L,                              // keydr,
+            SrtpEncryptionAESCM,             // encryption algo
+            SrtpAuthenticationSha1Hmac,      // authtication algo
+            _localMasterKey,
+            _localMasterKeyLength,
+            _localMasterSalt,
+            _localMasterSaltLength,
+            crypto.encryptionKeyLength / 8,
+            crypto.srtpAuthKeyLength / 8,
+            112 / 8,                         // session salt len
+            crypto.srtpAuthTagLength / 8);
 
 }
 
-
-char* AudioSrtpSession::encodeBase64(unsigned char *input, int length)
+#pragma GCC diagnostic ignored "-Wunused-value"
+char* AudioSrtpSession::encodeBase64 (unsigned char *input, int length)
 {
     BIO *b64, *bmem;
     BUF_MEM *bptr ;
 
-    char *buffer = (char *)malloc(2*length);
-    memset(buffer, 0, 2*length);
+    char *buffer = (char *) malloc (2*length);
+    memset (buffer, 0, 2*length);
 
     // init decoder
-    b64 = BIO_new(BIO_f_base64());
-    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
+    b64 = BIO_new (BIO_f_base64());
+    BIO_set_flags (b64, BIO_FLAGS_BASE64_NO_NL);
 
     // init internal buffer
-    bmem = BIO_new(BIO_s_mem());
+    bmem = BIO_new (BIO_s_mem());
 
     // create decoder chain
-    b64 = BIO_push(b64, bmem);
+    b64 = BIO_push (b64, bmem);
 
-    BIO_write(b64, input, length);
-    BIO_flush(b64);
+    BIO_write (b64, input, length);
+    BIO_flush (b64);
 
     // get pointer to data
-    BIO_get_mem_ptr(b64, &bptr);
+    BIO_get_mem_ptr (b64, &bptr);
 
     // copy result in output buffer (-1 since we do not want the EOF character)
-    strncpy(buffer, (char*)(bptr->data), bptr->length);
+    strncpy (buffer, (char*) (bptr->data), bptr->length);
 
-    BIO_free_all(bmem);
+    BIO_free_all (bmem);
 
-    return buffer;    
+    return buffer;
 }
+#pragma GCC diagnostic warning "-Wunused-value"
 
-char* AudioSrtpSession::decodeBase64(unsigned char *input, int length, int *length_out)
+char* AudioSrtpSession::decodeBase64 (unsigned char *input, int length, int *length_out)
 {
     BIO *b64, *bmem;
 
-    char *buffer = (char *)malloc(length);
-    memset(buffer, 0, length);
+    char *buffer = (char *) malloc (length);
+    memset (buffer, 0, length);
 
     // init decoder and read-only BIO buffer
-    b64 = BIO_new(BIO_f_base64());
-    BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
+    b64 = BIO_new (BIO_f_base64());
+    BIO_set_flags (b64, BIO_FLAGS_BASE64_NO_NL);
 
     // init internal buffer
-    bmem = BIO_new_mem_buf(input, length);
+    bmem = BIO_new_mem_buf (input, length);
 
     // create encoder chain
-    bmem = BIO_push(b64, bmem);
+    bmem = BIO_push (b64, bmem);
 
-    *length_out = BIO_read(bmem, buffer, length);
+    *length_out = BIO_read (bmem, buffer, length);
 
-    BIO_free_all(bmem);
+    BIO_free_all (bmem);
 
     return buffer;
 
diff --git a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h
index 6b21cd329086c64ed6069dcaad53868d6668809c..48e6055df6a6c79caf36b456a8686d546552f6e0 100644
--- a/sflphone-common/src/audio/audiortp/AudioSrtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioSrtpSession.h
@@ -11,7 +11,7 @@
  *  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.
@@ -40,8 +40,8 @@ class SdesNegotiator;
 class ManagerImpl;
 class SIPCall;
 
-/* 
-   Table from RFC 4568 6.2. Crypto-Suites, which define key parameters for supported 
+/*
+   Table from RFC 4568 6.2. Crypto-Suites, which define key parameters for supported
    cipher suite
 
    +---------------------+-------------+--------------+---------------+
@@ -64,75 +64,75 @@ class SIPCall;
 */
 
 
-namespace sfl {
+namespace sfl
+{
 
-    class SrtpException: public std::exception
-    {
-        virtual const char* what() const throw()
-        {
-        return "ZRTP ZID initialization failed.";
+class SrtpException: public std::exception
+{
+        virtual const char* what() const throw() {
+            return "ZRTP ZID initialization failed.";
         }
-    };
+};
+
+class AudioSrtpSession : public ost::SymmetricRTPSession, public AudioRtpSession<AudioSrtpSession>
+{
+    public:
 
-    class AudioSrtpSession : public ost::SymmetricRTPSession, public AudioRtpSession<AudioSrtpSession> 
-    {
-        public:
+        AudioSrtpSession (ManagerImpl * manager, SIPCall * sipcall);
 
-            AudioSrtpSession(ManagerImpl * manager, SIPCall * sipcall);
+        std::vector<std::string> getLocalCryptoInfo (void);
 
-            std::vector<std::string> getLocalCryptoInfo(void);
+        void setRemoteCryptoInfo (sfl::SdesNegotiator& nego);
 
-            void setRemoteCryptoInfo(sfl::SdesNegotiator& nego);
+    private:
 
-        private:
+        void initializeLocalMasterKey (void);
 
-            void initializeLocalMasterKey(void);
+        void initializeLocalMasterSalt (void);
 
-            void initializeLocalMasterSalt(void);
+        void initializeRemoteCryptoContext (void);
 
-            void initializeRemoteCryptoContext(void);
+        void initializeLocalCryptoContext (void);
 
-            void initializeLocalCryptoContext(void);
+        std::string getBase64ConcatenatedKeys();
 
-            std::string getBase64ConcatenatedKeys();
+        void unBase64ConcatenatedKeys (std::string base64keys);
 
-            void unBase64ConcatenatedKeys(std::string base64keys);
+        char* encodeBase64 (unsigned char *input, int length);
 
-            char* encodeBase64(unsigned char *input, int length);
+        char* decodeBase64 (unsigned char *input, int length, int *length_out);
 
-            char* decodeBase64(unsigned char *input, int length, int *length_out);
+        /** Default local crypto suite is AES_CM_128_HMAC_SHA1_80*/
+        int _localCryptoSuite;
 
-            /** Default local crypto suite is AES_CM_128_HMAC_SHA1_80*/
-            int _localCryptoSuite;
+        /** Remote crypto suite is initialized at AES_CM_128_HMAC_SHA1_80*/
+        int _remoteCryptoSuite;
 
-            /** Remote crypto suite is initialized at AES_CM_128_HMAC_SHA1_80*/
-            int _remoteCryptoSuite;
+        uint8 _localMasterKey[16];
 
-            uint8 _localMasterKey[16];
+        /** local master key length in byte */
+        int _localMasterKeyLength;
 
-            /** local master key length in byte */
-            int _localMasterKeyLength;
+        uint8 _localMasterSalt[14];
 
-            uint8 _localMasterSalt[14];
+        /** local master salt length in byte */
+        int _localMasterSaltLength;
 
-            /** local master salt length in byte */
-            int _localMasterSaltLength;
+        uint8 _remoteMasterKey[16];
 
-            uint8 _remoteMasterKey[16];
+        /** remote master key length in byte */
+        int _remoteMasterKeyLength;
 
-            /** remote master key length in byte */
-            int _remoteMasterKeyLength;
+        uint8 _remoteMasterSalt[14];
 
-            uint8 _remoteMasterSalt[14];
+        /** remote master salt length in byte */
+        int _remoteMasterSaltLength;
 
-            /** remote master salt length in byte */
-            int _remoteMasterSaltLength;
+        ost::CryptoContext* _remoteCryptoCtx;
 
-            ost::CryptoContext* _remoteCryptoCtx;
+        ost::CryptoContext* _localCryptoCtx;
+};
 
-            ost::CryptoContext* _localCryptoCtx;
-    };
-   
 }
 
 #endif // __AUDIO_SRTP_SESSION_H__
diff --git a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h
index 0713f3db0c2cc82eb3d541a03f49d678f5d32776..a2275e3b508da1727d365fb03c2bfb10ff8bee80 100644
--- a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h
@@ -10,7 +10,7 @@
  *  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.
@@ -35,17 +35,17 @@
 
 class ManagerImpl;
 
-namespace sfl {
-    class AudioSymmetricRtpSession : public ost::SymmetricRTPSession, public AudioRtpSession<AudioSymmetricRtpSession> 
-    {
-        public:
-        AudioSymmetricRtpSession(ManagerImpl * manager, SIPCall * sipcall) :
-            ost::SymmetricRTPSession(ost::InetHostAddress(sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()),
-            AudioRtpSession<AudioSymmetricRtpSession>(manager, sipcall)
-        {
-            _debug("AudioSymmetricRtpSession initialized\n");
-        }       
-    };
+namespace sfl
+{
+class AudioSymmetricRtpSession : public ost::SymmetricRTPSession, public AudioRtpSession<AudioSymmetricRtpSession>
+{
+    public:
+        AudioSymmetricRtpSession (ManagerImpl * manager, SIPCall * sipcall) :
+                ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()),
+                AudioRtpSession<AudioSymmetricRtpSession> (manager, sipcall) {
+            _debug ("AudioSymmetricRtpSession initialized\n");
+        }
+};
 }
 
 #endif // __AUDIO_SYMMETRIC_RTP_SESSION_H__
diff --git a/sflphone-common/src/audio/audiortp/AudioZrtpSession.h b/sflphone-common/src/audio/audiortp/AudioZrtpSession.h
index f62515bcc9ad1712f59d49ecd6b91c9b5743bf1f..4eb68d364d8a6e057dc74de65bf2d13e9706dcc2 100644
--- a/sflphone-common/src/audio/audiortp/AudioZrtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioZrtpSession.h
@@ -10,7 +10,7 @@
  *  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.
@@ -36,26 +36,26 @@
 class ManagerImpl;
 class SIPCall;
 
-namespace sfl {
+namespace sfl
+{
 
-    class ZrtpZidException: public std::exception
-    {
-        virtual const char* what() const throw()
-        {
-        return "ZRTP ZID initialization failed.";
+class ZrtpZidException: public std::exception
+{
+        virtual const char* what() const throw() {
+            return "ZRTP ZID initialization failed.";
         }
-    };
-
-    class AudioZrtpSession : public ost::SymmetricZRTPSession, public AudioRtpSession<AudioZrtpSession> 
-    {
-        public:
-			AudioZrtpSession(ManagerImpl * manager, SIPCall * sipcall, const std::string& zidFilename);
-
-        private:
-            void initializeZid(void);
-            std::string _zidFilename;
-    };
-   
+};
+
+class AudioZrtpSession : public ost::SymmetricZRTPSession, public AudioRtpSession<AudioZrtpSession>
+{
+    public:
+        AudioZrtpSession (ManagerImpl * manager, SIPCall * sipcall, const std::string& zidFilename);
+
+    private:
+        void initializeZid (void);
+        std::string _zidFilename;
+};
+
 }
 
 #endif // __AUDIO_ZRTP_SESSION_H__
diff --git a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
index b0be6b719eb86162e593d510d69191bb757df665..88bed90421d930d038f84a4944da1f88a2fc6936 100644
--- a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
+++ b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.cpp
@@ -55,7 +55,7 @@ ZrtpSessionCallback::ZrtpSessionCallback (SIPCall *sipcall) :
         return;
     }
 
-    _info("Zrtp: Initialize callbacks");
+    _info ("Zrtp: Initialize callbacks");
 
     /**
      * Information Map
diff --git a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.h b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.h
index 41e417e3f58aa0da0bca2f10e772bf08ee857145..f883e09dd8c5aec7de936995b3a4ad6aa972d087 100644
--- a/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.h
+++ b/sflphone-common/src/audio/audiortp/ZrtpSessionCallback.h
@@ -27,7 +27,7 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __SFL_ZRTP_CALLBACK_H__
 #define __SFL_ZRTP_CALLBACK_H__
 
@@ -40,36 +40,37 @@
 class SIPCall;
 class DBusManagerImpl;
 
-namespace sfl {
+namespace sfl
+{
 
-    class ZrtpSessionCallbackException: public std::exception
-    {
-        virtual const char* what() const throw()
-        {
-        return "An exception occured while being in a zrtp callback\n";
+class ZrtpSessionCallbackException: public std::exception
+{
+        virtual const char* what() const throw() {
+            return "An exception occured while being in a zrtp callback\n";
         }
-    };
-    
-    class ZrtpSessionCallback: public ZrtpUserCallback {
+};
+
+class ZrtpSessionCallback: public ZrtpUserCallback
+{
     public:
-        ZrtpSessionCallback(SIPCall *sipcall);
+        ZrtpSessionCallback (SIPCall *sipcall);
 
-        void secureOn(std::string cipher);
-        void secureOff(void);
-        void showSAS(std::string sas, bool verified);
-        void zrtpNotSuppOther(void);
-        void showMessage(GnuZrtpCodes::MessageSeverity sev, int32_t subCode); 
-        void zrtpNegotiationFailed(GnuZrtpCodes::MessageSeverity severity, int subCode);
+        void secureOn (std::string cipher);
+        void secureOff (void);
+        void showSAS (std::string sas, bool verified);
+        void zrtpNotSuppOther (void);
+        void showMessage (GnuZrtpCodes::MessageSeverity sev, int32_t subCode);
+        void zrtpNegotiationFailed (GnuZrtpCodes::MessageSeverity severity, int subCode);
         void confirmGoClear();
-                
+
     private:
         SIPCall* _sipcall;
-                
+
         static std::map<int32, std::string*> _infoMap;
         static std::map<int32, std::string*> _warningMap;
         static std::map<int32, std::string*> _severeMap;
         static std::map<int32, std::string*> _zrtpMap;
         static bool _mapInitialized;
-    };
+};
 }
 #endif
diff --git a/sflphone-common/src/audio/codecs/Makefile.am b/sflphone-common/src/audio/codecs/Makefile.am
index e338dc3fb5f898a86039e174c6705370fc20b91a..4c17a54c7ec49912aa96bd3a8ee4ddbec543c33c 100644
--- a/sflphone-common/src/audio/codecs/Makefile.am
+++ b/sflphone-common/src/audio/codecs/Makefile.am
@@ -13,10 +13,6 @@ libcodec_gsm_so_LDFLAGS = --shared -lc -lgsm
 INSTALL_GSM_RULE = install-libcodec_gsm_so
 endif
 
-if ENABLE_SPEEXDSP
-SPEEXDSP=-DHAVE_SPEEXDSP_LIB
-endif
-
 if BUILD_SPEEX
 SPEEX_NB_LIB = libcodec_speex_nb.so
 libcodec_speex_nb_so_SOURCES = speexcodec_nb.cpp
diff --git a/sflphone-common/src/audio/codecs/audiocodec.h b/sflphone-common/src/audio/codecs/audiocodec.h
index d0d299ca8718fb0f153ec1318853c69c49a1f73d..485cf9d3042bceb0194514fbbbfc5e7b6d73dd87 100644
--- a/sflphone-common/src/audio/codecs/audiocodec.h
+++ b/sflphone-common/src/audio/codecs/audiocodec.h
@@ -8,12 +8,12 @@
  * 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.
@@ -33,96 +33,115 @@
 #ifndef _CODEC_AUDIO_H
 #define _CODEC_AUDIO_H
 
-#include <string> 
+#include <string>
 #include <iostream>
 #include <dlfcn.h>
 
-class AudioCodec {
-protected:
-  /** Holds SDP-compliant codec name */
-  std::string _codecName; // what we put inside sdp
-  
-  /** Clock rate or sample rate of the codec, in Hz */
-  int _clockRate;
-
-  /** Number of channel 1 = mono, 2 = stereo */
-  int _channel;
-
-  /** codec frame size in samples*/
-  int _frameSize;
-
-  /** Bitrate */
-  double _bitrate;
-  /** Bandwidth */
-  double _bandwidth;
-
-private:
-  int _payload;
-  bool _hasDynamicPayload;
-  bool _state;
-
-public:
-    AudioCodec(int payload, const std::string &codecName)
-        : _codecName(codecName), _clockRate(8000), _channel(1),  _bitrate(0.0),_bandwidth(0),_payload(payload), _hasDynamicPayload(false),_state(true) {
-  	
-	_hasDynamicPayload = (_payload >= 96 && _payload <= 127) ? true : false;
-
-	// If g722 (payload 9), we need to init libccrtp symetric sessions with using
-	// dynamic payload format. This way we get control on rtp clockrate.
-	
-	if(_payload == 9)
-	{
-	    _hasDynamicPayload = true;
-	}
-	
-}
-
-    AudioCodec( const AudioCodec& codec )
-        : _codecName(codec._codecName), _clockRate(codec._clockRate), _channel(codec._channel),  _bitrate(codec._bitrate),_bandwidth(codec._bandwidth),_payload(codec._payload), _hasDynamicPayload(false),_state(true) {
-  	
-	_hasDynamicPayload = (_payload >= 96 && _payload <= 127) ? true : false;
-
-	// If g722 (payload 9), we need to init libccrtp symetric sessions with using
-	// dynamic payload format. This way we get control on rtp clockrate.
-	
-	if(_payload == 9)
-	{
-	    _hasDynamicPayload = true;
-	}
-	
-}
-
-    virtual ~AudioCodec() {
-	}
-    /**
-     * Decode an input buffer and fill the output buffer with the decoded data 
-     * @return the number of bytes decoded
-     */
-    virtual int codecDecode(short *, unsigned char *, unsigned int) = 0;
-
-    /**
-     * Encode an input buffer and fill the output buffer with the encoded data 
-     * @return the number of bytes encoded
-     */
-    virtual int codecEncode(unsigned char *, short *, unsigned int) = 0;   
-
-
-  /** Value used for SDP negotiation */
-  std::string getCodecName( void ) { return _codecName; }
-  int getPayload( void ) { return _payload; }
-  bool hasDynamicPayload( void ) { return _hasDynamicPayload; }
-  int getClockRate( void ) { return _clockRate; }
-  int getFrameSize( void ) { return _frameSize; }
-  int getChannel( void ) { return _channel; }
-  bool getState( void ) { return _state; }
-  void setState(bool b) { _state = b; }
-  double getBitRate( void ) { return _bitrate; }
-  double getBandwidth( void ) { return _bandwidth; }
+class AudioCodec
+{
+    protected:
+        /** Holds SDP-compliant codec name */
+        std::string _codecName; // what we put inside sdp
+
+        /** Clock rate or sample rate of the codec, in Hz */
+        int _clockRate;
+
+        /** Number of channel 1 = mono, 2 = stereo */
+        int _channel;
+
+        /** codec frame size in samples*/
+        int _frameSize;
+
+        /** Bitrate */
+        double _bitrate;
+        /** Bandwidth */
+        double _bandwidth;
+
+    private:
+        int _payload;
+        bool _hasDynamicPayload;
+        bool _state;
+
+    public:
+        AudioCodec (int payload, const std::string &codecName)
+                : _codecName (codecName), _clockRate (8000), _channel (1),  _bitrate (0.0),_bandwidth (0),_payload (payload), _hasDynamicPayload (false),_state (true) {
+
+            _hasDynamicPayload = (_payload >= 96 && _payload <= 127) ? true : false;
+
+            // If g722 (payload 9), we need to init libccrtp symetric sessions with using
+            // dynamic payload format. This way we get control on rtp clockrate.
+
+            if (_payload == 9) {
+                _hasDynamicPayload = true;
+            }
+
+        }
+
+        AudioCodec (const AudioCodec& codec)
+                : _codecName (codec._codecName), _clockRate (codec._clockRate), _channel (codec._channel),  _bitrate (codec._bitrate),_bandwidth (codec._bandwidth),_payload (codec._payload), _hasDynamicPayload (false),_state (true) {
+
+            _hasDynamicPayload = (_payload >= 96 && _payload <= 127) ? true : false;
+
+            // If g722 (payload 9), we need to init libccrtp symetric sessions with using
+            // dynamic payload format. This way we get control on rtp clockrate.
+
+            if (_payload == 9) {
+                _hasDynamicPayload = true;
+            }
+
+        }
+
+        virtual ~AudioCodec() {
+        }
+        /**
+         * Decode an input buffer and fill the output buffer with the decoded data
+         * @return the number of bytes decoded
+         */
+        virtual int codecDecode (short *, unsigned char *, unsigned int) = 0;
+
+        /**
+         * Encode an input buffer and fill the output buffer with the encoded data
+         * @return the number of bytes encoded
+         */
+        virtual int codecEncode (unsigned char *, short *, unsigned int) = 0;
+
+
+        /** Value used for SDP negotiation */
+        std::string getCodecName (void) {
+            return _codecName;
+        }
+        int getPayload (void) {
+            return _payload;
+        }
+        bool hasDynamicPayload (void) {
+            return _hasDynamicPayload;
+        }
+        int getClockRate (void) {
+            return _clockRate;
+        }
+        int getFrameSize (void) {
+            return _frameSize;
+        }
+        int getChannel (void) {
+            return _channel;
+        }
+        bool getState (void) {
+            return _state;
+        }
+        void setState (bool b) {
+            _state = b;
+        }
+        double getBitRate (void) {
+            return _bitrate;
+        }
+        double getBandwidth (void) {
+            return _bandwidth;
+        }
 
 };
 
 // the types of the class factories
 typedef AudioCodec* create_t();
-typedef void destroy_t(AudioCodec*);
+typedef void destroy_t (AudioCodec*);
 
 #endif
diff --git a/sflphone-common/src/audio/codecs/celtcodec.cpp b/sflphone-common/src/audio/codecs/celtcodec.cpp
index 359b4c68c133ebecdfc5d87095063ff14b2314ae..f7df26faf66510d110a3ef5ab13175fbe00e088f 100644
--- a/sflphone-common/src/audio/codecs/celtcodec.cpp
+++ b/sflphone-common/src/audio/codecs/celtcodec.cpp
@@ -53,38 +53,37 @@ class Celt : public AudioCodec
         Celt& operator= (const Celt&);
 
         void initCelt() {
-            printf ("Celt: Init Celt codec");
 
             int error = 0;
 
             _mode = celt_mode_create (_clockRate, _frameSize, &error);
 
-            if(error != CELT_OK) {
-            	switch(error) {
-            	case CELT_BAD_ARG:
-            		printf("Celt: Error: An (or more) invalid argument (e.g. out of range)\n");
-            		break;
-            	case CELT_INVALID_MODE:
-            		printf("Celt: Error: The mode struct passed is invalid\n");
-            		break;
-            	case CELT_INTERNAL_ERROR:
-            		printf("Celt: Error: An internal error was detected\n");
-            		break;
-            	case CELT_CORRUPTED_DATA:
-            		printf("Celt: Error: The data passed (e.g. compressed data to decoder) is corrupted\n");
-            		break;
-            	case CELT_UNIMPLEMENTED:
-            		printf("Celt: Error: Invalid/unsupported request numbe\n");
-            		break;
-            	case CELT_INVALID_STATE:
-            		printf("Celt: Error: An encoder or decoder structure is invalid or already freed\n");
-            		break;
-            	case CELT_ALLOC_FAIL:
-					printf("Celt: Error: Memory allocation has failed\n");
-					break;
-            	default:
-					printf("Celt: Error");
-            	}
+            if (error != CELT_OK) {
+                switch (error) {
+                    case CELT_BAD_ARG:
+                        printf ("Celt: Error: An (or more) invalid argument (e.g. out of range)\n");
+                        break;
+                    case CELT_INVALID_MODE:
+                        printf ("Celt: Error: The mode struct passed is invalid\n");
+                        break;
+                    case CELT_INTERNAL_ERROR:
+                        printf ("Celt: Error: An internal error was detected\n");
+                        break;
+                    case CELT_CORRUPTED_DATA:
+                        printf ("Celt: Error: The data passed (e.g. compressed data to decoder) is corrupted\n");
+                        break;
+                    case CELT_UNIMPLEMENTED:
+                        printf ("Celt: Error: Invalid/unsupported request numbe\n");
+                        break;
+                    case CELT_INVALID_STATE:
+                        printf ("Celt: Error: An encoder or decoder structure is invalid or already freed\n");
+                        break;
+                    case CELT_ALLOC_FAIL:
+                        printf ("Celt: Error: Memory allocation has failed\n");
+                        break;
+                    default:
+                        printf ("Celt: Error");
+                }
 
             }
 
@@ -106,10 +105,10 @@ class Celt : public AudioCodec
             _dec = celt_decoder_create (_mode, _channel, &error);
 
             celt_encoder_ctl (_enc, CELT_SET_COMPLEXITY (2));
-            celt_decoder_ctl(_dec, CELT_SET_COMPLEXITY (2));
+            celt_decoder_ctl (_dec, CELT_SET_COMPLEXITY (2));
 
-            celt_encoder_ctl (_enc, CELT_SET_PREDICTION(2));
-            celt_decoder_ctl(_dec, CELT_SET_PREDICTION(2));
+            celt_encoder_ctl (_enc, CELT_SET_PREDICTION (2));
+            celt_decoder_ctl (_dec, CELT_SET_PREDICTION (2));
 
         }
 
@@ -122,7 +121,7 @@ class Celt : public AudioCodec
             celt_encoder_destroy (_enc);
             celt_decoder_destroy (_dec);
 
-            celt_mode_destroy(_mode);
+            celt_mode_destroy (_mode);
         }
 
         virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.cpp b/sflphone-common/src/audio/codecs/codecDescriptor.cpp
index 268a6010d780dac542d7e3ceaa63e78759b6d994..c39be481860e5497e66e64b8ea7b88f1f9891c78 100644
--- a/sflphone-common/src/audio/codecs/codecDescriptor.cpp
+++ b/sflphone-common/src/audio/codecs/codecDescriptor.cpp
@@ -48,7 +48,7 @@ CodecDescriptor::~CodecDescriptor()
 void
 CodecDescriptor::deleteHandlePointer (void)
 {
-	_debug("CodecDesccriptor: Delete codec handle pointers");
+    _debug ("CodecDesccriptor: Delete codec handle pointers");
 
     for (int i = 0 ; (unsigned int) i < _CodecInMemory.size() ; i++) {
         unloadCodec (_CodecInMemory[i]);
@@ -75,7 +75,8 @@ CodecDescriptor::init()
     }
 }
 
-void CodecDescriptor::setDefaultOrder() {
+void CodecDescriptor::setDefaultOrder()
+{
 
     _defaultCodecOrder.clear();
     CodecsMap::iterator iter = _CodecsMap.begin();
@@ -115,7 +116,8 @@ CodecDescriptor::getCodec (AudioCodecType payload)
     return NULL;
 }
 
-double CodecDescriptor::getBitRate (AudioCodecType payload) {
+double CodecDescriptor::getBitRate (AudioCodecType payload)
+{
 
     CodecsMap::iterator iter = _CodecsMap.find (payload);
 
@@ -125,7 +127,8 @@ double CodecDescriptor::getBitRate (AudioCodecType payload) {
         return 0.0;
 }
 
-double CodecDescriptor::getBandwidthPerCall (AudioCodecType payload) {
+double CodecDescriptor::getBandwidthPerCall (AudioCodecType payload)
+{
 
     CodecsMap::iterator iter = _CodecsMap.find (payload);
 
@@ -135,7 +138,8 @@ double CodecDescriptor::getBandwidthPerCall (AudioCodecType payload) {
         return 0.0;
 }
 
-int CodecDescriptor::getSampleRate (AudioCodecType payload) {
+int CodecDescriptor::getSampleRate (AudioCodecType payload)
+{
 
     CodecsMap::iterator iter = _CodecsMap.find (payload);
 
@@ -145,7 +149,8 @@ int CodecDescriptor::getSampleRate (AudioCodecType payload) {
         return 0;
 }
 
-void CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list) {
+void CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list)
+{
 
     _defaultCodecOrder.clear();
     // list contains the ordered payload of active codecs picked by the user
@@ -166,7 +171,8 @@ void CodecDescriptor::saveActiveCodecs (const std::vector<std::string>& list) {
     }
 }
 
-std::vector<AudioCodec*> CodecDescriptor::scanCodecDirectory (void) {
+std::vector<AudioCodec*> CodecDescriptor::scanCodecDirectory (void)
+{
 
     std::vector<AudioCodec*> codecs;
     std::string tmp;
@@ -206,7 +212,8 @@ std::vector<AudioCodec*> CodecDescriptor::scanCodecDirectory (void) {
     return codecs;
 }
 
-AudioCodec* CodecDescriptor::loadCodec (std::string path) {
+AudioCodec* CodecDescriptor::loadCodec (std::string path)
+{
 
     CodecHandlePointer p;
     using std::cerr;
@@ -232,7 +239,8 @@ AudioCodec* CodecDescriptor::loadCodec (std::string path) {
 }
 
 
-void CodecDescriptor::unloadCodec (CodecHandlePointer p) {
+void CodecDescriptor::unloadCodec (CodecHandlePointer p)
+{
 
     using std::cerr;
     destroy_t* destroyCodec = (destroy_t*) dlsym (p.second , "destroy");
@@ -245,7 +253,8 @@ void CodecDescriptor::unloadCodec (CodecHandlePointer p) {
     dlclose (p.second);
 }
 
-AudioCodec* CodecDescriptor::instantiateCodec (AudioCodecType payload) {
+AudioCodec* CodecDescriptor::instantiateCodec (AudioCodecType payload)
+{
 
     using std::cerr;
 
@@ -262,6 +271,7 @@ AudioCodec* CodecDescriptor::instantiateCodec (AudioCodecType payload) {
 
             return a;
         }
+
         iter++;
     }
 
@@ -270,7 +280,8 @@ AudioCodec* CodecDescriptor::instantiateCodec (AudioCodecType payload) {
 
 
 
-AudioCodec* CodecDescriptor::getFirstCodecAvailable (void) {
+AudioCodec* CodecDescriptor::getFirstCodecAvailable (void)
+{
 
     CodecsMap::iterator iter = _CodecsMap.begin();
 
@@ -280,7 +291,8 @@ AudioCodec* CodecDescriptor::getFirstCodecAvailable (void) {
         return NULL;
 }
 
-bool CodecDescriptor::seemsValid (std::string lib) {
+bool CodecDescriptor::seemsValid (std::string lib)
+{
 
     // The name of the shared library seems valid  <==> it looks like libcodec_xxx.so
     // We check this
@@ -302,6 +314,7 @@ bool CodecDescriptor::seemsValid (std::string lib) {
 #ifdef HAVE_SPEEX_CODEC
     // Nothing special
 #else
+
     if (lib.substr (begin.length() , lib.length() - begin.length() - end.length()) == SPEEX_STRING_DESCRIPTION)
         return false;
 
@@ -310,6 +323,7 @@ bool CodecDescriptor::seemsValid (std::string lib) {
 #ifdef HAVE_GSM_CODEC
     // Nothing special
 #else
+
     if (lib.substr (begin.length() , lib.length() - begin.length() - end.length()) == GSM_STRING_DESCRIPTION)
         return false;
 
@@ -318,6 +332,7 @@ bool CodecDescriptor::seemsValid (std::string lib) {
 #ifdef BUILD_ILBC
     // Nothing special
 #else
+
     if (lib.substr (begin.length() , lib.length() - begin.length() - end.length()) == ILBC_STRING_DESCRIPTION)
         return false;
 
@@ -346,7 +361,8 @@ CodecDescriptor::alreadyInCache (std::string lib)
     return false;
 }
 
-bool CodecDescriptor::isCodecLoaded (int payload) {
+bool CodecDescriptor::isCodecLoaded (int payload)
+{
 
     CodecsMap::iterator iter = _CodecsMap.begin();
 
@@ -360,32 +376,33 @@ bool CodecDescriptor::isCodecLoaded (int payload) {
     return false;
 }
 
-std::vector <std::string> CodecDescriptor::getCodecSpecifications (const int32_t& payload) {
+std::vector <std::string> CodecDescriptor::getCodecSpecifications (const int32_t& payload)
+{
 
-	_debug ("CodecDescriptor: Gathering codec specifications for payload %i", payload);
+    _debug ("CodecDescriptor: Gathering codec specifications for payload %i", payload);
 
-	std::vector<std::string> v;
+    std::vector<std::string> v;
     std::stringstream ss;
 
-	// Add the name of the codec
+    // Add the name of the codec
     v.push_back (getCodecName ( (AudioCodecType) payload));
 
-	// Add the sample rate
+    // Add the sample rate
     ss << getSampleRate ( (AudioCodecType) payload);
     v.push_back ( (ss.str()).data());
     ss.str ("");
 
-	// Add the bit rate
+    // Add the bit rate
     ss << getBitRate ( (AudioCodecType) payload);
     v.push_back ( (ss.str()).data());
     ss.str ("");
 
-	// Add the bandwidth information
+    // Add the bandwidth information
     ss << getBandwidthPerCall ( (AudioCodecType) payload);
     v.push_back ( (ss.str()).data());
     ss.str ("");
 
-	return v;
+    return v;
 
 }
 
diff --git a/sflphone-common/src/audio/codecs/codecDescriptor.h b/sflphone-common/src/audio/codecs/codecDescriptor.h
index 9b5b1ea126f3e43b07a3679094d49b0a63af2d21..4393a0892afa37396eb11ce90cdef3d70ef6d00b 100644
--- a/sflphone-common/src/audio/codecs/codecDescriptor.h
+++ b/sflphone-common/src/audio/codecs/codecDescriptor.h
@@ -3,17 +3,17 @@
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *  Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@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.
@@ -45,7 +45,7 @@
 typedef std::pair<AudioCodec* , void*> CodecHandlePointer;
 /** Maps a pointer on an audiocodec object to a payload */
 typedef std::map<AudioCodecType , AudioCodec*> CodecsMap;
-/** A codec is identified by its payload. A payload is associated with a name. */ 
+/** A codec is identified by its payload. A payload is associated with a name. */
 typedef std::map<AudioCodecType, std::string> CodecMap;
 
 /*
@@ -53,189 +53,194 @@ typedef std::map<AudioCodecType, std::string> CodecMap;
  * @brief Handle audio codecs, load them in memory
  */
 
-class CodecDescriptor {
-  public:
-    /**
-     * Constructor 
-     */
-    CodecDescriptor();
-
-    /**
-     * Destructor 
-     */
-    ~CodecDescriptor(); 
-
-    /**
-     * Accessor to data structures
-     * @return CodecsMap& The available codec
-     */
-    CodecsMap& getCodecsMap() { return _CodecsMap; }
-
-    /**
-     * Accessor to data structures
-     * @return CodecOrder& The list that reflects the user's choice
-     */
-    // CodecOrder& getActiveCodecs() { return _codecOrder; }
-
-    /**
-     * Get codec name by its payload
-     * @param payload the payload looked for
-     *                same as getPayload()
-     * @return std::string  The name of the codec
-     */
-    std::string getCodecName(AudioCodecType payload);
-
-    /**
-     * Get the codec object associated with the payload
-     * @param payload The payload looked for
-     * @return AudioCodec* A pointer on a AudioCodec object
-     */
-    AudioCodec* getCodec( AudioCodecType payload );
-
-    /**
-     * Initialiaze the map with all the supported codecs, even those inactive
-     */  
-    void init();
-
-    /**
-     * Set the default codecs order. 
-	 * This order will be apply to each account by default
-     */   
-    void setDefaultOrder();
-
-    /**
-     * Get the bit rate of the specified codec.
-     * @param payload The payload of the codec
-     * @return double The bit rate 
-     */  
-    double getBitRate(AudioCodecType payload);
-
-    /**
-     * Get the bandwidth for one call with the specified codec.
-     * The value has been calculated with the further information:
-     * RTp communication, SIP protocol (the value with IAX2 is very close), no RTCP, one simultaneous call, for one channel (the incoming one).
-     * @param payload The payload of the codec 
-     * @return double The bandwidth
-     */
-    double getBandwidthPerCall(AudioCodecType payload);
-
-    /**
-     * Get the clock rate of the specified codec
-     * @param payload The payload of the codec
-     * @return int The clock rate of the specified codec
-     */
-    int getSampleRate(AudioCodecType payload);
-
-	/**
-     * Set the order of codecs by their payload
-     * @param list The ordered list sent by DBus
-     */
-    void saveActiveCodecs(const std::vector<std::string>& list);
-
-    /**
-     * Get the number of codecs loaded in dynamic memory
-     * @return int The number
-     */
-    int getCodecsNumber( void ) { return _nbCodecs; }
-
-    /**
-     * Unreferences the codecs loaded in memory
-     */
-    void deleteHandlePointer( void );
-
-    /**
-     * Get the first element of the CodecsMap struct. 
-     * i.e the one with the lowest payload
-     * @return AudioCodec	The pointer on the codec object
-     */
-    AudioCodec* getFirstCodecAvailable( void );
-
-    /**
-     * Instantiate a codec, used in AudioRTP to get an instance of Codec per call
-     * @param CodecHandlePointer	The map containing the pointer on the object and the pointer on the handle function
-     */
-    AudioCodec* instantiateCodec(AudioCodecType payload);
-
-	/**
-	 * For a given codec, return its specification
-	 *
-	 * @param payload	The RTP payload of the codec
-	 * @return std::vector <std::string>	A vector containing codec's name, sample rate, bandwidth and bit rate
-	 */
-	std::vector <std::string> getCodecSpecifications (const int32_t& payload);
-
-	/**
-     *  Check if the audiocodec object has been successfully created
-     *  @param payload  The payload of the codec
-     *  @return bool  True if the audiocodec has been created
-     *		false otherwise
-     */
-    bool isCodecLoaded( int payload );
-
-  private:
-
-    /**
-     * Scan the installation directory ( --prefix configure option )
-     * And load the dynamic library 
-     * @return std::vector<AudioCodec*> The list of the codec object successfully loaded in memory
-     */
-    std::vector<AudioCodec *> scanCodecDirectory( void ); 
-
-    /**
-     * Load a codec
-     * @param std::string	The path of the shared ( dynamic ) library.
-     * @return AudioCodec*  the pointer of the object loaded.
-     */
-    AudioCodec* loadCodec( std::string );
-
-    /**
-     * Unload a codec
-     * @param CodecHandlePointer	The map containing the pointer on the object and the pointer on the handle function
-     */
-    void unloadCodec( CodecHandlePointer );
-
-    /**
-     * Check if the files found in searched directories seems valid
-     * @param std::string	The name of the file
-     * @return bool True if the file name begins with libcodec_ and ends with .so
-     *		false otherwise
-     */
-    bool seemsValid( std::string );
-
-    /**
-     * Check if the codecs shared library has already been scanned during the session
-     * Useful not to load twice the same codec saved in the different directory
-     * @param std::string	The complete name of the shared directory ( without the path )
-     * @return bool True if the codecs has been scanned
-     *	    false otherwise
-     */
-    bool alreadyInCache( std::string );
-
-    /**
-     * Map the payload of a codec and the object associated ( AudioCodec * )
-     */
-    CodecsMap _CodecsMap;
-
-    /**
-     * Vector containing a default order for the codecs
-     */
-    CodecOrder _defaultCodecOrder;
-
-    /**
-     * Vector containing the complete name of the codec shared library scanned
-     */
-    std::vector<std::string> _Cache;
-
-    /**
-     * Number of codecs loaded
-     */
-    int _nbCodecs;
-
-    /**
-     * Vector containing pairs
-     * Pair between pointer on function handle and pointer on audiocodec object
-     */
-    std::vector< CodecHandlePointer > _CodecInMemory;
+class CodecDescriptor
+{
+    public:
+        /**
+         * Constructor
+         */
+        CodecDescriptor();
+
+        /**
+         * Destructor
+         */
+        ~CodecDescriptor();
+
+        /**
+         * Accessor to data structures
+         * @return CodecsMap& The available codec
+         */
+        CodecsMap& getCodecsMap() {
+            return _CodecsMap;
+        }
+
+        /**
+         * Accessor to data structures
+         * @return CodecOrder& The list that reflects the user's choice
+         */
+        // CodecOrder& getActiveCodecs() { return _codecOrder; }
+
+        /**
+         * Get codec name by its payload
+         * @param payload the payload looked for
+         *                same as getPayload()
+         * @return std::string  The name of the codec
+         */
+        std::string getCodecName (AudioCodecType payload);
+
+        /**
+         * Get the codec object associated with the payload
+         * @param payload The payload looked for
+         * @return AudioCodec* A pointer on a AudioCodec object
+         */
+        AudioCodec* getCodec (AudioCodecType payload);
+
+        /**
+         * Initialiaze the map with all the supported codecs, even those inactive
+         */
+        void init();
+
+        /**
+         * Set the default codecs order.
+         * This order will be apply to each account by default
+         */
+        void setDefaultOrder();
+
+        /**
+         * Get the bit rate of the specified codec.
+         * @param payload The payload of the codec
+         * @return double The bit rate
+         */
+        double getBitRate (AudioCodecType payload);
+
+        /**
+         * Get the bandwidth for one call with the specified codec.
+         * The value has been calculated with the further information:
+         * RTp communication, SIP protocol (the value with IAX2 is very close), no RTCP, one simultaneous call, for one channel (the incoming one).
+         * @param payload The payload of the codec
+         * @return double The bandwidth
+         */
+        double getBandwidthPerCall (AudioCodecType payload);
+
+        /**
+         * Get the clock rate of the specified codec
+         * @param payload The payload of the codec
+         * @return int The clock rate of the specified codec
+         */
+        int getSampleRate (AudioCodecType payload);
+
+        /**
+         * Set the order of codecs by their payload
+         * @param list The ordered list sent by DBus
+         */
+        void saveActiveCodecs (const std::vector<std::string>& list);
+
+        /**
+         * Get the number of codecs loaded in dynamic memory
+         * @return int The number
+         */
+        int getCodecsNumber (void) {
+            return _nbCodecs;
+        }
+
+        /**
+         * Unreferences the codecs loaded in memory
+         */
+        void deleteHandlePointer (void);
+
+        /**
+         * Get the first element of the CodecsMap struct.
+         * i.e the one with the lowest payload
+         * @return AudioCodec	The pointer on the codec object
+         */
+        AudioCodec* getFirstCodecAvailable (void);
+
+        /**
+         * Instantiate a codec, used in AudioRTP to get an instance of Codec per call
+         * @param CodecHandlePointer	The map containing the pointer on the object and the pointer on the handle function
+         */
+        AudioCodec* instantiateCodec (AudioCodecType payload);
+
+        /**
+         * For a given codec, return its specification
+         *
+         * @param payload	The RTP payload of the codec
+         * @return std::vector <std::string>	A vector containing codec's name, sample rate, bandwidth and bit rate
+         */
+        std::vector <std::string> getCodecSpecifications (const int32_t& payload);
+
+        /**
+         *  Check if the audiocodec object has been successfully created
+         *  @param payload  The payload of the codec
+         *  @return bool  True if the audiocodec has been created
+         *		false otherwise
+         */
+        bool isCodecLoaded (int payload);
+
+    private:
+
+        /**
+         * Scan the installation directory ( --prefix configure option )
+         * And load the dynamic library
+         * @return std::vector<AudioCodec*> The list of the codec object successfully loaded in memory
+         */
+        std::vector<AudioCodec *> scanCodecDirectory (void);
+
+        /**
+         * Load a codec
+         * @param std::string	The path of the shared ( dynamic ) library.
+         * @return AudioCodec*  the pointer of the object loaded.
+         */
+        AudioCodec* loadCodec (std::string);
+
+        /**
+         * Unload a codec
+         * @param CodecHandlePointer	The map containing the pointer on the object and the pointer on the handle function
+         */
+        void unloadCodec (CodecHandlePointer);
+
+        /**
+         * Check if the files found in searched directories seems valid
+         * @param std::string	The name of the file
+         * @return bool True if the file name begins with libcodec_ and ends with .so
+         *		false otherwise
+         */
+        bool seemsValid (std::string);
+
+        /**
+         * Check if the codecs shared library has already been scanned during the session
+         * Useful not to load twice the same codec saved in the different directory
+         * @param std::string	The complete name of the shared directory ( without the path )
+         * @return bool True if the codecs has been scanned
+         *	    false otherwise
+         */
+        bool alreadyInCache (std::string);
+
+        /**
+         * Map the payload of a codec and the object associated ( AudioCodec * )
+         */
+        CodecsMap _CodecsMap;
+
+        /**
+         * Vector containing a default order for the codecs
+         */
+        CodecOrder _defaultCodecOrder;
+
+        /**
+         * Vector containing the complete name of the codec shared library scanned
+         */
+        std::vector<std::string> _Cache;
+
+        /**
+         * Number of codecs loaded
+         */
+        int _nbCodecs;
+
+        /**
+         * Vector containing pairs
+         * Pair between pointer on function handle and pointer on audiocodec object
+         */
+        std::vector< CodecHandlePointer > _CodecInMemory;
 };
 
 #endif // __CODEC_DESCRIPTOR_H__
diff --git a/sflphone-common/src/audio/codecs/g722.h b/sflphone-common/src/audio/codecs/g722.h
index e4dcba29f55566103b7f4a3f8c3f3e23246bb594..e5061071500516c33b13c56d0786a77649bdb1ff 100644
--- a/sflphone-common/src/audio/codecs/g722.h
+++ b/sflphone-common/src/audio/codecs/g722.h
@@ -8,12 +8,12 @@
  * 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.
@@ -48,8 +48,7 @@ codec is considerably faster, and still fully compatible with wideband terminals
 
 #include <stdint.h>
 
-enum
-{
+enum {
     G722_SAMPLE_RATE_8000 = 0x0001,
     G722_PACKED = 0x0002
 };
@@ -61,8 +60,7 @@ enum
 #define INT16_MIN       (-32768)
 #endif
 
-typedef struct
-{
+typedef struct {
     /*! TRUE if the operating in the special ITU test mode, with the band split filters
              disabled. */
     int itu_test_mode;
@@ -76,8 +74,7 @@ typedef struct
     /*! Signal history for the QMF */
     int x[24];
 
-    struct
-    {
+    struct {
         int s;
         int sp;
         int sz;
@@ -99,8 +96,7 @@ typedef struct
     int out_bits;
 } g722_encode_state_t;
 
-typedef struct
-{
+typedef struct {
     /*! TRUE if the operating in the special ITU test mode, with the band split filters
              disabled. */
     int itu_test_mode;
@@ -114,8 +110,7 @@ typedef struct
     /*! Signal history for the QMF */
     int x[24];
 
-    struct
-    {
+    struct {
         int s;
         int sp;
         int sz;
@@ -130,7 +125,7 @@ typedef struct
         int nb;
         int det;
     } band[2];
-    
+
     unsigned int in_buffer;
     int in_bits;
     unsigned int out_buffer;
@@ -141,13 +136,13 @@ typedef struct
 extern "C" {
 #endif
 
-void g722_encode_init (void);
-int g722_encode_release();
-int g722_encode(uint8_t g722_data[], const int16_t amp[], int len);
+    void g722_encode_init (void);
+    int g722_encode_release();
+    int g722_encode (uint8_t g722_data[], const int16_t amp[], int len);
 
-void g722_decode_init (void);
-int g722_decode_release();
-int g722_decode(int16_t amp[], const uint8_t g722_data[], int len);
+    void g722_decode_init (void);
+    int g722_decode_release();
+    int g722_decode (int16_t amp[], const uint8_t g722_data[], int len);
 
 #ifdef __cplusplus
 }
diff --git a/sflphone-common/src/audio/codecs/gsmcodec.cpp b/sflphone-common/src/audio/codecs/gsmcodec.cpp
index fef1d7a2c42943fbee8115ef0624ca9b609bae21..cb38d60cf6d453a52536629bc3ebeee212bdbe02 100644
--- a/sflphone-common/src/audio/codecs/gsmcodec.cpp
+++ b/sflphone-common/src/audio/codecs/gsmcodec.cpp
@@ -31,8 +31,7 @@
 
 
 #include "audiocodec.h"
-extern "C"
-{
+extern "C" {
 #include <gsm/gsm.h>
 }
 
diff --git a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp
index 92cd12ed83f2d01c93d5d6eef11e6c4e641b6fd0..3061d5e7c5879a2f5f028a61485d75fd9a4bc9ce 100644
--- a/sflphone-common/src/audio/codecs/speexcodec_nb.cpp
+++ b/sflphone-common/src/audio/codecs/speexcodec_nb.cpp
@@ -45,8 +45,7 @@ class Speex : public AudioCodec
                 _speex_enc_bits(),
                 _speex_dec_state(),
                 _speex_enc_state(),
-                _speex_frame_size(),
-                _preprocess_state() {
+                _speex_frame_size() {
             _clockRate = 8000;
             _frameSize = 160; // samples, 20 ms at 8kHz
             _channel = 1;
@@ -77,31 +76,6 @@ class Speex : public AudioCodec
 
             speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
 
-
-
-#ifdef HAVE_SPEEXDSP_LIB
-
-            int enable = 1;
-            int quality = 10;
-            int complex = 10;
-            int attenuation = -10;
-
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex);
-
-            // Init the decoder struct
-            speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
-
-            // Init the preprocess struct
-            _preprocess_state = speex_preprocess_state_init (_speex_frame_size,_clockRate);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
-#endif
-
         }
 
         ~Speex() {
@@ -118,9 +92,6 @@ class Speex : public AudioCodec
             speex_bits_destroy (&_speex_enc_bits);
             speex_encoder_destroy (_speex_enc_state);
             _speex_enc_state = 0;
-
-            speex_preprocess_state_destroy( _preprocess_state);
-            _preprocess_state = NULL;
         }
 
         virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
@@ -136,12 +107,6 @@ class Speex : public AudioCodec
         virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
             speex_bits_reset (&_speex_enc_bits);
 
-#ifdef HAVE_SPEEXDSP_LIB
-
-            speex_preprocess_run (_preprocess_state, src);
-#endif
-
-
             speex_encode_int (_speex_enc_state, src, &_speex_enc_bits);
             int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size);
 
@@ -155,7 +120,6 @@ class Speex : public AudioCodec
         void *_speex_dec_state;
         void *_speex_enc_state;
         int _speex_frame_size;
-        SpeexPreprocessState *_preprocess_state;
 };
 
 // the class factories
diff --git a/sflphone-common/src/audio/codecs/speexcodec_ub.cpp b/sflphone-common/src/audio/codecs/speexcodec_ub.cpp
index 84be794ecaa2940080a83943eec6fb0ad5271d13..34885a3c592363b4baf1339aeba291b8bf3cadcf 100644
--- a/sflphone-common/src/audio/codecs/speexcodec_ub.cpp
+++ b/sflphone-common/src/audio/codecs/speexcodec_ub.cpp
@@ -32,7 +32,6 @@
 #include "audiocodec.h"
 #include <cstdio>
 #include <speex/speex.h>
-#include <speex/speex_preprocess.h>
 
 class Speex : public AudioCodec
 {
@@ -45,8 +44,7 @@ class Speex : public AudioCodec
                 _speex_enc_bits(),
                 _speex_dec_state(),
                 _speex_enc_state(),
-                _speex_frame_size(),
-                _preprocess_state() {
+                _speex_frame_size() {
             _clockRate = 32000;
             _frameSize = 640; // 20 ms at 32 kHz
             _channel = 1;
@@ -78,29 +76,6 @@ class Speex : public AudioCodec
             speex_encoder_ctl (_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate);
 
             speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
-
-#ifdef HAVE_SPEEXDSP_LIB
-
-            int enable = 1;
-            int complex = 10;
-            int attenuation = -10;
-
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable);
-            // speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex);
-
-            // Init the decoder struct
-            speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_frameSize);
-
-            // Init the preprocess struct
-            _preprocess_state = speex_preprocess_state_init (_frameSize,_clockRate);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
-#endif
-
         }
 
         ~Speex() {
@@ -118,8 +93,6 @@ class Speex : public AudioCodec
             speex_encoder_destroy (_speex_enc_state);
             _speex_enc_state = 0;
 
-            speex_preprocess_state_destroy( _preprocess_state);
-            _preprocess_state = NULL;
         }
 
         virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
@@ -135,12 +108,6 @@ class Speex : public AudioCodec
         virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
             speex_bits_reset (&_speex_enc_bits);
 
-#ifdef HAVE_SPEEXDSP_LIB
-
-            speex_preprocess_run (_preprocess_state, src);
-#endif
-
-
             speex_encode_int (_speex_enc_state, src, &_speex_enc_bits);
             speex_bits_nbytes (&_speex_enc_bits);
             int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size);
@@ -155,7 +122,6 @@ class Speex : public AudioCodec
         void *_speex_dec_state;
         void *_speex_enc_state;
         int _speex_frame_size;
-        SpeexPreprocessState *_preprocess_state;
 };
 
 // the class factories
diff --git a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp
index 19f9da9c67398f836d523e72161e43a8e98e539b..0409ee2427044ff177bd4a0baf76f88a726d8a9f 100644
--- a/sflphone-common/src/audio/codecs/speexcodec_wb.cpp
+++ b/sflphone-common/src/audio/codecs/speexcodec_wb.cpp
@@ -32,7 +32,6 @@
 #include "audiocodec.h"
 #include <cstdio>
 #include <speex/speex.h>
-#include <speex/speex_preprocess.h>
 
 class Speex : public AudioCodec
 {
@@ -45,8 +44,7 @@ class Speex : public AudioCodec
                 _speex_enc_bits(),
                 _speex_dec_state(),
                 _speex_enc_state(),
-                _speex_frame_size(),
-                _preprocess_state() {
+                _speex_frame_size() {
             _clockRate = 16000;
             _frameSize = 320; // 20 ms at 16 kHz
             _channel = 1;
@@ -77,29 +75,6 @@ class Speex : public AudioCodec
 
             speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
 
-#ifdef HAVE_SPEEXDSP_LIB
-
-            int enable = 1;
-            int quality = 10;
-            int complex = 10;
-            int attenuation = -10;
-
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VAD, &enable);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_DTX, &enable);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
-            speex_encoder_ctl (_speex_enc_state, SPEEX_SET_COMPLEXITY, &complex);
-
-            // Init the decoder struct
-            speex_decoder_ctl (_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size);
-
-            // Init the preprocess struct
-            _preprocess_state = speex_preprocess_state_init (_speex_frame_size,_clockRate);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enable);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable);
-            speex_preprocess_ctl (_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
-#endif
-
         }
 
         ~Speex() {
@@ -117,8 +92,6 @@ class Speex : public AudioCodec
             speex_encoder_destroy (_speex_enc_state);
             _speex_enc_state = 0;
 
-            speex_preprocess_state_destroy( _preprocess_state);
-            _preprocess_state = NULL;
         }
 
         virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) {
@@ -135,11 +108,6 @@ class Speex : public AudioCodec
         virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) {
             speex_bits_reset (&_speex_enc_bits);
 
-#ifdef HAVE_SPEEXDSP_LIB
-
-            speex_preprocess_run (_preprocess_state, src);
-#endif
-
             //printf ("Codec::codecEncode() size %i\n", size);
             speex_encode_int (_speex_enc_state, src, &_speex_enc_bits);
             int nbBytes = speex_bits_write (&_speex_enc_bits, (char*) dst, size);
@@ -154,7 +122,6 @@ class Speex : public AudioCodec
         void *_speex_dec_state;
         void *_speex_enc_state;
         int _speex_frame_size;
-        SpeexPreprocessState *_preprocess_state;
 };
 
 // the class factories
diff --git a/sflphone-common/src/audio/common.h b/sflphone-common/src/audio/common.h
index 6f24a65bd53a50bbede077e18354d2ecbb548b88..058d611c3209a92560e0aaaaffa711936ebdc6af 100644
--- a/sflphone-common/src/audio/common.h
+++ b/sflphone-common/src/audio/common.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  Author: 
+ *  Author:
  *
  *  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.
diff --git a/sflphone-common/src/audio/dcblocker.cpp b/sflphone-common/src/audio/dcblocker.cpp
index 7080ab76046b9f310c566bc93ed0e48418e75a0a..bb373f1b012d3c25fd6cc84c953b63e3d57f8739 100644
--- a/sflphone-common/src/audio/dcblocker.cpp
+++ b/sflphone-common/src/audio/dcblocker.cpp
@@ -28,40 +28,63 @@
  *  as that of the covered work.
  */
 
+#include "dcblocker.h"
 
+DcBlocker::DcBlocker() : _y (0), _x (0), _xm1 (0), _ym1 (0) {}
 
-#include "dcblocker.h"
+DcBlocker::~DcBlocker() {}
 
-DcBlocker::DcBlocker()
+void DcBlocker::reset()
 {
+    _y = 0;
+    _x = 0;
+    _xm1 = 0;
+    _ym1 = 0;
+}
 
-    y = 0;
-    x = 0;
-    xm1 = 0;
-    ym1 = 0;
+void DcBlocker::putData (SFLDataFormat *inputData UNUSED, int nbBytes UNUSED) {}
 
+int DcBlocker::getData (SFLDataFormat *outputData UNUSED)
+{
+    return 0;
 }
 
-DcBlocker::~DcBlocker()
+void DcBlocker::process (SFLDataFormat *data, int nbBytes)
 {
+    // y(n) = x(n) - x(n-1) + R y(n-1) , R = 0.9999
+
+    int nbSamples = nbBytes / sizeof (SFLDataFormat);
 
+    for (int i = 0; i < nbSamples; i++) {
+        _x = data[i];
 
+        _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.995 * (float) _ym1);
+        _xm1 = _x;
+        _ym1 = _y;
+
+        data[i] = _y;
+
+    }
 }
 
-void DcBlocker::filter_signal (SFLDataFormat* audio_data, int length)
+int DcBlocker::process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes)
 {
-    // y(n) = x(n) - x(n-1) + R y(n-1) , R = 0.9999
 
-    for (int i = 0; i < length; i++) {
+    int nbSamples = nbBytes / sizeof (SFLDataFormat);
 
-        x = audio_data[i];
+    for (int i = 0; i < nbSamples; i++) {
 
-        y = (SFLDataFormat) ( (float) x - (float) xm1 + 0.9999 * (float) ym1);
-        xm1 = x;
-        ym1 = y;
+        _x = inputData[i];
 
-        audio_data[i] = y;
+        _y = (SFLDataFormat) ( (float) _x - (float) _xm1 + 0.9999 * (float) _ym1);
+        _xm1 = _x;
+        _ym1 = _y;
 
+        outputData[i] = _y;
     }
 
+    return 0;
+
 }
+
+void DcBlocker::process (SFLDataFormat *micData UNUSED, SFLDataFormat *spkrData UNUSED, SFLDataFormat *outputData UNUSED, int nbBytes UNUSED) {}
diff --git a/sflphone-common/src/audio/dcblocker.h b/sflphone-common/src/audio/dcblocker.h
index 7ce1eb50e30b9468b3452b8af06277ef80f55fa5..021369139ac287551603ea133b981c9c31400a5a 100644
--- a/sflphone-common/src/audio/dcblocker.h
+++ b/sflphone-common/src/audio/dcblocker.h
@@ -31,21 +31,55 @@
 #ifndef DCBLOCKER_H
 #define DCBLOCKER_H
 
+#include "algorithm.h"
 #include "global.h"
 
-class DcBlocker {
+#include <vector>
 
-public:
+class DcBlocker : public Algorithm
+{
 
-    DcBlocker();
+    public:
 
-    ~DcBlocker();
+        DcBlocker();
 
-    void filter_signal(SFLDataFormat* audio_data, int length);
+        ~DcBlocker();
 
-private:
+        virtual void reset (void);
 
-    SFLDataFormat y, x, xm1, ym1;
+        /**
+         * Unused
+         */
+        virtual void putData (SFLDataFormat *inputData, int nbBytes);
+
+        /**
+         * Unused
+         */
+        virtual int getData (SFLDataFormat *outputData);
+
+        /**
+         * Perform dc blocking given the input data
+         */
+        virtual void process (SFLDataFormat *data, int nbBytes);
+
+        /**
+         * Perform echo cancellation using internal buffers
+         * \param inputData containing mixed echo and voice data
+         * \param outputData containing
+         */
+        virtual int process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes);
+
+        /**
+         * Perform echo cancellation, application must provide its own buffer
+         * \param micData containing mixed echo and voice data
+         * \param spkrData containing far-end voice data to be sent to speakers
+         * \param outputData containing the processed data
+         */
+        virtual void process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes);
+
+    private:
+
+        SFLDataFormat _y, _x, _xm1, _ym1;
 };
 
 #endif
diff --git a/sflphone-common/src/audio/delaydetection.cpp b/sflphone-common/src/audio/delaydetection.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e05739ce17cabde5500d464e826094d8f3115b77
--- /dev/null
+++ b/sflphone-common/src/audio/delaydetection.cpp
@@ -0,0 +1,343 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "delaydetection.h"
+#include "math.h"
+#include <string.h>
+#include <samplerate.h>
+
+// decimation filter coefficient
+float decimationCoefs[] = {-0.09870257, 0.07473655, 0.05616626, 0.04448337, 0.03630817, 0.02944626,
+                           0.02244098, 0.01463477, 0.00610982, -0.00266367, -0.01120109, -0.01873722,
+                           -0.02373243, -0.02602213, -0.02437806, -0.01869834, -0.00875287, 0.00500204,
+                           0.02183252, 0.04065763, 0.06015944, 0.0788299, 0.09518543, 0.10799179,
+                           0.1160644,  0.12889288, 0.1160644, 0.10799179, 0.09518543, 0.0788299,
+                           0.06015944, 0.04065763, 0.02183252, 0.00500204, -0.00875287, -0.01869834,
+                           -0.02437806, -0.02602213, -0.02373243, -0.01873722, -0.01120109, -0.00266367,
+                           0.00610982, 0.01463477, 0.02244098, 0.02944626, 0.03630817, 0.04448337,
+                           0.05616626,  0.07473655, -0.09870257
+                          };
+std::vector<double> ird (decimationCoefs, decimationCoefs + sizeof (decimationCoefs) /sizeof (float));
+
+
+// decimation filter coefficient
+float bandpassCoefs[] = {0.06278034, -0.0758545, -0.02274943, -0.0084497, 0.0702427, 0.05986113,
+                         0.06436469, -0.02412049, -0.03433526, -0.07568665, -0.03214543, -0.07236507,
+                         -0.06979052, -0.12446371, -0.05530828, 0.00947243, 0.15294699, 0.17735563,
+                         0.15294699, 0.00947243, -0.05530828, -0.12446371, -0.06979052, -0.07236507,
+                         -0.03214543, -0.07568665, -0.03433526, -0.02412049,  0.06436469, 0.05986113,
+                         0.0702427, -0.0084497, -0.02274943, -0.0758545, 0.06278034
+                        };
+std::vector<double> irb (bandpassCoefs, bandpassCoefs + sizeof (bandpassCoefs) /sizeof (float));
+
+
+FirFilter::FirFilter (std::vector<double> ir) : _length (ir.size()),
+        _impulseResponse (ir),
+        _count (0)
+{
+    memset (_taps, 0, sizeof (double) *MAXFILTERSIZE);
+}
+
+FirFilter::~FirFilter() {}
+
+float FirFilter::getOutputSample (float inputSample)
+{
+    _taps[_count] = inputSample;
+    double result = 0.0;
+    int index = _count;
+
+    for (int i = 0; i < _length; i++) {
+        result = result + _impulseResponse[i] * _taps[index--];
+
+        if (index < 0)
+            index = _length-1;
+    }
+
+    _count++;
+
+    if (_count >= _length)
+        _count = 0;
+
+    return result;
+}
+
+void FirFilter::reset (void)
+{
+    for (int i = 0; i < _length; i++) {
+        _impulseResponse[i] = 0.0;
+    }
+}
+
+
+DelayDetection::DelayDetection() : _internalState (WaitForSpeaker), _decimationFilter (ird), _bandpassFilter (irb), _segmentSize (DELAY_BUFF_SIZE), _downsamplingFactor (8)
+{
+    _micDownSize = WINDOW_SIZE / _downsamplingFactor;
+    _spkrDownSize = DELAY_BUFF_SIZE / _downsamplingFactor;
+
+    memset (_spkrReference, 0, sizeof (float) *WINDOW_SIZE*2);
+    memset (_capturedData, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+    memset (_spkrReferenceDown, 0, sizeof (float) *WINDOW_SIZE*2);
+    memset (_captureDataDown, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+    memset (_spkrReferenceFilter, 0, sizeof (float) *WINDOW_SIZE*2);
+    memset (_captureDataFilter, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+    memset (_correlationResult, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+
+}
+
+DelayDetection::~DelayDetection() {}
+
+void DelayDetection::reset()
+{
+    _nbMicSampleStored = 0;
+    _nbSpkrSampleStored = 0;
+
+    _decimationFilter.reset();
+    _bandpassFilter.reset();
+
+    memset (_spkrReference, 0, sizeof (float) *WINDOW_SIZE*2);
+    memset (_capturedData, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+    memset (_spkrReferenceDown, 0, sizeof (float) *WINDOW_SIZE*2);
+    memset (_captureDataDown, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+    memset (_spkrReferenceFilter, 0, sizeof (float) *WINDOW_SIZE*2);
+    memset (_captureDataFilter, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+    memset (_correlationResult, 0, sizeof (float) *DELAY_BUFF_SIZE*2);
+
+    _internalState = WaitForSpeaker;
+}
+
+void DelayDetection::putData (SFLDataFormat *inputData, int nbBytes)
+{
+
+    // Machine may already got a spkr and is waiting for mic or computing correlation
+    if (_nbSpkrSampleStored == WINDOW_SIZE)
+        return;
+
+    int nbSamples = nbBytes/sizeof (SFLDataFormat);
+
+    if ( (_nbSpkrSampleStored + nbSamples) > WINDOW_SIZE)
+        nbSamples = WINDOW_SIZE - _nbSpkrSampleStored;
+
+
+    if (nbSamples) {
+
+        float tmp[nbSamples];
+        float down[nbSamples];
+
+        convertInt16ToFloat32 (inputData, tmp, nbSamples);
+        memcpy (_spkrReference+_nbSpkrSampleStored, tmp, nbSamples*sizeof (float));
+
+        downsampleData (tmp, down, nbSamples, _downsamplingFactor);
+        bandpassFilter (down, nbSamples/_downsamplingFactor);
+        memcpy (_spkrReferenceDown+ (_nbSpkrSampleStored/_downsamplingFactor), down, (nbSamples/_downsamplingFactor) *sizeof (float));
+
+        _nbSpkrSampleStored += nbSamples;
+
+    }
+
+    // Update the state
+    _internalState = WaitForMic;
+
+}
+
+int DelayDetection::getData (SFLDataFormat *outputData UNUSED)
+{
+    return 0;
+}
+
+void DelayDetection::process (SFLDataFormat *inputData, int nbBytes)
+{
+
+    if (_internalState != WaitForMic)
+        return;
+
+    int nbSamples = nbBytes/sizeof (SFLDataFormat);
+
+    if ( (_nbMicSampleStored + nbSamples) > DELAY_BUFF_SIZE)
+        nbSamples = DELAY_BUFF_SIZE - _nbMicSampleStored;
+
+    if (nbSamples) {
+        float tmp[nbSamples];
+        float down[nbSamples];
+
+        convertInt16ToFloat32 (inputData, tmp, nbSamples);
+        memcpy (_capturedData+_nbMicSampleStored, tmp, nbSamples);
+
+        downsampleData (tmp, down, nbSamples, _downsamplingFactor);
+
+        memcpy (_captureDataDown+ (_nbMicSampleStored/_downsamplingFactor), down, (nbSamples/_downsamplingFactor) *sizeof (float));
+
+        _nbMicSampleStored += nbSamples;
+
+    }
+
+    if (_nbMicSampleStored == DELAY_BUFF_SIZE)
+        _internalState = ComputeCorrelation;
+    else
+        return;
+
+    _debug ("_spkrDownSize: %d, _micDownSize: %d", _spkrDownSize, _micDownSize);
+    crossCorrelate (_spkrReferenceDown, _captureDataDown, _correlationResult, _micDownSize, _spkrDownSize);
+
+    int maxIndex = getMaxIndex (_correlationResult, _spkrDownSize);
+
+    _debug ("MaxIndex: %d", maxIndex);
+}
+
+int DelayDetection::process (SFLDataFormat *intputData UNUSED, SFLDataFormat *outputData UNUSED, int nbBytes UNUSED)
+{
+    return 0;
+}
+
+void DelayDetection::process (SFLDataFormat *micData UNUSED, SFLDataFormat *spkrData UNUSED, SFLDataFormat *outputData UNUSED, int nbBytes UNUSED) {}
+
+void DelayDetection::crossCorrelate (float *ref, float *seg, float *res, int refSize, int segSize)
+{
+
+    _debug ("CrossCorrelate");
+
+    // Output has same size as the
+    int rsize = refSize;
+    int ssize = segSize;
+    int tmpsize = segSize-refSize+1;
+
+    // perform autocorrelation on reference signal
+    float acref = correlate (ref, ref, rsize);
+
+    // perform crossrelation on signal
+    float acseg = 0.0;
+    float r;
+
+    while (--tmpsize) {
+        --ssize;
+        acseg = correlate (seg+tmpsize, seg+tmpsize, rsize);
+        res[ssize] = correlate (ref, seg+tmpsize, rsize);
+        r = sqrt (acref*acseg);
+
+        if (r < 0.0000001)
+            res[ssize] = 0.0;
+        else
+            res[ssize] = res[ssize] / r;
+    }
+
+    // perform crosscorrelation on zerro padded region
+    int i = 0;
+
+    while (rsize) {
+        acseg = correlate (seg, seg, rsize);
+        res[ssize-1] = correlate (ref+i, seg, rsize);
+        r = sqrt (acref*acseg);
+
+        if (r < 0.0001)
+            res[ssize-1] = 0.0;
+        else
+            res[ssize-1] = res[ssize-1] / r;
+
+        --rsize;
+        --ssize;
+        ++i;
+    }
+}
+
+double DelayDetection::correlate (float *sig1, float *sig2, short size)
+{
+
+    short s = size;
+
+    double ac = 0.0;
+
+    while (s--)
+        ac += sig1[s]*sig2[s];
+
+    return ac;
+}
+
+
+void DelayDetection::convertInt16ToFloat32 (SFLDataFormat *input, float *output, int nbSamples)
+{
+
+#define S2F_FACTOR .000030517578125f;
+    int len = nbSamples;
+
+    while (len) {
+        len--;
+        output[len] = (float) input[len] * S2F_FACTOR;
+    }
+}
+
+
+void DelayDetection::downsampleData (float *input, float *output, int nbSamples, int factor)
+{
+
+    int _src_err;
+
+    SRC_STATE *_src_state  = src_new (SRC_LINEAR, 1, &_src_err);
+
+    double downfactor = 1.0 / (double) factor;
+
+    if (downfactor != 1.0) {
+        SRC_DATA src_data;
+        src_data.data_in = input;
+        src_data.data_out = output;
+        src_data.input_frames = nbSamples;
+        src_data.output_frames = nbSamples / factor;
+        src_data.src_ratio = downfactor;
+        src_data.end_of_input = 0; // More data will come
+
+        src_process (_src_state, &src_data);
+    }
+}
+
+
+void DelayDetection::bandpassFilter (float *input, int nbSamples)
+{
+
+    for (int i = 0; i < nbSamples; i++) {
+        input[i] = _bandpassFilter.getOutputSample (input[i]);
+    }
+}
+
+
+int DelayDetection::getMaxIndex (float *data, int size)
+{
+
+    float max = 0.0;
+    int k;
+
+    for (int i = 0; i < size; i++) {
+        if (data[i] >= max) {
+            max = data[i];
+            k = i;
+        }
+    }
+
+    return k;
+}
diff --git a/sflphone-common/src/audio/delaydetection.h b/sflphone-common/src/audio/delaydetection.h
new file mode 100644
index 0000000000000000000000000000000000000000..4e0891084237386fb0cfb04e8de947dab0cd93b0
--- /dev/null
+++ b/sflphone-common/src/audio/delaydetection.h
@@ -0,0 +1,193 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 DELAYDETECTION_H
+#define DELAYDETECTION_H
+
+#include "algorithm.h"
+
+// Template size in samples for correlation
+#define WINDOW_SIZE 256
+
+// Segment length in ms for correlation
+#define MAX_DELAY 150
+
+// Size of internal buffers in samples
+#define  DELAY_BUFF_SIZE MAX_DELAY*8000/1000
+
+#define MAXFILTERSIZE 100
+
+
+
+class FirFilter
+{
+
+    public:
+
+        /**
+         * Constructor for this class
+         */
+        FirFilter (std::vector<double> ir);
+
+        /**
+         * SDestructor for this class
+         */
+        ~FirFilter();
+
+        /**
+         * Perform filtering on one sample
+         */
+        float getOutputSample (float inputSample);
+
+        void reset (void);
+
+
+    private:
+
+        /**
+         * Length of the filter
+         */
+        int _length;
+
+        /**
+         * Coefficient of the filter
+         */
+        std::vector<double> _impulseResponse;
+
+        /**
+         * Circular buffer
+         */
+        double _taps[MAXFILTERSIZE];
+
+        /**
+         * Counter
+         */
+        int _count;
+
+};
+
+
+class DelayDetection : public Algorithm
+{
+
+    public:
+
+        DelayDetection();
+
+        ~DelayDetection();
+
+        virtual void reset (void);
+
+        virtual void putData (SFLDataFormat *inputData, int nbBytes);
+
+        virtual int getData (SFLDataFormat *getData);
+
+        virtual void process (SFLDataFormat *inputData, int nbBytes);
+
+        virtual int process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes);
+
+        virtual void process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes);
+
+    private:
+
+        enum State {
+            WaitForSpeaker,
+            WaitForMic,
+            ComputeCorrelation
+        };
+
+
+        /**
+         * Perform a normalized crosscorrelation between template and segment
+         */
+        void crossCorrelate (float *ref, float *seg, float *res, int refSize, int segSize);
+
+        /**
+         * Perform a correlation on specified signals (mac)
+         */
+        double correlate (float *sig1, float *sig2, short size);
+
+        void convertInt16ToFloat32 (SFLDataFormat *input, float *ouput, int nbSamples);
+
+        void downsampleData (float *input, float *output, int nbSamples, int factor);
+
+        void bandpassFilter (float *input, int nbSamples);
+
+        int getMaxIndex (float *data, int size);
+
+        State _internalState;
+
+        FirFilter _decimationFilter;
+
+        FirFilter _bandpassFilter;
+
+        /**
+         * Segment size in samples for correlation
+         */
+        short _segmentSize;
+
+        int _downsamplingFactor;
+
+        /**
+         * Resulting correlation size (s + w -1)
+         */
+        short _correlationSize;
+
+        float _spkrReference[WINDOW_SIZE*2];
+
+        float _capturedData[DELAY_BUFF_SIZE*2];
+
+        float _spkrReferenceDown[WINDOW_SIZE*2];
+
+        float _captureDataDown[DELAY_BUFF_SIZE*2];
+
+        float _spkrReferenceFilter[WINDOW_SIZE*2];
+
+        float _captureDataFilter[DELAY_BUFF_SIZE*2];
+
+        float _correlationResult[DELAY_BUFF_SIZE*2];
+
+        int _remainingIndex;
+
+        int _spkrDownSize;
+
+        int _micDownSize;
+
+        int _nbMicSampleStored;
+
+        int _nbSpkrSampleStored;
+
+    public:
+
+        friend class DelayDetectionTest;
+};
+
+#endif
diff --git a/sflphone-common/src/audio/echocancel.cpp b/sflphone-common/src/audio/echocancel.cpp
index 27176b37e99ddf669f6e43756ad79bbf855281de..e6e2a3c92fbec4e3d7c6002da27466eaee400b3f 100644
--- a/sflphone-common/src/audio/echocancel.cpp
+++ b/sflphone-common/src/audio/echocancel.cpp
@@ -30,33 +30,594 @@
 
 #include "echocancel.h"
 
+// #include <fstream>
+
+EchoCancel::EchoCancel (int smplRate, int frameLength) : _samplingRate (smplRate),
+        _frameLength (frameLength),
+        _smplPerFrame (0),
+        _smplPerSeg (0),
+        _nbSegmentPerFrame (0),
+        _micHistoryLength (0),
+        _spkrHistoryLength (0),
+        _alpha (0.01),
+        _spkrLevelMem (0),
+        _micLevelMem (0),
+        _spkrLevel (0),
+        _micLevel (0),
+        _spkrHistCnt (0),
+        _micHistCnt (0),
+        _amplFactor (0.0),
+        _lastAmplFactor (0.0),
+        _amplDelayIndexIn (0),
+        _amplDelayIndexOut (0),
+        _adaptDone (false),
+        _adaptStarted (false),
+        _adaptCnt (0),
+        _spkrAdaptCnt (0),
+        _micAdaptCnt (0),
+        _spkrAdaptSize (SPKR_ADAPT_SIZE),
+        _micAdaptSize (MIC_ADAPT_SIZE),
+        _correlationSize (0),
+        _processedByte (0),
+        _echoActive (true),
+        _noiseActive (true)
+{
+    _debug ("EchoCancel: Instantiate echo canceller");
+
+
+    // micFile = new ofstream("micData", ofstream::binary);
+    // echoFile = new ofstream("echoData", ofstream::binary);
+    // spkrFile = new ofstream("spkrData", ofstream::binary);
+
+    micLevelData = new ofstream ("micLevelData", ofstream::binary);
+    spkrLevelData = new ofstream ("spkrLevelData", ofstream::binary);
+
+
+    _micData = new RingBuffer (50000);
+    _spkrData = new RingBuffer (50000);
+    _spkrDataOut = new RingBuffer (50000);
+
+    _micData->createReadPointer();
+    _spkrData->createReadPointer();
+    _spkrDataOut->createReadPointer();
+
+    // variable used to sync mic and spkr
+    _spkrStoped = true;
+
+    _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC;
+    _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC;
+    _micHistoryLength = MIC_LENGTH / SEGMENT_LENGTH;
+    _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH;
+    _nbSegmentPerFrame =  _frameLength / SEGMENT_LENGTH;
+
+    _noiseState = speex_preprocess_state_init (_smplPerFrame, _samplingRate);
+    int i=1;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i);
+    i=-20;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i);
+    i=0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC, &i);
+    i=8000;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC_TARGET, &i);
+    i=16000;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i);
+    i=0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i);
+    float f=0.0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f);
+    f=0.0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f);
+    i = 0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_VAD, &i);
+
+
+    memset (_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof (int));
+    memset (_avgMicLevelHist, 0, BUFF_SIZE*sizeof (int));
+
+    memset (_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof (float));
+
+    _amplDelayIndexIn = 0;
+    _amplDelayIndexOut = 0;
+
+    _correlationSize = _spkrAdaptSize;
+
+}
+
+
+EchoCancel::~EchoCancel()
+{
+    _debug ("EchoCancel: Delete echo canceller");
+
+    delete _micData;
+    _micData = NULL;
+
+    delete _spkrData;
+    _spkrData = NULL;
+
+    speex_preprocess_state_destroy (_noiseState);
+
+    // micFile->close();
+    // spkrFile->close();
+    // echoFile->close();
+
+    // delete micFile;
+    // delete spkrFile;
+    // delete echoFile;
+
+    micLevelData->close();
+    spkrLevelData->close();
+    delete micLevelData;
+    delete spkrLevelData;
+}
+
+
+void EchoCancel::reset()
+{
+    _debug ("EchoCancel: Reset internal state, Sampling rate %d, Frame size %d", _samplingRate, _smplPerFrame);
+
+    memset (_avgSpkrLevelHist, 0, BUFF_SIZE*sizeof (int));
+    memset (_avgMicLevelHist, 0, BUFF_SIZE*sizeof (int));
+
+    _spkrLevel = 0;
+    _micLevel = 0;
+    _spkrHistCnt = 0;
+    _micHistCnt = 0;
+    _amplFactor = 0.0;
+    _lastAmplFactor = 0.0;
+
+    _smplPerFrame = (_samplingRate * _frameLength) / MS_PER_SEC;
+    _smplPerSeg = (_samplingRate * SEGMENT_LENGTH) / MS_PER_SEC;
+    _micHistoryLength = MIC_LENGTH / SEGMENT_LENGTH;
+    _spkrHistoryLength = SPKR_LENGTH / SEGMENT_LENGTH;
+    _nbSegmentPerFrame =  _frameLength / SEGMENT_LENGTH;
+
+    memset (_delayLineAmplify, 0, MAX_DELAY_LINE_AMPL*sizeof (float));
+
+    _amplDelayIndexIn = 0;
+    _amplDelayIndexOut = ECHO_LENGTH / SEGMENT_LENGTH;
+
+    _adaptDone = false;
+    _adaptStarted = false;
+    _adaptCnt = 0;
+    _spkrAdaptCnt = 0;
+    _micAdaptCnt = 0;
+
+    _micData->flushAll();
+    _spkrData->flushAll();
+    _spkrDataOut->flushAll();
+
+    speex_preprocess_state_destroy (_noiseState);
+
+    _noiseState = speex_preprocess_state_init (_smplPerFrame, _samplingRate);
+    int i=1;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i);
+    i=-10;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i);
+    i=0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC, &i);
+    i=8000;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC_TARGET, &i);
+    i=16000;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i);
+    i=0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i);
+    float f=0.0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f);
+    f=0.0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f);
+
+    _spkrStoped = true;
+
+    _processedByte = 0;
+}
+
+void EchoCancel::putData (SFLDataFormat *inputData, int nbBytes)
+{
+
+    _delayDetector.putData (inputData, nbBytes);
+
+    if (_spkrStoped) {
+        _debug ("EchoCancel: Flush data");
+        _micData->flushAll();
+        _spkrData->flushAll();
+        _spkrStoped = false;
+    }
+
+    // Put data in speaker ring buffer
+    _spkrData->Put (inputData, nbBytes);
+}
+
+
+int EchoCancel::getData (SFLDataFormat *outputData)
+{
+
+    int copied = 0;
+
+    if (_processedByte > 0) {
+        copied = _spkrDataOut->Get (outputData, _processedByte);
+        _processedByte = 0;
+    }
+
+    return copied;
+}
+
+void EchoCancel::process (SFLDataFormat *data UNUSED, int nbBytes UNUSED) {}
 
-#define FRAME_SIZE 160
-#define FILTER_LENGTH 2000
 
-EchoCancel::EchoCancel() 
+int EchoCancel::process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes)
 {
-  _echoState = speex_echo_state_init(FRAME_SIZE, FILTER_LENGTH);
+
+    _delayDetector.process (inputData, nbBytes);
+
+    if (_spkrStoped) {
+        bcopy (inputData, outputData, nbBytes);
+        return nbBytes;
+    }
+
+    int byteSize = _smplPerFrame*sizeof (SFLDataFormat);
+
+    // init temporary buffers
+    memset (_tmpSpkr, 0, BUFF_SIZE*sizeof (SFLDataFormat));
+    memset (_tmpMic, 0, BUFF_SIZE*sizeof (SFLDataFormat));
+    memset (_tmpOut, 0, BUFF_SIZE*sizeof (SFLDataFormat));
+
+    // Put mic data in ringbuffer
+    _micData->Put (inputData, nbBytes);
+
+    // Store data for synchronization
+    int spkrAvail = _spkrData->AvailForGet();
+    int micAvail = _micData->AvailForGet();
+
+    // Init number of frame processed
+    int nbFrame = 0;
+
+    // Get data from mic and speaker internal buffer
+    // while((spkrAvail >= byteSize) && (micAvail >= byteSize)) {
+    while (micAvail >= byteSize) {
+
+        if (spkrAvail >= byteSize) {
+
+            // get synchronized data
+            _spkrData->Get (_tmpSpkr, byteSize);
+            _micData->Get (_tmpMic, byteSize);
+
+            // micFile->write((const char *)_tmpMic, byteSize);
+            // spkrFile->write((const char *)_tmpSpkr, byteSize);
+
+#ifdef HAVE_LIBSPEEX_DSP
+
+            _debug ("OK");
+
+            // Remove noise
+            if (_noiseActive)
+                speex_preprocess_run (_noiseState, _tmpMic);
+
+#endif
+
+            // Processed echo cancellation
+            performEchoCancel (_tmpMic, _tmpSpkr, _tmpOut);
+
+            // echoFile->write((const char *)_tmpOut, byteSize);
+
+            bcopy (_tmpOut, outputData+ (nbFrame*_smplPerFrame), byteSize);
+
+            // used to sync with speaker
+            _processedByte += byteSize;
+
+            spkrAvail = _spkrData->AvailForGet();
+            micAvail = _micData->AvailForGet();
+
+            // increment nb of frame processed
+            ++nbFrame;
+        } else {
+            _micData->Get (_tmpMic, byteSize);
+
+            performEchoCancelNoSpkr (_tmpMic, _tmpOut);
+
+            bcopy (_tmpOut, outputData+ (nbFrame*_smplPerFrame), byteSize);
+            ++nbFrame;
+        }
+
+        spkrAvail = _spkrData->AvailForGet();
+        micAvail = _micData->AvailForGet();
+    }
+
+    // if spkrAvail is twice the size of a frame discard it, this data is late and won't be used
+    if (spkrAvail > (2*byteSize)) {
+        _spkrData->Discard (spkrAvail- (2*byteSize));
+    }
+
+    return nbFrame * _smplPerFrame;
 }
 
-EchoCancel::~EchoCancel() 
+void EchoCancel::process (SFLDataFormat *micData UNUSED, SFLDataFormat *spkrData UNUSED, SFLDataFormat *outputData UNUSED, int nbBytes UNUSED)
 {
-  speex_echo_state_destroy(_echoState);
-  _echoState = NULL;
+
 }
 
-void EchoCancel::putData(SFLDataFormat *inputData) 
+void EchoCancel::setSamplingRate (int smplRate)
 {
-  speex_echo_playback(_echoState, inputData);
+
+    if (smplRate != _samplingRate) {
+        _samplingRate = smplRate;
+
+        reset();
+    }
 }
 
-void EchoCancel::process(SFLDataFormat *inputData, SFLDataFormat *outputData)
+
+void EchoCancel::performEchoCancel (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData)
 {
-  speex_echo_capture(_echoState, inputData, outputData);
+
+    for (int k = 0; k < _nbSegmentPerFrame; k++) {
+
+        updateEchoCancel (micData+ (k*_smplPerSeg), spkrData+ (k*_smplPerSeg));
+
+        _spkrLevel = getMaxAmplitude (_avgSpkrLevelHist, _spkrHistoryLength);
+        _micLevel = getMaxAmplitude (_avgMicLevelHist, _micHistoryLength) /6;
+
+        if (_spkrLevel >= MIN_SIG_LEVEL) {
+            if (_micLevel > _spkrLevel) {
+                increaseFactor (0.2);
+            } else {
+                _amplFactor = 0.0;
+            }
+        } else {
+            increaseFactor (0.01);
+        }
+
+        // lowpass filtering
+        float amplify = (_lastAmplFactor + _amplFactor) / 2;
+        _lastAmplFactor = _amplFactor;
+
+        if (!_echoActive)
+            amplify = 1.0;
+
+        amplifySignal (micData+ (k*_smplPerSeg), outputData+ (k*_smplPerSeg), amplify);
+
+    }
+
 }
 
-void EchoCancel::process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData){
+void EchoCancel::performEchoCancelNoSpkr (SFLDataFormat *micData, SFLDataFormat *outputData)
+{
+
+    for (int k = 0; k < _nbSegmentPerFrame; k++) {
+
+        updateMicLevel (micData);
+
+        _micLevel = getMaxAmplitude (_avgMicLevelHist, _micHistoryLength) /6;
+
+        if (_micLevel > MIN_SIG_LEVEL) {
+            increaseFactor (0.2);
+        }
+
+        // lowpass filtering
+        float amplify = (_lastAmplFactor + _amplFactor) / 2;
+        _lastAmplFactor = _amplFactor;
+
+        if (!_echoActive)
+            amplify = 1.0;
+
+        amplifySignal (micData+ (k*_smplPerSeg), outputData+ (k*_smplPerSeg), amplify);
+    }
+
+}
+
+void EchoCancel::updateMicLevel (SFLDataFormat *micData)
+{
+
+    int micLvl = computeAmplitudeLevel (micData, _smplPerSeg);
+
+    SFLDataFormat tempMicLevel[_smplPerSeg];
+
+    _micLevelMem = estimatePower (micData, tempMicLevel, _smplPerSeg, _micLevelMem);
+
+    _avgMicLevelHist[_micHistCnt++] = micLvl+1;
+
+    if (_micHistCnt >= _micHistoryLength)
+        _micHistCnt = 0;
+
+    micLevelData->write ( (const char*) tempMicLevel, sizeof (SFLDataFormat) *_smplPerSeg);
+}
+
+
+void EchoCancel::updateSpkrLevel (SFLDataFormat *spkrData)
+{
+
+    int spkrLvl = computeAmplitudeLevel (spkrData, _smplPerSeg);
+
+    SFLDataFormat tempSpkrLevel[_smplPerSeg];
+
+    _spkrLevelMem = estimatePower (spkrData, tempSpkrLevel, _smplPerSeg, _spkrLevelMem);
+
+    _avgSpkrLevelHist[_spkrHistCnt++] = spkrLvl+1;
+
+    if (_spkrHistCnt >= _spkrHistoryLength)
+        _spkrHistCnt = 0;
+
+    spkrLevelData->write ( (const char*) tempSpkrLevel, sizeof (SFLDataFormat) *_smplPerSeg);
+}
+
+
+void EchoCancel::updateEchoCancel (SFLDataFormat *micData, SFLDataFormat *spkrData)
+{
+
+    // Add 1 to make sure we are not dividing by 0
+    updateMicLevel (micData);
+    updateSpkrLevel (spkrData);
+
+    /*
+    // if adaptation done, stop here
+    // if(_adaptDone)
+    if(true)
+      return;
+
+    // start learning only if there is data played through speaker
+    if(!_adaptStarted) {
+      if(spkrLvl > MIN_SIG_LEVEL)
+        _adaptStarted = true;
+      else
+        return;
+    }
+
+    if(_spkrAdaptCnt < _spkrAdaptSize)
+        _spkrAdaptArray[_spkrAdaptCnt++] = spkrLvl;
+
+    if(_micAdaptCnt < _micAdaptSize)
+        _micAdaptArray[_micAdaptCnt++] = micLvl;
+
+    // perform correlation if spkr size is reached
+    if(_adaptCnt > _spkrAdaptSize) {
+        int k = _adaptCnt - _spkrAdaptSize;
+        _correlationArray[k] = performCorrelation(_spkrAdaptArray, _micAdaptArray+k, _correlationSize);
+    }
+
+    _adaptCnt++;
+
+    // if we captured a full echo
+    if(_adaptCnt == _micAdaptSize) {
+      _adaptDone = true;
+      _amplDelayIndexOut = 0;// getMaximumIndex(_correlationArray, _correlationSize);
+    }
+    */
+}
+
+
+
+
+int EchoCancel::computeAmplitudeLevel (SFLDataFormat *data, int size)
+{
+
+    int level = 0;
+
+    for (int i = 0; i < size; i++) {
+        if (data[i] >= 0.0)
+            level += (int) data[i];
+        else
+            level -= (int) data[i];
+    }
+
+    level = level / _smplPerSeg;
+
+    return level;
+
+}
+
+SFLDataFormat EchoCancel::estimatePower (SFLDataFormat *data, SFLDataFormat *ampl, int size, SFLDataFormat mem)
+{
+
+    float memFactor = 1.0 - _alpha;
+
+    for (int i = 0; i < size; i++) {
+        mem = (SFLDataFormat) (memFactor* (float) mem + abs (_alpha* (float) data[i]));
+        ampl[i] = mem;
+    }
+
+    return mem;
+
+}
+
+
+int EchoCancel::getMaxAmplitude (int *data, int size)
+{
+
+    SFLDataFormat level = 0.0;
+
+    for (int i = 0; i < size; i++) {
+        if (data[i] >= level)
+            level = data[i];
+    }
+
+    return (int) level;
+}
+
+
+void EchoCancel::amplifySignal (SFLDataFormat *micData, SFLDataFormat *outputData, float amplify)
+{
+
+    // for(int i = 0; i < _smplPerSeg; i++)
+    //  outputData[i] = micData[i];
+
+    // Use delayed amplification factor due to sound card latency
+    // do not increment amplitude array if adaptation is not done
+    // if (_adaptDone) {
+    if (true) {
+        for (int i = 0; i < _smplPerSeg; i++) {
+            outputData[i] = (SFLDataFormat) ( ( (float) micData[i]) *_delayLineAmplify[_amplDelayIndexOut]);
+        }
+
+        _amplDelayIndexOut++;
+        _delayLineAmplify[_amplDelayIndexIn++] = amplify;
+    } else {
+        for (int i = 0; i < _smplPerSeg; i++) {
+            outputData[i] = micData[i];
+        }
+
+        return;
+    }
+
+    if (_amplDelayIndexOut >= MAX_DELAY_LINE_AMPL)
+        _amplDelayIndexOut = 0;
+
+    if (_amplDelayIndexIn >= MAX_DELAY_LINE_AMPL)
+        _amplDelayIndexIn = 0;
+
+}
+
+
+
+void EchoCancel::increaseFactor (float factor)
+{
+
+    // Get 200 ms to get back to full amplitude
+    _amplFactor += factor;
+
+    if (_amplFactor > 1.0)
+        _amplFactor = 1.0;
+
+}
+
+
+void EchoCancel::decreaseFactor()
+{
+
+    // Takes about 50 ms to react
+    _amplFactor -= 0.2;
+
+    if (_amplFactor < 0.0)
+        _amplFactor = 0.0;
+}
+
+
+int EchoCancel::performCorrelation (int *data1, int *data2, int size)
+{
+
+    int correlation = 0;
+
+    while (size) {
+        size--;
+        correlation += data1[size] * data2[size];
+    }
+
+    return correlation;
+}
+
+
+int EchoCancel::getMaximumIndex (int *data, int size)
+{
+
+    int index = size;
+    int max = data[size-1];
+
+    while (size) {
+        size--;
 
-  speex_echo_cancellation(_echoState, micData, spkrData, outputData);
+        if (data[size] > max) {
+            index = size;
+            max = data[size];
+        }
+    }
 
+    return index;
 }
diff --git a/sflphone-common/src/audio/echocancel.h b/sflphone-common/src/audio/echocancel.h
index 1d37ed2503f6ff8832857c7ae8f6049d04c495ac..95cd987bac99250bf14347ab8608cddb71d06894 100644
--- a/sflphone-common/src/audio/echocancel.h
+++ b/sflphone-common/src/audio/echocancel.h
@@ -31,40 +31,367 @@
 #ifndef ECHOCANCEL_H
 #define ECHOCANCEL_H
 
+#include <cc++/thread.h>
+#include <speex/speex_preprocess.h>
+
 #include "audioprocessing.h"
-#include <speex/speex_echo.h>
+#include "ringbuffer.h"
+#include "delaydetection.h"
+
+// Number of ms in sec
+#define MS_PER_SEC 1000
+
+// Length of audio segment in ms
+#define SEGMENT_LENGTH 10
+
+// Length of the echo tail in ms
+#define ECHO_LENGTH 1000
+#define SPKR_LENGTH 80
+#define MIC_LENGTH 80
+
+// Voice level threashold
+#define MIN_SIG_LEVEL 250
+
+// Delay between mic and speaker
+// #define DELAY_AMPLIFY 60
+
+// maximum in segment size (segment are SEGMENT_LENGTH long)
+#define MAX_DELAY_LINE_AMPL 100 // 1 sec
+
+// Internal buffer size
+#define BUFF_SIZE 10000
+
+#define DEFAULT_SAMPLRATE 8000
+
+#define DEFAULT_FRAME_LENGTH 20
+
+#define MIC_ADAPT_SIZE 100 // 1 sec
+#define SPKR_ADAPT_SIZE 20 // 200 ms
+
+class EchoCancel : public Algorithm
+{
+
+    public:
+
+        EchoCancel (int smplRate = DEFAULT_SAMPLRATE, int frameLength = DEFAULT_FRAME_LENGTH);
+
+        ~EchoCancel();
+
+        /**
+         * Reset echocanceller internal state at runtime. Usefull when making a new call
+         */
+        virtual void reset (void);
+
+        /**
+         * Add speaker data into internal buffer
+         * \param inputData containing far-end voice data to be sent to speakers
+         */
+        virtual void putData (SFLDataFormat *inputData, int nbBytes);
+
+        /**
+         * Get data ready to be played by speakers
+         */
+        virtual int getData (SFLDataFormat *outputData);
+
+        /**
+         * Unused
+         */
+        virtual void process (SFLDataFormat *data, int nbBytes);
+
+        /**
+         * Perform echo cancellation using internal buffers
+         * \param inputData containing mixed echo and voice data
+         * \param outputData containing
+         */
+        virtual int process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes);
+
+        /**
+         * Perform echo cancellation, application must provide its own buffer
+         * \param micData containing mixed echo and voice data
+         * \param spkrData containing far-end voice data to be sent to speakers
+         * \param outputData containing the processed data
+         */
+        virtual void process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes);
+
+        /**
+         * Set echo canceller internal sampling rate, reset if sampling rate changed
+         */
+        void setSamplingRate (int smplRate);
+
+        /**
+         * Set echo canceller state to active/deactive
+         */
+        void setEchoCancelState (bool state) {
+            _echoActive = state;
+        }
+
+        /**
+         * Return the echo canceller state
+         */
+        bool getEchoCancelState (void) {
+            return _echoActive;
+        }
+
+        /**
+         * Set the noise suppression state to active/deactive
+         */
+        void setNoiseSuppressState (bool state) {
+            _noiseActive = state;
+        }
+
+        /**
+         * Return the noise suppression state
+         */
+        bool getNoiseSuppressState (void) {
+            return _noiseActive;
+        }
+
+    private:
+
+        /**
+         * Actual method calld to supress echo from mic, micData and spkrData must be synchronized
+         */
+        void performEchoCancel (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData);
+
+        /**
+         * This is the fall back method in case there is no spkr data available
+         */
+        void performEchoCancelNoSpkr (SFLDataFormat *micData, SFLDataFormat *outputData);
+
+        /**
+         * Compute current instantaneous microphone signal power and store it in internal array
+         */
+        void updateMicLevel (SFLDataFormat *micData);
+
+        /**
+         * Compute current instantaneous spkeaker signal power and store uit in internal array
+         */
+        void updateSpkrLevel (SFLDataFormat *spkrData);
+
+        /**
+         * Update speaker level array for both micData and spkrData
+         */
+        void updateEchoCancel (SFLDataFormat *micData, SFLDataFormat *spkrData);
+
+        /**
+         * Compute the average amplitude of the signal.
+         * \param data must be of SEGMENT_LENGTH long.
+         */
+        int computeAmplitudeLevel (SFLDataFormat *data, int size);
+
+        /**
+         * Compute amplitude signal
+         */
+        SFLDataFormat estimatePower (SFLDataFormat *data, SFLDataFormat *ampl, int size, SFLDataFormat mem);
+
+        /**
+         * Return the max amplitude provided any of _avgSpkrLevelHist or _avgMicLevelHist
+         */
+        int getMaxAmplitude (int *data, int size);
+
+        /**
+         * Apply gain factor on input buffer and copy result in output buffer.
+         * Buffers must be of SEGMENT_LENGTH long.
+         * \param input buffer
+         * \param output buffer
+         */
+        void amplifySignal (SFLDataFormat *micData, SFLDataFormat *outputData, float amplify);
+
+        /**
+         * Increase microphone gain by the provided factor. Sanity check are done internally.
+         */
+        void increaseFactor (float factor);
+
+        /**
+         * Decrease microphone gain.
+         */
+        void decreaseFactor();
+
+        /**
+         * Perform simple correlation between data1 and data2
+         */
+        int performCorrelation (int *data1, int *data2, int size);
+
+        /**
+         * Return maximum in data index
+         */
+        int getMaximumIndex (int *data, int size);
+
+        /**
+         * Internal buffer for mic data synchronization
+         */
+        RingBuffer *_micData;
+
+        /**
+         * Internal buffer for speaker data synchronization
+         */
+        RingBuffer *_spkrData;
+
+        RingBuffer *_spkrDataOut;
+
+        /**
+         * Boolean value
+         */
+        bool _spkrStoped;
+
+        /**
+         * Internal buffer for audio processing
+         */
+        SFLDataFormat _tmpSpkr[BUFF_SIZE];
+        SFLDataFormat _tmpMic[BUFF_SIZE];
+        SFLDataFormat _tmpOut[BUFF_SIZE];
+
+        /**
+         * Audio stream sampling rate
+         */
+        int _samplingRate;
+
+        /**
+         * Audio frame size in ms
+         */
+        int _frameLength;
+
+        /**
+         * Number of sample per frame
+         */
+        int _smplPerFrame;
+
+        /**
+         * Number of samples per segment
+         */
+        int _smplPerSeg;
+
+        /**
+         * Number of segment per frame
+         */
+        int _nbSegmentPerFrame;
+
+        /**
+         * Number of segment considered in history
+         * Mainly used to compute signal level
+         */
+        int _micHistoryLength;
+
+        int _spkrHistoryLength;
+
+        /**
+         * Factor for power estimation
+         */
+        float _alpha;
+
+        /**
+         * Termporary spkr level memories
+         */
+        SFLDataFormat _spkrLevelMem;
+        SFLDataFormat _micLevelMem;
+
+        /**
+         * Current playback level
+         */
+        int _spkrLevel;
+
+        /**
+         * Current capture level
+         */
+        int _micLevel;
+
+        /**
+         * Current index to store level in speaker history
+         */
+        int _spkrHistCnt;
+
+        /**
+         * Current index to store level in microphone history
+         */
+        int _micHistCnt;
+
+        /**
+         * Current linear gain factor to be applied on microphone
+         */
+        float _amplFactor;
+
+        /**
+         * Stored linea gain factor for lowpass filtering
+         */
+        float _lastAmplFactor;
+
+        /**
+         * read/write for mic gain delay
+         */
+        int _amplDelayIndexIn;
+        int _amplDelayIndexOut;
+
+        /**
+         * State variable to determine if adaptation must be performed
+         */
+        bool _adaptDone;
+
+        /**
+         * State variable to specify if adaptation is started
+         */
+        bool _adaptStarted;
+
+        /**
+         * Adaptation index
+         */
+        int _adaptCnt;
+
+        int _spkrAdaptCnt;
+
+        int _micAdaptCnt;
+
+        int _spkrAdaptSize;
+
+        int _micAdaptSize;
+
+        int _correlationSize;
+
+        int _processedByte;
+
+        /**
+         * true if noise suppressor is active, false elsewhere
+         */
+        bool _echoActive;
+
+        /**
+         * true if noise suppressor is active, false elsewhere
+         */
+        bool _noiseActive;
+
+        /**
+         * Average speaker/microphone level history. Each value corespond to
+         * the averaged amplitude value over a segment (SEGMENT_LENGTH long)
+         */
+        int _avgSpkrLevelHist[BUFF_SIZE];
+        int _avgMicLevelHist[BUFF_SIZE];
+
+        /**
+         * Linear gain factor buffer to adjust to system's latency
+         */
+        float _delayLineAmplify[MAX_DELAY_LINE_AMPL];
 
-class EchoCancel : public Algorithm {
+        int _spkrAdaptArray[BUFF_SIZE];
 
- public:
+        int _micAdaptArray[BUFF_SIZE];
 
-    EchoCancel();
+        int _correlationArray[BUFF_SIZE];
 
-    ~EchoCancel();
+        ofstream *micFile;
+        ofstream *spkrFile;
+        ofstream *echoFile;
 
-    /**
-     * Add speaker data into internal buffer
-     * \param inputData containing far-end voice data to be sent to speakers 
-     */
-    virtual void putData(SFLDataFormat *inputData);
+        ofstream *micLevelData;
+        ofstream *spkrLevelData;
 
-    /**
-     * Perform echo cancellation using internal buffers
-     * \param inputData containing mixed echo and voice data
-     * \param outputData containing 
-     */
-    virtual void process(SFLDataFormat *inputData, SFLDataFormat *outputData);
+        // #ifdef HAVE_SPEEXDSP_LIB
+        /**
+         * Noise reduction processing state
+         */
+        SpeexPreprocessState *_noiseState;
+        // #endif
 
-    /**
-     * Perform echo cancellation, application must provide its own buffer
-     * \param micData containing mixed echo and voice data
-     * \param spkrData containing far-end voice data to be sent to speakers
-     * \param outputData containing the processed data
-     */
-    virtual void process(SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData);
- private:
+        DelayDetection _delayDetector;
 
-    SpeexEchoState *_echoState;
 };
 
 #endif
diff --git a/sflphone-common/src/audio/jitterbuf.cpp b/sflphone-common/src/audio/jitterbuf.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4881498853e1ca7604e16d3bd6eee865b85d4dbc
--- /dev/null
+++ b/sflphone-common/src/audio/jitterbuf.cpp
@@ -0,0 +1,906 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 2004-2005, Horizon Wimba, Inc.
+ *
+ * Contributors:
+ * Steve Kann <stevek@stevek.com>
+ *
+ * A license has been granted to Digium (via disclaimer) for the use of
+ * this code.
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*! \file
+ *
+ * \brief jitterbuf: an application-independent jitterbuffer
+ * \author Steve Kann <stevek@stevek.com>
+ *
+ */
+
+#include "jitterbuf.h"
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "global.h"
+
+/*! define these here, just for ancient compiler systems */
+#define JB_LONGMAX 2147483647L
+#define JB_LONGMIN (-JB_LONGMAX - 1L)
+
+#define jb_warn(...) (warnf ? warnf(__VA_ARGS__) : (void)0)
+#define jb_err(...) (errf ? errf(__VA_ARGS__) : (void)0)
+#define jb_dbg(...) (dbgf ? dbgf(__VA_ARGS__) : (void)0)
+
+#ifdef DEEP_DEBUG
+#define jb_dbg2(...) (dbgf ? dbgf(__VA_ARGS__) : (void)0)
+#else
+#define jb_dbg2(...) ((void)0)
+#endif
+
+static jb_output_function_t warnf, errf, dbgf;
+
+void jb_setoutput (jb_output_function_t err, jb_output_function_t warn, jb_output_function_t dbg)
+{
+    errf = err;
+    warnf = warn;
+    dbgf = dbg;
+}
+
+static void increment_losspct (jitterbuf *jb)
+{
+    jb->info.losspct = (100000 + 499 * jb->info.losspct) /500;
+}
+
+static void decrement_losspct (jitterbuf *jb)
+{
+    jb->info.losspct = (499 * jb->info.losspct) /500;
+}
+
+void jb_reset (jitterbuf *jb)
+{
+    /* only save settings */
+    jb_conf s = jb->info.conf;
+    memset (jb, 0, sizeof (*jb));
+    jb->info.conf = s;
+
+    /* initialize length, using the default value */
+    jb->info.current = jb->info.target = jb->info.conf.target_extra = JB_TARGET_EXTRA;
+    jb->info.silence_begin_ts = -1;
+}
+
+jitterbuf * jb_new()
+{
+    jitterbuf *jb;
+
+    if (! (jb = (jitterbuf *) malloc (sizeof (*jb))))
+        return NULL;
+
+    jb_reset (jb);
+
+    jb_dbg2 ("jb_new() = %x\n", jb);
+    return jb;
+}
+
+void jb_destroy (jitterbuf *jb)
+{
+    jb_frame *frame;
+    jb_dbg2 ("jb_destroy(%x)\n", jb);
+
+    /* free all the frames on the "free list" */
+    frame = jb->free;
+
+    while (frame != NULL) {
+        jb_frame *next = frame->next;
+        free (frame);
+        frame = next;
+    }
+
+    /* free ourselves! */
+    free (jb);
+}
+
+
+
+#if 0
+static int longcmp (const void *a, const void *b)
+{
+    return * (long *) a - * (long *) b;
+}
+#endif
+
+/*!	\brief simple history manipulation
+ 	\note maybe later we can make the history buckets variable size, or something? */
+/* drop parameter determines whether we will drop outliers to minimize
+ * delay */
+static int history_put (jitterbuf *jb, long ts, long now)
+{
+    long delay = now - (ts - jb->info.resync_offset);
+    long threshold = 2 * jb->info.jitter + jb->info.conf.resync_threshold;
+    long kicked;
+
+    /* don't add special/negative times to history */
+    if (ts <= 0)
+        return 0;
+
+    /* check for drastic change in delay */
+    if (jb->info.conf.resync_threshold != -1) {
+        if (abs (delay - jb->info.last_delay) > threshold) {
+            jb->info.cnt_delay_discont++;
+
+            if (jb->info.cnt_delay_discont > 3) {
+                /* resync the jitterbuffer */
+                jb->info.cnt_delay_discont = 0;
+                jb->hist_ptr = 0;
+                jb->hist_maxbuf_valid = 0;
+
+                jb_warn ("Resyncing the jb. last_delay %ld, this delay %ld, threshold %ld, new offset %ld\n", jb->info.last_delay, delay, threshold, ts - now);
+                jb->info.resync_offset = ts - now;
+                jb->info.last_delay = delay = 0; /* after resync, frame is right on time */
+            } else {
+                return -1;
+            }
+        } else {
+            jb->info.last_delay = delay;
+            jb->info.cnt_delay_discont = 0;
+        }
+    }
+
+    kicked = jb->history[jb->hist_ptr % JB_HISTORY_SZ];
+
+    jb->history[ (jb->hist_ptr++) % JB_HISTORY_SZ] = delay;
+
+    /* optimization; the max/min buffers don't need to be recalculated, if this packet's
+     * entry doesn't change them.  This happens if this packet is not involved, _and_ any packet
+     * that got kicked out of the history is also not involved
+     * We do a number of comparisons, but it's probably still worthwhile, because it will usually
+     * succeed, and should be a lot faster than going through all 500 packets in history */
+    if (!jb->hist_maxbuf_valid)
+        return 0;
+
+    /* don't do this until we've filled history
+     * (reduces some edge cases below) */
+    if (jb->hist_ptr < JB_HISTORY_SZ)
+        goto invalidate;
+
+    /* if the new delay would go into min */
+    if (delay < jb->hist_minbuf[JB_HISTORY_MAXBUF_SZ-1])
+        goto invalidate;
+
+    /* or max.. */
+    if (delay > jb->hist_maxbuf[JB_HISTORY_MAXBUF_SZ-1])
+        goto invalidate;
+
+    /* or the kicked delay would be in min */
+    if (kicked <= jb->hist_minbuf[JB_HISTORY_MAXBUF_SZ-1])
+        goto invalidate;
+
+    if (kicked >= jb->hist_maxbuf[JB_HISTORY_MAXBUF_SZ-1])
+        goto invalidate;
+
+    /* if we got here, we don't need to invalidate, 'cause this delay didn't
+     * affect things */
+    return 0;
+    /* end optimization */
+
+
+invalidate:
+    jb->hist_maxbuf_valid = 0;
+    return 0;
+}
+
+static void history_calc_maxbuf (jitterbuf *jb)
+{
+    int i,j;
+
+    if (jb->hist_ptr == 0)
+        return;
+
+
+    /* initialize maxbuf/minbuf to the latest value */
+    for (i=0; i<JB_HISTORY_MAXBUF_SZ; i++) {
+        /*
+         * jb->hist_maxbuf[i] = jb->history[(jb->hist_ptr-1) % JB_HISTORY_SZ];
+         * jb->hist_minbuf[i] = jb->history[(jb->hist_ptr-1) % JB_HISTORY_SZ];
+         */
+        jb->hist_maxbuf[i] = JB_LONGMIN;
+        jb->hist_minbuf[i] = JB_LONGMAX;
+    }
+
+    /* use insertion sort to populate maxbuf */
+    /* we want it to be the top "n" values, in order */
+
+    /* start at the beginning, or JB_HISTORY_SZ frames ago */
+    i = (jb->hist_ptr > JB_HISTORY_SZ) ? (jb->hist_ptr - JB_HISTORY_SZ) : 0;
+
+    for (; i<jb->hist_ptr; i++) {
+        long toins = jb->history[i % JB_HISTORY_SZ];
+
+        /* if the maxbuf should get this */
+        if (toins > jb->hist_maxbuf[JB_HISTORY_MAXBUF_SZ-1])  {
+
+            /* insertion-sort it into the maxbuf */
+            for (j=0; j<JB_HISTORY_MAXBUF_SZ; j++) {
+                /* found where it fits */
+                if (toins > jb->hist_maxbuf[j]) {
+                    /* move over */
+                    memmove (jb->hist_maxbuf + j + 1, jb->hist_maxbuf + j, (JB_HISTORY_MAXBUF_SZ - (j + 1)) * sizeof (jb->hist_maxbuf[0]));
+                    /* insert */
+                    jb->hist_maxbuf[j] = toins;
+
+                    break;
+                }
+            }
+        }
+
+        /* if the minbuf should get this */
+        if (toins < jb->hist_minbuf[JB_HISTORY_MAXBUF_SZ-1])  {
+
+            /* insertion-sort it into the maxbuf */
+            for (j=0; j<JB_HISTORY_MAXBUF_SZ; j++) {
+                /* found where it fits */
+                if (toins < jb->hist_minbuf[j]) {
+                    /* move over */
+                    memmove (jb->hist_minbuf + j + 1, jb->hist_minbuf + j, (JB_HISTORY_MAXBUF_SZ - (j + 1)) * sizeof (jb->hist_minbuf[0]));
+                    /* insert */
+                    jb->hist_minbuf[j] = toins;
+
+                    break;
+                }
+            }
+        }
+
+        if (0) {
+            int k;
+            _debug ("toins = %ld\n", toins);
+            _debug ("maxbuf =");
+
+            for (k=0; k<JB_HISTORY_MAXBUF_SZ; k++)
+                _debug ("%ld ", jb->hist_maxbuf[k]);
+
+            _debug ("\nminbuf =");
+
+            for (k=0; k<JB_HISTORY_MAXBUF_SZ; k++)
+                _debug ("%ld ", jb->hist_minbuf[k]);
+
+            _debug ("\n");
+        }
+    }
+
+    jb->hist_maxbuf_valid = 1;
+}
+
+static void history_get (jitterbuf *jb)
+{
+    long max, min, jitter;
+    int idx;
+    int count;
+
+    if (!jb->hist_maxbuf_valid)
+        history_calc_maxbuf (jb);
+
+    /* count is how many items in history we're examining */
+    count = (jb->hist_ptr < JB_HISTORY_SZ) ? jb->hist_ptr : JB_HISTORY_SZ;
+
+    /* idx is the "n"ths highest/lowest that we'll look for */
+    idx = count * JB_HISTORY_DROPPCT / 100;
+
+    /* sanity checks for idx */
+    if (idx > (JB_HISTORY_MAXBUF_SZ - 1))
+        idx = JB_HISTORY_MAXBUF_SZ - 1;
+
+    if (idx < 0) {
+        jb->info.min = 0;
+        jb->info.jitter = 0;
+        return;
+    }
+
+    max = jb->hist_maxbuf[idx];
+    min = jb->hist_minbuf[idx];
+
+    jitter = max - min;
+
+    /* these debug stmts compare the difference between looking at the absolute jitter, and the
+     * values we get by throwing away the outliers */
+    // printf("[%ld] min=%ld, max=%ld, jitter=%ld\n", index, min, max, jitter);
+    // printf("[%ld] min=%ld, max=%ld, jitter=%ld\n", 0, jb->hist_minbuf[0], jb->hist_maxbuf[0], jb->hist_maxbuf[0]-jb->hist_minbuf[0]);
+
+    jb->info.min = min;
+    jb->info.jitter = jitter;
+}
+
+/* returns 1 if frame was inserted into head of queue, 0 otherwise */
+static int queue_put (jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts)
+{
+    jb_frame *frame;
+    jb_frame *p;
+    int head = 0;
+    long resync_ts = ts - jb->info.resync_offset;
+
+    if ( (frame = jb->free)) {
+        jb->free = frame->next;
+    } else if (! (frame = (jb_frame *) malloc (sizeof (*frame)))) {
+        jb_err ("cannot allocate frame\n");
+        return 0;
+    }
+
+    jb->info.frames_cur++;
+
+    frame->data = data;
+    frame->ts = resync_ts;
+    frame->ms = ms;
+    frame->type = type;
+
+    /*
+     * frames are a circular list, jb-frames points to to the lowest ts,
+     * jb->frames->prev points to the highest ts
+     */
+
+    if (!jb->frames) {  /* queue is empty */
+        jb->frames = frame;
+        frame->next = frame;
+        frame->prev = frame;
+        head = 1;
+    } else if (resync_ts < jb->frames->ts) {
+        frame->next = jb->frames;
+        frame->prev = jb->frames->prev;
+
+        frame->next->prev = frame;
+        frame->prev->next = frame;
+
+        /* frame is out of order */
+        jb->info.frames_ooo++;
+
+        jb->frames = frame;
+        head = 1;
+    } else {
+        p = jb->frames;
+
+        /* frame is out of order */
+        if (resync_ts < p->prev->ts) jb->info.frames_ooo++;
+
+        while (resync_ts < p->prev->ts && p->prev != jb->frames)
+            p = p->prev;
+
+        frame->next = p;
+        frame->prev = p->prev;
+
+        frame->next->prev = frame;
+        frame->prev->next = frame;
+    }
+
+    return head;
+}
+
+static long queue_next (jitterbuf *jb)
+{
+    if (jb->frames)
+        return jb->frames->ts;
+    else
+        return -1;
+}
+
+static long queue_last (jitterbuf *jb)
+{
+    if (jb->frames)
+        return jb->frames->prev->ts;
+    else
+        return -1;
+}
+
+static jb_frame *_queue_get (jitterbuf *jb, long ts, int all)
+{
+    jb_frame *frame;
+    frame = jb->frames;
+
+    if (!frame)
+        return NULL;
+
+    _debug ("queue_get: ASK %ld FIRST %ld\n", ts, frame->ts);
+
+    if (all || ts >= frame->ts) {
+        /* remove this frame */
+        frame->prev->next = frame->next;
+        frame->next->prev = frame->prev;
+
+        if (frame->next == frame)
+            jb->frames = NULL;
+        else
+            jb->frames = frame->next;
+
+
+        /* insert onto "free" single-linked list */
+        frame->next = jb->free;
+        jb->free = frame;
+
+        jb->info.frames_cur--;
+
+        /* we return the frame pointer, even though it's on free list,
+         * but caller must copy data */
+        return frame;
+    }
+
+    return NULL;
+}
+
+static jb_frame *queue_get (jitterbuf *jb, long ts)
+{
+    return _queue_get (jb,ts,0);
+}
+
+static jb_frame *queue_getall (jitterbuf *jb)
+{
+    return _queue_get (jb,0,1);
+}
+
+/* some diagnostics */
+void jb_dbginfo (jitterbuf *jb)
+{
+
+    _debug ("\njb info: fin=%ld fout=%ld flate=%ld flost=%ld fdrop=%ld fcur=%ld\n",
+            jb->info.frames_in, jb->info.frames_out, jb->info.frames_late, jb->info.frames_lost, jb->info.frames_dropped, jb->info.frames_cur);
+
+    _debug ("jitter=%ld current=%ld target=%ld min=%ld sil=%ld len=%ld len/fcur=%ld\n",
+            jb->info.jitter, jb->info.current, jb->info.target, jb->info.min, jb->info.silence_begin_ts, jb->info.current - jb->info.min,
+            jb->info.frames_cur ? (jb->info.current - jb->info.min) /jb->info.frames_cur : -8);
+
+    if (jb->info.frames_in > 0)
+        _debug ("jb info: Loss PCT = %ld%%, Late PCT = %ld%%\n",
+                jb->info.frames_lost * 100/ (jb->info.frames_in + jb->info.frames_lost),
+                jb->info.frames_late * 100/jb->info.frames_in);
+
+    _debug ("jb info: queue %ld -> %ld.  last_ts %ld (queue len: %ld) last_ms %ld\n\n",
+            queue_next (jb),
+            queue_last (jb),
+            jb->info.next_voice_ts,
+            queue_last (jb) - queue_next (jb),
+            jb->info.last_voice_ms);
+}
+
+
+#ifdef DEEP_DEBUG
+static void jb_chkqueue (jitterbuf *jb)
+{
+    int i=0;
+    jb_frame *p = jb->frames;
+
+    if (!p) {
+        return;
+    }
+
+    do {
+        if (p->next == NULL)  {
+            jb_err ("Queue is BROKEN at item [%d]", i);
+        }
+
+        i++;
+        p=p->next;
+    } while (p->next != jb->frames);
+}
+
+static void jb_dbgqueue (jitterbuf *jb)
+{
+    int i=0;
+    jb_frame *p = jb->frames;
+
+    jb_dbg ("queue: ");
+
+    if (!p) {
+        jb_dbg ("EMPTY\n");
+        return;
+    }
+
+    do {
+        jb_dbg ("[%d]=%ld ", i++, p->ts);
+        p=p->next;
+    } while (p->next != jb->frames);
+
+    jb_dbg ("\n");
+}
+#endif
+
+jb_return_code jb_put (jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now)
+{
+    long numts;
+
+    _debug ("jb_put(%p,%p,%ld,%ld,%ld)\n", jb, data, ms, ts, now);
+
+    numts = 0;
+
+    if (jb->frames)
+        numts = jb->frames->prev->ts - jb->frames->ts;
+
+    _debug ("numts %ld\n", numts);
+
+    if (numts >= jb->info.conf.max_jitterbuf) {
+        if (!jb->dropem) {
+            _debug ("Attempting to exceed Jitterbuf max %ld timeslots\n",
+                    jb->info.conf.max_jitterbuf);
+            jb->dropem = 1;
+        }
+
+        jb->info.frames_dropped++;
+        return JB_DROP;
+    } else {
+        jb->dropem = 0;
+    }
+
+    if (type == JB_TYPE_VOICE) {
+        /* presently, I'm only adding VOICE frames to history and drift calculations; mostly because with the
+         * IAX integrations, I'm sending retransmitted control frames with their awkward timestamps through */
+        if (history_put (jb,ts,now)) {
+            jb->info.frames_dropped++;
+            return JB_DROP;
+        }
+    }
+
+    jb->info.frames_in++;
+
+    /* if put into head of queue, caller needs to reschedule */
+    if (queue_put (jb,data,type,ms,ts)) {
+        return JB_SCHED;
+    }
+
+    return JB_OK;
+}
+
+
+static enum jb_return_code _jb_get (jitterbuf *jb, jb_frame *frameout, long now, long interpl)
+{
+    jb_frame *frame;
+    long diff;
+    static int dbg_cnt = 0;
+
+    _debug ("_jb_get\n");
+
+    /*if ((now - jb_next(jb)) > 2 * jb->info.last_voice_ms) jb_warn("SCHED: %ld", (now - jb_next(jb))); */
+    /* get jitter info */
+    history_get (jb);
+
+    if (dbg_cnt && dbg_cnt % 50 == 0) {
+        jb_dbg ("\n");
+    }
+
+    dbg_cnt++;
+
+    /* target */
+    jb->info.target = jb->info.jitter + jb->info.min + jb->info.conf.target_extra;
+
+    /* if a hard clamp was requested, use it */
+    if ( (jb->info.conf.max_jitterbuf) && ( (jb->info.target - jb->info.min) > jb->info.conf.max_jitterbuf)) {
+        _debug ("clamping target from %ld to %ld\n", (jb->info.target - jb->info.min), jb->info.conf.max_jitterbuf);
+        jb->info.target = jb->info.min + jb->info.conf.max_jitterbuf;
+    }
+
+    diff = jb->info.target - jb->info.current;
+
+    _debug ("diff = %ld lms=%ld last = %ld now = %ld, djust delay = %ld\n", diff,
+            jb->info.last_voice_ms, jb->info.last_adjustment, now);
+
+    /* let's work on non-silent case first */
+    if (!jb->info.silence_begin_ts) {
+
+        /*
+              if(diff > 0)
+              printf("diff > 0\n");
+
+          if((jb->info.last_adjustment + JB_ADJUST_DELAY) < now)
+              printf("(jb->info.last_adjustment + JB_ADJUST_DELAY) < now\n");
+
+          if((diff > queue_last(jb)  - queue_next(jb)))
+              printf("diff > queue_last(jb)  - queue_next(jb)\n");
+        */
+        _debug ("** Non-silent case update timing info **\n");
+        _debug ("diff %ld\n", diff);
+        _debug ("jb->info.last_adjustment %ld\n", jb->info.last_adjustment);
+        _debug ("JB_ADJUST_DELAY %ld\n", JB_ADJUST_DELAY);
+        _debug ("now %ld\n", now);
+
+        /* we want to grow */
+        if ( (diff > 0) &&
+                /* we haven't grown in the delay length */
+                ( ( (jb->info.last_adjustment + JB_ADJUST_DELAY) < now) ||
+                  /* we need to grow more than the "length" we have left */
+                  (diff > queue_last (jb)  - queue_next (jb)))) {
+
+
+
+
+            /* grow by interp frame length */
+            jb->info.current += interpl;
+            jb->info.next_voice_ts += interpl;
+            jb->info.last_voice_ms = interpl;
+            jb->info.last_adjustment = now;
+            jb->info.cnt_contig_interp++;
+
+            if (jb->info.conf.max_contig_interp && jb->info.cnt_contig_interp >= jb->info.conf.max_contig_interp) {
+                jb->info.silence_begin_ts = jb->info.next_voice_ts - jb->info.current;
+            }
+
+            _debug ("Non silent case\n");
+            return JB_INTERP;
+        }
+
+        _debug ("queue get\n");
+
+        frame = queue_get (jb, jb->info.next_voice_ts - jb->info.current);
+
+        if (!frame)
+            _debug ("frame not valid\n");
+
+        /* not a voice frame; just return it. */
+        if (frame && frame->type != JB_TYPE_VOICE) {
+            if (frame->type == JB_TYPE_SILENCE) {
+                jb->info.silence_begin_ts = frame->ts;
+                jb->info.cnt_contig_interp = 0;
+            }
+
+            *frameout = *frame;
+            jb->info.frames_out++;
+            _debug ("Not a voice packet\n");
+            return JB_OK;
+        }
+
+
+        /* voice frame is later than expected */
+        if (frame && frame->ts + jb->info.current < jb->info.next_voice_ts) {
+            if (frame->ts + jb->info.current > jb->info.next_voice_ts - jb->info.last_voice_ms) {
+                /* either we interpolated past this frame in the last jb_get */
+                /* or the frame is still in order, but came a little too quick */
+                *frameout = *frame;
+                /* reset expectation for next frame */
+                jb->info.next_voice_ts = frame->ts + jb->info.current + frame->ms;
+                jb->info.frames_out++;
+                decrement_losspct (jb);
+                jb->info.cnt_contig_interp = 0;
+                _debug ("Either we interpolated past this frame in the last jb_get" \
+                        "or the frame is still in order, but came a little too quick\n");
+                return JB_OK;
+            } else {
+                /* voice frame is late */
+                *frameout = *frame;
+                jb->info.frames_out++;
+                decrement_losspct (jb);
+                jb->info.frames_late++;
+                jb->info.frames_lost--;
+                _debug ("Voice frame is late\n");
+                _debug ("late: wanted=%ld, this=%ld, next=%ld\n", jb->info.next_voice_ts - jb->info.current, frame->ts, queue_next (jb));
+                return JB_DROP;
+            }
+        }
+
+        /* keep track of frame sizes, to allow for variable sized-frames */
+        if (frame && frame->ms > 0) {
+            jb->info.last_voice_ms = frame->ms;
+        }
+
+        /* we want to shrink; shrink at 1 frame / 500ms */
+
+        /* unless we don't have a frame, then shrink 1 frame */
+
+        /* every 80ms (though perhaps we can shrink even faster */
+
+        /* in this case) */
+        if (diff < -jb->info.conf.target_extra &&
+                ( (!frame && jb->info.last_adjustment + 80 < now) ||
+                  (jb->info.last_adjustment + 500 < now))) {
+
+            jb->info.last_adjustment = now;
+            jb->info.cnt_contig_interp = 0;
+
+            if (frame) {
+                *frameout = *frame;
+                /* shrink by frame size we're throwing out */
+                jb->info.current -= frame->ms;
+                jb->info.frames_out++;
+                decrement_losspct (jb);
+                jb->info.frames_dropped++;
+                _debug ("Shrink by frame size we're throwing out");
+                return JB_DROP;
+            } else {
+                /* shrink by last_voice_ms */
+                jb->info.current -= jb->info.last_voice_ms;
+                jb->info.frames_lost++;
+                increment_losspct (jb);
+                jb_dbg ("S");
+                _debug ("No frames, shrink by last_voice_ms");
+                return JB_NOFRAME;
+            }
+        }
+
+        /* lost frame */
+        if (!frame) {
+            /* this is a bit of a hack for now, but if we're close to
+             * target, and we find a missing frame, it makes sense to
+             * grow, because the frame might just be a bit late;
+             * otherwise, we presently get into a pattern where we return
+             * INTERP for the lost frame, then it shows up next, and we
+             * throw it away because it's late */
+            /* I've recently only been able to replicate this using
+            * iaxclient talking to app_echo on asterisk.  In this case,
+            * my outgoing packets go through asterisk's (old)
+            * jitterbuffer, and then might get an unusual increasing delay
+            * there if it decides to grow?? */
+            /* Update: that might have been a different bug, that has been fixed..
+             * But, this still seemed like a good idea, except that it ended up making a single actual
+             * lost frame get interpolated two or more times, when there was "room" to grow, so it might
+             * be a bit of a bad idea overall */
+            /*if (diff > -1 * jb->info.last_voice_ms) {
+            	jb->info.current += jb->info.last_voice_ms;
+            	jb->info.last_adjustment = now;
+            	jb_warn("g");
+            	return JB_INTERP;
+            } */
+            jb->info.frames_lost++;
+            increment_losspct (jb);
+            jb->info.next_voice_ts += interpl;
+            jb->info.last_voice_ms = interpl;
+            jb->info.cnt_contig_interp++;
+
+            if (jb->info.conf.max_contig_interp && jb->info.cnt_contig_interp >= jb->info.conf.max_contig_interp) {
+                jb->info.silence_begin_ts = jb->info.next_voice_ts - jb->info.current;
+            }
+
+            return JB_INTERP;
+        }
+
+        /* normal case; return the frame, increment stuff */
+        *frameout = *frame;
+        jb->info.next_voice_ts += frame->ms;
+        jb->info.frames_out++;
+        jb->info.cnt_contig_interp = 0;
+        decrement_losspct (jb);
+        jb_dbg ("v");
+        return JB_OK;
+    } else {
+
+        _debug ("Silence???\n");
+        /* TODO: after we get the non-silent case down, we'll make the
+         * silent case -- basically, we'll just grow and shrink faster
+         * here, plus handle next_voice_ts a bit differently */
+
+        /* to disable silent special case altogether, just uncomment this: */
+        /* jb->info.silence_begin_ts = 0; */
+
+        /* shrink interpl len every 10ms during silence */
+        if (diff < -jb->info.conf.target_extra &&
+                jb->info.last_adjustment + 10 <= now) {
+            jb->info.current -= interpl;
+            jb->info.last_adjustment = now;
+        }
+
+        frame = queue_get (jb, now - jb->info.current);
+
+        if (!frame) {
+            return JB_NOFRAME;
+        } else if (frame->type != JB_TYPE_VOICE) {
+            /* normal case; in silent mode, got a non-voice frame */
+            *frameout = *frame;
+            jb->info.frames_out++;
+            return JB_OK;
+        }
+
+        if (frame->ts < jb->info.silence_begin_ts) {
+            /* voice frame is late */
+            *frameout = *frame;
+            jb->info.frames_out++;
+            decrement_losspct (jb);
+            jb->info.frames_late++;
+            jb->info.frames_lost--;
+            jb_dbg ("l");
+            /*jb_warn("\nlate: wanted=%ld, this=%ld, next=%ld\n", jb->info.next_voice_ts - jb->info.current, frame->ts, queue_next(jb));
+            jb_warninfo(jb); */
+            return JB_DROP;
+        } else {
+            /* voice frame */
+            /* try setting current to target right away here */
+            jb->info.current = jb->info.target;
+            jb->info.silence_begin_ts = 0;
+            jb->info.next_voice_ts = frame->ts + jb->info.current + frame->ms;
+            jb->info.last_voice_ms = frame->ms;
+            jb->info.frames_out++;
+            decrement_losspct (jb);
+            *frameout = *frame;
+            jb_dbg ("V");
+            return JB_OK;
+        }
+    }
+}
+
+long jb_next (jitterbuf *jb)
+{
+    if (jb->info.silence_begin_ts) {
+        if (jb->frames) {
+            long next = queue_next (jb);
+            history_get (jb);
+
+            /* shrink during silence */
+            if (jb->info.target - jb->info.current < -jb->info.conf.target_extra)
+                return jb->info.last_adjustment + 10;
+
+            return next + jb->info.target;
+        } else
+            return JB_LONGMAX;
+    } else {
+        return jb->info.next_voice_ts;
+    }
+}
+
+enum jb_return_code jb_get (jitterbuf *jb, jb_frame *frameout, long now, long interpl)
+{
+    _debug ("\n***** JB_GET *****\n\n");
+
+    enum jb_return_code ret = _jb_get (jb, frameout, now, interpl);
+#if 0
+    static int lastts=0;
+    int thists = ( (ret == JB_OK) || (ret == JB_DROP)) ? frameout->ts : 0;
+    jb_warn ("jb_get(%x,%x,%ld) = %d (%d)\n", jb, frameout, now, ret, thists);
+
+    if (thists && thists < lastts) jb_warn ("XXXX timestamp roll-back!!!\n");
+
+    lastts = thists;
+#endif
+
+    if (ret == JB_INTERP)
+        frameout->ms = jb->info.last_voice_ms;
+
+    return ret;
+}
+
+enum jb_return_code jb_getall (jitterbuf *jb, jb_frame *frameout)
+{
+    jb_frame *frame;
+    frame = queue_getall (jb);
+
+    if (!frame) {
+        return JB_NOFRAME;
+    }
+
+    *frameout = *frame;
+    return JB_OK;
+}
+
+
+enum jb_return_code jb_getinfo (jitterbuf *jb, jb_info *stats)
+{
+
+    history_get (jb);
+
+    *stats = jb->info;
+
+    return JB_OK;
+}
+
+enum jb_return_code jb_setconf (jitterbuf *jb, jb_conf *conf)
+{
+    /* take selected settings from the struct */
+
+    jb->info.conf.max_jitterbuf = conf->max_jitterbuf;
+    jb->info.conf.resync_threshold = conf->resync_threshold;
+    jb->info.conf.max_contig_interp = conf->max_contig_interp;
+
+    /* -1 indicates use of the default JB_TARGET_EXTRA value */
+    jb->info.conf.target_extra = (conf->target_extra == -1)
+                                 ? JB_TARGET_EXTRA
+                                 : conf->target_extra
+                                 ;
+
+    /* update these to match new target_extra setting */
+    jb->info.current = jb->info.conf.target_extra;
+    jb->info.target = jb->info.conf.target_extra;
+
+    return JB_OK;
+}
+
+
diff --git a/sflphone-common/src/audio/jitterbuf.h b/sflphone-common/src/audio/jitterbuf.h
new file mode 100644
index 0000000000000000000000000000000000000000..2332968e5fe223567e032fea4c181e728c39f28c
--- /dev/null
+++ b/sflphone-common/src/audio/jitterbuf.h
@@ -0,0 +1,177 @@
+/*
+ * jitterbuf: an application-independent jitterbuffer
+ *
+ * Copyrights:
+ * Copyright (C) 2004-2005, Horizon Wimba, Inc.
+ *
+ * Contributors:
+ * Steve Kann <stevek@stevek.com>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU Lesser (Library) General Public License
+ *
+ * Copyright on this file is disclaimed to Digium for inclusion in Asterisk
+ */
+
+/*! \file
+ * \brief
+ * jitterbuf: an application-independent jitterbuffer
+ * \ref jitterbuf.c
+ */
+
+
+#ifndef _JITTERBUF_H_
+#define _JITTERBUF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+    /*! \name configuration constants */
+    /*@{ */
+    /*! Number of historical timestamps to use in calculating jitter and drift */
+#define JB_HISTORY_SZ		500
+    /*! what percentage of timestamps should we drop from the history when we examine it;
+     * this might eventually be something made configurable */
+#define JB_HISTORY_DROPPCT	3
+    /*! the maximum droppct we can handle (say it was configurable). */
+#define JB_HISTORY_DROPPCT_MAX	4
+    /*! the size of the buffer we use to keep the top and botton timestamps for dropping */
+#define JB_HISTORY_MAXBUF_SZ	JB_HISTORY_SZ * JB_HISTORY_DROPPCT_MAX / 100
+    /*! amount of additional jitterbuffer adjustment  */
+#define JB_TARGET_EXTRA 40
+    /*! ms between growing and shrinking; may not be honored if jitterbuffer runs out of space */
+#define JB_ADJUST_DELAY 40
+    /*@} */
+
+    enum jb_return_code {
+        /* return codes */
+        JB_OK,            /* 0 */
+        JB_EMPTY,         /* 1 */
+        JB_NOFRAME,       /* 2 */
+        JB_INTERP,        /* 3 */
+        JB_DROP,          /* 4 */
+        JB_SCHED          /* 5 */
+    };
+
+    enum jb_frame_type {
+        /* frame types */
+        JB_TYPE_CONTROL,  /*!< 0            */
+        JB_TYPE_VOICE,    /*!< 1            */
+        JB_TYPE_VIDEO,    /*!< 2 - reserved */
+        JB_TYPE_SILENCE   /*!< 3            */
+    };
+
+    typedef struct jb_conf {
+        /* settings */
+        long max_jitterbuf;	/*!< defines a hard clamp to use in setting the jitter buffer delay */
+        long resync_threshold;  /*!< the jb will resync when delay increases to (2 * jitter) + this param */
+        long max_contig_interp; /*!< the max interp frames to return in a row */
+        long target_extra ;      /*!< amount of additional jitterbuffer adjustment, overrides JB_TARGET_EXTRA */
+    } jb_conf;
+
+    typedef struct jb_info {
+        jb_conf conf;
+
+        /* statistics */
+        long frames_in;  	/*!< number of frames input to the jitterbuffer.*/
+        long frames_out;  	/*!< number of frames output from the jitterbuffer.*/
+        long frames_late; 	/*!< number of frames which were too late, and dropped.*/
+        long frames_lost; 	/*!< number of missing frames.*/
+        long frames_dropped; 	/*!< number of frames dropped (shrinkage) */
+        long frames_ooo; 	/*!< number of frames received out-of-order */
+        long frames_cur; 	/*!< number of frames presently in jb, awaiting delivery.*/
+        long jitter; 		/*!< jitter measured within current history interval*/
+        long min;		/*!< minimum lateness within current history interval */
+        long current; 		/*!< the present jitterbuffer adjustment */
+        long target; 		/*!< the target jitterbuffer adjustment */
+        long losspct; 		/*!< recent lost frame percentage (* 1000) */
+        long next_voice_ts;	/*!< the ts of the next frame to be read from the jb - in receiver's time */
+        long last_voice_ms;	/*!< the duration of the last voice frame */
+        long silence_begin_ts;	/*!< the time of the last CNG frame, when in silence */
+        long last_adjustment;   /*!< the time of the last adjustment */
+        long last_delay;        /*!< the last now added to history */
+        long cnt_delay_discont;	/*!< the count of discontinuous delays */
+        long resync_offset;     /*!< the amount to offset ts to support resyncs */
+        long cnt_contig_interp; /*!< the number of contiguous interp frames returned */
+    } jb_info;
+
+    typedef struct jb_frame {
+        void *data;               /* the frame data */
+        long ts;                  /* the relative delivery time expected */
+        long ms;                  /* the time covered by this frame, in sec/8000 */
+        enum jb_frame_type type;  /* the type of frame */
+        struct jb_frame *next, *prev;
+    } jb_frame;
+
+    typedef struct jitterbuf {
+        jb_info info;
+
+        /* history */
+        long history[JB_HISTORY_SZ];   		/*!< history */
+        int  hist_ptr;				/*!< points to index in history for next entry */
+        long hist_maxbuf[JB_HISTORY_MAXBUF_SZ];	/*!< a sorted buffer of the max delays (highest first) */
+        long hist_minbuf[JB_HISTORY_MAXBUF_SZ];	/*!< a sorted buffer of the min delays (lowest first) */
+        int  hist_maxbuf_valid;			/*!< are the "maxbuf"/minbuf valid? */
+        unsigned int dropem:1;                  /*!< flag to indicate dropping frames (overload) */
+
+        jb_frame *frames; 		/*!< queued frames */
+        jb_frame *free; 		/*!< free frames (avoid malloc?) */
+    } jitterbuf;
+
+
+    /*! \brief new jitterbuf */
+    jitterbuf *		jb_new (void);
+
+    /*! \brief destroy jitterbuf */
+    void			jb_destroy (jitterbuf *jb);
+
+    /*! \brief reset jitterbuf
+     * \note The jitterbuffer should be empty before you call this, otherwise
+     * you will leak queued frames, and some internal structures */
+    void			jb_reset (jitterbuf *jb);
+
+    /*!\brief  queue a frame
+     *
+     * data=frame data, timings (in ms): ms=length of frame (for voice), ts=ts (sender's time)
+     * now=now (in receiver's time) return value is one of
+     * JB_OK: Frame added. Last call to jb_next() still valid
+     * JB_DROP: Drop this frame immediately
+     * JB_SCHED: Frame added. Call jb_next() to get a new time for the next frame
+     */
+    enum jb_return_code jb_put (jitterbuf *jb, void *data, const enum jb_frame_type type, long ms, long ts, long now);
+
+    /*! \brief get a frame for time now (receiver's time)  return value is one of
+     * JB_OK:  You've got frame!
+     * JB_DROP: Here's an audio frame you should just drop.  Ask me again for this time..
+     * JB_NOFRAME: There's no frame scheduled for this time.
+     * JB_INTERP: Please interpolate an interpl-length frame for this time (either we need to grow, or there was a lost frame)
+     * JB_EMPTY: The jb is empty.
+     */
+    enum jb_return_code jb_get (jitterbuf *jb, jb_frame *frame, long now, long interpl);
+
+    /*! \brief unconditionally get frames from jitterbuf until empty */
+    enum jb_return_code jb_getall (jitterbuf *jb, jb_frame *frameout);
+
+    /*! \brief when is the next frame due out, in receiver's time (0=EMPTY)
+     * This value may change as frames are added (esp non-audio frames) */
+    long	jb_next (jitterbuf *jb);
+
+    /*! \brief get jitterbuf info: only "statistics" may be valid */
+    enum jb_return_code jb_getinfo (jitterbuf *jb, jb_info *stats);
+
+    /* some diagnostics */
+    void jb_dbginfo (jitterbuf *jb);
+
+    /*! \brief set jitterbuf conf */
+    enum jb_return_code jb_setconf (jitterbuf *jb, jb_conf *conf);
+
+    typedef void __attribute__ ( (format (printf, 1, 2))) (*jb_output_function_t) (const char *fmt, ...);
+    void jb_setoutput (jb_output_function_t err, jb_output_function_t warn, jb_output_function_t dbg);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/sflphone-common/src/audio/mainbuffer.cpp b/sflphone-common/src/audio/mainbuffer.cpp
index eb37899b5dfa84148f3eccdfe552e655f5c3dde5..e30d810214e015a8615f15196370065c8bc49200 100644
--- a/sflphone-common/src/audio/mainbuffer.cpp
+++ b/sflphone-common/src/audio/mainbuffer.cpp
@@ -31,10 +31,9 @@
 
 #include "mainbuffer.h"
 
-#include "audioprocessing.h"
+#include "manager.h"
 
-
-MainBuffer::MainBuffer() : _internalSamplingRate (0)
+MainBuffer::MainBuffer() : _internalSamplingRate (8000)
 {
     mixBuffer = new SFLDataFormat[STATIC_BUFSIZE];
 }
@@ -43,19 +42,24 @@ MainBuffer::MainBuffer() : _internalSamplingRate (0)
 MainBuffer::~MainBuffer()
 {
 
-    delete [] mixBuffer; mixBuffer = NULL;
+    delete [] mixBuffer;
+    mixBuffer = NULL;
 }
 
 
 void MainBuffer::setInternalSamplingRate (int sr)
 {
-    ost::MutexLock guard (_mutex);
 
     if (sr != _internalSamplingRate) {
 
+        // This call takes the mutex
+        flushAllBuffers();
+
+        ost::MutexLock guard (_mutex);
+
         _internalSamplingRate = sr;
 
-        flushAllBuffers();
+        Manager::instance().audioSamplingRateChanged();
 
     }
 }
@@ -91,7 +95,8 @@ bool MainBuffer::removeCallIDSet (CallID set_id)
 
     if (callid_set != NULL) {
         if (_callIDMap.erase (set_id) != 0) {
-        	delete callid_set; callid_set = NULL;
+            delete callid_set;
+            callid_set = NULL;
             return true;
         } else {
             _debug ("removeCallIDSet error while removing callid set %s!", set_id.c_str());
@@ -144,6 +149,8 @@ RingBuffer* MainBuffer::getRingBuffer (CallID call_id)
 RingBuffer* MainBuffer::createRingBuffer (CallID call_id)
 {
 
+    _debug ("BufferManager: Create ring buffer %s", call_id.c_str());
+
     RingBuffer* newRingBuffer = new RingBuffer (SIZEBUF, call_id);
 
     _ringBufferMap.insert (pair<CallID, RingBuffer*> (call_id, newRingBuffer));
@@ -155,11 +162,13 @@ RingBuffer* MainBuffer::createRingBuffer (CallID call_id)
 bool MainBuffer::removeRingBuffer (CallID call_id)
 {
 
+    _debug ("BufferManager: Remove Ringbuffer %s", call_id.c_str());
+
     RingBuffer* ring_buffer = getRingBuffer (call_id);
 
     if (ring_buffer != NULL) {
         if (_ringBufferMap.erase (call_id) != 0) {
-        	delete ring_buffer;
+            delete ring_buffer;
             return true;
         } else {
             _error ("BufferManager: Error: Fail to delete ringbuffer %s!", call_id.c_str());
@@ -177,6 +186,8 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2)
 
     ost::MutexLock guard (_mutex);
 
+    _debug ("BufferManager: Bind  calls %s, %s", call_id1.c_str(), call_id2.c_str());
+
     RingBuffer* ring_buffer;
     CallIDSet* callid_set;
 
@@ -202,20 +213,38 @@ void MainBuffer::bindCallID (CallID call_id1, CallID call_id2)
 
 }
 
+void MainBuffer::bindHalfDuplexOut (CallID process_id, CallID call_id)
+{
+
+    ost::MutexLock guard (_mutex);
+
+    // This method is used only for active calls, if this call does not exist, do nothing
+    if (!getRingBuffer (call_id))
+        return;
+
+    if (!getCallIDSet (process_id))
+        createCallIDSet (process_id);
+
+    getRingBuffer (call_id)->createReadPointer (process_id);
+
+    addCallIDtoSet (process_id, call_id);
+
+}
+
 
 void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2)
 {
 
     ost::MutexLock guard (_mutex);
 
+    _debug ("BufferManager: Unbind calls %s, %s", call_id1.c_str(), call_id2.c_str());
+
     removeCallIDfromSet (call_id1, call_id2);
     removeCallIDfromSet (call_id2, call_id1);
 
-    RingBuffer* ringbuffer;
-
-    ringbuffer = getRingBuffer (call_id2);
+    RingBuffer* ringbuffer = getRingBuffer (call_id2);
 
-    if (ringbuffer != NULL) {
+    if (ringbuffer) {
 
         ringbuffer->removeReadPointer (call_id1);
 
@@ -228,7 +257,8 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2)
 
     ringbuffer = getRingBuffer (call_id1);
 
-    if (ringbuffer != NULL) {
+    if (ringbuffer) {
+
         ringbuffer->removeReadPointer (call_id2);
 
         if (ringbuffer->getNbReadPointer() == 0) {
@@ -236,15 +266,43 @@ void MainBuffer::unBindCallID (CallID call_id1, CallID call_id2)
             removeRingBuffer (call_id1);
         }
     }
+}
 
+void MainBuffer::unBindHalfDuplexOut (CallID process_id, CallID call_id)
+{
+
+    ost::MutexLock guard (_mutex);
+
+    removeCallIDfromSet (process_id, call_id);
+
+    RingBuffer* ringbuffer = getRingBuffer (call_id);
+
+    if (ringbuffer) {
+        ringbuffer->removeReadPointer (process_id);
+
+        if (ringbuffer->getNbReadPointer() == 0) {
+            removeCallIDSet (call_id);
+            removeRingBuffer (call_id);
+        }
+    } else {
+        _debug ("Error: did not found ringbuffer %s", process_id.c_str());
+        removeCallIDSet (process_id);
+    }
+
+
+    CallIDSet* callid_set = getCallIDSet (process_id);
+
+    if (callid_set) {
+        if (callid_set->empty())
+            removeCallIDSet (process_id);
+    }
 
 }
 
+
 void MainBuffer::unBindAll (CallID call_id)
 {
 
-    ost::MutexLock guard (_mutex);
-
     CallIDSet* callid_set = getCallIDSet (call_id);
 
     if (callid_set == NULL)
@@ -267,9 +325,32 @@ void MainBuffer::unBindAll (CallID call_id)
 }
 
 
-int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID call_id)
+void MainBuffer::unBindAllHalfDuplexOut (CallID process_id)
 {
 
+    CallIDSet* callid_set = getCallIDSet (process_id);
+
+    if (!callid_set)
+        return;
+
+    if (callid_set->empty())
+        return;
+
+    CallIDSet temp_set = *callid_set;
+
+    CallIDSet::iterator iter_set = temp_set.begin();
+
+    while (iter_set != temp_set.end()) {
+        CallID call_id_in_set = *iter_set;
+        unBindCallID (process_id, call_id_in_set);
+
+        iter_set++;
+    }
+}
+
+
+int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID call_id)
+{
     ost::MutexLock guard (_mutex);
 
     RingBuffer* ring_buffer = getRingBuffer (call_id);
@@ -280,7 +361,6 @@ int MainBuffer::putData (void *buffer, int toCopy, unsigned short volume, CallID
 
     int a;
 
-    // ost::MutexLock guard (_mutex);
     a = ring_buffer->AvailForPut();
 
     if (a >= toCopy) {
@@ -334,9 +414,7 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID
             return 0;
     } else {
 
-        for (int k = 0; k < nbSmplToCopy; k++) {
-            ( (SFLDataFormat*) (buffer)) [k] = 0;
-        }
+        memset (buffer, 0, nbSmplToCopy*sizeof (SFLDataFormat));
 
         int size = 0;
 
@@ -344,6 +422,8 @@ int MainBuffer::getData (void *buffer, int toCopy, unsigned short volume, CallID
 
         while (iter_id != callid_set->end()) {
 
+            memset (mixBuffer, 0, toCopy);
+
             size = getDataByID (mixBuffer, toCopy, volume, (CallID) (*iter_id), call_id);
 
             if (size > 0) {
@@ -395,14 +475,16 @@ int MainBuffer::availForGet (CallID call_id)
             _debug ("This problem should not occur since we have %i element", (int) callid_set->size());
         }
 
-        // else
         return availForGetByID (*iter_id, call_id);
+
     } else {
-        // _debug("CallIDSet with ID: \"%s\" is a conference!", call_id.c_str());
+
         int avail_bytes = 99999;
         int nb_bytes;
         CallIDSet::iterator iter_id = callid_set->begin();
 
+        syncBuffers (call_id);
+
         for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) {
             nb_bytes = availForGetByID (*iter_id, call_id);
 
@@ -420,13 +502,13 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id)
 {
 
     if ( (call_id != default_id) && (reader_id == call_id)) {
-        _error("MainBuffer: Error: RingBuffer has a readpointer on tiself");
+        _error ("MainBuffer: Error: RingBuffer has a readpointer on tiself");
     }
 
     RingBuffer* ringbuffer = getRingBuffer (call_id);
 
     if (ringbuffer == NULL) {
-        _error("MainBuffer: Error: RingBuffer does not exist");
+        _error ("MainBuffer: Error: RingBuffer does not exist");
         return 0;
     } else
         return ringbuffer->AvailForGet (reader_id);
@@ -436,8 +518,6 @@ int MainBuffer::availForGetByID (CallID call_id, CallID reader_id)
 
 int MainBuffer::discard (int toDiscard, CallID call_id)
 {
-    // _debug("MainBuffer::discard");
-
     ost::MutexLock guard (_mutex);
 
     CallIDSet* callid_set = getCallIDSet (call_id);
@@ -446,7 +526,6 @@ int MainBuffer::discard (int toDiscard, CallID call_id)
         return 0;
 
     if (callid_set->empty()) {
-        // _debug("CallIDSet with ID: \"%s\" is empty!", call_id.c_str());
         return 0;
     }
 
@@ -467,7 +546,6 @@ int MainBuffer::discard (int toDiscard, CallID call_id)
 
         return toDiscard;
     }
-
 }
 
 
@@ -544,6 +622,46 @@ void MainBuffer::flushAllBuffers()
     }
 }
 
+void MainBuffer:: syncBuffers (CallID call_id)
+{
+
+    CallIDSet* callid_set = getCallIDSet (call_id);
+
+    if (callid_set == NULL)
+        return;
+
+    if (callid_set->empty()) {
+        _debug ("MainBuffer: CallIDSet with ID: \"%s\" is empty!", call_id.c_str());
+        return;
+    }
+
+    if (callid_set->size() == 1) {
+        // no need to resync, only one session
+        return;
+    }
+
+    int nbBuffers = 0;
+    float mean_nbBytes = 0.0;
+
+    CallIDSet::iterator iter_id = callid_set->begin();
+
+
+    // compute mean nb byte in buffers
+    for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) {
+        nbBuffers++;
+        mean_nbBytes += availForGetByID (*iter_id, call_id);
+    }
+
+    mean_nbBytes = mean_nbBytes / (float) nbBuffers;
+
+    // resync buffers in this conference according to the computed mean
+    for (iter_id = callid_set->begin(); iter_id != callid_set->end(); iter_id++) {
+
+        if (availForGetByID (*iter_id, call_id) > (mean_nbBytes + 640))
+            discardByID (640, *iter_id, call_id);
+    }
+}
+
 
 void MainBuffer::stateInfo()
 {
@@ -610,7 +728,4 @@ void MainBuffer::stateInfo()
         iter_buffer++;
     }
 
-
-
-
 }
diff --git a/sflphone-common/src/audio/mainbuffer.h b/sflphone-common/src/audio/mainbuffer.h
index a5fca042e325f1f15f764f5eabde52fdfcef67d8..31f8554496e5b57ccdbd1c200332bf1c5362bbd5 100644
--- a/sflphone-common/src/audio/mainbuffer.h
+++ b/sflphone-common/src/audio/mainbuffer.h
@@ -1,18 +1,18 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  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.
@@ -37,93 +37,123 @@
 #include <cc++/thread.h> // for ost::Mutex
 #include <string>
 
-#include "../global.h"
-#include "../call.h"
+#include "global.h"
+#include "call.h"
 #include "ringbuffer.h"
 
-
-
 typedef std::map<CallID, RingBuffer*> RingBufferMap;
 
 typedef std::set<CallID> CallIDSet;
 
 typedef std::map<CallID, CallIDSet*> CallIDMap;
 
-class MainBuffer {
+class MainBuffer
+{
 
-public:
+    public:
 
         MainBuffer();
 
         ~MainBuffer();
 
-	void setInternalSamplingRate(int sr);
+        void setInternalSamplingRate (int sr);
 
-	int getInternalSamplingRate() {return _internalSamplingRate;}
+        int getInternalSamplingRate() {
+            return _internalSamplingRate;
+        }
 
-	CallIDSet* getCallIDSet(CallID call_id);
+        /**
+         * Bind together two audio streams so taht a client will be able
+         * to put and get data specifying its callid only.
+         */
+        void bindCallID (CallID call_id1, CallID call_id2 = default_id);
 
-	bool createCallIDSet(CallID set_id);
+        /**
+         * Add a new call_id to unidirectional outgoing stream
+         * \param call_id New call id to be added for this stream
+         * \param process_id Process that require this stream
+         */
+        void bindHalfDuplexOut (CallID process_id, CallID call_id = default_id);
 
-	bool removeCallIDSet(CallID set_id);
+        /**
+         * Unbind two calls
+         */
+        void unBindCallID (CallID call_id1, CallID call_id2 = default_id);
 
-	void addCallIDtoSet(CallID set_id, CallID call_id);
+        /**
+         * Unbind a unidirectional stream
+         */
+        void unBindHalfDuplexOut (CallID process_id, CallID call_id = default_id);
 
-	void removeCallIDfromSet(CallID set_id, CallID call_id);
+        void unBindAll (CallID call_id);
 
-	RingBuffer* createRingBuffer(CallID call_id);
+        void unBindAllHalfDuplexOut (CallID process_id);
 
-	bool removeRingBuffer(CallID call_id);
+        int putData (void *buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id);
 
-	void bindCallID(CallID call_id1, CallID call_id2 = default_id);
+        int getData (void *buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id);
 
-	void unBindCallID(CallID call_id1, CallID call_id2 = default_id);
+        int availForPut (CallID call_id = default_id);
 
-	void unBindAll(CallID call_id);
+        int availForGet (CallID call_id = default_id);
 
-	int putData(void *buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id);
+        int discard (int toDiscard, CallID call_id = default_id);
 
-	int getData(void *buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id);
+        void flush (CallID call_id = default_id);
 
-	int availForPut(CallID call_id = default_id);
+        void flushAllBuffers();
 
-	int availForGet(CallID call_id = default_id);
+        void flushDefault();
 
-	int discard(int toDiscard, CallID call_id = default_id);
+        void syncBuffers (CallID call_id);
 
-	void flush(CallID call_id = default_id);
+        void stateInfo();
 
-	void flushAllBuffers();
+    private:
 
-	void flushDefault();
+        CallIDSet* getCallIDSet (CallID call_id);
 
-	void stateInfo();
+        bool createCallIDSet (CallID set_id);
 
-    private:
+        bool removeCallIDSet (CallID set_id);
+
+        /**
+         * Add a new call id to this set
+         */
+        void addCallIDtoSet (CallID set_id, CallID call_id);
+
+        void removeCallIDfromSet (CallID set_id, CallID call_id);
+
+        /**
+         * Create a new ringbuffer with default readpointer
+         */
+        RingBuffer* createRingBuffer (CallID call_id);
+
+        bool removeRingBuffer (CallID call_id);
 
-	RingBuffer* getRingBuffer(CallID call_id);
+        RingBuffer* getRingBuffer (CallID call_id);
 
-	int getDataByID(void *buffer, int toCopy, unsigned short volume, CallID call_id, CallID reader_id);
+        int getDataByID (void *buffer, int toCopy, unsigned short volume, CallID call_id, CallID reader_id);
 
-	int availForGetByID(CallID call_id, CallID reader_id);
+        int availForGetByID (CallID call_id, CallID reader_id);
 
-	int discardByID(int toDiscard, CallID call_id, CallID reader_id);
+        int discardByID (int toDiscard, CallID call_id, CallID reader_id);
 
-	void flushByID(CallID call_id, CallID reader_id);
+        void flushByID (CallID call_id, CallID reader_id);
 
-	RingBufferMap _ringBufferMap;
+        RingBufferMap _ringBufferMap;
 
-	CallIDMap _callIDMap;
+        CallIDMap _callIDMap;
 
-	SFLDataFormat* mixBuffer;
+        SFLDataFormat* mixBuffer;
 
-	ost::Mutex _mutex;
+        ost::Mutex _mutex;
 
-	int _internalSamplingRate;
+        int _internalSamplingRate;
 
     public:
 
-	friend class MainBufferTest;
+        friend class MainBufferTest;
 };
 
 #endif
diff --git a/sflphone-common/src/audio/noisesuppress.cpp b/sflphone-common/src/audio/noisesuppress.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bf27eb352241f423f4889a30176d5fd10211cbac
--- /dev/null
+++ b/sflphone-common/src/audio/noisesuppress.cpp
@@ -0,0 +1,89 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "noisesuppress.h"
+
+NoiseSuppress::NoiseSuppress (int smplPerFrame, int samplingRate) : _noiseState (NULL)
+        , _smplPerFrame (smplPerFrame)
+        , _samplingRate (samplingRate)
+{
+    initNewNoiseSuppressor (_smplPerFrame, _samplingRate);
+}
+
+
+NoiseSuppress::~NoiseSuppress()
+{
+    speex_preprocess_state_destroy (_noiseState);
+}
+
+void NoiseSuppress::reset (void)
+{
+
+    speex_preprocess_state_destroy (_noiseState);
+
+    initNewNoiseSuppressor (_smplPerFrame, _samplingRate);
+}
+
+void NoiseSuppress::putData (SFLDataFormat *inputData, int nbBytes) {}
+
+int NoiseSuppress::getData (SFLDataFormat *outputData) {}
+
+void NoiseSuppress::process (SFLDataFormat *data, int nbBytes)
+{
+    if (_noiseState)
+        speex_preprocess_run (_noiseState, data);
+}
+
+int NoiseSuppress::process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes) {}
+
+void NoiseSuppress::process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes) {}
+
+void NoiseSuppress::initNewNoiseSuppressor (int smplPerFrame, int samplingRate)
+{
+    _noiseState = speex_preprocess_state_init (smplPerFrame, samplingRate);
+    int i=1;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DENOISE, &i);
+    i=-20;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &i);
+    i=0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC, &i);
+    i=8000;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC_TARGET, &i);
+    i=16000;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_AGC_LEVEL, &i);
+    i=0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB, &i);
+    float f=0.0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &f);
+    f=0.0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &f);
+    i = 0;
+    speex_preprocess_ctl (_noiseState, SPEEX_PREPROCESS_SET_VAD, &i);
+}
diff --git a/sflphone-common/src/audio/noisesuppress.h b/sflphone-common/src/audio/noisesuppress.h
new file mode 100644
index 0000000000000000000000000000000000000000..fe9494013073d7a75c5e89618e7526ac2e03da07
--- /dev/null
+++ b/sflphone-common/src/audio/noisesuppress.h
@@ -0,0 +1,93 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 NOISESUPPRESS_H
+#define NOISESUPPRESS_H
+
+#include <speex/speex_preprocess.h>
+#include "algorithm.h"
+#include "audioprocessing.h"
+
+
+class NoiseSuppress : public Algorithm
+{
+
+    public:
+
+        NoiseSuppress (int smplPerFrame, int samplingRate);
+
+        ~NoiseSuppress (void);
+
+        /**
+             * Reset noise suppressor internal state at runtime. Usefull when making a new call
+             */
+        virtual void reset (void);
+
+        /**
+         * Unused
+        */
+        virtual void putData (SFLDataFormat *inputData, int nbBytes);
+
+        /**
+        * Unused
+         */
+        virtual int getData (SFLDataFormat *outputData);
+
+        /**
+         * Unused
+         */
+        virtual void process (SFLDataFormat *data, int nbBytes);
+
+        /**
+         * Unused
+        */
+        virtual int process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes);
+
+        /**
+        * Unused
+         */
+        virtual void process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes);
+
+    private:
+
+        void initNewNoiseSuppressor (int _smplPerFrame, int samplingRate);
+
+        /**
+             * Noise reduction processing state
+             */
+        SpeexPreprocessState *_noiseState;
+
+        int _smplPerFrame;
+
+        int _samplingRate;
+
+};
+
+#endif
diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
index d3e475b3f9c281d9334851dc1893bcbe136b03a5..5cffbbe4902326c36a19d70c819ee3d3793a8edd 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
@@ -58,17 +58,17 @@ AudioStream::~AudioStream()
 }
 
 bool
-AudioStream::connectStream()
+AudioStream::connectStream (std::string* deviceName)
 {
     ost::MutexLock guard (_mutex);
 
     if (!_audiostream)
-        _audiostream = createStream (_context);
+        _audiostream = createStream (_context, deviceName);
 
     return true;
 }
 
-static void success_cb (pa_stream *s, int success, void *userdata)
+static void success_cb (pa_stream *s, int success UNUSED, void *userdata)
 {
 
     assert (s);
@@ -78,12 +78,11 @@ static void success_cb (pa_stream *s, int success, void *userdata)
     pa_threaded_mainloop_signal (mainloop, 0);
 }
 
-
 bool
 AudioStream::drainStream (void)
 {
     if (_audiostream) {
-        _info("Audio: Draining stream");
+        _info ("Audio: Draining stream");
         pa_operation * operation;
 
         pa_threaded_mainloop_lock (_mainloop);
@@ -91,7 +90,7 @@ AudioStream::drainStream (void)
         if ( (operation = pa_stream_drain (_audiostream, success_cb, _mainloop))) {
             while (pa_operation_get_state (operation) != PA_OPERATION_DONE) {
                 if (!_context || pa_context_get_state (_context) != PA_CONTEXT_READY || !_audiostream || pa_stream_get_state (_audiostream) != PA_STREAM_READY) {
-                    _warn("Audio: Connection died: %s", _context ? pa_strerror (pa_context_errno (_context)) : "NULL");
+                    _warn ("Audio: Connection died: %s", _context ? pa_strerror (pa_context_errno (_context)) : "NULL");
                     pa_operation_unref (operation);
                     break;
                 } else {
@@ -109,7 +108,7 @@ AudioStream::drainStream (void)
 bool
 AudioStream::disconnectStream (void)
 {
-    _info("Audio: Destroy audio streams");
+    _info ("Audio: Destroy audio streams");
 
     pa_threaded_mainloop_lock (_mainloop);
 
@@ -138,16 +137,18 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data)
 {
     pa_threaded_mainloop *m;
 
-    _info("Audio: The state of the stream changed");
+    _info ("Audio: The state of the stream changed");
     assert (s);
 
+    char str[PA_SAMPLE_SPEC_SNPRINT_MAX];
+
     m = (pa_threaded_mainloop*) user_data;
     assert (m);
 
     switch (pa_stream_get_state (s)) {
 
         case PA_STREAM_CREATING:
-            _info("Audio: Stream is creating...");
+            _info ("Audio: Stream is creating...");
             break;
 
         case PA_STREAM_TERMINATED:
@@ -156,6 +157,14 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data)
 
         case PA_STREAM_READY:
             _info ("Audio: Stream successfully created, connected to %s", pa_stream_get_device_name (s));
+            // pa_buffer_attr *buffattr = (pa_buffer_attr *)pa_xmalloc (sizeof(pa_buffer_attr));
+            _debug ("Audio: maxlength %u", pa_stream_get_buffer_attr (s)->maxlength);
+            _debug ("Audio: tlength %u", pa_stream_get_buffer_attr (s)->tlength);
+            _debug ("Audio: prebug %u", pa_stream_get_buffer_attr (s)->prebuf);
+            _debug ("Audio: minreq %u", pa_stream_get_buffer_attr (s)->minreq);
+            _debug ("Audio: fragsize %u", pa_stream_get_buffer_attr (s)->fragsize);
+            _debug ("Audio: samplespec %s", pa_sample_spec_snprint (str, sizeof (str), pa_stream_get_sample_spec (s)));
+            // pa_xfree (buffattr);
             break;
 
         case PA_STREAM_UNCONNECTED:
@@ -165,7 +174,7 @@ AudioStream::stream_state_callback (pa_stream* s, void* user_data)
         case PA_STREAM_FAILED:
 
         default:
-            _warn("Audio: Error - Sink/Source doesn't exists: %s" , pa_strerror (pa_context_errno (pa_stream_get_context (s))));
+            _warn ("Audio: Error - Sink/Source doesn't exists: %s" , pa_strerror (pa_context_errno (pa_stream_get_context (s))));
             exit (0);
             break;
     }
@@ -182,7 +191,7 @@ AudioStream::getStreamState (void)
 
 
 pa_stream*
-AudioStream::createStream (pa_context* c)
+AudioStream::createStream (pa_context* c, std::string *deviceName)
 {
     ost::MutexLock guard (_mutex);
 
@@ -191,7 +200,7 @@ AudioStream::createStream (pa_context* c)
     assert (pa_sample_spec_valid (&_sample_spec));
     assert (pa_channel_map_valid (&channel_map));
 
-    _info("Audio: Create pulseaudio stream");
+    _info ("Audio: Create pulseaudio stream");
 
     pa_buffer_attr* attributes = (pa_buffer_attr*) malloc (sizeof (pa_buffer_attr));
 
@@ -203,24 +212,57 @@ AudioStream::createStream (pa_context* c)
 
     if (_streamType == PLAYBACK_STREAM) {
 
-        attributes->maxlength = (uint32_t) -1;
-        attributes->tlength = pa_usec_to_bytes (100 * PA_USEC_PER_MSEC, &_sample_spec);
+        attributes->maxlength = pa_usec_to_bytes (160 * PA_USEC_PER_MSEC, &_sample_spec); // -1;
+        attributes->tlength = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);
         attributes->prebuf = 0;
+        attributes->fragsize = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);
         attributes->minreq = (uint32_t) -1;
 
-		pa_threaded_mainloop_lock(_mainloop);
-        pa_stream_connect_playback (s , NULL , attributes, (pa_stream_flags_t)(PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL);
-		pa_threaded_mainloop_unlock(_mainloop);
+        pa_threaded_mainloop_lock (_mainloop);
+
+        if (deviceName)
+            pa_stream_connect_playback (s , deviceName->c_str(), attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL);
+        else
+            pa_stream_connect_playback (s , NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL);
+
+
+        pa_threaded_mainloop_unlock (_mainloop);
 
     } else if (_streamType == CAPTURE_STREAM) {
 
-        attributes->maxlength = (uint32_t) -1;
-        attributes->fragsize = pa_usec_to_bytes (50 * PA_USEC_PER_MSEC, &_sample_spec);
+        attributes->maxlength = pa_usec_to_bytes (160 * PA_USEC_PER_MSEC, &_sample_spec);// (uint32_t) -1;
+        attributes->tlength = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);// pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec);
+        attributes->prebuf = 0;
+        attributes->fragsize = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec); // pa_usec_to_bytes (20 * PA_USEC_PER_MSEC, &_sample_spec);
+        attributes->minreq = (uint32_t) -1;
+
+        pa_threaded_mainloop_lock (_mainloop);
+
+        if (deviceName)
+            pa_stream_connect_record (s, deviceName->c_str(), attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE));
+        else
+            pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE));
+
+
+        pa_threaded_mainloop_unlock (_mainloop);
+
+    } else if (_streamType == RINGTONE_STREAM) {
+
+        attributes->maxlength = pa_usec_to_bytes (160 * PA_USEC_PER_MSEC, &_sample_spec);;
+        attributes->tlength = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);
+        attributes->prebuf = 0;
+        attributes->fragsize = pa_usec_to_bytes (80 * PA_USEC_PER_MSEC, &_sample_spec);
+        attributes->minreq = (uint32_t) -1;
+
+        pa_threaded_mainloop_lock (_mainloop);
+
+        if (deviceName)
+            pa_stream_connect_playback (s, deviceName->c_str(), attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE), NULL, NULL);
+        else
+            pa_stream_connect_playback (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY), NULL, NULL);
+
+        pa_threaded_mainloop_unlock (_mainloop);
 
-		pa_threaded_mainloop_lock(_mainloop);
-        pa_stream_connect_record (s, NULL, attributes, (pa_stream_flags_t) (PA_STREAM_ADJUST_LATENCY|PA_STREAM_AUTO_TIMING_UPDATE));
-        pa_threaded_mainloop_unlock(_mainloop);
-        
     } else if (_streamType == UPLOAD_STREAM) {
         pa_stream_connect_upload (s , 1024);
     } else {
diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.h b/sflphone-common/src/audio/pulseaudio/audiostream.h
index a2ebf2cbd16bcfb2cacd3855b3899c7bf1370805..e4c48b94072d9e254f1705aa1ccf1e1265b62f77 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.h
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.h
@@ -6,12 +6,12 @@
  *  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.
@@ -44,156 +44,168 @@
  * This data structure contains the different king of audio streams available
  */
 enum STREAM_TYPE {
-  PLAYBACK_STREAM,
-  CAPTURE_STREAM,
-  UPLOAD_STREAM
+    PLAYBACK_STREAM,
+    CAPTURE_STREAM,
+    RINGTONE_STREAM,
+    UPLOAD_STREAM
 };
 
 struct PulseLayerType {
     pa_context * context;
     pa_threaded_mainloop * mainloop;
-    
+
     std::string description;
-    
+
     int type;
     double volume;
 };
 
-class AudioStream {
-  public:
-    /**
-     * Constructor
-     * @param context The PulseLayerType structure containing various information.
-     */ 
-    AudioStream(PulseLayerType * driver, int smplrate);
-    
-    /**
-     * Destructor
-     */   
-    ~AudioStream();
-
-    /**
-     * Write data to the main abstraction ring buffer. 
-     * @param buffer The buffer containing the data to be played
-     * @param toCopy The number of samples, in bytes
-     * @return int The number of bytes played
-     */
-    int putMain( void* buffer , int toCopy );
-
-    /**
-     * Write data to the urgent abstraction ring buffer. ( dtmf , double calls )
-     * @param buffer The buffer containing the data to be played
-     * @param toCopy The number of samples, in bytes
-     * @return int The number of bytes played
-     */
-    int putUrgent( void* buffer , int toCopy );
-
-    /**
-     * Connect the pulse audio stream
-     */
-    bool connectStream();
-
-    /**
-     * Drain the given stream. 
-     */
-    bool drainStream(void);
-    
-    /**
-     * Disconnect the pulseaudio stream
-     */
-    bool disconnectStream();
-    
-    /**
-     * Accessor: Get the pulseaudio stream object
-     * @return pa_stream* The stream
-     */
-    pa_stream* pulseStream(){ return _audiostream; }
-
-    /**
-     * Accessor
-     * @return std::string  The stream name
-     */
-    std::string getStreamName( void ) { return _streamDescription; }
-
-    /**
-     * Accessor
-     * @param name  The stream name
-     */
-    void setStreamName( std::string name ) {  _streamDescription = name; }
-
-    void setVolume( double pc ) { _volume.values[0] *= pc/100; }
-    pa_cvolume getVolume( void ) { return _volume; }
-
-    /**
-     * Accessor
-     * @return stream state
-     */
-    pa_stream_state_t getStreamState(void);
-
-    
-
-  private:
-  
-    // Copy Constructor
-    AudioStream(const AudioStream& rh);
-
-    // Assignment Operator
-    AudioStream& operator=( const AudioStream& rh);
-
-    /**
-     * Create the audio stream into the given context
-     * @param c	The pulseaudio context
-     * @return pa_stream* The newly created audio stream
-     */
-    pa_stream* createStream( pa_context* c); 
-
-    /**
-     * Mandatory asynchronous callback on the audio stream state
-     */
-    static void stream_state_callback( pa_stream* s, void* user_data );	
-    
-    /**
-     * Asynchronous callback on data processing ( write and read )
-     */
-    static void audioCallback ( pa_stream* s, size_t bytes, void* userdata );
-    
-    /**
-     * Write data to the sound device
-     */
-    void write( void );
-
-    /**
-     * The pulse audio object
-     */
-    pa_stream* _audiostream;
-    
-    /**
-     * The pulse audio context
-     */
-    pa_context* _context;
-
-    /**
-     * The type of the stream
-     */
-    int _streamType;
-    
-    /**
-     * The name of the stream
-     */
-    std::string _streamDescription;
-    
-    /**
-     * Streams parameters
-     */
-    pa_cvolume _volume;
-    pa_stream_flags_t _flag;
-    pa_sample_spec _sample_spec ;
-
-    pa_threaded_mainloop * _mainloop;
-    
-    ost::Mutex _mutex;
-
-    bool _stream_is_ready;
+class AudioStream
+{
+    public:
+        /**
+         * Constructor
+         * @param context The PulseLayerType structure containing various information.
+         */
+        AudioStream (PulseLayerType * driver, int smplrate);
+
+        /**
+         * Destructor
+         */
+        ~AudioStream();
+
+        /**
+         * Write data to the main abstraction ring buffer.
+         * @param buffer The buffer containing the data to be played
+         * @param toCopy The number of samples, in bytes
+         * @return int The number of bytes played
+         */
+        int putMain (void* buffer , int toCopy);
+
+        /**
+         * Write data to the urgent abstraction ring buffer. ( dtmf , double calls )
+         * @param buffer The buffer containing the data to be played
+         * @param toCopy The number of samples, in bytes
+         * @return int The number of bytes played
+         */
+        int putUrgent (void* buffer , int toCopy);
+
+        /**
+         * Connect the pulse audio stream
+         */
+        bool connectStream (std::string* deviceName);
+
+        /**
+         * Drain the given stream.
+         */
+        bool drainStream (void);
+
+        /**
+         * Disconnect the pulseaudio stream
+         */
+        bool disconnectStream();
+
+        /**
+         * Accessor: Get the pulseaudio stream object
+         * @return pa_stream* The stream
+         */
+        pa_stream* pulseStream() {
+            return _audiostream;
+        }
+
+        /**
+         * Accessor
+         * @return std::string  The stream name
+         */
+        std::string getStreamName (void) {
+            return _streamDescription;
+        }
+
+        /**
+         * Accessor
+         * @param name  The stream name
+         */
+        void setStreamName (std::string name) {
+            _streamDescription = name;
+        }
+
+        void setVolume (double pc) {
+            _volume.values[0] *= pc/100;
+        }
+        pa_cvolume getVolume (void) {
+            return _volume;
+        }
+
+        /**
+         * Accessor
+         * @return stream state
+         */
+        pa_stream_state_t getStreamState (void);
+
+
+
+    private:
+
+        // Copy Constructor
+        AudioStream (const AudioStream& rh);
+
+        // Assignment Operator
+        AudioStream& operator= (const AudioStream& rh);
+
+        /**
+         * Create the audio stream into the given context
+         * @param c	The pulseaudio context
+         * @return pa_stream* The newly created audio stream
+         */
+        pa_stream* createStream (pa_context* c, std::string* deviceName);
+
+        /**
+         * Mandatory asynchronous callback on the audio stream state
+         */
+        static void stream_state_callback (pa_stream* s, void* user_data);
+
+        /**
+         * Asynchronous callback on data processing ( write and read )
+         */
+        static void audioCallback (pa_stream* s, size_t bytes, void* userdata);
+
+        /**
+         * Write data to the sound device
+         */
+        void write (void);
+
+        /**
+         * The pulse audio object
+         */
+        pa_stream* _audiostream;
+
+        /**
+         * The pulse audio context
+         */
+        pa_context* _context;
+
+        /**
+         * The type of the stream
+         */
+        int _streamType;
+
+        /**
+         * The name of the stream
+         */
+        std::string _streamDescription;
+
+        /**
+         * Streams parameters
+         */
+        pa_cvolume _volume;
+        pa_stream_flags_t _flag;
+        pa_sample_spec _sample_spec ;
+
+        pa_threaded_mainloop * _mainloop;
+
+        ost::Mutex _mutex;
+
+        bool _stream_is_ready;
 
 };
 
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index aeaa3867b4d0c628f3ab6dde8f06c78b8e662e97..e90d0698f1a5d988ff171bba01697bbb4d3bf669 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -32,8 +32,14 @@
 #include "pulselayer.h"
 #include "managerimpl.h"
 
+
+// #include <fstream>
+
 int framesPerBuffer = 2048;
 
+
+
+
 static  void playback_callback (pa_stream* s, size_t bytes, void* userdata)
 {
 
@@ -49,34 +55,181 @@ static void capture_callback (pa_stream* s, size_t bytes, void* userdata)
     assert (s && bytes);
     assert (bytes > 0);
     static_cast<PulseLayer*> (userdata)->processCaptureData();
-    
+
 }
 
-/*
-static void stream_suspended_callback (pa_stream *s UNUSED, void *userdata UNUSED)
+static void ringtone_callback (pa_stream* s, size_t bytes, void* userdata)
 {
-    _debug("Audio: Stream Suspended");
+
+    assert (s && bytes);
+    assert (bytes > 0);
+    static_cast<PulseLayer*> (userdata)->processRingtoneData();
+
 }
-*/
 
-/*
-static void stream_moved_callback(pa_stream *s UNUSED, void *userdata UNUSED)
+static void stream_moved_callback (pa_stream *s, void *userdata UNUSED)
+{
+
+    _debug ("stream_moved_callback: stream %d to %d", pa_stream_get_index (s), pa_stream_get_device_index (s));
+}
+
+static void latency_update_callback (pa_stream *p, void *userdata UNUSED)
 {
-    _debug("Audio: Stream Moved");
+
+    pa_usec_t r_usec;
+
+    pa_stream_get_latency (p, &r_usec, NULL);
+
+    /*
+    _debug ("Audio: Stream letency update %0.0f ms for device %s", (float) r_usec/1000, pa_stream_get_device_name (p));
+    _debug ("Audio: maxlength %u", pa_stream_get_buffer_attr (p)->maxlength);
+    _debug ("Audio: tlength %u", pa_stream_get_buffer_attr (p)->tlength);
+    _debug ("Audio: prebuf %u", pa_stream_get_buffer_attr (p)->prebuf);
+    _debug ("Audio: minreq %u", pa_stream_get_buffer_attr (p)->minreq);
+    _debug ("Audio: fragsize %u", pa_stream_get_buffer_attr (p)->fragsize);
+    */
 }
-*/
 
-static void playback_underflow_callback (pa_stream* s,  void* userdata UNUSED)
+static void sink_input_info_callback (pa_context *c UNUSED, const pa_sink_info *i, int eol, void *userdata)
 {
-    // _debug ("Audio: Buffer Underflow");
-    // pa_stream_trigger (s, NULL, NULL);
+    char s[PA_SAMPLE_SPEC_SNPRINT_MAX], cv[PA_CVOLUME_SNPRINT_MAX], cm[PA_CHANNEL_MAP_SNPRINT_MAX];
+
+    if (!eol) {
+
+        printf ("Sink %u\n"
+                "    Name: %s\n"
+                "    Driver: %s\n"
+                "    Description: %s\n"
+                "    Sample Specification: %s\n"
+                "    Channel Map: %s\n"
+                "    Owner Module: %u\n"
+                "    Volume: %s\n"
+                "    Monitor Source: %u\n"
+                "    Latency: %0.0f usec\n"
+                "    Flags: %s%s%s\n",
+                i->index,
+                i->name,
+                i->driver,
+                i->description,
+                pa_sample_spec_snprint (s, sizeof (s), &i->sample_spec),
+                pa_channel_map_snprint (cm, sizeof (cm), &i->channel_map),
+                i->owner_module,
+                i->mute ? "muted" : pa_cvolume_snprint (cv, sizeof (cv), &i->volume),
+                i->monitor_source,
+                (double) i->latency,
+                i->flags & PA_SINK_HW_VOLUME_CTRL ? "HW_VOLUME_CTRL " : "",
+                i->flags & PA_SINK_LATENCY ? "LATENCY " : "",
+                i->flags & PA_SINK_HARDWARE ? "HARDWARE" : "");
+
+        std::string deviceName (i->name);
+        ( (PulseLayer *) userdata)->getSinkList()->push_back (deviceName);
+
+    }
 }
 
+static void source_input_info_callback (pa_context *c UNUSED, const pa_source_info *i, int eol, void *userdata)
+{
+    char s[PA_SAMPLE_SPEC_SNPRINT_MAX], cv[PA_CVOLUME_SNPRINT_MAX], cm[PA_CHANNEL_MAP_SNPRINT_MAX];
 
-static void playback_overflow_callback (pa_stream* s UNUSED, void* userdata UNUSED)
+    if (!eol) {
+
+        printf ("Sink %u\n"
+                "    Name: %s\n"
+                "    Driver: %s\n"
+                "    Description: %s\n"
+                "    Sample Specification: %s\n"
+                "    Channel Map: %s\n"
+                "    Owner Module: %u\n"
+                "    Volume: %s\n"
+                "    Monitor if Sink: %u\n"
+                "    Latency: %0.0f usec\n"
+                "    Flags: %s%s%s\n",
+                i->index,
+                i->name,
+                i->driver,
+                i->description,
+                pa_sample_spec_snprint (s, sizeof (s), &i->sample_spec),
+                pa_channel_map_snprint (cm, sizeof (cm), &i->channel_map),
+                i->owner_module,
+                i->mute ? "muted" : pa_cvolume_snprint (cv, sizeof (cv), &i->volume),
+                i->monitor_of_sink,
+                (double) i->latency,
+                i->flags & PA_SOURCE_HW_VOLUME_CTRL ? "HW_VOLUME_CTRL " : "",
+                i->flags & PA_SOURCE_LATENCY ? "LATENCY " : "",
+                i->flags & PA_SOURCE_HARDWARE ? "HARDWARE" : "");
+
+        std::string deviceName (i->name);
+        ( (PulseLayer *) userdata)->getSourceList()->push_back (deviceName);
+
+    }
+}
+
+
+static void context_changed_callback (pa_context* c, pa_subscription_event_type_t t, uint32_t idx UNUSED, void* userdata)
 {
-    // _debug ("Audio: Buffer OverFlow");
 
+    switch (t) {
+
+        case PA_SUBSCRIPTION_EVENT_SINK:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_SINK");
+            ( (PulseLayer *) userdata)->getSinkList()->clear();
+            pa_context_get_sink_info_list (c, sink_input_info_callback,  userdata);
+            break;
+        case PA_SUBSCRIPTION_EVENT_SOURCE:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_SOURCE");
+            ( (PulseLayer *) userdata)->getSourceList()->clear();
+            pa_context_get_source_info_list (c, source_input_info_callback,  userdata);
+            break;
+        case PA_SUBSCRIPTION_EVENT_SINK_INPUT:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_SINK_INPUT");
+            break;
+        case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT");
+            break;
+        case PA_SUBSCRIPTION_EVENT_MODULE:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_MODULE");
+            break;
+        case PA_SUBSCRIPTION_EVENT_CLIENT:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_CLIENT");
+            break;
+        case PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE");
+            break;
+        case PA_SUBSCRIPTION_EVENT_SERVER:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_SERVER");
+            break;
+        case PA_SUBSCRIPTION_EVENT_CARD:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_CARD");
+            break;
+        case PA_SUBSCRIPTION_EVENT_FACILITY_MASK:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_FACILITY_MASK");
+            break;
+        case PA_SUBSCRIPTION_EVENT_CHANGE:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_CHANGE");
+            break;
+        case PA_SUBSCRIPTION_EVENT_REMOVE:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_REMOVE");
+            ( (PulseLayer *) userdata)->getSinkList()->clear();
+            ( (PulseLayer *) userdata)->getSourceList()->clear();
+            pa_context_get_sink_info_list (c, sink_input_info_callback,  userdata);
+            pa_context_get_source_info_list (c, source_input_info_callback,  userdata);
+            break;
+        case PA_SUBSCRIPTION_EVENT_TYPE_MASK:
+            _debug ("Audio: PA_SUBSCRIPTION_EVENT_TYPE_MASK");
+            break;
+        default:
+            _debug ("Audio: Unknown event type");
+
+    }
+}
+
+static void playback_underflow_callback (pa_stream* s UNUSED,  void* userdata UNUSED)
+{
+}
+
+
+static void playback_overflow_callback (pa_stream* s UNUSED, void* userdata UNUSED)
+{
 }
 
 
@@ -84,13 +237,22 @@ PulseLayer::PulseLayer (ManagerImpl* manager)
         : AudioLayer (manager , PULSEAUDIO)
         , context (NULL)
         , m (NULL)
-        , playback()
-        , record()
+        , playback (NULL)
+        , record (NULL)
+        , ringtone (NULL)
 {
     _urgentRingBuffer.createReadPointer();
-    dcblocker = new DcBlocker();
+
     is_started = false;
-    
+
+    AudioLayer::_noisesuppressstate = true;
+
+    byteCounter = 0;
+
+
+    // captureFile = new ofstream ("probeCaptureFile", ofstream::binary);
+    // spkrFile = new ofstream ("probeSpkrFile", ofstream::binary);
+
     openLayer();
 }
 
@@ -104,60 +266,42 @@ PulseLayer::~PulseLayer (void)
         _converter = NULL;
     }
 
-    delete dcblocker;
+    delete AudioLayer::_dcblocker;
+    AudioLayer::_dcblocker = NULL;
+
+    delete AudioLayer::_audiofilter;
+    AudioLayer::_audiofilter = NULL;
+
+
+    // captureFile->close();
+    // spkrFile->close();
 
-    dcblocker = NULL;
+    // delete captureFile;
+    // delete spkrFile;
 }
 
 void
 PulseLayer::openLayer (void)
 {
-	if (!is_started) {
-
-		_info("Audio: Open layer");
-
-		if (!m) {
-
-			_info("Audio: Creating PulseAudio mainloop");
-			if (!(m = pa_threaded_mainloop_new()))
-				_warn ("Audio: Error: while creating pulseaudio mainloop");
+    if (!is_started) {
 
-			if (pa_threaded_mainloop_start (m) < 0) {
-				_warn("Audio: Error: Failed to start pulseaudio mainloop");
-			}
-			
-			assert(m);
-		}
+        _info ("Audio: Open Pulseaudio layer");
 
-		if (!context) {
-			
-			_info("Audio: Creating new PulseAudio Context");
-			pa_threaded_mainloop_lock (m);
+        connectPulseAudioServer();
 
-			// Instanciate a context
-			if (! (context = pa_context_new (pa_threaded_mainloop_get_api (m) , "SFLphone")))
-				_warn ("Audio: Error: while creating pulseaudio context");
+        is_started = true;
 
-			pa_threaded_mainloop_unlock (m);
-
-			assert (context);
-		}
-
-		// Create Streams
-		connectPulseAudioServer();
-
-		is_started = true;
-	}
+    }
 
 }
 
 bool
 PulseLayer::closeLayer (void)
 {
-    _info("Audio: Destroy pulselayer");
+    _info ("Audio: Close Pulseaudio layer");
 
     disconnectAudioStream();
-	
+
     if (m) {
         pa_threaded_mainloop_stop (m);
     }
@@ -180,35 +324,64 @@ PulseLayer::closeLayer (void)
 void
 PulseLayer::connectPulseAudioServer (void)
 {
-    _info("Audio: connect to pulseaudio server");
+    _info ("Audio: Connect to Pulseaudio server");
 
     setenv ("PULSE_PROP_media.role", "phone", 1);
 
     pa_context_flags_t flag = PA_CONTEXT_NOAUTOSPAWN ;
 
-    pa_threaded_mainloop_lock (m);
+    if (!m) {
+
+        // Instantiate a mainloop
+        _info ("Audio: Creating PulseAudio mainloop");
 
-    _info("Audio: Connect the context to the server");
-    pa_context_connect (context, NULL , flag , NULL);
+        if (! (m = pa_threaded_mainloop_new()))
+            _warn ("Audio: Error: while creating pulseaudio mainloop");
 
+        assert (m);
+    }
+
+    if (!context) {
+
+        // Instantiate a context
+        if (! (context = pa_context_new (pa_threaded_mainloop_get_api (m) , "SFLphone")))
+            _warn ("Audio: Error: while creating pulseaudio context");
+
+        assert (context);
+    }
+
+    // set context state callback before starting the mainloop
     pa_context_set_state_callback (context, context_state_callback, this);
-    pa_threaded_mainloop_wait(m);
-    
-    
+
+    _info ("Audio: Connect the context to the server");
+
+    if (pa_context_connect (context, NULL , flag , NULL) < 0) {
+        _warn ("Audio: Error: Could not connect context to the server");
+    }
+
+    // Lock the loop before starting it
+    pa_threaded_mainloop_lock (m);
+
+    if (pa_threaded_mainloop_start (m) < 0)
+        _warn ("Audio: Error: Failed to start pulseaudio mainloop");
+
+    pa_threaded_mainloop_wait (m);
+
+
     // Run the main loop
     if (pa_context_get_state (context) != PA_CONTEXT_READY) {
-        _warn("Audio: Error: connecting to pulse audio server");
+        _warn ("Audio: Error: connecting to pulse audio server");
     }
 
     pa_threaded_mainloop_unlock (m);
 
-    _info("Audio: Context creation done");
+    _info ("Audio: Context creation done");
 
 }
 
 void PulseLayer::context_state_callback (pa_context* c, void* user_data)
 {
-    _info("Audio: The state of the context changed");
+    _info ("Audio: The state of the context changed");
     PulseLayer* pulse = (PulseLayer*) user_data;
     assert (c && pulse->m);
 
@@ -224,7 +397,11 @@ void PulseLayer::context_state_callback (pa_context* c, void* user_data)
 
         case PA_CONTEXT_READY:
             _debug ("Audio: Connection to PulseAudio server established");
-            pa_threaded_mainloop_signal(pulse->m, 0);
+            pa_threaded_mainloop_signal (pulse->m, 0);
+            pa_context_subscribe (c, (pa_subscription_mask_t) (PA_SUBSCRIPTION_MASK_SINK|
+                                  PA_SUBSCRIPTION_MASK_SOURCE), NULL, pulse);
+            pa_context_set_subscribe_callback (c, context_changed_callback, pulse);
+            pulse->updateSinkList();
             break;
 
         case PA_CONTEXT_TERMINATED:
@@ -234,14 +411,14 @@ void PulseLayer::context_state_callback (pa_context* c, void* user_data)
         case PA_CONTEXT_FAILED:
 
         default:
-            _warn("Audio: Error : %s" , pa_strerror (pa_context_errno (c)));
+            _warn ("Audio: Error : %s" , pa_strerror (pa_context_errno (c)));
             pulse->disconnectAudioStream();
             exit (0);
             break;
     }
 }
 
-bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sampleRate, int frameSize , int stream UNUSED, std::string plugin UNUSED)
+bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int indexRing UNUSED, int sampleRate, int frameSize , int stream UNUSED, std::string plugin UNUSED)
 {
     _audioSampleRate = sampleRate;
     _frameSize = frameSize;
@@ -251,13 +428,86 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sample
     // use 1 sec buffer for resampling
     _converter = new SamplerateConverter (_audioSampleRate, 1000);
 
+    // Instantiate the algorithm
+    AudioLayer::_dcblocker = new DcBlocker();
+    AudioLayer::_audiofilter = new AudioProcessing (static_cast<Algorithm *> (_dcblocker));
+
     return true;
 }
 
 
+void PulseLayer::updateSinkList (void)
+{
+
+    _debug ("Audio: Update sink list");
+
+    getSinkList()->clear();
+
+    pa_context_get_sink_info_list (context, sink_input_info_callback,  this);
+}
+
+void PulseLayer::updateSourceList (void)
+{
+    _debug ("Audio: Update source list");
+
+    getSourceList()->clear();
+
+    pa_context_get_source_info_list (context, source_input_info_callback, this);
+
+}
+
+bool PulseLayer::inSinkList (std::string deviceName)
+{
+    //   _debug("Audio: in device list %s", deviceName.c_str());
+
+    DeviceList::iterator iter = _sinkList.begin();
+
+    // _debug("_deviceList.size() %d", _sinkList.size());
+
+    while (iter != _sinkList.end()) {
+        if (*iter == deviceName) {
+            // _debug("device name in list: %s", (*iter).c_str());
+            return true;
+        }
+
+        iter++;
+    }
+
+    return false;
+}
+
+
+bool PulseLayer::inSourceList (std::string deviceName)
+{
+
+    DeviceList::iterator iter = _sourceList.begin();
+
+    while (iter != _sourceList.end()) {
+
+        if (*iter == deviceName) {
+            return true;
+        }
+
+        iter++;
+    }
+
+    return false;
+}
+
+
 bool PulseLayer::createStreams (pa_context* c)
 {
-    _info("Audio: Create streams");
+    _info ("Audio: Create streams");
+
+    // _debug("Device list size %d", getDevicelist()->size());
+
+    std::string playbackDevice =  _manager->audioPreference.getDevicePlayback();
+    std::string recordDevice =  _manager->audioPreference.getDeviceRecord();
+    std::string ringtoneDevice =  _manager->audioPreference.getDeviceRingtone();
+
+    _debug ("Audio: Device stored in config for playback: %s", playbackDevice.c_str());
+    _debug ("Audio: Device stored in config for record: %s", recordDevice.c_str());
+    _debug ("Audio: Device stored in config for ringtone: %s", ringtoneDevice.c_str());
 
     PulseLayerType * playbackParam = new PulseLayerType();
     playbackParam->context = c;
@@ -267,12 +517,19 @@ bool PulseLayer::createStreams (pa_context* c)
     playbackParam->mainloop = m;
 
     playback = new AudioStream (playbackParam, _audioSampleRate);
-    playback->connectStream();
+
+    if (inSinkList (playbackDevice)) {
+        playback->connectStream (&playbackDevice);
+    } else {
+        playback->connectStream (NULL);
+    }
+
     pa_stream_set_write_callback (playback->pulseStream(), playback_callback, this);
     pa_stream_set_overflow_callback (playback->pulseStream(), playback_overflow_callback, this);
     pa_stream_set_underflow_callback (playback->pulseStream(), playback_underflow_callback, this);
     // pa_stream_set_suspended_callback(playback->pulseStream(), stream_suspended_callback, this);
-    // pa_stream_set_moved_callback(playback->pulseStream(), stream_moved_callback, this);
+    pa_stream_set_moved_callback (playback->pulseStream(), stream_moved_callback, this);
+    pa_stream_set_latency_update_callback (playback->pulseStream(), latency_update_callback, this);
     delete playbackParam;
 
     PulseLayerType * recordParam = new PulseLayerType();
@@ -283,12 +540,38 @@ bool PulseLayer::createStreams (pa_context* c)
     recordParam->mainloop = m;
 
     record = new AudioStream (recordParam, _audioSampleRate);
-    record->connectStream();
+
+    if (inSourceList (recordDevice)) {
+        record->connectStream (&recordDevice);
+    } else {
+        record->connectStream (NULL);
+    }
+
     pa_stream_set_read_callback (record->pulseStream() , capture_callback, this);
     // pa_stream_set_suspended_callback(record->pulseStream(), stream_suspended_callback, this);
-    // pa_stream_set_moved_callback(record->pulseStream(), stream_moved_callback, this);
+    pa_stream_set_moved_callback (record->pulseStream(), stream_moved_callback, this);
+    pa_stream_set_latency_update_callback (record->pulseStream(), latency_update_callback, this);
     delete recordParam;
 
+    PulseLayerType * ringtoneParam = new PulseLayerType();
+    ringtoneParam->context = c;
+    ringtoneParam->type = RINGTONE_STREAM;
+    ringtoneParam->description = RINGTONE_STREAM_NAME;
+    ringtoneParam->volume = _manager->getSpkrVolume();
+    ringtoneParam->mainloop = m;
+
+    ringtone = new AudioStream (ringtoneParam, _audioSampleRate);
+
+    if (inSourceList (ringtoneDevice)) {
+        ringtone->connectStream (&ringtoneDevice);
+    } else {
+        ringtone->connectStream (NULL);
+    }
+
+    pa_stream_set_write_callback (ringtone->pulseStream(), ringtone_callback, this);
+    pa_stream_set_moved_callback (ringtone->pulseStream(), stream_moved_callback, this);
+    delete ringtoneParam;
+
     pa_threaded_mainloop_signal (m , 0);
 
     flushMain();
@@ -300,7 +583,7 @@ bool PulseLayer::createStreams (pa_context* c)
 
 bool PulseLayer::disconnectAudioStream (void)
 {
-    _info("Audio: Disconnect audio stream");
+    _info ("Audio: Disconnect audio stream");
 
     closePlaybackStream();
     closeCaptureStream();
@@ -315,6 +598,10 @@ bool PulseLayer::disconnectAudioStream (void)
 void PulseLayer::closeCaptureStream (void)
 {
     if (record) {
+
+        std::string deviceName (pa_stream_get_device_name (record->pulseStream()));
+        _debug ("Audio: record device to be stored in config: %s", deviceName.c_str());
+        _manager->audioPreference.setDeviceRecord (deviceName);
         delete record;
         record=NULL;
     }
@@ -324,9 +611,20 @@ void PulseLayer::closeCaptureStream (void)
 void PulseLayer::closePlaybackStream (void)
 {
     if (playback) {
+        std::string deviceName (pa_stream_get_device_name (playback->pulseStream()));
+        _debug ("Audio: playback device to be stored in config: %s", deviceName.c_str());
+        _manager->audioPreference.setDevicePlayback (deviceName);
         delete playback;
         playback=NULL;
     }
+
+    if (ringtone) {
+        std::string deviceName (pa_stream_get_device_name (ringtone->pulseStream()));
+        _debug ("Audio: ringtone device to be stored in config: %s", deviceName.c_str());
+        _manager->audioPreference.setDeviceRingtone (deviceName);
+        delete ringtone;
+        ringtone  = NULL;
+    }
 }
 
 
@@ -339,20 +637,13 @@ int PulseLayer::canGetMic()
 }
 
 
-int PulseLayer::getMic (void *buffer, int toCopy)
-{
-    if (record) {
-        return 0;
-    } else
-        return 0;
-}
-
-
 void PulseLayer::startStream (void)
 {
+
     // Create Streams
-	if(!playback || !record)
-		createStreams(context);
+    if (!playback || !record)
+        createStreams (context);
+
 
     // Flush outside the if statement: every time start stream is
     // called is to notify a new event
@@ -367,19 +658,19 @@ void
 PulseLayer::stopStream (void)
 {
 
-	_info("Audio: Stop audio stream");
+    _info ("Audio: Stop audio stream");
 
-	pa_threaded_mainloop_lock (m);
+    pa_threaded_mainloop_lock (m);
 
-	if(playback)
-	    pa_stream_flush (playback->pulseStream(), NULL, NULL);
+    if (playback)
+        pa_stream_flush (playback->pulseStream(), NULL, NULL);
 
-	if(record)
-	    pa_stream_flush (record->pulseStream(), NULL, NULL);
+    if (record)
+        pa_stream_flush (record->pulseStream(), NULL, NULL);
 
-	pa_threaded_mainloop_unlock (m);
+    pa_threaded_mainloop_unlock (m);
 
-	disconnectAudioStream();
+    disconnectAudioStream();
 }
 
 
@@ -409,6 +700,19 @@ void PulseLayer::processCaptureData (void)
 
 }
 
+void PulseLayer::processRingtoneData (void)
+{
+    // handle ringtone playback
+    if (ringtone && (ringtone)->pulseStream() && (pa_stream_get_state (ringtone->pulseStream()) == PA_STREAM_READY)) {
+
+        // If the playback buffer is full, we don't overflow it; wait for it to have free space
+        if (pa_stream_writable_size (ringtone->pulseStream()) == 0)
+            return;
+
+        ringtoneToSpeaker();
+    }
+}
+
 
 void PulseLayer::processData (void)
 {
@@ -430,6 +734,13 @@ void PulseLayer::processData (void)
 
 }
 
+void PulseLayer::setNoiseSuppressState (bool state)
+{
+    // if a stream already opened
+    AudioLayer::_noisesuppressstate = state;
+
+}
+
 
 void PulseLayer::writeToSpeaker (void)
 {
@@ -444,7 +755,6 @@ void PulseLayer::writeToSpeaker (void)
     SFLDataFormat* out;// = (SFLDataFormat*)pa_xmalloc(framesPerBuffer);
     urgentAvailBytes = _urgentRingBuffer.AvailForGet();
 
-
     // available bytes to be written in pulseaudio internal buffer
     int writeableSize = pa_stream_writable_size (playback->pulseStream());
 
@@ -455,8 +765,11 @@ void PulseLayer::writeToSpeaker (void)
     if (urgentAvailBytes > writeableSize) {
 
         out = (SFLDataFormat*) pa_xmalloc (writeableSize);
+        memset (out, 0, writeableSize);
+
         _urgentRingBuffer.Get (out, writeableSize, 100);
 
+        // spkrFile->write ( (const char *) out, writeableSize);
         pa_stream_write (playback->pulseStream(), out, writeableSize, NULL, 0, PA_SEEK_RELATIVE);
 
         pa_xfree (out);
@@ -467,33 +780,25 @@ void PulseLayer::writeToSpeaker (void)
 
     } else {
 
+        // Get ringtone
         AudioLoop* tone = _manager->getTelephoneTone();
-        AudioLoop* file_tone = _manager->getTelephoneFile();
+
+        // We must test if data have been received from network in case of early media
+        normalAvailBytes = getMainBuffer()->availForGet();
 
         // flush remaining samples in _urgentRingBuffer
         flushUrgent();
 
-        if (tone != 0) {
+        if ( (tone != 0) && (normalAvailBytes <= 0)) {
 
             if (playback->getStreamState() == PA_STREAM_READY) {
 
                 out = (SFLDataFormat*) pa_xmalloc (writeableSize);
-                int copied = tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100);
-		
-                pa_stream_write (playback->pulseStream(), out, copied * sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
-
-                pa_xfree (out);
-
-            }
-        }
-
-        else if (file_tone != 0) {
-
-            if (playback->getStreamState() == PA_STREAM_READY) {
+                memset (out, 0, writeableSize);
 
-                out = (SFLDataFormat*) pa_xmalloc (writeableSize);
-                int copied = file_tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100);
+                int copied = tone->getNext (out, writeableSize / sizeof (SFLDataFormat), 100);
 
+                //spkrFile->write ( (const char *) out, copied*sizeof (SFLDataFormat));
                 pa_stream_write (playback->pulseStream(), out, copied * sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
 
                 pa_xfree (out);
@@ -506,9 +811,7 @@ void PulseLayer::writeToSpeaker (void)
 
             int maxNbBytesToGet = 0;
 
-
             // test if audio resampling is needed
-
             if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
                 // upsamplefactor is used to compute the number of bytes to get in the ring buffer
@@ -523,8 +826,6 @@ void PulseLayer::writeToSpeaker (void)
 
             }
 
-            normalAvailBytes = getMainBuffer()->availForGet();
-
             byteToGet = (normalAvailBytes < (int) (maxNbBytesToGet)) ? normalAvailBytes : maxNbBytesToGet;
 
             if (byteToGet) {
@@ -535,6 +836,7 @@ void PulseLayer::writeToSpeaker (void)
                     byteToGet = byteToGet-1;
 
                 out = (SFLDataFormat*) pa_xmalloc (maxNbBytesToGet);
+                memset (out, 0, maxNbBytesToGet);
 
                 getMainBuffer()->getData (out, byteToGet, 100);
 
@@ -542,6 +844,7 @@ void PulseLayer::writeToSpeaker (void)
                 if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
                     SFLDataFormat* rsmpl_out = (SFLDataFormat*) pa_xmalloc (writeableSize);
+                    memset (out, 0, writeableSize);
 
                     // Do sample rate conversion
                     int nb_sample_down = byteToGet / sizeof (SFLDataFormat);
@@ -549,28 +852,30 @@ void PulseLayer::writeToSpeaker (void)
                     int nbSample = _converter->upsampleData ( (SFLDataFormat*) out, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_down);
 
                     if ( (nbSample*sizeof (SFLDataFormat)) > (unsigned int) writeableSize)
-                        _warn("Audio: Error: nbsbyte exceed buffer length");
+                        _warn ("Audio: Error: nbsbyte exceed buffer length");
 
+                    // spkrFile->write ( (const char *) out, nbSample*sizeof (SFLDataFormat));
                     pa_stream_write (playback->pulseStream(), rsmpl_out, nbSample*sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
 
                     pa_xfree (rsmpl_out);
 
                 } else {
-
+                    // spkrFile->write ( (const char *) out, byteToGet);
                     pa_stream_write (playback->pulseStream(), out, byteToGet, NULL, 0, PA_SEEK_RELATIVE);
 
+
                 }
 
                 pa_xfree (out);
 
             } else {
 
-                if ( (tone == 0) && (file_tone == 0)) {
+                if (tone == 0) {
 
                     SFLDataFormat* zeros = (SFLDataFormat*) pa_xmalloc (writeableSize);
-
                     bzero (zeros, writeableSize);
 
+                    // spkrFile->write ( (const char *) zeros, writeableSize);
                     pa_stream_write (playback->pulseStream(), zeros, writeableSize, NULL, 0, PA_SEEK_RELATIVE);
 
                     pa_xfree (zeros);
@@ -596,10 +901,9 @@ void PulseLayer::readFromMic (void)
 
 
     if (pa_stream_peek (record->pulseStream() , (const void**) &data , &r) < 0 || !data) {
-        _warn("Audio: Error capture stream peek failed: %s" , pa_strerror (pa_context_errno (context)));
+        _warn ("Audio: Error capture stream peek failed: %s" , pa_strerror (pa_context_errno (context)));
     }
 
-
     if (data != 0) {
 
         int _mainBufferSampleRate = getMainBuffer()->getInternalSamplingRate();
@@ -608,25 +912,39 @@ void PulseLayer::readFromMic (void)
         if (_mainBufferSampleRate && ( (int) _audioSampleRate != _mainBufferSampleRate)) {
 
             SFLDataFormat* rsmpl_out = (SFLDataFormat*) pa_xmalloc (readableSize);
+            memset (rsmpl_out, 0, readableSize);
 
             int nbSample = r / sizeof (SFLDataFormat);
 
             int nb_sample_up = nbSample;
 
+            nbSample = _converter->downsampleData ( (SFLDataFormat *) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up);
 
-            nbSample = _converter->downsampleData ( (SFLDataFormat*) data, rsmpl_out, _mainBufferSampleRate, _audioSampleRate, nb_sample_up);
+            // captureRsmplFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat));
 
             // remove dc offset
-            dcblocker->filter_signal (rsmpl_out, nbSample);
+            _audiofilter->processAudio (rsmpl_out, nbSample*sizeof (SFLDataFormat));
+
+            // captureFilterFile->write ((const char *)rsmpl_out, nbSample*sizeof(SFLDataFormat));
 
-            getMainBuffer()->putData ( (void*) rsmpl_out, nbSample*sizeof (SFLDataFormat), 100);
+            getMainBuffer()->putData (rsmpl_out, nbSample*sizeof (SFLDataFormat), 100);
 
             pa_xfree (rsmpl_out);
 
         } else {
 
-            // no resampling required
-            getMainBuffer()->putData ( (void*) data, r, 100);
+
+            SFLDataFormat* filter_out = (SFLDataFormat*) pa_xmalloc (r);
+            memset (filter_out, 0, r);
+
+            // remove dc offset
+            _audiofilter->processAudio ( (SFLDataFormat *) data, filter_out, r);
+
+            // captureFile->write ( (const char *) filter_out, r);
+
+            getMainBuffer()->putData (filter_out, r, 100);
+
+            pa_xfree (filter_out);
         }
 
 
@@ -634,11 +952,48 @@ void PulseLayer::readFromMic (void)
     }
 
     if (pa_stream_drop (record->pulseStream()) < 0) {
-        _warn("Audio: Error: capture stream drop failed: %s" , pa_strerror( pa_context_errno( context) ));
+        _warn ("Audio: Error: capture stream drop failed: %s" , pa_strerror (pa_context_errno (context)));
     }
 
 }
 
+
+void PulseLayer::ringtoneToSpeaker (void)
+{
+    AudioLoop* file_tone = _manager->getTelephoneFile();
+
+    SFLDataFormat* out;
+
+    int writableSize = pa_stream_writable_size (ringtone->pulseStream());
+
+    if (file_tone) {
+
+        if (ringtone->getStreamState() == PA_STREAM_READY) {
+
+            out = (SFLDataFormat *) pa_xmalloc (writableSize);
+            memset (out, 0, writableSize);
+
+            int copied = file_tone->getNext (out, writableSize/sizeof (SFLDataFormat), 100);
+            pa_stream_write (ringtone->pulseStream(), out, copied*sizeof (SFLDataFormat), NULL, 0, PA_SEEK_RELATIVE);
+
+            pa_xfree (out);
+        }
+    } else {
+
+        if (ringtone->getStreamState() == PA_STREAM_READY) {
+
+            out = (SFLDataFormat*) pa_xmalloc (writableSize);
+            memset (out, 0, writableSize);
+
+            pa_stream_write (ringtone->pulseStream(), out, writableSize, NULL, 0, PA_SEEK_RELATIVE);
+
+            pa_xfree (out);
+        }
+    }
+
+
+}
+
 static void retrieve_server_info (pa_context *c UNUSED, const pa_server_info *i, void *userdata UNUSED)
 {
     _debug ("Server Info: Process owner : %s" , i->user_name);
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.h b/sflphone-common/src/audio/pulseaudio/pulselayer.h
index 8370e1e9f28aa8ebbe976afce7496d98a0ba913a..d06bec75b07fb5855692b9f3735ca92f50caf450 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.h
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.h
@@ -7,12 +7,12 @@
  *  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.
@@ -42,190 +42,257 @@
 
 #include <stdlib.h>
 
-#define PLAYBACK_STREAM_NAME	    "SFLphone out"
-#define CAPTURE_STREAM_NAME	    "SFLphone in"
+#include <list>
+#include <string>
+
+#define PLAYBACK_STREAM_NAME	    "SFLphone playback"
+#define CAPTURE_STREAM_NAME	    "SFLphone capture"
+#define RINGTONE_STREAM_NAME        "SFLphone ringtone"
 
 class RingBuffer;
 class ManagerImpl;
 
-class PulseLayer : public AudioLayer {
-  public:
-    PulseLayer(ManagerImpl* manager);
-    ~PulseLayer(void);
-
-    void openLayer( void );
-    
-    bool closeLayer( void );
-
-    /**
-     * Check if no devices are opened, otherwise close them.
-     * Then open the specified devices by calling the private functions open_device
-     * @param indexIn	The number of the card choosen for capture
-     * @param indexOut	The number of the card choosen for playback
-     * @param sampleRate  The sample rate 
-     * @param frameSize	  The frame size
-     * @param stream	  To indicate which kind of stream you want to open
-     *			  SFL_PCM_CAPTURE
-     *			  SFL_PCM_PLAYBACK
-     *			  SFL_PCM_BOTH
-     * @param plugin	  The alsa plugin ( dmix , default , front , surround , ...)
-     */
-    bool openDevice(int indexIn, int indexOut, int sampleRate, int frameSize , int stream, std::string plugin) ;
-
-    void startStream(void);
-
-    void stopStream(void);
-
-    /**
-     * Query the capture device for number of bytes available in the hardware ring buffer
-     * @return int The number of bytes available
-     */
-    int canGetMic();
-    
-    /**
-     * Get data from the capture device
-     * @param buffer The buffer for data
-     * @param toCopy The number of bytes to get
-     * @return int The number of bytes acquired ( 0 if an error occured)
-     */
-    int getMic(void *, int);
-    
-    static void overflow ( pa_stream* s, void* userdata );
-    static void underflow ( pa_stream* s, void* userdata );
-    static void stream_state_callback( pa_stream* s, void* user_data );	
-    static void context_state_callback( pa_context* c, void* user_data );
-    // static void stream_suspended_callback ( pa_stream* s, void* userdata );	
-
-    bool isCaptureActive (void){return true;}
-
-    /**
-     * UNUSED in pulseaudio layer
-     */
-    //std::vector<std::string> getSoundCardsInfo( int stream UNUSED ) { 
-      //std::vector<std::string> tmp;
-      //return tmp; 
-    //}
-
-    /**
-     * Reduce volume of every audio applications connected to the same sink
-     */
-    void reducePulseAppsVolume( void );
-    
-    /**
-     * Restore the volume of every audio applications connected to the same sink to PA_VOLUME_NORM
-     */
-    void restorePulseAppsVolume( void );
-
-    /**
-     * Set the volume of a sink. 
-     * @param index The index of the stream 
-     * @param channels	The stream's number of channels
-     * @param volume The new volume (between 0 and 100)
-     */
-    void setSinkVolume( int index, int channels, int volume );
-    void setSourceVolume( int index, int channels, int volume );
-
-    void setPlaybackVolume( int volume );
-    void setCaptureVolume( int volume );
-
-    /**
-     * Accessor
-     * @return AudioStream* The pointer on the playback AudioStream object
-     */
-    AudioStream* getPlaybackStream(){ return playback;}
-
-    /**
-     * Accessor
-     * @return AudioStream* The pointer on the record AudioStream object
-     */
-    AudioStream* getRecordStream(){ return record;}
-
-    int getSpkrVolume( void ) { return spkrVolume; }
-    void setSpkrVolume( int value ) { spkrVolume = value; }
-
-    int getMicVolume( void ) { return micVolume; }
-    void setMicVolume( int value ) { micVolume = value; }
-
-    void processPlaybackData( void );
-
-    void processCaptureData( void );
-
-    void processData(void);
-    
-  private:
-    // Copy Constructor
-    PulseLayer(const PulseLayer& rh);
-
-    // Assignment Operator
-    PulseLayer& operator=( const PulseLayer& rh);
-
-
-    /**
-     * Drop the pending frames and close the capture device
-     */
-    void closeCaptureStream( void );
-
-    /**
-     * Write data from the ring buffer to the harware and read data from the hardware
-     */
-    void readFromMic( void );
-    void writeToSpeaker( void );
-    
-    /**
-     * Create the audio streams into the given context
-     * @param c	The pulseaudio context
-     */ 
-    bool createStreams( pa_context* c );
-
-    /**
-     * Drop the pending frames and close the playback device
-     */
-    void closePlaybackStream( void );
-
-    /**
-     * Establishes the connection with the local pulseaudio server
-     */
-    void connectPulseAudioServer( void );
-
-    /**
-     * Close the connection with the local pulseaudio server
-     */
-    bool disconnectAudioStream( void );
-
-    /**
-     * Get some information about the pulseaudio server
-     */
-    void serverinfo( void );
-
-    /** PulseAudio context and asynchronous loop */
-    pa_context* context;
-    pa_threaded_mainloop* m;
-    
-    /**
-     * A stream object to handle the pulseaudio playback stream
-     */
-    AudioStream* playback;
-
-    /**
-     * A stream object to handle the pulseaudio capture stream
-     */
-    AudioStream* record;
-
-    /** Sample rate converter object */
-    SamplerateConverter * _converter;
-
-    bool is_started;
-
-    int spkrVolume;
-    int micVolume;
-
-    DcBlocker* dcblocker;
-
-    // private:
-
-public: 
+typedef std::list<std::string> DeviceList;
+
+class PulseLayer : public AudioLayer
+{
+    public:
+        PulseLayer (ManagerImpl* manager);
+        ~PulseLayer (void);
+
+        void openLayer (void);
+
+        bool closeLayer (void);
+
+        /**
+         * Check if no devices are opened, otherwise close them.
+         * Then open the specified devices by calling the private functions open_device
+         * @param indexIn	The number of the card chosen for capture
+         * @param indexOut	The number of the card chosen for playback
+         * @param sampleRate  The sample rate
+         * @param frameSize	  The frame size
+         * @param stream	  To indicate which kind of stream you want to open
+         *			  SFL_PCM_CAPTURE
+         *			  SFL_PCM_PLAYBACK
+         *			  SFL_PCM_BOTH
+         * @param plugin	  The alsa plugin ( dmix , default , front , surround , ...)
+         */
+        bool openDevice (int indexIn, int indexOut, int indexRing, int sampleRate, int frameSize , int stream, std::string plugin) ;
+
+        DeviceList* getSinkList (void) {
+            return &_sinkList;
+        }
+
+        DeviceList* getSourceList (void) {
+            return &_sourceList;
+        }
+
+        void updateSinkList (void);
+
+        void updateSourceList (void);
+
+        bool inSinkList (std::string deviceName);
+
+        bool inSourceList (std::string deviceName);
+
+        void startStream (void);
+
+        void stopStream (void);
+
+        /**
+         * Query the capture device for number of bytes available in the hardware ring buffer
+         * @return int The number of bytes available
+         */
+        int canGetMic();
+
+        static void overflow (pa_stream* s, void* userdata);
+        static void underflow (pa_stream* s, void* userdata);
+        static void stream_state_callback (pa_stream* s, void* user_data);
+        static void context_state_callback (pa_context* c, void* user_data);
+        // static void stream_suspended_callback ( pa_stream* s, void* userdata );
+
+        bool isCaptureActive (void) {
+            return true;
+        }
+
+        /**
+         * UNUSED in pulseaudio layer
+         */
+        //std::vector<std::string> getSoundCardsInfo( int stream UNUSED ) {
+        //std::vector<std::string> tmp;
+        //return tmp;
+        //}
+
+        /**
+         * Reduce volume of every audio applications connected to the same sink
+         */
+        void reducePulseAppsVolume (void);
+
+        /**
+         * Restore the volume of every audio applications connected to the same sink to PA_VOLUME_NORM
+         */
+        void restorePulseAppsVolume (void);
+
+        /**
+         * Set the volume of a sink.
+         * @param index The index of the stream
+         * @param channels	The stream's number of channels
+         * @param volume The new volume (between 0 and 100)
+         */
+        void setSinkVolume (int index, int channels, int volume);
+        void setSourceVolume (int index, int channels, int volume);
+
+        void setPlaybackVolume (int volume);
+        void setCaptureVolume (int volume);
+
+        /**
+         * Accessor
+         * @return AudioStream* The pointer on the playback AudioStream object
+         */
+        AudioStream* getPlaybackStream() {
+            return playback;
+        }
+
+        /**
+         * Accessor
+         * @return AudioStream* The pointer on the record AudioStream object
+         */
+        AudioStream* getRecordStream() {
+            return record;
+        }
+
+        /**
+         * Accessor
+         * @return AudioStream* The pointer on the ringtone AudioStream object
+         */
+        AudioStream* getRingtoneStream() {
+            return ringtone;
+        }
+
+        int getSpkrVolume (void) {
+            return spkrVolume;
+        }
+        void setSpkrVolume (int value) {
+            spkrVolume = value;
+        }
+
+        int getMicVolume (void) {
+            return micVolume;
+        }
+        void setMicVolume (int value) {
+            micVolume = value;
+        }
+
+        void processPlaybackData (void);
+
+        void processCaptureData (void);
+
+        void processRingtoneData (void);
+
+        void processData (void);
+
+        /**
+         * Get the noise suppressor state
+         * @return true if noise suppressor activated
+         */
+        bool getNoiseSuppressState (void) {
+            return AudioLayer::_noisesuppressstate;
+        }
+
+        /**
+         * Set the noise suppressor state
+         * @param state true if noise suppressor active, false elsewhere
+         */
+        void setNoiseSuppressState (bool state);
+
+    private:
+        // Copy Constructor
+        PulseLayer (const PulseLayer& rh);
+
+        // Assignment Operator
+        PulseLayer& operator= (const PulseLayer& rh);
+
+
+        /**
+         * Drop the pending frames and close the capture device
+         */
+        void closeCaptureStream (void);
+
+        /**
+         * Write data from the ring buffer to the harware and read data from the hardware
+         */
+        void readFromMic (void);
+        void writeToSpeaker (void);
+        void ringtoneToSpeaker (void);
+
+        /**
+         * Create the audio streams into the given context
+         * @param c	The pulseaudio context
+         */
+        bool createStreams (pa_context* c);
+
+        /**
+         * Drop the pending frames and close the playback device
+         */
+        void closePlaybackStream (void);
+
+        /**
+         * Establishes the connection with the local pulseaudio server
+         */
+        void connectPulseAudioServer (void);
+
+        /**
+         * Close the connection with the local pulseaudio server
+         */
+        bool disconnectAudioStream (void);
+
+        /**
+         * Get some information about the pulseaudio server
+         */
+        void serverinfo (void);
+
+        /** PulseAudio context and asynchronous loop */
+        pa_context* context;
+        pa_threaded_mainloop* m;
+
+        /**
+         * A stream object to handle the pulseaudio playback stream
+         */
+        AudioStream* playback;
+
+        /**
+         * A stream object to handle the pulseaudio capture stream
+         */
+        AudioStream* record;
+
+        /**
+         * A special stream object to handle specific playback stream for ringtone
+         */
+        AudioStream* ringtone;
+
+        /** Sample rate converter object */
+        SamplerateConverter * _converter;
+
+        bool is_started;
+
+        int spkrVolume;
+        int micVolume;
+
+
+        // ofstream *captureFile;
+        // ofstream *spkrFile;
+
+        DeviceList _sinkList;
+
+        DeviceList _sourceList;
+
+        // private:
+
+        int byteCounter;
+
+    public:
 
-    friend class AudioLayerTest;
+        friend class AudioLayerTest;
 };
 
 #endif // _PULSE_LAYER_H_
diff --git a/sflphone-common/src/audio/recordable.cpp b/sflphone-common/src/audio/recordable.cpp
index f8044c12a4f7376cd34851cc54c04a42393877f6..d0ed8bf1316fb16bda5a27daea514328ec18aa11 100644
--- a/sflphone-common/src/audio/recordable.cpp
+++ b/sflphone-common/src/audio/recordable.cpp
@@ -30,13 +30,13 @@
 #include "recordable.h"
 #include "manager.h"
 
-Recordable::Recordable()
+Recordable::Recordable() : recorder (&recAudio, Manager::instance().getMainBuffer())
 {
 
     FILE_TYPE fileType = FILE_WAV;
     SOUND_FORMAT soundFormat = INT16;
 
-    recAudio.setRecordingOption (fileType, soundFormat, 8000, Manager::instance().getConfigString (AUDIO, RECORD_PATH));
+    recAudio.setRecordingOption (fileType, soundFormat, 8000, Manager::instance().audioPreference.getRecordpath());
 }
 
 
@@ -48,10 +48,9 @@ Recordable::~Recordable()
 }
 
 
-void Recordable::initRecFileName()
+void Recordable::initRecFileName (std::string filename)
 {
-
-    recAudio.initFileName (getRecFileId());
+    recAudio.initFileName (filename);
 }
 
 
@@ -61,3 +60,5 @@ void Recordable::setRecordingSmplRate (int smplRate)
     recAudio.setSndSamplingRate (smplRate);
 
 }
+
+
diff --git a/sflphone-common/src/audio/recordable.h b/sflphone-common/src/audio/recordable.h
index 8ab5281cc9fe0509b8e33876bbf47455ecf32464..9a99724217bff8900de6e2a9a76c535a58afb2d4 100644
--- a/sflphone-common/src/audio/recordable.h
+++ b/sflphone-common/src/audio/recordable.h
@@ -1,7 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  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
@@ -10,7 +10,7 @@
  *  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.
@@ -30,44 +30,60 @@
 #ifndef RECORDABLE_H
 #define RECORDABLE_H
 
-#include "../plug-in/audiorecorder/audiorecord.h"
+#include "audiorecord.h"
+#include "audiorecorder.h"
 
-class Recordable {
+class Recordable
+{
 
     public:
 
         Recordable();
 
-	~Recordable();
-
-	bool isRecording(){ return recAudio.isRecording(); }
-
-	bool setRecording(){ return recAudio.setRecording(); }
-
-	void stopRecording(){ recAudio.stopRecording(); }
+        ~Recordable();
 
-	void initRecFileName();
+        /**
+         * Return recording state (true/false)
+         */
+        bool isRecording() {
+            return recAudio.isRecording();
+        }
 
-	void setRecordingSmplRate(int smplRate);
+        /**
+         * This method must be implemented for this interface as calls and conferences
+         * have different behavior.
+         */
+        virtual bool setRecording() = 0;
 
-	virtual std::string getRecFileId() = 0;
+        /**
+         * Stop recording
+         */
+        void stopRecording() {
+            recAudio.stopRecording();
+        }
 
-	// virtual std::string getFileName() = 0;
+        /**
+         * Init the recording file name according to path specified in configuration
+         */
+        void initRecFileName (std::string filename);
 
-	// std::string getFileName() { return _filename; }
+        /**
+         * Set recording sampling rate.
+         */
+        void setRecordingSmplRate (int smplRate);
 
-	/**
-	 * An instance of audio recorder
-	 */
-         AudioRecord recAudio;
+        virtual std::string getRecFileId() = 0;
 
+        // virtual std::string getFileName() = 0;
 
-    private:
+        // std::string getFileName() { return _filename; }
 
-	/** File name for his call : time YY-MM-DD */
-        // std::string _filename;
+        /**
+         * An instance of audio recorder
+         */
+        AudioRecord recAudio;
 
-        
+        AudioRecorder recorder;
 
 };
 
diff --git a/sflphone-common/src/audio/ringbuffer.cpp b/sflphone-common/src/audio/ringbuffer.cpp
index 5912a3d8b45493a445af96de6ef9c226e8bac747..8c2ecf44bbb6d3a59c4208c7421baa947893baa9 100644
--- a/sflphone-common/src/audio/ringbuffer.cpp
+++ b/sflphone-common/src/audio/ringbuffer.cpp
@@ -39,6 +39,7 @@
 #include "ringbuffer.h"
 #include "global.h"
 
+// corespond to 106 ms (about 5 rtp packets)
 #define MIN_BUFFER_SIZE	1280
 
 int RingBuffer::count_rb = 0;
@@ -108,6 +109,8 @@ RingBuffer::getLen (CallID call_id)
     int mStart = getReadPointer (call_id);
 
     int length = (mEnd + mBufferSize - mStart) % mBufferSize;
+
+
     // _debug("    *RingBuffer::getLen: buffer_id %s, call_id %s, mStart %i, mEnd %i, length %i, buffersie %i", buffer_id.c_str(), call_id.c_str(), mStart, mEnd, length, mBufferSize);
     return length;
 
@@ -176,8 +179,8 @@ RingBuffer::storeReadPointer (int pointer_value, CallID call_id)
 void
 RingBuffer::createReadPointer (CallID call_id)
 {
-
-    _readpointer.insert (pair<CallID, int> (call_id, mEnd));
+    if (!hasThisReadPointer (call_id))
+        _readpointer.insert (pair<CallID, int> (call_id, mEnd));
 
 }
 
@@ -185,11 +188,10 @@ RingBuffer::createReadPointer (CallID call_id)
 void
 RingBuffer::removeReadPointer (CallID call_id)
 {
+    ReadPointer::iterator iter = _readpointer.find (call_id);
 
-
-    _readpointer.erase (call_id);
-
-
+    if (iter != _readpointer.end())
+        _readpointer.erase (iter);
 }
 
 
@@ -220,7 +222,7 @@ RingBuffer::AvailForPut()
 {
     // Always keep 4 bytes safe (?)
 
-    return (mBufferSize-4) - putLen();
+    return mBufferSize - putLen();
 }
 
 // This one puts some data inside the ring buffer.
@@ -236,8 +238,8 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume)
     int len = putLen();
 
 
-    if (toCopy > (mBufferSize-4) - len)
-        toCopy = (mBufferSize-4) - len;
+    if (toCopy > mBufferSize - len)
+        toCopy = mBufferSize - len;
 
     src = (samplePtr) buffer;
 
@@ -250,7 +252,6 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume)
         block = toCopy;
 
         // Wrap block around ring ?
-
         if (block > (mBufferSize - pos)) {
             // Fill in to the end of the buffer
             block = mBufferSize - pos;
@@ -270,7 +271,7 @@ RingBuffer::Put (void* buffer, int toCopy, unsigned short volume)
         //fprintf(stderr, "has %d put %d\t", len, block);
         bcopy (src, mBuffer + pos, block);
 
-	  src += block;
+        src += block;
 
         pos = (pos + block) % mBufferSize;
 
@@ -314,7 +315,6 @@ RingBuffer::Get (void *buffer, int toCopy, unsigned short volume, CallID call_id
 
     int copied;
 
-
     int len = getLen (call_id);
 
 
diff --git a/sflphone-common/src/audio/ringbuffer.h b/sflphone-common/src/audio/ringbuffer.h
index 98110d62144f04095cf2014e5cefbd53efe644b4..b52cd3417c21f953cd85aeb47ca936547a89f484 100644
--- a/sflphone-common/src/audio/ringbuffer.h
+++ b/sflphone-common/src/audio/ringbuffer.h
@@ -33,123 +33,149 @@ typedef map<CallID, int> ReadPointer;
 
 static CallID default_id = "audiolayer_id";
 
-class RingBuffer {
-  public:
-    /**
-     * Constructor
-     * @param size  Size of the buffer to create
-     */
-    RingBuffer(int size, CallID call_id);
-
-    /**
-     * Destructor
-     */
-    ~RingBuffer();
-
-    CallID getBufferId(){ return buffer_id; }
+class RingBuffer
+{
+    public:
+        /**
+         * Constructor
+         * @param size  Size of the buffer to create
+         */
+        RingBuffer (int size, CallID call_id = default_id);
+
+        /**
+         * Destructor
+         */
+        ~RingBuffer();
+
+        CallID getBufferId() {
+            return buffer_id;
+        }
+
+        /**
+         * Reset the counters to 0 for this read pointer
+         */
+        void flush (CallID call_id = default_id);
+
+        void flushAll();
+
+        /**
+         * Get read pointer coresponding to this call
+         */
+        int getReadPointer (CallID call_id = default_id);
+
+        /**
+         * Get the whole readpointer list for this ringbuffer
+         */
+        ReadPointer* getReadPointerList() {
+            return &_readpointer;
+        }
+
+        /**
+         * Return the smalest readpointer. Usefull to evaluate if ringbuffer is full
+         */
+        int getSmallestReadPointer();
+
+        /**
+         * Move readpointer forward by pointer_value
+         */
+        void storeReadPointer (int pointer_value, CallID call_id = default_id);
+
+        /**
+         * Add a new readpointer for this ringbuffer
+         */
+        void createReadPointer (CallID call_id = default_id);
+
+        /**
+         * Remove a readpointer for this ringbuffer
+         */
+        void removeReadPointer (CallID call_id = default_id);
+
+        /**
+         * Test if readpointer coresponding to this call is still active
+         */
+        bool hasThisReadPointer (CallID call_id);
+
+        int getNbReadPointer();
+
+        /**
+         * To get how much space is available in the buffer to write in
+         * @return int The available size
+         */
+        int AvailForPut (void);
+
+        /**
+         * Write data in the ring buffer
+         * @param buffer Data to copied
+         * @param toCopy Number of bytes to copy
+         * @param volume The volume
+         * @return int Number of bytes copied
+         */
+        int Put (void* buffer, int toCopy, unsigned short volume = 100);
+
+        /**
+         * To get how much space is available in the buffer to read in
+         * @return int The available size
+         */
+        int AvailForGet (CallID call_id = default_id);
+
+        /**
+         * Get data in the ring buffer
+         * @param buffer Data to copied
+         * @param toCopy Number of bytes to copy
+         * @param volume The volume
+         * @return int Number of bytes copied
+         */
+        int Get (void* buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id);
+
+        /**
+         * Discard data from the buffer
+         * @param toDiscard Number of bytes to discard
+         * @return int Number of bytes discarded
+         */
+        int Discard (int toDiscard, CallID call_id = default_id);
+
+        /**
+         * Total length of the ring buffer
+         * @return int
+         */
+        int putLen();
+
+        int getLen (CallID call_id = default_id);
+
+        /**
+         * Debug function print mEnd, mStart, mBufferSize
+         */
+        void debug();
+
+    private:
+        // Copy Constructor
+        RingBuffer (const RingBuffer& rh);
+
+        // Assignment operator
+        RingBuffer& operator= (const RingBuffer& rh);
+
+        /** Pointer on the first data */
+        // int           mStart;
+        /** Pointer on the last data */
+        int           mEnd;
+        /** Buffer size */
+        int           mBufferSize;
+        /** Data */
+        samplePtr     mBuffer;
+
+        ReadPointer   _readpointer;
+
+        CallID buffer_id;
+
+    public:
+
+        friend class MainBufferTest;
+
+        std::fstream *buffer_input_rec;
+        std::fstream *buffer_output_rec;
+
+        static int count_rb;
 
-    /**
-     * Reset the counters to 0
-     */
-    void flush (CallID call_id = default_id);
-
-    void flushAll();
-
-    int getReadPointer(CallID call_id = default_id);
-
-    ReadPointer* getReadPointerList() { return &_readpointer; }
-
-    int getSmallestReadPointer();
-
-    void storeReadPointer(int pointer_value, CallID call_id = default_id);
-
-    void createReadPointer(CallID call_id = default_id);
-
-    void removeReadPointer(CallID call_id = default_id);
-
-    bool hasThisReadPointer(CallID call_id);
-
-    int getNbReadPointer();
-
-    /**
-     * To get how much space is available in the buffer to write in
-     * @return int The available size
-     */
-    int AvailForPut (void);
-
-    /**
-     * Write data in the ring buffer
-     * @param buffer Data to copied
-     * @param toCopy Number of bytes to copy
-     * @param volume The volume
-     * @return int Number of bytes copied
-     */
-    int Put (void* buffer, int toCopy, unsigned short volume = 100);
-
-    /**
-     * To get how much space is available in the buffer to read in
-     * @return int The available size
-     */
-    int AvailForGet (CallID call_id = default_id);
-
-    /**
-     * Get data in the ring buffer
-     * @param buffer Data to copied
-     * @param toCopy Number of bytes to copy
-     * @param volume The volume
-     * @return int Number of bytes copied
-     */
-    int Get (void* buffer, int toCopy, unsigned short volume = 100, CallID call_id = default_id);
-
-    /**
-     * Discard data from the buffer
-     * @param toDiscard Number of bytes to discard
-     * @return int Number of bytes discarded 
-     */
-    int Discard(int toDiscard, CallID call_id = default_id);
-
-    /**
-     * Total length of the ring buffer
-     * @return int  
-     */
-    int putLen();
-
-    int getLen(CallID call_id = default_id);
-    
-    /**
-     * Debug function print mEnd, mStart, mBufferSize
-     */
-    void debug();
-
-  private:
-    // Copy Constructor
-    RingBuffer(const RingBuffer& rh);
-
-    // Assignment operator
-    RingBuffer& operator=(const RingBuffer& rh);
-
-    /** Pointer on the first data */
-    // int           mStart;
-    /** Pointer on the last data */
-    int           mEnd;
-    /** Buffer size */
-    int           mBufferSize;
-    /** Data */
-    samplePtr     mBuffer;
-
-    ReadPointer   _readpointer;
-
-    CallID buffer_id;
-
-  public:
-
-    friend class MainBufferTest;
-
-    std::fstream *buffer_input_rec;
-    std::fstream *buffer_output_rec;
-
-    static int count_rb;
-    
 };
 
 
diff --git a/sflphone-common/src/audio/samplerateconverter.cpp b/sflphone-common/src/audio/samplerateconverter.cpp
index 320d70b5cd1396dc331267993d66230de828e45f..79cf8ae0fc794d33d44033f5fc9f81e5a5df722c 100644
--- a/sflphone-common/src/audio/samplerateconverter.cpp
+++ b/sflphone-common/src/audio/samplerateconverter.cpp
@@ -1,6 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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
@@ -30,20 +31,6 @@
 #include "samplerateconverter.h"
 #include "manager.h"
 
-SamplerateConverter::SamplerateConverter (void)
-        : _frequence (Manager::instance().getConfigInt (AUDIO , AUDIO_SAMPLE_RATE)) //44100
-        , _framesize (Manager::instance().getConfigInt (AUDIO , ALSA_FRAME_SIZE))
-        , _floatBufferDownMic (NULL)
-        , _floatBufferUpMic (NULL)
-        , _src_state_mic (NULL)
-        , _floatBufferDownSpkr (NULL)
-        , _floatBufferUpSpkr (NULL)
-        , _src_state_spkr (NULL)
-        , _src_err (0)
-{
-    init();
-}
-
 SamplerateConverter::SamplerateConverter (int freq , int fs)
         : _frequence (freq)
         , _framesize (fs)
@@ -61,19 +48,36 @@ SamplerateConverter::SamplerateConverter (int freq , int fs)
 SamplerateConverter::~SamplerateConverter (void)
 {
 
-    delete [] _floatBufferUpMic;
-    _floatBufferUpMic = NULL;
-    delete [] _floatBufferDownMic;
-    _floatBufferDownMic = NULL;
+    if (_floatBufferUpMic) {
+        delete [] _floatBufferUpMic;
+        _floatBufferUpMic = NULL;
+    }
+
+    if (_floatBufferDownMic) {
+        delete [] _floatBufferDownMic;
+        _floatBufferDownMic = NULL;
+    }
+
+    if (_floatBufferUpSpkr) {
+        delete [] _floatBufferUpSpkr;
+        _floatBufferUpSpkr = NULL;
+    }
 
-    delete [] _floatBufferUpSpkr;
-    _floatBufferUpSpkr = NULL;
-    delete [] _floatBufferDownSpkr;
-    _floatBufferDownSpkr = NULL;
+    if (_floatBufferDownSpkr) {
+        delete [] _floatBufferDownSpkr;
+        _floatBufferDownSpkr = NULL;
+    }
 
     // libSamplerateConverter-related
-    _src_state_mic  = src_delete (_src_state_mic);
-    _src_state_spkr = src_delete (_src_state_spkr);
+    if (_src_state_mic) {
+        _src_state_mic  = src_delete (_src_state_mic);
+        _src_state_mic = NULL;
+    }
+
+    if (_src_state_spkr) {
+        _src_state_spkr = src_delete (_src_state_spkr);
+        _src_state_spkr = NULL;
+    }
 }
 
 void SamplerateConverter::init (void)
diff --git a/sflphone-common/src/audio/samplerateconverter.h b/sflphone-common/src/audio/samplerateconverter.h
index 3a20105fae5f5303bc940ae19a5c1e8dbb72a8e0..f3616b65f12568a945bd6b2951cbca234dc2b747 100644
--- a/sflphone-common/src/audio/samplerateconverter.h
+++ b/sflphone-common/src/audio/samplerateconverter.h
@@ -1,7 +1,8 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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
@@ -10,7 +11,7 @@
  *  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.
@@ -36,75 +37,86 @@
 #include "global.h"
 
 
-class SamplerateConverter {
-	public:
-		/** Constructor */
-		SamplerateConverter( void );
-		SamplerateConverter( int freq , int fs );
-		/** Destructor */
-		~SamplerateConverter( void );
-
-		/** 
-		 * Upsample from the samplerate1 to the samplerate2
-		 * @param data  The data buffer
-		 * @param SamplerateConverter1 The lower sample rate
-		 * @param SamplerateConverter2 The higher sample rate
-		 * @param nbSamples	  The number of samples to process
-		 * @return int The number of samples after the operation
-		 */
-		int upsampleData( SFLDataFormat* dataIn , SFLDataFormat* dataOut , int samplerate1 , int samplerate2 , int nbSamples );
-
-		/**
-		 * Downsample from the samplerate1 to the samplerate2
-		 * @param data  The data buffer
-		 * @param SamplerateConverter1 The lower sample rate
-		 * @param SamplerateConverter2 The higher sample rate
-		 * @param nbSamples	  The number of samples to process
-		 * @return int The number of samples after the operation
-		 */
-		int downsampleData( SFLDataFormat* dataIn , SFLDataFormat* dataOut , int samplerate1 , int samplerate2 , int nbSamples );
-
-		int getFrequence( void ) { return _frequence; }
-
-		int getFramesize( void ) { return _framesize; } 
-
-		/**
-		 * Convert short table to floats for audio processing
-		 * @param in the input (short) array
-		 * @param out The resulting (float) array
-		 * @param len The number of elements in both tables
-		 */
-		void Short2FloatArray (const short *in, float *out, int len);
-
-
-	private:
-		// Copy Constructor
-		SamplerateConverter(const SamplerateConverter& rh);
-
-		// Assignment Operator
-		SamplerateConverter& operator=( const SamplerateConverter& rh);
-
-		void init( void );
-
-		/** Audio layer caracteristics */
-		int _frequence;
-		int _framesize;
-
-		/** Downsampled/Upsampled float buffers for the mic data processing */
-		float32* _floatBufferDownMic;
-		float32* _floatBufferUpMic;
-		/** libSamplerateConverter converter for outgoing voice */
-		SRC_STATE*    _src_state_mic;
-
-		/** Downsampled/Upsampled float buffers for the speaker data processing */
-		float32* _floatBufferDownSpkr;
-		float32* _floatBufferUpSpkr;
-		/** libSamplerateConverter converter for incoming voice */
-		SRC_STATE*    _src_state_spkr;
-		/** libSamplerateConverter error */
-		int _src_err;
-
-		
+class SamplerateConverter
+{
+    public:
+        /**
+         * Samplerate converter is used for several situation:
+        * streaming conversion (RTP, IAX), audiolayer conversion,
+        * audio files conversion. Parameters are used to compute
+        * internal buffer size. Converter must be reinitialized
+        * every time these parameters change
+        */
+        SamplerateConverter (int freq=44100, int frameSize=20);
+
+        /** Destructor */
+        ~SamplerateConverter (void);
+
+        /**
+         * Upsample from the samplerate1 to the samplerate2
+         * @param data  The data buffer
+         * @param SamplerateConverter1 The lower sample rate
+         * @param SamplerateConverter2 The higher sample rate
+         * @param nbSamples	  The number of samples to process
+         * @return int The number of samples after the operation
+         */
+        int upsampleData (SFLDataFormat* dataIn , SFLDataFormat* dataOut , int samplerate1 , int samplerate2 , int nbSamples);
+
+        /**
+         * Downsample from the samplerate1 to the samplerate2
+         * @param data  The data buffer
+         * @param SamplerateConverter1 The lower sample rate
+         * @param SamplerateConverter2 The higher sample rate
+         * @param nbSamples	  The number of samples to process
+         * @return int The number of samples after the operation
+         */
+        int downsampleData (SFLDataFormat* dataIn , SFLDataFormat* dataOut , int samplerate1 , int samplerate2 , int nbSamples);
+
+        int getFrequence (void) {
+            return _frequence;
+        }
+
+        int getFramesize (void) {
+            return _framesize;
+        }
+
+        /**
+         * Convert short table to floats for audio processing
+         * @param in the input (short) array
+         * @param out The resulting (float) array
+         * @param len The number of elements in both tables
+         */
+        void Short2FloatArray (const short *in, float *out, int len);
+
+
+    private:
+        // Copy Constructor
+        SamplerateConverter (const SamplerateConverter& rh);
+
+        // Assignment Operator
+        SamplerateConverter& operator= (const SamplerateConverter& rh);
+
+        void init (void);
+
+        /** Audio layer caracteristics */
+        int _frequence;
+        int _framesize;
+
+        /** Downsampled/Upsampled float buffers for the mic data processing */
+        float32* _floatBufferDownMic;
+        float32* _floatBufferUpMic;
+        /** libSamplerateConverter converter for outgoing voice */
+        SRC_STATE*    _src_state_mic;
+
+        /** Downsampled/Upsampled float buffers for the speaker data processing */
+        float32* _floatBufferDownSpkr;
+        float32* _floatBufferUpSpkr;
+        /** libSamplerateConverter converter for incoming voice */
+        SRC_STATE*    _src_state_spkr;
+        /** libSamplerateConverter error */
+        int _src_err;
+
+
 };
 
 #endif //_SAMPLE_RATE_H
diff --git a/sflphone-common/src/audio/sound/audiofile.cpp b/sflphone-common/src/audio/sound/audiofile.cpp
index 97c0d49c88202db677bf2c93baff03407f5465f3..a176d4b7e9ad87656bd10b1127a0af4b6f75b36e 100644
--- a/sflphone-common/src/audio/sound/audiofile.cpp
+++ b/sflphone-common/src/audio/sound/audiofile.cpp
@@ -33,27 +33,27 @@
  */
 #include "audiofile.h"
 #include "audio/codecs/codecDescriptor.h"
+#include "audio/samplerateconverter.h"
 #include <fstream>
 #include <math.h>
 #include <samplerate.h>
 #include <cstring>
 
-AudioFile::AudioFile()
-        : AudioLoop(),
-        _filename(),
-        _codec (NULL),
-        _start (false)
 
+
+RawFile::RawFile() : _filename()
+        , _codec (NULL)
 {
+    AudioFile::_start = false;
 }
 
-AudioFile::~AudioFile()
+RawFile::~RawFile()
 {
 }
 
 // load file in mono format
 bool
-AudioFile::loadFile (const std::string& filename, AudioCodec* codec , unsigned int sampleRate=8000)
+RawFile::loadFile (const std::string& filename, AudioCodec* codec , unsigned int sampleRate=8000)
 {
     _codec = codec;
 
@@ -175,3 +175,291 @@ AudioFile::loadFile (const std::string& filename, AudioCodec* codec , unsigned i
     return true;
 }
 
+
+
+
+WaveFile::WaveFile () : _byte_counter (0)
+        , _nb_channels (1)
+        , _file_size (0)
+        , _data_offset (0)
+        , _channels (0)
+        , _data_type (0)
+        , _file_rate (0)
+{
+    AudioFile::_start = false;
+}
+
+
+WaveFile::~WaveFile()
+{
+    _debug ("WaveFile: Destructor Called!");
+}
+
+
+
+bool WaveFile::openFile (const std::string& fileName, int audioSamplingRate)
+{
+    if (isFileExist (fileName)) {
+        openExistingWaveFile (fileName, audioSamplingRate);
+    }
+
+    return true;
+}
+
+
+
+bool WaveFile::closeFile()
+{
+
+    _file_stream.close();
+
+    return true;
+
+}
+
+
+bool WaveFile::isFileExist (const std::string& fileName)
+{
+    std::fstream fs (fileName.c_str(), std::ios_base::in);
+
+    if (!fs) {
+        _debug ("WaveFile: file \"%s\" doesn't exist", fileName.c_str());
+        return false;
+    }
+
+    _debug ("WaveFile: File \"%s\" exists", fileName.c_str());
+    return true;
+}
+
+
+bool WaveFile::isFileOpened()
+{
+
+    if (_file_stream.is_open()) {
+        _debug ("WaveFile: file is openened");
+        return true;
+    } else {
+        _debug ("WaveFile: file is not openend");
+        return false;
+    }
+}
+
+
+bool WaveFile::openExistingWaveFile (const std::string& fileName, int audioSamplingRate)
+{
+
+    _debug ("WaveFile: Opening %s", fileName.c_str());
+
+    _file_stream.open (fileName.c_str(), std::ios::in | std::ios::binary);
+
+    char riff[4] = {};
+
+    _file_stream.read (riff, 4);
+
+    if (strncmp ("RIFF", riff, 4) != 0) {
+        _debug ("WaveFile: File is not of RIFF format");
+        return false;
+    }
+
+    // Find the "fmt " chunk
+    char fmt[4] = {};
+
+    while (strncmp ("fmt ", fmt, 4) != 0) {
+        _file_stream.read (fmt, 4);
+        _debug ("Searching... \"fmt \"");
+    }
+
+    SINT32 chunk_size;         // fmt chunk size
+    unsigned short format_tag; // data compression tag
+
+    _file_stream.read ( (char*) &chunk_size, 4); // Read fmt chunk size.
+    _file_stream.read ( (char*) &format_tag, 2);
+
+    _debug ("WaveFile: Chunk size: %d", chunk_size);
+    _debug ("WaveFile: Format tag: %d", format_tag);
+
+
+    if (format_tag != 1) { // PCM = 1, FLOAT = 3
+        _debug ("WaveFile: File contains an unsupported data format type");
+        return false;
+    }
+
+
+
+    // Get number of channels from the header.
+    SINT16 chan;
+    _file_stream.read ( (char*) &chan, 2);
+
+    _channels = chan;
+
+    _debug ("WaveFile: Channel %d", _channels);
+
+
+    // Get file sample rate from the header.
+    SINT32 srate;
+    _file_stream.read ( (char*) &srate, 4);
+
+    _file_rate = (double) srate;
+
+    _debug ("WaveFile: Sampling rate %d", srate);
+
+    SINT32 avgb;
+    _file_stream.read ( (char*) &avgb, 4);
+
+    _debug ("WaveFile: Average byte %d", avgb);
+
+    SINT16 blockal;
+    _file_stream.read ( (char*) &blockal, 2);
+
+    _debug ("WaveFile: Block alignment %d", blockal);
+
+
+    // Determine the data type
+    _data_type = 0;
+
+    SINT16 dt;
+    _file_stream.read ( (char*) &dt, 2);
+
+    _debug ("WaveFile: dt %d", dt);
+
+
+    if (format_tag == 1) {
+        if (dt == 8)
+            _data_type = 1; // SINT8;
+        else if (dt == 16)
+            _data_type = 2; // SINT16;
+        else if (dt == 32)
+            _data_type = 3; // SINT32;
+    }
+    /*
+      else if ( format_tag == 3 )
+      {
+        if (temp == 32)
+          dataType_ = FLOAT32;
+        else if (temp == 64)
+          dataType_ = FLOAT64;
+      }
+    */
+    else {
+        _debug ("WaveFile: File's bits per sample with is not supported");
+        return false;
+    }
+
+
+    // Find the "data" chunk
+    char data[4] = {};
+
+    while (strncmp ("data", data, 4)) {
+        _file_stream.read (data, 4);
+        _debug ("Searching... data");
+    }
+
+
+    // Sample rate converter initialized with 88200 sample long
+    int converterSamples  = (srate > audioSamplingRate) ? srate : audioSamplingRate;
+    SamplerateConverter _converter (converterSamples, 2000);
+
+    int nbSampleMax = 512;
+
+    // Get length of data from the header.
+    SINT32 bytes;
+    _file_stream.read ( (char*) &bytes, 4);
+
+    _debug ("WaveFile: data size in byte %d", bytes);
+
+    _file_size = 8 * bytes / dt / _channels;  // sample frames
+
+    _debug ("WaveFile: data size in frame %ld", _file_size);
+
+    // Should not be longer than a minute
+    if (_file_size > (unsigned int) (60*srate))
+        _file_size = 60*srate;
+
+    SFLDataFormat *tempBuffer = new SFLDataFormat[_file_size];
+
+    if (!tempBuffer)
+        return false;
+
+    SFLDataFormat *tempBufferRsmpl = NULL;
+
+    _file_stream.read ( (char *) tempBuffer, _file_size*sizeof (SFLDataFormat));
+
+    // compute size of final buffer
+    int nbSample;
+
+    if (srate != audioSamplingRate) {
+        nbSample = (int) ( (float) _file_size * ( (float) audioSamplingRate / (float) srate));
+    } else
+        nbSample = _file_size;
+
+    int totalprocessed = 0;
+
+    // require resampling
+    if (srate != audioSamplingRate) {
+
+        // initialize remaining samples to process
+        int remainingSamples = _file_size;
+
+        tempBufferRsmpl = new SFLDataFormat[nbSample];
+
+        if (!tempBufferRsmpl)
+            return false;
+
+        SFLDataFormat *in = tempBuffer;
+        SFLDataFormat *out = tempBufferRsmpl;
+
+        while (remainingSamples > 0) {
+
+            int toProcess = remainingSamples > nbSampleMax ? nbSampleMax : remainingSamples;
+            int nbSamplesConverted = 0;
+
+            if (srate < audioSamplingRate) {
+                nbSamplesConverted = _converter.upsampleData (in, out, srate, audioSamplingRate, toProcess);
+            } else if (srate > audioSamplingRate) {
+                nbSamplesConverted = _converter.downsampleData (in, out, audioSamplingRate, srate, toProcess);
+            }
+
+            // nbSamplesConverted = nbSamplesConverted*2;
+
+            in += toProcess;
+            out += nbSamplesConverted;
+            remainingSamples -= toProcess;
+            totalprocessed += nbSamplesConverted;
+        }
+    }
+
+    // Init audio loop buffer info
+    _buffer = new SFLDataFormat[nbSample];
+
+    if (!_buffer)
+        return false;
+
+    _size = nbSample;
+    _sampleRate = (int) audioSamplingRate;
+
+    // Copy audio into audioloop
+    if (srate != audioSamplingRate)
+        memcpy ( (void *) _buffer, (void *) tempBufferRsmpl, nbSample*sizeof (SFLDataFormat));
+    else
+        memcpy ( (void *) _buffer, (void *) tempBuffer, nbSample*sizeof (SFLDataFormat));
+
+
+    _debug ("WaveFile: file successfully opened");
+
+    delete[] tempBuffer;
+
+    if (tempBufferRsmpl)
+        delete[] tempBufferRsmpl;
+
+    return true;
+
+}
+
+
+bool WaveFile::loadFile (const std::string& filename, AudioCodec *codec , unsigned int sampleRate)
+{
+
+    openFile (filename, sampleRate);
+
+    return true;
+}
diff --git a/sflphone-common/src/audio/sound/audiofile.h b/sflphone-common/src/audio/sound/audiofile.h
index 3b788341e670deaf70874ea5a7a14af28023167a..246808fdf8fbe4a8229102595ffff74e2601db42 100644
--- a/sflphone-common/src/audio/sound/audiofile.h
+++ b/sflphone-common/src/audio/sound/audiofile.h
@@ -2,10 +2,10 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *
- *  Inspired by tonegenerator of 
+ *  Inspired by tonegenerator of
  *   Laurielle Lea <laurielle.lea@savoirfairelinux.com> (2004)
  *  Inspired by ringbuffer of Audacity Project
- * 
+ *
  *  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
@@ -34,70 +34,156 @@
 #ifndef __AUDIOFILE_H__
 #define __AUDIOFILE_H__
 
+#include <fstream>
+
 #include "audio/audioloop.h"
 #include "audio/codecs/audiocodec.h"
 #include "audio/codecs/codecDescriptor.h"
 
+
+/**
+ * @brief Abstract interface for file readers
+ */
+class AudioFile : public AudioLoop
+{
+    public:
+
+        /**
+        * Load a sound file in memory
+        * @param filename  The absolute path to the file
+        * @param codec     The codec to decode and encode it
+        * @param sampleRate	The sample rate to read it
+        * @return bool   True on success
+        */
+        virtual bool loadFile (const std::string& filename, AudioCodec *codec , unsigned int sampleRate) = 0;
+
+        /**
+         * Start the sound file
+         */
+        void start() {
+            _start = true;
+        }
+
+        /**
+         * Stop the sound file
+         */
+        void stop() {
+            _start = false;
+        }
+
+        /**
+         * Tells whether or not the file is playing
+         * @return bool True if yes
+         *		  false otherwise
+         */
+        bool isStarted() {
+            return _start;
+        }
+
+    protected:
+
+        /** start or not */
+        bool _start;
+};
+
+
+
 /**
  * @file audiofile.h
  * @brief A class to manage sound files
  */
 
-class AudioFile : public AudioLoop
+class RawFile : public AudioFile
+{
+    public:
+        /**
+         * Constructor
+         */
+        RawFile();
+
+        /**
+         * Destructor
+         */
+        ~RawFile();
+
+
+        /**
+         * Load a sound file in memory
+         * @param filename  The absolute path to the file
+         * @param codec     The codec to decode and encode it
+         * @param sampleRate	The sample rate to read it
+         * @return bool   True on success
+         */
+        virtual bool loadFile (const std::string& filename, AudioCodec *codec , unsigned int sampleRate);
+
+    private:
+        // Copy Constructor
+        RawFile (const RawFile& rh);
+
+        // Assignment Operator
+        RawFile& operator= (const RawFile& rh);
+
+        /** The absolute path to the sound file */
+        std::string _filename;
+
+        /** Your preferred codec */
+        AudioCodec* _codec;
+};
+
+
+class WaveFile : public AudioFile
 {
-public:
-  /**
-   * Constructor
-   */
-  AudioFile();
-  
-  /**
-   * Destructor
-   */
-  ~AudioFile();
-
-
-  /**
-   * Load a sound file in memory
-   * @param filename  The absolute path to the file
-   * @param codec     The codec to decode and encode it
-   * @param sampleRate	The sample rate to read it
-   * @return bool   True on success
-   */
-  bool loadFile(const std::string& filename, AudioCodec *codec , unsigned int sampleRate);
-  
-  /**
-   * Start the sound file
-   */
-  void start() { _start = true; }
-  
-  /**
-   * Stop the sound file
-   */
-  void stop()  { _start = false; }
-  
-  /**
-   * Tells whether or not the file is playing
-   * @return bool True if yes
-   *		  false otherwise
-   */
-  bool isStarted() { return _start; }
-
-private:
-  // Copy Constructor
-  AudioFile(const AudioFile& rh);
-
-  // Assignment Operator
-  AudioFile& operator=( const AudioFile& rh);
-
-  /** The absolute path to the sound file */
-  std::string _filename;
-  
-  /** Your preferred codec */ 
-  AudioCodec* _codec;
-  
-  /** Start or not */
-  bool _start;
+
+    public:
+
+        WaveFile ();
+
+        ~WaveFile();
+
+        bool openFile (const std::string& fileName, int audioSamplingRate);
+
+        bool closeFile();
+
+        bool isFileExist (const std::string& fileName);
+
+        bool isFileOpened();
+
+        /**
+             * Load a sound file in memory
+             * @param filename  The absolute path to the file
+             * @param codec     The codec to decode and encode it
+             * @param sampleRate	The sample rate to read it
+             * @return bool   True on success
+             */
+        virtual bool loadFile (const std::string& filename, AudioCodec *codec , unsigned int sampleRate);
+
+    private:
+
+        bool setWaveFile();
+
+        bool openExistingWaveFile (const std::string& fileName, int audioSamplingRate);
+
+        SOUND_FORMAT _snd_format;
+
+        long _byte_counter;
+
+        int _nb_channels;
+
+        unsigned long _file_size;
+
+        unsigned long _data_offset;
+
+        SINT16 _channels;
+
+        SOUND_FORMAT _data_type;
+
+        double _file_rate;
+
+        std::fstream _file_stream;
+
+        std::string _fileName;
+
 };
 
-#endif // __AUDIOFILE_H__
+#endif
+
diff --git a/sflphone-common/src/audio/sound/dtmf.h b/sflphone-common/src/audio/sound/dtmf.h
index 155eca3a412d02457810ebf050a80644468378dd..41609cec66765b62c462750962ac93ba298b03b2 100644
--- a/sflphone-common/src/audio/sound/dtmf.h
+++ b/sflphone-common/src/audio/sound/dtmf.h
@@ -1,7 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author : Yan Morin <yan.morin@savoirfairelinux.com>
- *  Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com> 
+ *  Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
  *
  * 	Portions Copyright (c) 2000 Billy Biggs <bbiggs@div8.net>
  *  Portions Copyright (c) 2004 Wirlab <kphone@wirlab.net>
@@ -42,36 +42,37 @@
  * @file dtmf.h
  * @brief DMTF library to generate a dtmf sample
  */
-class DTMF {
-  public:
-    /**
-     * Create a new DTMF.
-     * @param sampleRate frequency of the sample (ex: 8000 hz)
-     */
-    DTMF (unsigned int sampleRate);
-    
-   /**
-    * Destructor
-    */ 
-    ~DTMF (void);
+class DTMF
+{
+    public:
+        /**
+         * Create a new DTMF.
+         * @param sampleRate frequency of the sample (ex: 8000 hz)
+         */
+        DTMF (unsigned int sampleRate);
 
-    /**
-     * Start the done for th given dtmf
-     * @param code  The DTMF code
-     */
-    void startTone(char code);
-    
-    /**
-     * Copy the sound inside the sampling* buffer 
-     * @param buffer : a SFLDataFormat* buffer
-     * @param n      : The size to generate
-     */
-    bool generateDTMF	(SFLDataFormat* buffer, size_t n);
+        /**
+         * Destructor
+         */
+        ~DTMF (void);
 
-    char currentTone;
-    char newTone;
+        /**
+         * Start the done for th given dtmf
+         * @param code  The DTMF code
+         */
+        void startTone (char code);
 
-    DTMFGenerator dtmfgenerator;
+        /**
+         * Copy the sound inside the sampling* buffer
+         * @param buffer : a SFLDataFormat* buffer
+         * @param n      : The size to generate
+         */
+        bool generateDTMF	(SFLDataFormat* buffer, size_t n);
+
+        char currentTone;
+        char newTone;
+
+        DTMFGenerator dtmfgenerator;
 };
 
 #endif // __KEY_DTMF_H_
diff --git a/sflphone-common/src/audio/sound/dtmfgenerator.h b/sflphone-common/src/audio/sound/dtmfgenerator.h
index 5fa095f0fc0edff600a5171f8300e4624575cd3e..84423b7853f0245f1f56ad9a336d66f872d74917 100644
--- a/sflphone-common/src/audio/sound/dtmfgenerator.h
+++ b/sflphone-common/src/audio/sound/dtmfgenerator.h
@@ -1,7 +1,7 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  * Author: Yan Morin <yan.morin@savoirfairelinux.com>
- * Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com> 
+ * Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
  *
  * Portions (c) 2003 iptel.org
  *
@@ -9,12 +9,12 @@
  * under the terms of the GNU Library 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 Library General Public
  * License for more details.
- * 
+ *
  * You should have received a copy of the GNU Library General Public License
  * along with this library; see the file COPYING.LIB.  If not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
@@ -49,113 +49,113 @@
  */
 class DTMFException : public std::exception
 {
-  private:
- 
-    /** Message */
-    const char* reason;
-  public:
-    /**
-     * Constructor
-     * @param _reason An error message
-     */
-    DTMFException(const char* _reason) throw();
-
-    /**
-     * Destructor
-     */
-    virtual ~DTMFException() throw();
-/*
-    // Copy Constructor
-    DTMFException(const DTMFException& rh) throw();
-
-    // Assignment Operator
-    DTMFException& operator=( const DTMFException& rh) throw();
-*/ 
-    /**
-     * @return const char* The error
-     */
-    virtual const char* what() const throw();
+    private:
+
+        /** Message */
+        const char* reason;
+    public:
+        /**
+         * Constructor
+         * @param _reason An error message
+         */
+        DTMFException (const char* _reason) throw();
+
+        /**
+         * Destructor
+         */
+        virtual ~DTMFException() throw();
+        /*
+            // Copy Constructor
+            DTMFException(const DTMFException& rh) throw();
+
+            // Assignment Operator
+            DTMFException& operator=( const DTMFException& rh) throw();
+        */
+        /**
+         * @return const char* The error
+         */
+        virtual const char* what() const throw();
 };
 
 /*
  * @file dtmfgenerator.h
  * @brief DTMF Tone Generator
  */
-class DTMFGenerator 
+class DTMFGenerator
 {
-  private:
-    /** Struct to handle a DTMF */
-    struct DTMFTone {
-      unsigned char code; /** Code of the tone */
-      int lower;          /** Lower frequency */
-      int higher;         /** Higher frequency */
-    };
-
-     /** State of the DTMF generator */
-    struct DTMFState {
-      unsigned int offset;   /** Offset in the sample currently being played */
-      SFLDataFormat* sample;         /** Currently generated code */
-    };
-
-    /** State of the DTMF generator */
-    DTMFState state;
-    
-    /** The different kind of tones */
-    static const DTMFTone tones[NUM_TONES];
-
-    /** Generated samples */
-    SFLDataFormat* samples[NUM_TONES];  
-
-    /** Sampling rate of generated dtmf */
-    int _sampleRate;
-
-    /** A tone object */
-    Tone tone;
-
-  public:
-    /**
-     * DTMF Generator contains frequency of each keys
-     * and can build one DTMF.
-     * @param sampleRate frequency of the sample (ex: 8000 hz)
-     */
-    DTMFGenerator(unsigned int sampleRate);
-    
-    /**
-     * Destructor
-     */
-    ~DTMFGenerator();
-
-
-    // Copy Constructor
-    DTMFGenerator(const DTMFGenerator& rh);
-
-    // Assignment Operator
-    DTMFGenerator& operator=( const DTMFGenerator& rh);
-
-    /*
-     * Get n samples of the signal of code code
-     * @param buffer a SFLDataFormat pointer to an allocated buffer
-     * @param n      number of sampling to get, should be lower or equal to buffer size
-     * @param code   dtmf code to get sound
-     */
-    void getSamples(SFLDataFormat* buffer, size_t n, unsigned char code) throw (DTMFException);
-
-    /*
-     * Get next n samples (continues where previous call to
-     * genSample or genNextSamples stopped
-     * @param buffer a SFLDataFormat pointer to an allocated buffer 
-     * @param n      number of sampling to get, should be lower or equal to buffer size
-     */
-    void getNextSamples(SFLDataFormat* buffer, size_t n) throw (DTMFException);
-
-  private:
-
-    /**
-     * Generate samples for a specific dtmf code
-     * @param code The code
-     * @return SFLDataFormat* The generated data
-     */
-    SFLDataFormat* generateSample(unsigned char code) throw (DTMFException);
+    private:
+        /** Struct to handle a DTMF */
+        struct DTMFTone {
+            unsigned char code; /** Code of the tone */
+            int lower;          /** Lower frequency */
+            int higher;         /** Higher frequency */
+        };
+
+        /** State of the DTMF generator */
+        struct DTMFState {
+            unsigned int offset;   /** Offset in the sample currently being played */
+            SFLDataFormat* sample;         /** Currently generated code */
+        };
+
+        /** State of the DTMF generator */
+        DTMFState state;
+
+        /** The different kind of tones */
+        static const DTMFTone tones[NUM_TONES];
+
+        /** Generated samples */
+        SFLDataFormat* samples[NUM_TONES];
+
+        /** Sampling rate of generated dtmf */
+        int _sampleRate;
+
+        /** A tone object */
+        Tone tone;
+
+    public:
+        /**
+         * DTMF Generator contains frequency of each keys
+         * and can build one DTMF.
+         * @param sampleRate frequency of the sample (ex: 8000 hz)
+         */
+        DTMFGenerator (unsigned int sampleRate);
+
+        /**
+         * Destructor
+         */
+        ~DTMFGenerator();
+
+
+        // Copy Constructor
+        DTMFGenerator (const DTMFGenerator& rh);
+
+        // Assignment Operator
+        DTMFGenerator& operator= (const DTMFGenerator& rh);
+
+        /*
+         * Get n samples of the signal of code code
+         * @param buffer a SFLDataFormat pointer to an allocated buffer
+         * @param n      number of sampling to get, should be lower or equal to buffer size
+         * @param code   dtmf code to get sound
+         */
+        void getSamples (SFLDataFormat* buffer, size_t n, unsigned char code) throw (DTMFException);
+
+        /*
+         * Get next n samples (continues where previous call to
+         * genSample or genNextSamples stopped
+         * @param buffer a SFLDataFormat pointer to an allocated buffer
+         * @param n      number of sampling to get, should be lower or equal to buffer size
+         */
+        void getNextSamples (SFLDataFormat* buffer, size_t n) throw (DTMFException);
+
+    private:
+
+        /**
+         * Generate samples for a specific dtmf code
+         * @param code The code
+         * @return SFLDataFormat* The generated data
+         */
+        SFLDataFormat* generateSample (unsigned char code) throw (DTMFException);
 };
 
 #endif // DTMFGENERATOR_H
diff --git a/sflphone-common/src/audio/sound/tone.cpp b/sflphone-common/src/audio/sound/tone.cpp
index aaff9fa4f411278d18fb42144585b4132df63d0e..7a0ffe6de7a5de2c8808b4e2d6d5caa69396f17c 100644
--- a/sflphone-common/src/audio/sound/tone.cpp
+++ b/sflphone-common/src/audio/sound/tone.cpp
@@ -42,9 +42,9 @@
 #define TABLE_LENGTH 4096
 double TWOPI = 2 * M_PI;
 
-Tone::Tone (const std::string& definition, unsigned int sampleRate) : AudioLoop(), _sampleRate (sampleRate), _xhigher(0.0), _xlower(0.0)
+Tone::Tone (const std::string& definition, unsigned int sampleRate) : AudioLoop(), _sampleRate (sampleRate), _xhigher (0.0), _xlower (0.0)
 {
-	fillWavetable();
+    fillWavetable();
     genBuffer (definition); // allocate memory with definition parameter
 }
 
@@ -116,7 +116,7 @@ Tone::genBuffer (const std::string& definition)
             }
 
             // Generate SAMPLING_RATE samples of sinus, buffer is the result
-            _debug("genSin(%d, %d)", freq1, freq2);
+            _debug ("genSin(%d, %d)", freq1, freq2);
             genSin (bufferPos, freq1, freq2, count);
 
             // To concatenate the different buffers for each section.
@@ -143,67 +143,67 @@ Tone::genBuffer (const std::string& definition)
 void
 Tone::fillWavetable()
 {
-	double tableSize = (double)TABLE_LENGTH;
+    double tableSize = (double) TABLE_LENGTH;
 
-	for(int i = 0; i < TABLE_LENGTH; i++) {
-		_wavetable[i] = sin( ((double)i / (tableSize - 1.0)) * TWOPI );
-	}
+    for (int i = 0; i < TABLE_LENGTH; i++) {
+        _wavetable[i] = sin ( ( (double) i / (tableSize - 1.0)) * TWOPI);
+    }
 }
 
 double
-Tone::interpolate(double x)
+Tone::interpolate (double x)
 {
-	int xi_0, xi_1;
-	double yi_0, yi_1, A, B;
+    int xi_0, xi_1;
+    double yi_0, yi_1, A, B;
 
-	xi_0 = (int)x;
-	xi_1 = xi_0+1;
+    xi_0 = (int) x;
+    xi_1 = xi_0+1;
 
-	yi_0  =_wavetable[xi_0];
-	yi_1 = _wavetable[xi_1];
+    yi_0  =_wavetable[xi_0];
+    yi_1 = _wavetable[xi_1];
 
-	A = (x - xi_0);
-	B = 1.0 - A;
+    A = (x - xi_0);
+    B = 1.0 - A;
 
-	return A*yi_0 + B*yi_1;
+    return A*yi_0 + B*yi_1;
 }
 
 void
 Tone::genSin (SFLDataFormat* buffer, int frequency1, int frequency2, int nb)
 {
-	_xhigher = 0.0;
-	_xlower = 0.0;
+    _xhigher = 0.0;
+    _xlower = 0.0;
 
-	double sr = (double)_sampleRate;
-	double tableSize = (double)TABLE_LENGTH;
+    double sr = (double) _sampleRate;
+    double tableSize = (double) TABLE_LENGTH;
 
-	 double N_h = sr / (double) (frequency1);
-	 double N_l = sr / (double)  (frequency2);
+    double N_h = sr / (double) (frequency1);
+    double N_l = sr / (double) (frequency2);
 
-	 double dx_h = tableSize / N_h;
-	 double dx_l = tableSize / N_l;
+    double dx_h = tableSize / N_h;
+    double dx_l = tableSize / N_l;
 
-	 double x_h = _xhigher;
-	 double x_l = _xlower;
+    double x_h = _xhigher;
+    double x_l = _xlower;
 
-	 double amp = (double)SFLDataAmplitude;
+    double amp = (double) SFLDataAmplitude;
 
-	 for (int t = 0; t < nb; t ++) {
-		 buffer[t] = (int16)(amp*(interpolate(x_h) + interpolate(x_l)));
-		 x_h += dx_h;
-		 x_l += dx_l;
+    for (int t = 0; t < nb; t ++) {
+        buffer[t] = (int16) (amp* (interpolate (x_h) + interpolate (x_l)));
+        x_h += dx_h;
+        x_l += dx_l;
 
-		 if(x_h > tableSize) {
-			 x_h -= tableSize;
-		}
+        if (x_h > tableSize) {
+            x_h -= tableSize;
+        }
 
-		 if(x_l > tableSize) {
-			 x_l -= tableSize;
-		}
-	 }
+        if (x_l > tableSize) {
+            x_l -= tableSize;
+        }
+    }
 
-	 _xhigher = x_h;
-	 _xlower = x_l;
+    _xhigher = x_h;
+    _xlower = x_l;
 
 }
 
diff --git a/sflphone-common/src/audio/sound/tone.h b/sflphone-common/src/audio/sound/tone.h
index cc813603c7df5f8eba10a2203137e6d86bc40e4e..8ce8359774a36477412ae218d2eb7d959139ea3f 100644
--- a/sflphone-common/src/audio/sound/tone.h
+++ b/sflphone-common/src/audio/sound/tone.h
@@ -2,9 +2,9 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *
- *  Inspired by tonegenerator of 
+ *  Inspired by tonegenerator of
  *   Laurielle Lea <laurielle.lea@savoirfairelinux.com> (2004)
- * 
+ *
  *  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
@@ -45,65 +45,66 @@
  * @file tone.h
  * @brief Tone sample (dial, busy, ring, congestion)
  */
-class Tone : public AudioLoop {
-public:
-  /**
-   * Constructor
-   * @param definition String that contain frequency/time of the tone
-   * @param sampleRate SampleRating of audio tone
-   */
-  Tone(const std::string& definition, unsigned int sampleRate);
-  
-  /**
-   * Destructor 
-   */
-  ~Tone();
-
-  /** The different kind of tones */
-  enum TONEID {
-    TONE_DIALTONE = 0,
-    TONE_BUSY,
-    TONE_RINGTONE,
-    TONE_CONGESTION,
-    TONE_NULL
-  };
-
-  /**
-   * Add a simple or double sin to the buffer, it double the sin in stereo 
-   * @param buffer  The data
-   * @param frequency1 The first frequency
-   * @param frequency2	The second frequency
-   * @param nb are the number of int16 (mono) to generate
-   * by example nb=5 generate 10 int16, 5 for the left, 5 for the right
-   */
-  void genSin(SFLDataFormat* buffer, int frequency1, int frequency2, int nb);
-
-  /**
-   *
-   */
-  void fillWavetable(void);
-
-  /**
-   *
-   */
-  double interpolate(double x);
-
-
-private:
-
-  /**
-   * allocate the memory with the definition
-   * @param definition String that contain frequency/time of the tone.
-   */
-  void genBuffer(const std::string& definition);
-
-  /** Sample rate */
-  unsigned int _sampleRate;
-
-  double _wavetable[TABLE_LENGTH];
-
-  double _xhigher;
-  double _xlower;
+class Tone : public AudioLoop
+{
+    public:
+        /**
+         * Constructor
+         * @param definition String that contain frequency/time of the tone
+         * @param sampleRate SampleRating of audio tone
+         */
+        Tone (const std::string& definition, unsigned int sampleRate);
+
+        /**
+         * Destructor
+         */
+        ~Tone();
+
+        /** The different kind of tones */
+        enum TONEID {
+            TONE_DIALTONE = 0,
+            TONE_BUSY,
+            TONE_RINGTONE,
+            TONE_CONGESTION,
+            TONE_NULL
+        };
+
+        /**
+         * Add a simple or double sin to the buffer, it double the sin in stereo
+         * @param buffer  The data
+         * @param frequency1 The first frequency
+         * @param frequency2	The second frequency
+         * @param nb are the number of int16 (mono) to generate
+         * by example nb=5 generate 10 int16, 5 for the left, 5 for the right
+         */
+        void genSin (SFLDataFormat* buffer, int frequency1, int frequency2, int nb);
+
+        /**
+         *
+         */
+        void fillWavetable (void);
+
+        /**
+         *
+         */
+        double interpolate (double x);
+
+
+    private:
+
+        /**
+         * allocate the memory with the definition
+         * @param definition String that contain frequency/time of the tone.
+         */
+        void genBuffer (const std::string& definition);
+
+        /** Sample rate */
+        unsigned int _sampleRate;
+
+        double _wavetable[TABLE_LENGTH];
+
+        double _xhigher;
+        double _xlower;
 };
 
 #endif // __TONE_H__
diff --git a/sflphone-common/src/audio/sound/tonelist.h b/sflphone-common/src/audio/sound/tonelist.h
index 41c9e5f48c38c26995b701f3f84d2642e3d6dfbc..210a74c7938e821bd5cbc99ddaf5966d3a646814 100644
--- a/sflphone-common/src/audio/sound/tonelist.h
+++ b/sflphone-common/src/audio/sound/tonelist.h
@@ -2,9 +2,9 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *
- *  Inspired by tonegenerator of 
+ *  Inspired by tonegenerator of
  *   Laurielle Lea <laurielle.lea@savoirfairelinux.com> (2004)
- * 
+ *
  *  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
@@ -40,98 +40,102 @@
  * @file tonelist.h
  * @brief Manages the different kind of tones according to the country
  */
-class ToneList {
-public:
-  /**
-   * Constructor
-   */
-  ToneList();
-
-  /**
-   * Destructor
-   */
-  ~ToneList();
-
-
-  /** Countries */ 
-  enum COUNTRYID {
-    ZID_NORTH_AMERICA = 0,
-    ZID_FRANCE,
-    ZID_AUSTRALIA,
-    ZID_UNITED_KINGDOM,
-    ZID_SPAIN,
-    ZID_ITALY,
-    ZID_JAPAN
-  };
-
-  /**
-    * Get the string definition of a tone
-    * return the default country or default tone if id are invalid
-    * @param countryId	The country Id, see ToneList constructor for the list
-    * @param toneId  The toneId
-    * @return std::string A string definition of the tone
-    */
-  std::string getDefinition(COUNTRYID countryId, Tone::TONEID toneId);
-
-  /**
-   * Get the country id associate to a country name
-   * return the default country id if not found
-   * The default tone/country are set inside the ToneList constructor
-   * @param countryName countryName, see the ToneList constructor list
-   * @return COUNTRYID	Country Id or default Id
-   */
-  COUNTRYID getCountryId(const std::string& countryName);
-
-  /** @return int The number of tones */
-  int getNbTone() { return _nbTone; }
-
-private:
-
-  // Copy Constructor
-  ToneList(const ToneList& rh);
-
-  // Assignment Operator
-  ToneList& operator=( const ToneList& rh);
-
-  void initToneDefinition();
-  std::string _toneZone[TONE_NBCOUNTRY][TONE_NBTONE];
-  int _nbTone;
-  int _nbCountry;
-  COUNTRYID _defaultCountryId;
+class ToneList
+{
+    public:
+        /**
+         * Constructor
+         */
+        ToneList();
+
+        /**
+         * Destructor
+         */
+        ~ToneList();
+
+
+        /** Countries */
+        enum COUNTRYID {
+            ZID_NORTH_AMERICA = 0,
+            ZID_FRANCE,
+            ZID_AUSTRALIA,
+            ZID_UNITED_KINGDOM,
+            ZID_SPAIN,
+            ZID_ITALY,
+            ZID_JAPAN
+        };
+
+        /**
+          * Get the string definition of a tone
+          * return the default country or default tone if id are invalid
+          * @param countryId	The country Id, see ToneList constructor for the list
+          * @param toneId  The toneId
+          * @return std::string A string definition of the tone
+          */
+        std::string getDefinition (COUNTRYID countryId, Tone::TONEID toneId);
+
+        /**
+         * Get the country id associate to a country name
+         * return the default country id if not found
+         * The default tone/country are set inside the ToneList constructor
+         * @param countryName countryName, see the ToneList constructor list
+         * @return COUNTRYID	Country Id or default Id
+         */
+        COUNTRYID getCountryId (const std::string& countryName);
+
+        /** @return int The number of tones */
+        int getNbTone() {
+            return _nbTone;
+        }
+
+    private:
+
+        // Copy Constructor
+        ToneList (const ToneList& rh);
+
+        // Assignment Operator
+        ToneList& operator= (const ToneList& rh);
+
+        void initToneDefinition();
+        std::string _toneZone[TONE_NBCOUNTRY][TONE_NBTONE];
+        int _nbTone;
+        int _nbCountry;
+        COUNTRYID _defaultCountryId;
 };
 
 /**
  * @author Yan Morin <yan.morin@savoirfairelinux.com>
  */
-class TelephoneTone {
-public:
-  /** Initialize the toneList and set the current tone to null */
-  TelephoneTone(const std::string& countryName, unsigned int sampleRate);
-  ~TelephoneTone();
-
-
-  /** send TONE::ZT_TONE_NULL to stop the playing */
-  void setCurrentTone(Tone::TONEID toneId);
-
-  /** 
-    * @return the currentTone after setting it with setCurrentTone 
-    *         0 if the current tone is null
-    */
-  Tone* getCurrentTone();
-
-  /** @return true if you should play the tone (CurrentTone is not NULL) */
-  bool shouldPlay();
-
-private:
-  // Copy Constructor
-  TelephoneTone(const TelephoneTone& rh);
-
-  // Assignment Operator
-  TelephoneTone& operator=( const TelephoneTone& rh);
-  
-  Tone* _tone[TONE_NBTONE];
-  Tone::TONEID _currentTone;
-  ToneList _toneList;
+class TelephoneTone
+{
+    public:
+        /** Initialize the toneList and set the current tone to null */
+        TelephoneTone (const std::string& countryName, unsigned int sampleRate);
+        ~TelephoneTone();
+
+
+        /** send TONE::ZT_TONE_NULL to stop the playing */
+        void setCurrentTone (Tone::TONEID toneId);
+
+        /**
+          * @return the currentTone after setting it with setCurrentTone
+          *         0 if the current tone is null
+          */
+        Tone* getCurrentTone();
+
+        /** @return true if you should play the tone (CurrentTone is not NULL) */
+        bool shouldPlay();
+
+    private:
+        // Copy Constructor
+        TelephoneTone (const TelephoneTone& rh);
+
+        // Assignment Operator
+        TelephoneTone& operator= (const TelephoneTone& rh);
+
+        Tone* _tone[TONE_NBTONE];
+        Tone::TONEID _currentTone;
+        ToneList _toneList;
 };
 
 #endif
diff --git a/sflphone-common/src/audio/speexechocancel.cpp b/sflphone-common/src/audio/speexechocancel.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a85a4caccbefae407483d480746b72202beef973
--- /dev/null
+++ b/sflphone-common/src/audio/speexechocancel.cpp
@@ -0,0 +1,164 @@
+/*
+ *  Copyright (C) 2008 2009 Savoir-Faire Linux inc.
+ *  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.
+ */
+
+#include "speexechocancel.h"
+
+#include <fstream>
+
+// number of samples (20 ms)
+#define FRAME_SIZE 160
+// number of sample to process, (800 à 4000 samples, 100 to 500 ms)
+#define FILTER_LENGTH 800
+
+
+SpeexEchoCancel::SpeexEchoCancel()
+{
+    _debug ("EchoCancel: Instantiate echo canceller");
+
+    int samplingRate = 8000;
+
+    _echoState = speex_echo_state_init (FRAME_SIZE, FILTER_LENGTH);
+    _preState = speex_preprocess_state_init (FRAME_SIZE, samplingRate);
+
+    speex_echo_ctl (_echoState, SPEEX_ECHO_SET_SAMPLING_RATE, &samplingRate);
+    speex_preprocess_ctl (_preState, SPEEX_PREPROCESS_SET_ECHO_STATE, _echoState);
+
+    micFile = new ofstream ("micData", ofstream::binary);
+    echoFile = new ofstream ("echoData", ofstream::binary);
+    spkrFile = new ofstream ("spkrData", ofstream::binary);
+
+    _micData = new RingBuffer (10000);
+    _spkrData = new RingBuffer (10000);
+
+    _micData->createReadPointer();
+    _spkrData->createReadPointer();
+
+    _spkrStoped = true;
+}
+
+SpeexEchoCancel::~SpeexEchoCancel()
+{
+    _debug ("EchoCancel: Delete echo canceller");
+
+    speex_echo_state_destroy (_echoState);
+    _echoState = NULL;
+
+    speex_preprocess_state_destroy (_preState);
+    _preState = NULL;
+
+    delete _micData;
+    _micData = NULL;
+
+    delete _spkrData;
+    _spkrData = NULL;
+
+    micFile->close();
+    spkrFile->close();
+    echoFile->close();
+
+    delete micFile;
+    delete spkrFile;
+    delete echoFile;
+}
+
+void SpeexEchoCancel::reset()
+{
+
+}
+
+void SpeexEchoCancel::putData (SFLDataFormat *inputData, int nbBytes)
+{
+    // std::cout << "putData nbBytes: " << nbBytes << std::endl;
+
+    if (_spkrStoped) {
+        _micData->flushAll();
+        _spkrData->flushAll();
+        _spkrStoped = false;
+    }
+
+    // Put data in speaker ring buffer
+    _spkrData->Put (inputData, nbBytes);
+
+    // In case we use libspeex internal buffer
+    // (require capture and playback stream to be synchronized)
+    // speex_echo_playback(_echoState, inputData);
+}
+
+void SpeexEchoCancel::process (SFLDataFormat *data UNUSED, int nbBytes UNUSED) {}
+
+int SpeexEchoCancel::process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes)
+{
+
+    if (_spkrStoped) {
+        return 0;
+    }
+
+    int byteSize = FRAME_SIZE*2;
+
+    // init temporary buffers
+    memset (_tmpSpkr, 0, 5000);
+    memset (_tmpMic, 0, 5000);
+    memset (_tmpOut, 0, 5000);
+
+    // Put mic data in ringbuffer
+    _micData->Put (inputData, nbBytes);
+
+    // Store data for synchronization
+    int spkrAvail = _spkrData->AvailForGet();
+    int micAvail = _micData->AvailForGet();
+
+    // Init number of frame processed
+    int nbFrame = 0;
+
+    // Get data from mic and speaker
+    while ( (spkrAvail > byteSize) && (micAvail > byteSize)) {
+
+        // get synchronized data
+        _spkrData->Get (_tmpSpkr, byteSize);
+        _micData->Get (_tmpMic, byteSize);
+
+        speex_preprocess_run (_preState, _tmpMic);
+
+        micFile->write ( (const char *) _tmpMic, byteSize);
+        spkrFile->write ( (const char *) _tmpSpkr, byteSize);
+
+        // Processed echo cancellation
+        speex_echo_cancellation (_echoState, _tmpMic, _tmpSpkr, _tmpOut);
+
+        // speex_preprocess_run(_preState, _tmpOut);
+
+        bcopy (_tmpOut, outputData+ (nbFrame*FRAME_SIZE), byteSize);
+
+        echoFile->write ( (const char *) _tmpOut, byteSize);
+
+
+        spkrAvail = _spkrData->AvailForGet();
+        micAvail = _micData->AvailForGet();
+
+        // increment nb of frame processed
+        ++nbFrame;
+    }
+
+    return nbFrame * FRAME_SIZE;
+}
+
+void SpeexEchoCancel::process (SFLDataFormat *micData UNUSED, SFLDataFormat *spkrData UNUSED, SFLDataFormat *outputData UNUSED, int nbBytes UNUSED)
+{
+
+}
diff --git a/sflphone-common/src/audio/speexechocancel.h b/sflphone-common/src/audio/speexechocancel.h
new file mode 100644
index 0000000000000000000000000000000000000000..fd37cf2ae177360443d8bafafc3f6e5669ab4bb1
--- /dev/null
+++ b/sflphone-common/src/audio/speexechocancel.h
@@ -0,0 +1,86 @@
+/*
+ *  Copyright (C) 2008 2009 Savoir-Faire Linux inc.
+ *  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.
+ */
+
+#ifndef SPEEXECHOCANCEL_H
+#define SPEEXECHOCANCEL_H
+
+#include "audioprocessing.h"
+#include <speex/speex_echo.h>
+#include "speex/speex_preprocess.h"
+
+#include "ringbuffer.h"
+
+class SpeexEchoCancel : public Algorithm
+{
+
+    public:
+
+        SpeexEchoCancel();
+
+        ~SpeexEchoCancel();
+
+        virtual void reset (void);
+
+        /**
+         * Add speaker data into internal buffer
+         * \param inputData containing far-end voice data to be sent to speakers
+         */
+        virtual void putData (SFLDataFormat *inputData, int nbBytes);
+
+        /**
+         * Unused
+         */
+        virtual void process (SFLDataFormat *data, int nbBytes);
+
+        /**
+         * Perform echo cancellation using internal buffers
+         * \param inputData containing mixed echo and voice data
+         * \param outputData containing
+         */
+        virtual int process (SFLDataFormat *inputData, SFLDataFormat *outputData, int nbBytes);
+
+        /**
+         * Perform echo cancellation, application must provide its own buffer
+         * \param micData containing mixed echo and voice data
+         * \param spkrData containing far-end voice data to be sent to speakers
+         * \param outputData containing the processed data
+         */
+        virtual void process (SFLDataFormat *micData, SFLDataFormat *spkrData, SFLDataFormat *outputData, int nbBytes);
+
+    private:
+
+        SpeexEchoState *_echoState;
+
+        SpeexPreprocessState *_preState;
+
+        RingBuffer *_micData;
+        RingBuffer *_spkrData;
+
+        bool _spkrStoped;
+
+        SFLDataFormat _tmpSpkr[5000];
+        SFLDataFormat _tmpMic[5000];
+        SFLDataFormat _tmpOut[5000];
+
+        ofstream *micFile;
+        ofstream *spkrFile;
+        ofstream *echoFile;
+};
+
+#endif
diff --git a/sflphone-common/src/call.cpp b/sflphone-common/src/call.cpp
index 93e71226af15973500be6978febde563a6946d85..040d90c74ca1a3a69bb5897cb1c3ef947f7ae3a7 100644
--- a/sflphone-common/src/call.cpp
+++ b/sflphone-common/src/call.cpp
@@ -30,6 +30,7 @@
  */
 #include "call.h"
 #include "manager.h"
+#include "audio/mainbuffer.h"
 
 Call::Call (const CallID& id, Call::CallType type)
         : _callMutex()
@@ -184,3 +185,43 @@ Call::isAudioStarted()
     return _audioStarted;
 }
 
+
+bool
+Call::setRecording()
+{
+    _debug ("Call: Set recording");
+
+    bool recordStatus = Recordable::recAudio.isRecording();
+
+    Recordable::recAudio.setRecording();
+
+    // Start recording
+    if (!recordStatus) {
+
+        _debug ("Call: Call not recording yet, set ringbuffers");
+
+        MainBuffer *mbuffer = Manager::instance().getMainBuffer();
+        CallID process_id = Recordable::recorder.getRecorderID();
+
+        mbuffer->bindHalfDuplexOut (process_id, _id);
+        mbuffer->bindHalfDuplexOut (process_id);
+
+        Recordable::recorder.start();
+    }
+    // Stop recording
+    else {
+
+        _debug ("Call: Stop recording");
+
+        MainBuffer *mbuffer = Manager::instance().getMainBuffer();
+        CallID process_id = Recordable::recorder.getRecorderID();
+
+        mbuffer->unBindHalfDuplexOut (process_id, _id);
+        mbuffer->unBindHalfDuplexOut (process_id);
+
+    }
+
+    Manager::instance().getMainBuffer()->stateInfo();
+
+    return recordStatus;
+}
diff --git a/sflphone-common/src/call.h b/sflphone-common/src/call.h
index 6fcc87fd2f9908fb6b5bdbb744d80e927618a0be..712e60d58892b75ed745ff4334123df56de1d10e 100644
--- a/sflphone-common/src/call.h
+++ b/sflphone-common/src/call.h
@@ -35,7 +35,6 @@
 #include <cc++/thread.h> // for mutex
 #include <sstream>
 
-// #include "plug-in/audiorecorder/audiorecord.h"
 #include "audio/recordable.h"
 
 #define SIP_SCHEME       "sip:"
@@ -43,14 +42,15 @@
 
 #define CallConfigNULL   NULL
 
-/* 
- * @file call.h 
+/*
+ * @file call.h
  * @brief A call is the base class for protocol-based calls
  */
 
 typedef std::string CallID;
 
-class Call: public Recordable{
+class Call: public Recordable
+{
     public:
 
         /**
@@ -84,84 +84,103 @@ class Call: public Recordable{
          * @param id Unique identifier of the call
          * @param type set definitely this call as incoming/outgoing
          */
-        Call(const CallID& id, Call::CallType type);
+        Call (const CallID& id, Call::CallType type);
         virtual ~Call();
 
-        /** 
+        /**
          * Return a reference on the call id
          * @return call id
          */
-        CallID& getCallId() {return _id; }
+        CallID& getCallId() {
+            return _id;
+        }
 
-	/** 
-         * Return a reference on the conference id
-         * @return call id
-         */
-        CallID& getConfId() {return _confID; }
+        /**
+             * Return a reference on the conference id
+             * @return call id
+             */
+        CallID& getConfId() {
+            return _confID;
+        }
 
-	void setConfId(CallID id) {_confID = id; }
+        void setConfId (CallID id) {
+            _confID = id;
+        }
 
-        inline CallType getCallType (void)
-        {
+        inline CallType getCallType (void) {
             return _type;
         }
 
-        /** 
+        /**
          * Set the peer number (destination on outgoing)
          * not protected by mutex (when created)
          * @param number peer number
          */
-        void setPeerNumber(const std::string& number) {  _peerNumber = number; }
+        void setPeerNumber (const std::string& number) {
+            _peerNumber = number;
+        }
 
-        /** 
+        /**
          * Get the peer number (destination on outgoing)
          * not protected by mutex (when created)
          * @return std::string The peer number
          */
-        const std::string& getPeerNumber() {  return _peerNumber; }
+        const std::string& getPeerNumber() {
+            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; }
+        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
          */
-        const std::string& getPeerName() {  return _peerName; }
+        const std::string& getPeerName() {
+            return _peerName;
+        }
 
-	/** 
-         * Set the display name (caller in ingoing)
-         * not protected by mutex (when created)
-         * @return std::string The peer display name
-         */
-        void setDisplayName(const std::string& name) {  _displayName = name; }
+        /**
+             * Set the display name (caller in ingoing)
+             * not protected by mutex (when created)
+             * @return std::string The peer display name
+             */
+        void setDisplayName (const std::string& name) {
+            _displayName = name;
+        }
 
-	/** 
-         * Get the peer display name (caller in ingoing)
-         * not protected by mutex (when created)
-         * @return std::string The peer name
-         */
-        const std::string& getDisplayName() {  return _displayName; }
+        /**
+             * Get the peer display name (caller in ingoing)
+             * not protected by mutex (when created)
+             * @return std::string The peer name
+             */
+        const std::string& getDisplayName() {
+            return _displayName;
+        }
 
         /**
          * Tell if the call is incoming
          * @return true if yes
          *	      false otherwise
          */
-        bool isIncoming() { return (_type == Incoming) ? true : false; }
+        bool isIncoming() {
+            return (_type == Incoming) ? true : false;
+        }
 
-        /** 
+        /**
          * Set the connection state of the call (protected by mutex)
          * @param state The connection state
          */
-        void setConnectionState(ConnectionState state);
+        void setConnectionState (ConnectionState state);
 
-        /** 
+        /**
          * Get the connection state of the call (protected by mutex)
          * @return ConnectionState The connection state
          */
@@ -171,26 +190,30 @@ class Call: public Recordable{
          * Set the state of the call (protected by mutex)
          * @param state The call state
          */
-        void setState(CallState state);
+        void setState (CallState state);
 
-        /** 
+        /**
          * Get the call state of the call (protected by mutex)
          * @return CallState  The call state
          */
         CallState getState();
-        
+
         std::string getStateStr ();
 
-        void setCallConfiguration (Call::CallConfiguration callConfig) { _callConfig = callConfig; }
-        
-        Call::CallConfiguration getCallConfiguration (void) { return _callConfig; }
-        
+        void setCallConfiguration (Call::CallConfiguration callConfig) {
+            _callConfig = callConfig;
+        }
+
+        Call::CallConfiguration getCallConfiguration (void) {
+            return _callConfig;
+        }
+
         /**
          * Set the audio start boolean (protected by mutex)
          * @param start true if we start the audio
          *		    false otherwise
          */
-        void setAudioStart(bool start);
+        void setAudioStart (bool start);
 
         /**
          * Tell if the audio is started (protected by mutex)
@@ -199,45 +222,59 @@ class Call: public Recordable{
          */
         bool isAudioStarted();
 
-        /** 
-         * Set my IP [not protected] 
+        /**
+         * Set my IP [not protected]
          * @param ip  The local IP address
          */
-        void setLocalIp(const std::string& ip)     { _localIPAddress = ip; }
+        void setLocalIp (const std::string& ip)     {
+            _localIPAddress = ip;
+        }
 
-        /** 
+        /**
          * Set local audio port, as seen by me [not protected]
          * @param port  The local audio port
          */
-        void setLocalAudioPort(unsigned int port)  { _localAudioPort = port;}
+        void setLocalAudioPort (unsigned int port)  {
+            _localAudioPort = port;
+        }
 
-        /** 
+        /**
          * Set the audio port that remote will see.
          * @param port  The external audio port
          */
-        void setLocalExternAudioPort(unsigned int port) { _localExternalAudioPort = port; }
+        void setLocalExternAudioPort (unsigned int port) {
+            _localExternalAudioPort = port;
+        }
 
-        /** 
-         * Return the audio port seen by the remote side. 
+        /**
+         * Return the audio port seen by the remote side.
          * @return unsigned int The external audio port
          */
-        unsigned int getLocalExternAudioPort() { return _localExternalAudioPort; }
+        unsigned int getLocalExternAudioPort() {
+            return _localExternalAudioPort;
+        }
 
-        /** 
-         * Return my IP [mutex protected] 
+        /**
+         * Return my IP [mutex protected]
          * @return std::string The local IP
          */
         const std::string& getLocalIp();
 
-        /** 
-         * Return port used locally (for my machine) [mutex protected] 
+        /**
+         * Return port used locally (for my machine) [mutex protected]
          * @return unsigned int  The local audio port
          */
         unsigned int getLocalAudioPort();
 
-	std::string getRecFileId(){ return getPeerName(); }
+        std::string getRecFileId (void) {
+            return getPeerName();
+        }
+
+        std::string getFileName (void) {
+            return _peerNumber;
+        }
 
-	std::string getFileName() { return _filename; }
+        virtual bool setRecording (void);
 
     protected:
         /** Protect every attribute that can be changed by two threads */
@@ -257,13 +294,13 @@ class Call: public Recordable{
         unsigned int _localExternalAudioPort;
 
 
-    private:  
+    private:
 
         /** Unique ID of the call */
         CallID _id;
 
-	/** Unique conference ID, used exclusively in case of a conferece */
-	CallID _confID;
+        /** Unique conference ID, used exclusively in case of a conferece */
+        CallID _confID;
 
         /** Type of the call */
         CallType _type;
@@ -283,13 +320,13 @@ class Call: public Recordable{
         /** Number of the peer */
         std::string _peerNumber;
 
-	/** Display Name */
-	std::string _displayName;
+        /** Display Name */
+        std::string _displayName;
 
-	/** File name for his call : time YY-MM-DD */
+        /** File name for his call, should be peer number */
         std::string _filename;
 
-	
+
 };
 
 #endif
diff --git a/sflphone-common/src/conference.cpp b/sflphone-common/src/conference.cpp
index d93cf8a0a486b8a97ac08e233e04f02462b096d3..044b889f845afc9effc7f8ff14d87c4ba66acb88 100644
--- a/sflphone-common/src/conference.cpp
+++ b/sflphone-common/src/conference.cpp
@@ -34,6 +34,7 @@
 #include "conference.h"
 #include "manager.h"
 #include "audio/audiolayer.h"
+#include "audio/mainbuffer.h"
 
 int Conference::count = 0;
 
@@ -54,7 +55,7 @@ Conference::Conference()
     _nbParticipant = 0;
     _id = conf.append (s);
 
-
+    Recordable::initRecFileName (_id);
 
 }
 
@@ -157,3 +158,54 @@ ParticipantSet Conference::getParticipantList()
     return _participants;
 }
 
+
+
+bool Conference::setRecording()
+{
+
+    bool recordStatus = Recordable::recAudio.isRecording();
+
+    Recordable::recAudio.setRecording();
+
+    // start recording
+    if (!recordStatus) {
+
+        MainBuffer *mbuffer = Manager::instance().getMainBuffer();
+
+        ParticipantSet::iterator iter = _participants.begin();
+
+        CallID process_id = Recordable::recorder.getRecorderID();
+
+        while (iter != _participants.end()) {
+            mbuffer->bindHalfDuplexOut (process_id, *iter);
+            iter++;
+        }
+
+        mbuffer->bindHalfDuplexOut (process_id);
+
+        Recordable::recorder.start();
+
+    }
+    // stop recording
+    else {
+
+        MainBuffer *mbuffer = Manager::instance().getMainBuffer();
+
+        ParticipantSet::iterator iter = _participants.begin();
+
+        CallID process_id = Recordable::recorder.getRecorderID();
+
+        while (iter != _participants.end()) {
+            mbuffer->unBindHalfDuplexOut (process_id, *iter);
+            iter++;
+        }
+
+        mbuffer->unBindHalfDuplexOut (process_id);
+
+        // Recordable::recorder.start();
+
+    }
+
+    return recordStatus;
+
+}
diff --git a/sflphone-common/src/conference.h b/sflphone-common/src/conference.h
index a20a9a25842faf1ff97f13048f4a98d9b9902468..532c0abfcdb476b715819495b955d48c06729b0f 100644
--- a/sflphone-common/src/conference.h
+++ b/sflphone-common/src/conference.h
@@ -43,44 +43,53 @@ typedef std::string ConfID;
 
 typedef std::set<CallID> ParticipantSet;
 
-class Conference: public Recordable{
+class Conference: public Recordable
+{
 
     public:
 
         enum ConferenceState {Active_Atached, Active_Detached, Hold};
 
-	static int count;
+        static int count;
 
         Conference();
 
         ~Conference();
 
-	std::string getConfID() { return _id; }
+        std::string getConfID() {
+            return _id;
+        }
 
-	int getState();
+        int getState();
 
-	void setState(ConferenceState state);
+        void setState (ConferenceState state);
 
-	std::string getStateStr();
+        std::string getStateStr();
 
-	int getNbParticipants() { return _nbParticipant; }
+        int getNbParticipants() {
+            return _nbParticipant;
+        }
 
-	void add(CallID participant_id);
+        void add (CallID participant_id);
 
-	void remove(CallID participant_id);
+        void remove (CallID participant_id);
 
-	void bindParticipant(CallID participant_id);
+        void bindParticipant (CallID participant_id);
 
-	ParticipantSet getParticipantList();
+        ParticipantSet getParticipantList();
 
-	std::string getRecFileId(){ return getConfID(); }
+        std::string getRecFileId() {
+            return getConfID();
+        }
 
-    private:  
+        virtual bool setRecording();
+
+    private:
 
         /** Unique ID of the conference */
         CallID _id;
 
-	ConferenceState _confState;
+        ConferenceState _confState;
 
         ParticipantSet _participants;
 
diff --git a/sflphone-common/src/config/Makefile.am b/sflphone-common/src/config/Makefile.am
old mode 100644
new mode 100755
index d72225850fc3415ab1c5818cace8bc740401fe29..4d84e41e5949827722e41beb10127edf8d1bd7d8
--- a/sflphone-common/src/config/Makefile.am
+++ b/sflphone-common/src/config/Makefile.am
@@ -3,4 +3,21 @@ SUBDIRS =
 noinst_LTLIBRARIES = libconfig.la
 
 libconfig_la_SOURCES = \
-	config.cpp config.h
+	config.cpp \
+	yamlengine.cpp \
+	yamlemitter.cpp \
+	yamlparser.cpp \
+	yamlnode.cpp
+
+noinst_HEADERS = \
+	config.h \
+	engine.h \
+	serializable.h \
+	yamlengine.h \
+	yamlemitter.h \
+	yamlparser.h \
+	yamlnode.h
+
+libconfig_la_LDFLAGS = @yaml_LIBS@
+
+libconfig_la_CFLAGS = @yaml_CFLAGS@
\ No newline at end of file
diff --git a/sflphone-common/src/config/config.cpp b/sflphone-common/src/config/config.cpp
index 83bba767b1e7ff66891c2836485f68ddc7f8f966..f48d396d00481a9fa872f5e292b440d849cd9384 100644
--- a/sflphone-common/src/config/config.cpp
+++ b/sflphone-common/src/config/config.cpp
@@ -38,6 +38,7 @@
 #include <errno.h>
 #include <iostream>
 #include <string.h>
+#include "yamlparser.h"
 
 namespace Conf
 {
@@ -50,6 +51,7 @@ ConfigTree::ConfigTree() :_sections()
 // dtor
 ConfigTree::~ConfigTree()
 {
+
     // erase every new ItemMap (by CreateSection)
     SectionMap::iterator iter = _sections.begin();
 
@@ -210,14 +212,14 @@ ConfigTree::getConfigTreeItem (const std::string& section, const std::string& it
     SectionMap::iterator iter = _sections.find (section);
 
     if (iter == _sections.end()) {
-      // _error("ConfigTree: Error: Did not found section %s in config tree", section.c_str());
+        // _error("ConfigTree: Error: Did not found section %s in config tree", section.c_str());
         return NULL;
     }
 
     ItemMap::iterator iterItem = iter->second->find (itemName);
 
     if (iterItem == iter->second->end()) {
-      // _error("ConfigTree: Error: Did not found item %s in config tree", itemName.c_str());
+        // _error("ConfigTree: Error: Did not found item %s in config tree", itemName.c_str());
         return NULL;
     }
 
@@ -271,6 +273,8 @@ ConfigTree::setConfigTreeItem (const std::string& section,
 bool
 ConfigTree::saveConfigTree (const std::string& fileName)
 {
+    _debug ("ConfigTree: Save %s", fileName.c_str());
+
     if (fileName.empty() && _sections.begin() == _sections.end()) {
         return false;
     }
@@ -280,7 +284,7 @@ ConfigTree::saveConfigTree (const std::string& fileName)
     file.open (fileName.data(), std::fstream::out);
 
     if (!file.is_open()) {
-        _error("ConfigTree: Error: Could not open %s configuration file", fileName.c_str());
+        _error ("ConfigTree: Error: Could not open %s configuration file", fileName.c_str());
         return false;
     }
 
@@ -304,7 +308,7 @@ ConfigTree::saveConfigTree (const std::string& fileName)
     file.close();
 
     if (chmod (fileName.c_str(), S_IRUSR | S_IWUSR)) {
-        _error("ConfigTree: Error: Failed to set permission on configuration: %s",strerror (errno));
+        _error ("ConfigTree: Error: Failed to set permission on configuration: %s",strerror (errno));
     }
 
     return true;
@@ -319,6 +323,8 @@ ConfigTree::populateFromFile (const std::string& fileName)
 {
     bool out = false;
 
+    _debug ("ConfigTree: Populate from file %s", fileName.c_str());
+
     if (fileName.empty()) {
         return 0;
     }
@@ -378,15 +384,16 @@ ConfigTree::populateFromFile (const std::string& fileName)
                 if (key.length() > 0 && val.length() > 0) {
                     setConfigTreeItem (section, key, val);
                 }
-		/*
-		if (key.length() > 0) {
 
-		    if(val.length() > 0) 
-		        setConfigTreeItem (section, key, val);
-		    else
-		        setConfigTreeItem (section, key, "");
-                }
-		*/
+                /*
+                if (key.length() > 0) {
+
+                    if(val.length() > 0)
+                        setConfigTreeItem (section, key, val);
+                    else
+                        setConfigTreeItem (section, key, "");
+                        }
+                */
             }
         }
     }
diff --git a/sflphone-common/src/config/engine.h b/sflphone-common/src/config/engine.h
new file mode 100644
index 0000000000000000000000000000000000000000..c9c140a46e65e6efb37a5caa280d8b251f9f225e
--- /dev/null
+++ b/sflphone-common/src/config/engine.h
@@ -0,0 +1,51 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 __ENGINE_H__
+#define __ENGINE_H__
+
+#include <yaml.h>
+
+class Engine
+{
+
+    public:
+
+        virtual void open() = 0;
+
+        virtual void close() = 0;
+
+        virtual void write() = 0;
+
+        virtual void read() = 0;
+
+};
+
+#endif
diff --git a/sflphone-common/src/plug-in/audiorecorder/audiodsp.h b/sflphone-common/src/config/serializable.h
similarity index 69%
rename from sflphone-common/src/plug-in/audiorecorder/audiodsp.h
rename to sflphone-common/src/config/serializable.h
index bc2279494cb68f422ac02822bd6cb620d233ca77..bc37cb24c3a705f21afcc881168bb8926f036e9b 100644
--- a/sflphone-common/src/plug-in/audiorecorder/audiodsp.h
+++ b/sflphone-common/src/config/serializable.h
@@ -28,56 +28,28 @@
  *  as that of the covered work.
  */
 
-#ifndef _AUDIO_DSP_H
-#define _AUDIO_DSP_H
+#ifndef __SERIALIZABLE_H__
+#define __SERIALIZABLE_H__
 
-#include <math.h>
-#include <iostream>
-#include <string.h>
-#include <stdlib.h>
-#include <sstream>
 
-class AudioDSP
-{
-
-public:
- 
-   AudioDSP();
+#include "yamlparser.h"
+#include "yamlemitter.h"
+#include "yamlnode.h"
 
-   ~AudioDSP();
+class Engine;
+// class MappingNode;
 
-    /**
-     * Return rms value
-     */
-    float getRMS(int data);
+class Serializable
+{
 
-protected:
+    public:
 
-    /**
-     * Compute Rms value
-     */
-    float computeRMS();
+        virtual void serialize (Conf::YamlEmitter *emitter) = 0;
 
-    /**
-     * Internal buffer pointer
-     */
-    int bufPointer_;
+        virtual void unserialize (Conf::MappingNode *map) = 0;
 
-    /**
-     * Internal buffer length
-     */ 
-    int bufferLength_;
- 
-    /**
-     * Internal buffer to compute RMS
-     */
-    float* circBuffer_;
+    private:
 
-    /**
-     * Variable to compute RMS value
-     */ 
-    float rms;
-   
 };
 
-#endif // _AUDIO_DSP_H
+#endif
diff --git a/sflphone-common/src/config/yamlemitter.cpp b/sflphone-common/src/config/yamlemitter.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0f07f777538417112d7c1f6723238ef5f559e3cd
--- /dev/null
+++ b/sflphone-common/src/config/yamlemitter.cpp
@@ -0,0 +1,372 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "yamlemitter.h"
+#include <stdio.h>
+#include "../global.h"
+
+namespace Conf
+{
+
+YamlEmitter::YamlEmitter (const char *file) : filename (file), isFirstAccount (true)
+{
+    open();
+}
+
+YamlEmitter::~YamlEmitter()
+{
+    close();
+}
+
+void YamlEmitter::open()
+{
+
+    fd = fopen (filename.c_str(), "w");
+
+    if (!fd)
+        throw YamlEmitterException ("Could not open file descriptor");
+
+    if (!yaml_emitter_initialize (&emitter))
+        throw YamlEmitterException ("Could not initialize emitter");
+
+    // Allows unescaped unicode characters
+    yaml_emitter_set_unicode (&emitter, 1);
+
+    yaml_emitter_set_output_file (&emitter, fd);
+
+    if (!yaml_document_initialize (&document, NULL, NULL, NULL, 0, 0))
+        throw YamlEmitterException ("Could not initialize yaml document while saving configuration");
+
+    // Init the main configuration mapping
+    if ( (topLevelMapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not create top level mapping");
+}
+
+void YamlEmitter::close()
+{
+    // yaml_emitter_delete(&emitter);
+
+    if (!fd)
+        throw YamlEmitterException ("File descriptor not valid");
+
+
+    if (fclose (fd))
+        throw YamlEmitterException ("Error closing file descriptor");
+
+
+    _debug ("Config: Configuration file closed successfully");
+
+}
+
+void YamlEmitter::read() {}
+
+void YamlEmitter::write()
+{
+
+}
+
+void YamlEmitter::serializeData()
+{
+    // Document object is destroyed once its content is emitted
+    if (!yaml_emitter_dump (&emitter, &document))
+        throw YamlEmitterException ("Error while emitting configuration yaml document");
+}
+
+
+void YamlEmitter::serializeAccount (MappingNode *map)
+{
+
+    std::string accountstr ("accounts");
+
+    int accountid, accountmapping;
+
+    _debug ("YamlEmitter: Serialize account");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing account");
+
+    if (isFirstAccount) {
+        // accountSequence need to be static outside this scope since reused each time an account is written
+        if ( (accountid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) accountstr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+            throw YamlEmitterException ("Could not add preference scalar to document");
+
+        if ( (accountSequence = yaml_document_add_sequence (&document, NULL, YAML_BLOCK_SEQUENCE_STYLE)) == 0)
+            throw YamlEmitterException ("Could not add sequence to document");
+
+        if (!yaml_document_append_mapping_pair (&document, topLevelMapping, accountid, accountSequence))
+            throw YamlEmitterException ("Could not add mapping pair to top level mapping");
+
+        isFirstAccount = false;
+    }
+
+    if ( (accountmapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add account mapping to document");
+
+    if (!yaml_document_append_sequence_item (&document, accountSequence, accountmapping))
+        throw YamlEmitterException ("Could not append account mapping to sequence");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (accountmapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+void YamlEmitter::serializePreference (MappingNode *map)
+{
+    std::string preferencestr ("preferences");
+
+    int preferenceid, preferencemapping;
+
+    _debug ("YamlEmitter: Serialize preference");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing preferences");
+
+    if ( (preferenceid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add scalar to document");
+
+    if ( (preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add mapping to document");
+
+    if (!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping))
+        throw YamlEmitterException ("Could not add mapping pair to top leve mapping");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (preferencemapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+void YamlEmitter::serializeVoipPreference (MappingNode *map)
+{
+    std::string preferencestr ("voipPreferences");
+
+    int preferenceid, preferencemapping;
+
+    _debug ("YamlEmitter: Serialize voip preference");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing preferences");
+
+    if ( (preferenceid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add scalar to document");
+
+    if ( (preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add mapping to document");
+
+    if (!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping))
+        throw YamlEmitterException ("Could not add mapping pair to top leve mapping");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (preferencemapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+void YamlEmitter::serializeAddressbookPreference (MappingNode *map)
+{
+    std::string preferencestr ("addressbook");
+
+    int preferenceid, preferencemapping;
+
+    _debug ("YamlEmitter: Serialize addressbook preferences");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing preferences");
+
+    if ( (preferenceid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add scalar to document");
+
+    if ( (preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add mapping to document");
+
+    if (!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping))
+        throw YamlEmitterException ("Could not add mapping pair to top leve mapping");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (preferencemapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+void YamlEmitter::serializeHooksPreference (MappingNode *map)
+{
+    std::string preferencestr ("hooks");
+
+    int preferenceid, preferencemapping;
+
+    _debug ("YamlEmitter: Serialize hooks preferences");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing preferences");
+
+    if ( (preferenceid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add scalar to document");
+
+    if ( (preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add mapping to document");
+
+    if (!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping))
+        throw YamlEmitterException ("Could not add mapping pair to top leve mapping");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (preferencemapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+
+void YamlEmitter::serializeAudioPreference (MappingNode *map)
+{
+    std::string preferencestr ("audio");
+
+    int preferenceid, preferencemapping;
+
+    _debug ("YamlEmitter: Serialize hooks preferences");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing preferences");
+
+    if ( (preferenceid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add scalar to document");
+
+    if ( (preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add mapping to document");
+
+    if (!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping))
+        throw YamlEmitterException ("Could not add mapping pair to top leve mapping");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (preferencemapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+
+void YamlEmitter::serializeShortcutPreference (MappingNode *map)
+{
+    std::string preferencestr ("shortcuts");
+
+    int preferenceid, preferencemapping;
+
+    _debug ("YamlEmitter: Serialize shortcuts preferences");
+
+    if (map->getType() != MAPPING)
+        throw YamlEmitterException ("Node type is not a mapping while writing preferences");
+
+    if ( (preferenceid = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) preferencestr.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add scalar to document");
+
+    if ( (preferencemapping = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+        throw YamlEmitterException ("Could not add mapping to document");
+
+    if (!yaml_document_append_mapping_pair (&document, topLevelMapping, preferenceid, preferencemapping))
+        throw YamlEmitterException ("Could not add mapping pair to top leve mapping");
+
+    Mapping *internalmap = map->getMapping();
+    Mapping::iterator iter = internalmap->begin();
+
+    while (iter != internalmap->end()) {
+        addMappingItem (preferencemapping, iter->first, iter->second);
+        iter++;
+    }
+
+}
+
+
+void YamlEmitter::addMappingItem (int mappingid, Key key, YamlNode *node)
+{
+
+    if (node->getType() == SCALAR) {
+
+        int temp1, temp2;
+
+        ScalarNode *sclr = (ScalarNode *) node;
+
+        if ( (temp1 = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+            throw YamlEmitterException ("Could not add scalar to document");
+
+        if ( (temp2 = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) sclr->getValue().c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+            throw YamlEmitterException ("Could not add scalar to document");
+
+        if (!yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2))
+            throw YamlEmitterException ("Could not append mapping pair to mapping");
+
+    } else if (node->getType() == MAPPING) {
+
+        int temp1, temp2;
+
+        if ( (temp1 = yaml_document_add_scalar (&document, NULL, (yaml_char_t *) key.c_str(), -1, YAML_PLAIN_SCALAR_STYLE)) == 0)
+            throw YamlEmitterException ("Could not add scalar to document");
+
+        if ( (temp2 = yaml_document_add_mapping (&document, NULL, YAML_BLOCK_MAPPING_STYLE)) == 0)
+            throw YamlEmitterException ("Could not add scalar to document");
+
+        if (!yaml_document_append_mapping_pair (&document, mappingid, temp1, temp2))
+            throw YamlEmitterException ("Could not add mapping pair to mapping");
+
+        MappingNode *map = (MappingNode *) node;
+        Mapping *internalmap = map->getMapping();
+        Mapping::iterator iter = internalmap->begin();
+
+        while (iter != internalmap->end()) {
+            addMappingItem (temp2, iter->first, iter->second);
+            iter++;
+        }
+    } else
+        throw YamlEmitterException ("Unknown node type while adding mapping node");
+}
+
+
+}
diff --git a/sflphone-common/src/config/yamlemitter.h b/sflphone-common/src/config/yamlemitter.h
new file mode 100644
index 0000000000000000000000000000000000000000..e2e25a072444e1149303a0802069bced68f92ed7
--- /dev/null
+++ b/sflphone-common/src/config/yamlemitter.h
@@ -0,0 +1,152 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 __YAMLEMITTER_H__
+#define __YAMLEMITTER_H__
+
+#include <yaml.h>
+#include <exception>
+#include <string>
+#include "yamlnode.h"
+
+namespace Conf
+{
+
+#define EMITTER_BUFFERSIZE 65536
+#define EMITTER_MAXEVENT 1024
+
+class YamlEmitterException : public std::exception
+{
+    public:
+        YamlEmitterException (const std::string& str="") throw() : errstr (str) {}
+
+        virtual ~YamlEmitterException() throw() {}
+
+        virtual const char *what() const throw() {
+            std::string expt ("YamlParserException occured: ");
+            expt.append (errstr);
+
+            return expt.c_str();
+        }
+    private:
+        std::string errstr;
+
+};
+
+class YamlEmitter
+{
+
+    public:
+
+        YamlEmitter (const char *file);
+
+        ~YamlEmitter();
+
+        void open();
+
+        void close();
+
+        void read();
+
+        void write();
+
+        void serializeAccount (MappingNode *map);
+
+        void serializePreference (MappingNode *map);
+
+        void serializeVoipPreference (MappingNode *map);
+
+        void serializeAddressbookPreference (MappingNode *map);
+
+        void serializeHooksPreference (MappingNode *map);
+
+        void serializeAudioPreference (MappingNode *map);
+
+        void serializeShortcutPreference (MappingNode *map);
+
+        void writeAudio();
+
+        void writeHooks();
+
+        void writeVoiplink();
+
+        void serializeData();
+
+    private:
+
+        void addMappingItem (int mappingid, Key key, YamlNode *node);
+
+        std::string filename;
+
+        FILE *fd;
+
+        /**
+         * The parser structure.
+         */
+        yaml_emitter_t emitter;
+
+        /**
+         * The event structure array.
+         */
+        yaml_event_t events[EMITTER_MAXEVENT];
+
+        /**
+         *
+         */
+        unsigned char buffer[EMITTER_BUFFERSIZE];
+
+
+        /**
+         * Main document for this serialization
+         */
+        yaml_document_t document;
+
+        /**
+         * Reference id to the top levell mapping when creating
+         */
+        int topLevelMapping;
+
+        /**
+         * We need to add the account sequence if this is the first account to be
+         */
+        bool isFirstAccount;
+
+        /**
+         * Reference to the account sequence
+         */
+        int accountSequence;
+
+        friend class ConfigurationTest;
+
+};
+
+}
+
+#endif
diff --git a/sflphone-common/src/config/yamlengine.cpp b/sflphone-common/src/config/yamlengine.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9e2aa30dafb21e370c9179012f994eb555875a07
--- /dev/null
+++ b/sflphone-common/src/config/yamlengine.cpp
@@ -0,0 +1,82 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "yamlengine.h"
+#include "../global.h"
+
+
+namespace Conf
+{
+
+YamlEngine::YamlEngine() {}
+
+YamlEngine::~YamlEngine() {}
+
+void YamlEngine::openConfigFile()
+{
+
+    Conf::YamlParser *parser = NULL;
+
+    try {
+        parser = new Conf::YamlParser ("sequence.yml");
+    } catch (Conf::YamlParserException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
+
+    try {
+        parser->serializeEvents();
+    } catch (Conf::YamlParserException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
+
+    try {
+        document = parser->composeEvents();
+    } catch (Conf::YamlParserException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
+
+    try {
+        delete parser;
+        parser = NULL;
+    } catch (Conf::YamlParserException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
+}
+
+void YamlEngine::closeConfigFile()
+{
+
+}
+
+void YamlEngine::read() {}
+
+void YamlEngine::write() {}
+
+}
diff --git a/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp b/sflphone-common/src/config/yamlengine.h
similarity index 64%
rename from sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp
rename to sflphone-common/src/config/yamlengine.h
index fb95d1a52cb4302c5daf89413921b9509b0e720b..fcf9cd849b37e11bfe6334c7a61fd6d86728efbc 100644
--- a/sflphone-common/src/plug-in/audiorecorder/audiodsp.cpp
+++ b/sflphone-common/src/config/yamlengine.h
@@ -28,53 +28,53 @@
  *  as that of the covered work.
  */
 
-#include "audiodsp.h"
+#ifndef __YAMLENGINE_H__
+#define __YAMLENGINE_H__
 
-AudioDSP::AudioDSP()
-{
+#include "engine.h"
+#include "yamlnode.h"
+#include "yamlparser.h"
+#include "yamlemitter.h"
+#include <exception>
 
-    bufPointer_ = 0;
-    bufferLength_ = 1024;
-    circBuffer_ = new float[bufferLength_];
+namespace Conf
+{
 
-}
+class YamlEngineException : public std::exception
+{
 
+        virtual const char *what() const throw() {
+            return "YamlEngineException occured";
+        }
+};
 
-AudioDSP::~AudioDSP()
+class YamlEngine : public Engine
 {
 
-    delete[] circBuffer_;
-
-}
+    public:
 
+        YamlEngine();
 
-float AudioDSP::getRMS (int data)
-{
-    // printf("AudioDSP::getRMS() : bufPointer_ %i  ", bufPointer_);
-    printf ("AudioDSP::getRMS() : %i ", data);
-    circBuffer_[bufPointer_++] = (float) data;
+        ~YamlEngine();
 
-    if (bufPointer_ >= bufferLength_)
-        bufPointer_ = 0;
+        virtual void openConfigFile();
 
-    return computeRMS();
-}
+        virtual void closeConfigFile();
 
+        virtual void write();
 
-float AudioDSP::computeRMS()
-{
+        virtual void read();
 
-    rms = 0.0;
+    private:
 
+        YamlParser *parser;
 
-    for (int i = 0; i < bufferLength_; i++) {
-        // printf("AudioDSP::computeRMS() : i_ %i  ", i);
-        rms += (float) (circBuffer_[i]*circBuffer_[i]);
-    }
+        YamlEmitter *emitter;
 
-    rms = sqrt (rms / (float) bufferLength_);
+        YamlDocument *document;
 
-    // printf("AudioDSP::computeRMS() : RMS VALUE: %f ", rms);
-    return rms;
+};
 
 }
+
+#endif
diff --git a/sflphone-common/src/config/yamlnode.cpp b/sflphone-common/src/config/yamlnode.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e0d97cdf94619e44df7c24d94b382f86bbfa1056
--- /dev/null
+++ b/sflphone-common/src/config/yamlnode.cpp
@@ -0,0 +1,96 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "yamlnode.h"
+#include "src/global.h"
+
+namespace Conf
+{
+
+
+void YamlDocument::addNode (YamlNode *node)
+{
+    Sequence::iterator it = doc.end();
+    doc.insert (it, node);
+}
+
+YamlNode *YamlDocument::popNode()
+{
+    Sequence::iterator it = doc.begin();
+    YamlNode *node = doc.front();
+
+    //removed element's destructor is called
+    doc.pop_front();
+
+    return node;
+}
+
+void MappingNode::addNode (YamlNode *node)
+{
+    Mapping::iterator it = map.end();
+    map.insert (it, std::pair<Key, YamlNode *> (tmpKey, node));
+}
+
+void MappingNode::setKeyValue (Key key, YamlNode *value)
+{
+    Mapping::iterator it = map.end();
+    map.insert (it, std::pair<Key, YamlNode *> (key, value));
+}
+
+void MappingNode::removeKeyValue (Key key)
+{
+
+    Mapping::iterator it = map.find (key);
+    map.erase (it);
+}
+
+
+YamlNode *MappingNode::getValue (Key key)
+{
+
+    Mapping::iterator it = map.find (key);
+
+    if (it != map.end()) {
+        return it->second;
+    } else {
+        _debug ("MappingNode: Could not find %s", key.c_str());
+        return NULL;
+    }
+}
+
+
+void SequenceNode::addNode (YamlNode *node)
+{
+    Sequence::iterator it = seq.end();
+    seq.insert (it, node);
+}
+
+}
+
diff --git a/sflphone-common/src/config/yamlnode.h b/sflphone-common/src/config/yamlnode.h
new file mode 100644
index 0000000000000000000000000000000000000000..ec2de80237669560dcafa065f658d2aa91b82400
--- /dev/null
+++ b/sflphone-common/src/config/yamlnode.h
@@ -0,0 +1,204 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 __YAMLNODE_H__
+#define __YAMLNODE_H__
+
+#include <string>
+#include <list>
+#include <map>
+#include <exception>
+
+namespace Conf
+{
+
+
+class YamlNode;
+
+typedef std::string Key;
+typedef std::string Value;
+typedef std::list<YamlNode *> Sequence;
+typedef std::map<Key, YamlNode *> Mapping;
+
+class YamlNodeException : public std::exception
+{
+
+    public:
+        YamlNodeException (const std::string& str="") throw() : errstr (str) {}
+
+        virtual ~YamlNodeException() throw() {}
+
+        virtual const char *what() const throw() {
+            std::string expt ("YamlNodeException occured: ");
+            expt.append (errstr);
+
+            return expt.c_str();
+        }
+    private:
+        std::string errstr;
+
+};
+
+enum NodeType { DOCUMENT, SCALAR, MAPPING, SEQUENCE };
+
+class YamlNode
+{
+
+    public:
+
+        YamlNode (NodeType t, YamlNode *top=NULL) : type (t), topNode (top) {}
+
+        ~YamlNode() {}
+
+        NodeType getType() {
+            return type;
+        }
+
+        YamlNode *getTopNode() {
+            return topNode;
+        }
+
+    private:
+
+        NodeType type;
+
+        YamlNode *topNode;
+
+};
+
+
+class YamlDocument : YamlNode
+{
+
+    public:
+
+        YamlDocument (YamlNode* top=NULL) : YamlNode (DOCUMENT, top) {}
+
+        ~YamlDocument() {}
+
+        void addNode (YamlNode *node);
+
+        YamlNode *popNode (void);
+
+        Sequence *getSequence (void) {
+            return &doc;
+        }
+
+    private:
+
+        Sequence doc;
+
+};
+
+class SequenceNode : public YamlNode
+{
+
+    public:
+
+        SequenceNode (YamlNode *top) : YamlNode (SEQUENCE, top) {}
+
+        ~SequenceNode() {}
+
+        Sequence *getSequence() {
+            return &seq;
+        }
+
+        void addNode (YamlNode *node);
+
+    private:
+
+        Sequence seq;
+
+};
+
+
+class MappingNode : public YamlNode
+{
+
+    public:
+
+        MappingNode (YamlNode *top) : YamlNode (MAPPING, top) {}
+
+        ~MappingNode() {}
+
+        Mapping *getMapping() {
+            return &map;
+        }
+
+        void addNode (YamlNode *node);
+
+        void setTmpKey (Key key) {
+            tmpKey = key;
+        }
+
+        void  setKeyValue (Key key, YamlNode *value);
+
+        void removeKeyValue (Key key);
+
+        YamlNode *getValue (Key key);
+
+    private:
+
+        Mapping map;
+
+        Key tmpKey;
+
+};
+
+
+class ScalarNode : public YamlNode
+{
+
+    public:
+
+        ScalarNode (Value v="", YamlNode *top=NULL) : YamlNode (SCALAR, top), val (v) {}
+
+        ~ScalarNode() {}
+
+        Value getValue() {
+            return val;
+        }
+
+        void setValue (Value v) {
+            val = v;
+        }
+
+    private:
+
+        Value val;
+
+};
+
+
+}
+
+
+
+#endif
diff --git a/sflphone-common/src/config/yamlparser.cpp b/sflphone-common/src/config/yamlparser.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..90b46c8470c39bdab5774ddd84578b4b647dc5aa
--- /dev/null
+++ b/sflphone-common/src/config/yamlparser.cpp
@@ -0,0 +1,483 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "yamlparser.h"
+
+#include "../global.h"
+#include "config.h"
+#include "yamlnode.h"
+#include <stdio.h>
+
+namespace Conf
+{
+
+YamlParser::YamlParser (const char *file) : filename (file)
+        , accountSequence (NULL)
+        , preferenceSequence (NULL)
+        , addressbookSequence (NULL)
+        , audioSequence (NULL)
+        , hooksSequence (NULL)
+        , voiplinkSequence (NULL)
+        , shortcutSequence (NULL)
+{
+    memset (buffer, 0, PARSER_BUFFERSIZE);
+
+    open();
+}
+
+YamlParser::~YamlParser()
+{
+    close();
+}
+
+void YamlParser::open()
+{
+
+    fd = fopen (filename.c_str(), "rb");
+
+    if (!fd)
+        throw YamlParserException ("Could not open file descriptor");
+
+    if (!yaml_parser_initialize (&parser))
+        throw YamlParserException ("Could not open file descriptor");
+
+    yaml_parser_set_input_file (&parser, fd);
+}
+
+void YamlParser::close()
+{
+
+    yaml_parser_delete (&parser);
+
+    if (!fd)
+        throw YamlParserException ("File descriptor not valid");
+
+    // fclose (fd);
+    if (fclose (fd))
+        throw YamlParserException ("Error closing file descriptor");
+
+
+}
+
+void YamlParser::serializeEvents()
+{
+    bool done = false;
+    yaml_event_t event;
+
+    while (!done) {
+
+        if (!yaml_parser_parse (&parser, &event))
+            throw YamlParserException ("Error while parsing");
+
+        done = (event.type == YAML_STREAM_END_EVENT);
+
+        if (eventNumber > PARSER_MAXEVENT)
+            throw YamlParserException ("Reached maximum of event");
+
+        if (!copyEvent (& (events[eventNumber++]), &event))
+            throw YamlParserException ("Error copying event");
+
+    }
+}
+
+
+int YamlParser::copyEvent (yaml_event_t *event_to, yaml_event_t *event_from)
+{
+
+    switch (event_from->type) {
+        case YAML_STREAM_START_EVENT: {
+            // _debug("YAML_STREAM_START_EVENT");
+            return yaml_stream_start_event_initialize (event_to,
+                    event_from->data.stream_start.encoding);
+        }
+
+        case YAML_STREAM_END_EVENT: {
+            //_debug("YAML_STREAM_END_EVENT");
+            return yaml_stream_end_event_initialize (event_to);
+        }
+
+        case YAML_DOCUMENT_START_EVENT: {
+            // _debug("YAML_DOCUMENT_START_EVENT");
+            return yaml_document_start_event_initialize (event_to,
+                    event_from->data.document_start.version_directive,
+                    event_from->data.document_start.tag_directives.start,
+                    event_from->data.document_start.tag_directives.end,
+                    event_from->data.document_start.implicit);
+        }
+
+        case YAML_DOCUMENT_END_EVENT: {
+            // _debug("YAML_DOCUMENT_END_EVENT");
+            return yaml_document_end_event_initialize (event_to,
+                    event_from->data.document_end.implicit);
+        }
+        case YAML_ALIAS_EVENT: {
+            // _debug("YAML_ALIAS_EVENT");
+            return yaml_alias_event_initialize (event_to,
+                                                event_from->data.alias.anchor);
+        }
+        case YAML_SCALAR_EVENT: {
+            // _debug("YAML_SCALAR_EVENT");
+            return yaml_scalar_event_initialize (event_to,
+                                                 event_from->data.scalar.anchor,
+                                                 event_from->data.scalar.tag,
+                                                 event_from->data.scalar.value,
+                                                 event_from->data.scalar.length,
+                                                 event_from->data.scalar.plain_implicit,
+                                                 event_from->data.scalar.quoted_implicit,
+                                                 event_from->data.scalar.style);
+        }
+        case YAML_SEQUENCE_START_EVENT: {
+            // _debug("YAML_SEQUENCE_START_EVENT");
+            return yaml_sequence_start_event_initialize (event_to,
+                    event_from->data.sequence_start.anchor,
+                    event_from->data.sequence_start.tag,
+                    event_from->data.sequence_start.implicit,
+                    event_from->data.sequence_start.style);
+        }
+        case YAML_SEQUENCE_END_EVENT: {
+            // _debug("YAML_SEQUENCE_END_EVENT");
+            return yaml_sequence_end_event_initialize (event_to);
+        }
+        case YAML_MAPPING_START_EVENT: {
+            // _debug("YAML_MAPPING_START_EVENT");
+            return yaml_mapping_start_event_initialize (event_to,
+                    event_from->data.mapping_start.anchor,
+                    event_from->data.mapping_start.tag,
+                    event_from->data.mapping_start.implicit,
+                    event_from->data.mapping_start.style);
+        }
+        case YAML_MAPPING_END_EVENT: {
+            // _debug("YAML_MAPPING_END_EVENT");
+            return yaml_mapping_end_event_initialize (event_to);
+
+        }
+        default:
+            assert (1);
+
+    }
+
+    return 0;
+}
+
+
+YamlDocument *YamlParser::composeEvents()
+{
+
+    // _debug("YamlParser: Compose Events");
+
+    if (eventNumber == 0)
+        throw YamlParserException ("No event available");
+
+    if (events[0].type != YAML_STREAM_START_EVENT)
+        throw YamlParserException ("Parsing does not start with stream start");
+
+    eventIndex = 0;
+
+    processStream();
+
+    return doc;
+}
+
+void YamlParser::processStream ()
+{
+
+    // _debug("YamlParser: process stream");
+
+    while ( (eventIndex < eventNumber) && (events[eventIndex].type != YAML_STREAM_END_EVENT)) {
+
+        if (events[eventIndex].type == YAML_DOCUMENT_START_EVENT)
+            processDocument();
+
+        eventIndex++;
+    }
+
+    if (events[eventIndex].type != YAML_STREAM_END_EVENT)
+        throw YamlParserException ("Did not found end of stream");
+}
+
+
+void YamlParser::processDocument()
+{
+    // _debug("YamlParser: process document");
+
+    doc = new YamlDocument();
+
+    if (!doc)
+        throw YamlParserException ("Not able to create new document");
+
+    while ( (eventIndex < eventNumber) && (events[eventIndex].type != YAML_DOCUMENT_END_EVENT)) {
+
+        switch (events[eventIndex].type) {
+            case YAML_SCALAR_EVENT:
+                processScalar ( (YamlNode *) doc);
+                break;
+            case YAML_SEQUENCE_START_EVENT:
+                processSequence ( (YamlNode *) doc);
+                break;
+            case YAML_MAPPING_START_EVENT:
+                processMapping ( (YamlNode *) doc);
+                break;
+            default:
+                break;
+        }
+
+        eventIndex++;
+    }
+
+    if (events[eventIndex].type != YAML_DOCUMENT_END_EVENT)
+        throw YamlParserException ("Did not found end of document");
+
+}
+
+
+void YamlParser::processScalar (YamlNode *topNode)
+{
+
+    // _debug("YamlParser: process scalar");
+
+    if (!topNode)
+        throw YamlParserException ("No container for scalar");
+
+    char buffer[1000];
+    snprintf (buffer, 1000, "%s", events[eventIndex].data.scalar.value);
+    // _debug("and the scalar is: %s", buffer);
+
+    ScalarNode *sclr = new ScalarNode (buffer, topNode);
+
+    switch (topNode->getType()) {
+        case DOCUMENT:
+            ( (YamlDocument *) (topNode))->addNode (sclr);
+            break;
+        case SEQUENCE:
+            ( (SequenceNode *) (topNode))->addNode (sclr);
+            break;
+        case MAPPING:
+            ( (MappingNode *) (topNode))->addNode (sclr);
+        case SCALAR:
+        default:
+            break;
+    }
+}
+
+
+void YamlParser::processSequence (YamlNode *topNode)
+{
+    _debug ("YamlParser: process sequence");
+
+    if (!topNode)
+        throw YamlParserException ("No container for sequence");
+
+    SequenceNode *seq = new SequenceNode (topNode);
+
+    switch (topNode->getType()) {
+        case DOCUMENT:
+            ( (YamlDocument *) (topNode))->addNode (seq);
+            break;
+        case SEQUENCE:
+            ( (SequenceNode *) (topNode))->addNode (seq);
+            break;
+        case MAPPING:
+            ( (MappingNode *) (topNode))->addNode (seq);
+        case SCALAR:
+        default:
+            break;
+    }
+
+    eventIndex++;
+
+    while ( (eventIndex < eventNumber) && (events[eventIndex].type != YAML_SEQUENCE_END_EVENT)) {
+
+        switch (events[eventIndex].type) {
+            case YAML_SCALAR_EVENT:
+                processScalar (seq);
+                break;
+            case YAML_SEQUENCE_START_EVENT:
+                processSequence (seq);
+                break;
+            case YAML_MAPPING_START_EVENT:
+                processMapping (seq);
+                break;
+            default:
+                break;
+        }
+
+        eventIndex++;
+    }
+
+    if (events[eventIndex].type != YAML_SEQUENCE_END_EVENT)
+        throw YamlParserException ("Did not found end of sequence");
+}
+
+
+void YamlParser::processMapping (YamlNode *topNode)
+{
+    // _debug("YamlParser: process mapping");
+
+    if (!topNode)
+        throw YamlParserException ("No container for mapping");
+
+    MappingNode *map = new MappingNode (topNode);
+
+    switch (topNode->getType()) {
+        case DOCUMENT:
+            ( (YamlDocument *) (topNode))->addNode (map);
+            break;
+        case SEQUENCE:
+            ( (SequenceNode *) (topNode))->addNode (map);
+            break;
+        case MAPPING:
+            ( (MappingNode *) (topNode))->addNode (map);
+        case SCALAR:
+        default:
+            break;
+    }
+
+    eventIndex++;
+
+    while ( (eventIndex < eventNumber) && (events[eventIndex].type != YAML_MAPPING_END_EVENT)) {
+
+        if (events[eventIndex].type != YAML_SCALAR_EVENT)
+            throw YamlParserException ("Mapping not followed by a key");
+
+        char buffer[1000];
+        snprintf (buffer, 1000, "%s", events[eventIndex].data.scalar.value);
+        map->setTmpKey (Key (buffer));
+        // _debug("KEY %s", buffer);
+
+        eventIndex++;
+
+        switch (events[eventIndex].type) {
+            case YAML_SCALAR_EVENT:
+                processScalar (map);
+                break;
+            case YAML_SEQUENCE_START_EVENT:
+                processSequence (map);
+                break;
+            case YAML_MAPPING_START_EVENT:
+                processMapping (map);
+                break;
+            default:
+                break;
+        }
+
+        eventIndex++;
+    }
+
+    if (events[eventIndex].type != YAML_MAPPING_END_EVENT)
+        throw YamlParserException ("Did not found end of mapping");
+}
+
+void YamlParser::constructNativeData()
+{
+
+    Sequence *seq;
+
+    seq = doc->getSequence();
+
+    Sequence::iterator iter = seq->begin();
+
+    while (iter != seq->end()) {
+
+        switch ( (*iter)->getType()) {
+            case SCALAR:
+                // _debug("construct scalar");
+                throw YamlParserException ("No scalar allowed at document level, expect a mapping");
+                break;
+            case SEQUENCE:
+                // _debug("construct sequence");
+                throw YamlParserException ("No sequence allowed at document level, expect a mapping");
+                break;
+            case MAPPING: {
+                // _debug("construct mapping");
+                MappingNode *map = (MappingNode *) (*iter);
+                mainNativeDataMapping (map);
+                break;
+            }
+            default:
+                throw YamlParserException ("Unknown type in configuration file, expect a mapping");
+                break;
+        }
+
+        iter++;
+
+    }
+
+}
+
+
+void YamlParser::mainNativeDataMapping (MappingNode *map)
+{
+
+
+    Mapping::iterator iter = map->getMapping()->begin();
+
+    Key accounts ("accounts");
+    Key addressbook ("addressbook");
+    Key audio ("audio");
+    Key hooks ("hooks");
+    Key preferences ("preferences");
+    Key voiplink ("voipPreferences");
+    Key shortcuts ("shortcuts");
+
+    while (iter != map->getMapping()->end()) {
+
+        _debug ("Iterating: %s", iter->first.c_str());
+
+        if (accounts.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding voip account preferences");
+            accountSequence = (SequenceNode *) (iter->second);
+        } else if (addressbook.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding addressbook preference");
+            addressbookSequence = (SequenceNode *) (iter->second);
+        } else if (audio.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding audio preference");
+            audioSequence = (SequenceNode *) (iter->second);
+        } else if (hooks.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding hooks preference");
+            hooksSequence = (SequenceNode *) (iter->second);
+        } else if (preferences.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding preference preference");
+            preferenceSequence = (SequenceNode *) (iter->second);
+        } else if (voiplink.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding voip preference");
+            voiplinkSequence = (SequenceNode *) (iter->second);
+        } else if (shortcuts.compare (iter->first) == 0) {
+            _debug ("YamlParser: Adding shortcut preference");
+            shortcutSequence = (SequenceNode *) (iter->second);
+        } else
+            throw YamlParserException ("Unknow map key in configuration");
+
+        iter++;
+    }
+
+    // _debug("Done");
+}
+
+}
diff --git a/sflphone-common/src/config/yamlparser.h b/sflphone-common/src/config/yamlparser.h
new file mode 100644
index 0000000000000000000000000000000000000000..58c92826b926e903a8ffa5fd2ce9811fba229b73
--- /dev/null
+++ b/sflphone-common/src/config/yamlparser.h
@@ -0,0 +1,178 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 __YAMLPARSER_H__
+#define __YAMLPARSER_H__
+
+#include "yamlnode.h"
+#include <yaml.h>
+#include <stdio.h>
+#include <exception>
+#include <string>
+
+namespace Conf
+{
+
+#define PARSER_BUFFERSIZE 65536
+#define PARSER_MAXEVENT 1024
+
+class YamlParserException : public std::exception
+{
+    public:
+        YamlParserException (const std::string& str="") throw() : errstr (str) {}
+
+        virtual ~YamlParserException() throw() {}
+
+        virtual const char *what() const throw() {
+            std::string expt ("YamlParserException occured: ");
+            expt.append (errstr);
+
+            return expt.c_str();
+        }
+    private:
+        std::string errstr;
+};
+
+
+class YamlParser
+{
+
+    public:
+
+        YamlParser (const char *file);
+
+        ~YamlParser();
+
+        void open();
+
+        void close();
+
+        void serializeEvents();
+
+        YamlDocument *composeEvents();
+
+        void constructNativeData();
+
+        SequenceNode *getAccountSequence (void) {
+            return accountSequence;
+        };
+
+        SequenceNode *getPreferenceSequence (void) {
+            return preferenceSequence;
+        }
+
+        SequenceNode *getAddressbookSequence (void) {
+            return addressbookSequence;
+        }
+
+        SequenceNode *getAudioSequence (void) {
+            return audioSequence;
+        }
+
+        SequenceNode *getHookSequence (void) {
+            return hooksSequence;
+        }
+
+        SequenceNode *getVoipPreferenceSequence (void) {
+            return voiplinkSequence;
+        }
+
+        SequenceNode *getShortcutSequence (void) {
+            return shortcutSequence;
+        }
+
+    private:
+
+        /**
+         * Copy yaml parser event in event_to according to their type.
+         */
+        int copyEvent (yaml_event_t *event_to, yaml_event_t *event_from);
+
+        void processStream (void);
+
+        void processDocument (void);
+
+        void processScalar (YamlNode *topNode);
+
+        void processSequence (YamlNode *topNode);
+
+        void processMapping (YamlNode *topNode);
+
+        void mainNativeDataMapping (MappingNode *map);
+
+        //   void buildAccounts(SequenceNode *map);
+
+        std::string filename;
+
+        FILE *fd;
+
+        /**
+         * The parser structure.
+         */
+        yaml_parser_t parser;
+
+        /**
+         * The event structure array.
+         */
+        yaml_event_t events[PARSER_MAXEVENT];
+
+        /**
+         *
+         */
+        unsigned char buffer[PARSER_BUFFERSIZE];
+
+        /**
+         * Number of event actually parsed
+         */
+        int eventNumber;
+
+        YamlDocument *doc;
+
+        int eventIndex;
+
+        SequenceNode *accountSequence;
+
+        SequenceNode *preferenceSequence;
+
+        SequenceNode *addressbookSequence;
+
+        SequenceNode *audioSequence;
+
+        SequenceNode *hooksSequence;
+
+        SequenceNode *voiplinkSequence;
+
+        SequenceNode *shortcutSequence;
+
+};
+
+}
+
+#endif
diff --git a/sflphone-common/src/dbus/callmanager-introspec.xml b/sflphone-common/src/dbus/callmanager-introspec.xml
index e2bd4c61f30df9bee868542a84d043a4b1e10a09..b925e31017b2ccd885e31fc3aed94bdedf1bc869 100644
--- a/sflphone-common/src/dbus/callmanager-introspec.xml
+++ b/sflphone-common/src/dbus/callmanager-introspec.xml
@@ -370,6 +370,14 @@
 			<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="currentSelectedCodec" tp:name-for-bindings="currentSelectedCodec">
 			<tp:docstring>
 			  Unused
@@ -404,9 +412,10 @@
 
 		<signal name="incomingMessage" tp:name-for-bindings="incomingMessage">
 			<tp:docstring>
-			  Unused
+				Notify clients that a new text message has been received. 
 			</tp:docstring>
-			<arg type="s" name="accountID" />
+			<arg type="s" name="callID" />
+			<arg type="s" name="from" />
 			<arg type="s" name="message" />
 		</signal>
 
diff --git a/sflphone-common/src/dbus/callmanager.cpp b/sflphone-common/src/dbus/callmanager.cpp
index 5662b4640408d9c59180242f98385f3b938c1a6c..26eaa53fda60c725c18891240c8dfa32d03da8f5 100644
--- a/sflphone-common/src/dbus/callmanager.cpp
+++ b/sflphone-common/src/dbus/callmanager.cpp
@@ -49,8 +49,8 @@ CallManager::CallManager (DBus::Connection& connection)
 void
 CallManager::placeCall (const std::string& accountID,
                         const std::string& callID,
-                        const std::string& to)
-{    // Check if a destination number is available
+                        const std::string& to)     // Check if a destination number is available
+{
 
     if (to == "")   _debug ("No number entered - Call stopped");
     else            Manager::instance().outgoingCall (accountID, callID, to);
@@ -58,12 +58,12 @@ CallManager::placeCall (const std::string& accountID,
 
 void
 CallManager::placeCallFirstAccount (const std::string& callID,
-				    const std::string& to)
+                                    const std::string& to)
 {
 
     if (to == "") {
-        _warn("CallManager: Warning: No number entered, call stopped");
-	return;
+        _warn ("CallManager: Warning: No number entered, call stopped");
+        return;
     }
 
     std::vector< std::string > accountOrder = Manager::instance().loadAccountOrder();
@@ -71,47 +71,50 @@ CallManager::placeCallFirstAccount (const std::string& callID,
 
     Account *account;
 
-    _debug("AccountOrder size: %d", accountOrder.size());
+    _debug ("AccountOrder size: %d", accountOrder.size());
 
-    if(accountOrder.size() > 0) {
+    if (accountOrder.size() > 0) {
 
-      iter = accountOrder.begin();
+        iter = accountOrder.begin();
 
-      while(iter != accountOrder.end()) {
-        account = Manager::instance().getAccount(*iter);
-	if((*iter != IP2IP_PROFILE) && account->isEnabled()) {
-	    Manager::instance().outgoingCall (*iter, callID, to);
-	    return;
-	}
+        while (iter != accountOrder.end()) {
+            account = Manager::instance().getAccount (*iter);
 
-	iter++;
-      }
-    }
-    else {
-      _error("AccountOrder is empty");
-      // If accountOrder is empty fallback on accountList (which has no preference order)
-      std::vector< std::string > accountList = Manager::instance().getAccountList();
-      iter = accountList.begin();
-      
-
-      _error("AccountList size: %d", accountList.size());
-      if(accountList.size() > 0) {
-	while(iter != accountList.end()) {
-	  _error("iter");
-	  account = Manager::instance().getAccount(*iter);
-	  if((*iter != IP2IP_PROFILE) && account->isEnabled()) {
-	    _error("makecall");
-	    Manager::instance().outgoingCall(*iter, callID, to);
-	    return;
-	  }
-	  iter++;
-	}
-	
-      }
+            if ( (*iter != IP2IP_PROFILE) && account->isEnabled()) {
+                Manager::instance().outgoingCall (*iter, callID, to);
+                return;
+            }
+
+            iter++;
+        }
+    } else {
+        _error ("AccountOrder is empty");
+        // If accountOrder is empty fallback on accountList (which has no preference order)
+        std::vector< std::string > accountList = Manager::instance().getAccountList();
+        iter = accountList.begin();
+
+
+        _error ("AccountList size: %d", accountList.size());
+
+        if (accountList.size() > 0) {
+            while (iter != accountList.end()) {
+                _error ("iter");
+                account = Manager::instance().getAccount (*iter);
+
+                if ( (*iter != IP2IP_PROFILE) && account->isEnabled()) {
+                    _error ("makecall");
+                    Manager::instance().outgoingCall (*iter, callID, to);
+                    return;
+                }
+
+                iter++;
+            }
+
+        }
     }
-    
-    _warn("CallManager: Warning: No enabled account found, call stopped");
-    
+
+    _warn ("CallManager: Warning: No enabled account found, call stopped");
+
 }
 
 void
@@ -261,7 +264,7 @@ CallManager::getConferenceList (void)
 std::vector< std::string >
 CallManager::getParticipantList (const std::string& confID)
 {
-    _debug("CallManager: Get Participant list for conference %s", confID.c_str());
+    _debug ("CallManager: Get Participant list for conference %s", confID.c_str());
     return Manager::instance().getParticipantList (confID);
 }
 
@@ -330,18 +333,23 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal
     SIPVoIPLink * link = NULL;
     link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (AccountNULL));
 
-    if (link == NULL) {
-        _debug ("Failed to get sip link");
+    if (!link) {
+        _debug ("CallManager: Failed to get sip link");
         throw CallManagerException();
     }
 
     SIPCall *call = link->getSIPCall (callID);
 
+    if (!call) {
+        _debug ("CallManager: Call id %d is not valid", callID.c_str());
+        throw CallManagerException();
+    }
+
     sfl::AudioRtpFactory * audioRtp = NULL;
     audioRtp = call->getAudioRtp();
 
-    if (audioRtp == NULL) {
-        _debug ("Failed to get AudioRtpFactory");
+    if (!audioRtp) {
+        _debug ("CallManager: Failed to get AudioRtpFactory");
         throw CallManagerException();
     }
 
@@ -349,8 +357,8 @@ sfl::AudioZrtpSession * CallManager::getAudioZrtpSession (const std::string& cal
 
     zSession = audioRtp->getAudioZrtpSession();
 
-    if (zSession == NULL) {
-        _debug ("Failed to get AudioZrtpSession");
+    if (!zSession) {
+        _debug ("CallManager: Failed to get AudioZrtpSession");
         throw CallManagerException();
     }
 
@@ -366,7 +374,8 @@ CallManager::setSASVerified (const std::string& callID)
         zSession = getAudioZrtpSession (callID);
         zSession->SASVerified();
     } catch (...) {
-        throw;
+        return;
+        // throw;
     }
 
 }
@@ -380,7 +389,8 @@ CallManager::resetSASVerified (const std::string& callID)
         zSession = getAudioZrtpSession (callID);
         zSession->resetSASVerified();
     } catch (...) {
-        throw;
+        return;
+        // throw;
     }
 
 }
@@ -395,7 +405,8 @@ CallManager::setConfirmGoClear (const std::string& callID)
         zSession = getAudioZrtpSession (callID);
         zSession->goClearOk();
     } catch (...) {
-        throw;
+        return;
+        // throw;
     }
 
 }
@@ -410,7 +421,8 @@ CallManager::requestGoClear (const std::string& callID)
         zSession = getAudioZrtpSession (callID);
         zSession->requestGoClear();
     } catch (...) {
-        throw;
+        return;
+        /// throw;
     }
 
 }
@@ -426,7 +438,8 @@ CallManager::acceptEnrollment (const std::string& callID, const bool& accepted)
         zSession = getAudioZrtpSession (callID);
         zSession->acceptEnrollment (accepted);
     } catch (...) {
-        throw;
+        return;
+        // throw;
     }
 
 }
@@ -442,7 +455,15 @@ CallManager::setPBXEnrollment (const std::string& callID, const bool& yesNo)
         zSession = getAudioZrtpSession (callID);
         zSession->setPBXEnrollment (yesNo);
     } catch (...) {
-        throw;
+        return;
+        // throw;
     }
 
 }
+
+void
+CallManager::sendTextMessage (const std::string& callID, const std::string& message)
+{
+    if (!Manager::instance().sendTextMessage (callID, message, "Me"))
+        throw CallManagerException();
+}
diff --git a/sflphone-common/src/dbus/callmanager.h b/sflphone-common/src/dbus/callmanager.h
index 950d12a98a2ae67f6b16bf401dcf4f38ee0494ee..8a232f5ec62b423eb631920b7e8f3411a5c4941c 100644
--- a/sflphone-common/src/dbus/callmanager.h
+++ b/sflphone-common/src/dbus/callmanager.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -27,35 +27,39 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef __SFL_CALLMANAGER_H__
 #define __SFL_CALLMANAGER_H__
 
+#pragma GCC diagnostic ignored "-Wignored-qualifiers"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
 #include "callmanager-glue.h"
+#pragma GCC diagnostic warning "-Wignored-qualifiers"
+#pragma GCC diagnostic warning "-Wunused-parameter"
 
 #include <dbus-c++/dbus.h>
 #include <exception>
 
 class CallManagerException: public std::exception
 {
-    virtual const char* what() const throw()
-    {
-    return "A CallManagerException occured";
-    }
+        virtual const char* what() const throw() {
+            return "A CallManagerException occured";
+        }
 };
 
-namespace sfl {
-    class AudioZrtpSession;
+namespace sfl
+{
+class AudioZrtpSession;
 }
 
 class CallManager
-: public org::sflphone::SFLphone::CallManager_adaptor,
-  public DBus::IntrospectableAdaptor,
-  public DBus::ObjectAdaptor
+        : public org::sflphone::SFLphone::CallManager_adaptor,
+        public DBus::IntrospectableAdaptor,
+        public DBus::ObjectAdaptor
 {
     public:
 
-        CallManager(DBus::Connection& connection);
+        CallManager (DBus::Connection& connection);
         static const char* SERVER_PATH;
 
         /* methods exported by this interface,
@@ -63,52 +67,55 @@ class CallManager
          */
 
         /* Call related methods */
-        void placeCall( const std::string& accountID, const std::string& callID, const std::string& to );
-        void placeCallFirstAccount( const std::string& callID, const std::string& to );
-
-        void refuse( const std::string& callID );
-        void accept( const std::string& callID );
-        void hangUp( const std::string& callID );
-        void hold( const std::string& callID );
-        void unhold( const std::string& callID );
-        void transfert( const std::string& callID, const std::string& to );
-        std::map< std::string, std::string > getCallDetails( const std::string& callID );
+        void placeCall (const std::string& accountID, const std::string& callID, const std::string& to);
+        void placeCallFirstAccount (const std::string& callID, const std::string& to);
+
+        void refuse (const std::string& callID);
+        void accept (const std::string& callID);
+        void hangUp (const std::string& callID);
+        void hold (const std::string& callID);
+        void unhold (const std::string& callID);
+        void transfert (const std::string& callID, const std::string& to);
+        std::map< std::string, std::string > getCallDetails (const std::string& callID);
         std::vector< std::string > getCallList (void);
-        std::string getCurrentCallID(  );
+        std::string getCurrentCallID();
 
         /* Conference related methods */
-        void joinParticipant( const std::string& sel_callID, const std::string& drag_callID );
-	void addParticipant( const std::string& callID, const std::string& confID );
-	void addMainParticipant( const std::string& confID );
-	void detachParticipant( const std::string& callID );
-	void joinConference( const std::string& sel_confID, const std::string& drag_confID );
-	void hangUpConference( const std::string& confID );
-	void holdConference( const std::string& confID );
-	void unholdConference( const std::string& confID );
-	std::vector< std::string > getConferenceList (void);
-	std::vector< std::string > getParticipantList (const std::string& confID);
-	std::map< std::string, std::string > getConferenceDetails ( const std::string& callID );
-
-	/* General audio methods */
-        void setVolume( const std::string& device, const double& value );
-        double getVolume( const std::string& device );
-        void setRecording( const std::string& callID );
-        bool getIsRecording(const std::string& callID);
-        std::string getCurrentCodecName(const std::string& callID);
-        void playDTMF( const std::string& key );
-        void startTone( const int32_t& start, const int32_t& type );
-
-	/* Security related methods */
-        void setSASVerified(const std::string& callID);
-        void resetSASVerified(const std::string& callID);
-        void setConfirmGoClear(const std::string& callID);
-        void requestGoClear(const std::string& callID);
-        void acceptEnrollment(const std::string& callID, const bool& accepted);
-        void setPBXEnrollment(const std::string& callID, const bool& yesNo);    
-        
+        void joinParticipant (const std::string& sel_callID, const std::string& drag_callID);
+        void addParticipant (const std::string& callID, const std::string& confID);
+        void addMainParticipant (const std::string& confID);
+        void detachParticipant (const std::string& callID);
+        void joinConference (const std::string& sel_confID, const std::string& drag_confID);
+        void hangUpConference (const std::string& confID);
+        void holdConference (const std::string& confID);
+        void unholdConference (const std::string& confID);
+        std::vector< std::string > getConferenceList (void);
+        std::vector< std::string > getParticipantList (const std::string& confID);
+        std::map< std::string, std::string > getConferenceDetails (const std::string& callID);
+
+        /* General audio methods */
+        void setVolume (const std::string& device, const double& value);
+        double getVolume (const std::string& device);
+        void setRecording (const std::string& callID);
+        bool getIsRecording (const std::string& callID);
+        std::string getCurrentCodecName (const std::string& callID);
+        void playDTMF (const std::string& key);
+        void startTone (const int32_t& start, const int32_t& type);
+
+        /* Security related methods */
+        void setSASVerified (const std::string& callID);
+        void resetSASVerified (const std::string& callID);
+        void setConfirmGoClear (const std::string& callID);
+        void requestGoClear (const std::string& callID);
+        void acceptEnrollment (const std::string& callID, const bool& accepted);
+        void setPBXEnrollment (const std::string& callID, const bool& yesNo);
+
+        /* Instant messaging */
+        void sendTextMessage (const std::string& callID, const std::string& message);
+
     private:
 
-        sfl::AudioZrtpSession * getAudioZrtpSession(const std::string& callID);
+        sfl::AudioZrtpSession * getAudioZrtpSession (const std::string& callID);
 };
 
 
diff --git a/sflphone-common/src/dbus/configurationmanager-introspec.xml b/sflphone-common/src/dbus/configurationmanager-introspec.xml
old mode 100644
new mode 100755
index 9c0b6f1c4fb35ef45d58924dc885ae0ca9acbf48..f051f3b44bfb685a4408e18bf578024f49831f75
--- a/sflphone-common/src/dbus/configurationmanager-introspec.xml
+++ b/sflphone-common/src/dbus/configurationmanager-introspec.xml
@@ -101,29 +101,15 @@
 			</arg>
 		</method>
 
-		<method name="setNumberOfCredential" tp:name-for-bindings="setNumberOfCredential">
+		<method name="deleteAllCredential" tp:name-for-bindings="deleteAllCredential">
 			<tp:docstring>
 			</tp:docstring>
 			<arg type="s" name="accountID" direction="in">
-			  <tp:docstring>
-			  </tp:docstring>
-			</arg>
-			<arg type="i" name="number" direction="in">
 				<tp:docstring>
 				</tp:docstring>
 			</arg>
 		</method>
 
-		<method name="deleteAllCredential" tp:name-for-bindings="deleteAllCredential">
-			<tp:docstring>
-			</tp:docstring>
-			<arg type="s" name="accountID" direction="in">
-			  <tp:docstring>
-			    Account ID
-			  </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.
@@ -207,55 +193,55 @@
 
 	   <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>
+			   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>
+			   <tp:docstring>
+					The new account settings
+			   </tp:docstring>
 		   </arg>
 		   <arg type="s" name="createdAccountId" direction="out">
-		     <tp:docstring>
-		       A new account ID
-		     </tp:docstring>
+			   <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>
+				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>
+			   <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>
+		   <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>
+		   <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>
+			   <tp:docstring>
+				   A list of account IDs
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
@@ -268,15 +254,15 @@
 		   @param[in] input accountID
 		   -->
 		   <arg type="s" name="accountID" direction="in">
-		     <tp:docstring>
-		       The account ID
-		     </tp:docstring>
+			   <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>
+			   <tp:docstring>
+					<p>To register, expire must be 1.</p>
+					<p>To un-register, expire must be 0.</p>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
@@ -285,14 +271,13 @@
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
-		     <tp:docstring>
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getVersion" tp:name-for-bindings="getVersion">
 		   <tp:docstring>
-		     Return SFLphone-daemon version
 		   </tp:docstring>
 		   <arg type="s" name="version" direction="out">
 			   <tp:docstring>
@@ -302,19 +287,16 @@
 
 	   <method name="getRingtoneList" tp:name-for-bindings="getRingtoneList">
 		   <tp:docstring>
-		     Return a list of valid Sun's .au sound file used
-		     as ringtones.
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
-		     <tp:docstring>
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getPlaybackDeviceList" tp:name-for-bindings="getPlaybackDeviceList">
 		   <tp:docstring>
-		     Provide a list of playback device from ALSA
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
@@ -325,7 +307,6 @@
 
 	   <method name="getRecordDeviceList" tp:name-for-bindings="getRecordDeviceList">
 		   <tp:docstring>
-		     Provide a list of record device from ALSA
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
@@ -336,8 +317,8 @@
 
 	   <method name="isRingtoneEnabled" tp:name-for-bindings="isRingtoneEnabled">
 		   <tp:docstring>
-		     Return true if ringtone is enabled, false otherwise
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in" />
 		   <arg type="i" name="bool" direction="out">
 			   <tp:docstring>
 			   </tp:docstring>
@@ -346,28 +327,27 @@
 
 	   <method name="ringtoneEnabled" tp:name-for-bindings="ringtoneEnabled">
 		   <tp:docstring>
-		     Unused
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in"/>
 	   </method>
 
 	   <method name="getRingtoneChoice" tp:name-for-bindings="getRingtoneChoice">
 		   <tp:docstring>
-		     Get current ringtone .au file selected
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in"/>
 		   <arg type="s" name="tone" direction="out">
-		     <tp:docstring>
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="setRingtoneChoice" tp:name-for-bindings="setRingtoneChoice">
 		   <tp:docstring>
-		     Set current ringtone .au file from list acquired using <tp:member-ref>getAccountList</tp:member-ref>
 		   </tp:docstring>
+		   <arg type="s" name="accountID" direction="in"/>
 		   <arg type="s" name="tone" direction="in">
-		     <tp:docstring>
-		       A valid .au file path
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
@@ -466,7 +446,7 @@
 
 	   <!-- Audio devices methods -->
 
-	   <method name="getInputAudioPluginList" tp:name-for-bindings="getInputAudioPluginList">
+	   <method name="getAudioPluginList" tp:name-for-bindings="getAudioPluginList">
 		   <tp:docstring>
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
@@ -476,50 +456,49 @@
 		   </arg>
 	   </method>
 
-	   <method name="getOutputAudioPluginList" tp:name-for-bindings="getOutputAudioPluginList">
+	   <method name="setAudioPlugin" tp:name-for-bindings="setAudioPlugin">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
+		   <arg type="s" name="audioPlugin" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="setInputAudioPlugin" tp:name-for-bindings="setInputAudioPlugin">
+	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
+		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
+		   <arg type="as" name="list" direction="out">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="setOutputAudioPlugin" tp:name-for-bindings="setOutputAudioPlugin">
+	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="s" name="audioPlugin" direction="in">
+		   <arg type="i" name="index" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="getAudioOutputDeviceList" tp:name-for-bindings="getAudioOutputDeviceList">
+	   <method name="setAudioInputDevice" tp:name-for-bindings="setAudioInputDevice">
 		   <tp:docstring>
 		   </tp:docstring>
-		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
-		   <arg type="as" name="list" direction="out">
+		   <arg type="i" name="index" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
 	   </method>
 
-	   <method name="setAudioOutputDevice" tp:name-for-bindings="setAudioOutputDevice">
-		   <tp:docstring>
+	   <method name="setAudioRingtoneDevice" tp:name-for-binding="setAudioRingtoneDevice">
+	           <tp:docstring>
 		   </tp:docstring>
 		   <arg type="i" name="index" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
+		     <tp:docstring>
+		     </tp:docstring>
 		   </arg>
 	   </method>
 
@@ -533,14 +512,6 @@
 		   </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="getCurrentAudioDevicesIndex" tp:name-for-bindings="getCurrentAudioDevicesIndex">
 		   <tp:docstring>
@@ -574,6 +545,20 @@
 		   </arg>
 	   </method>
 
+           <method name="getNoiseSuppressState" tp:name-for-bindings="getNoiseSuppressState">
+	           <tp:docstring>
+		   </tp:docstring>
+		   <arg type="s" name="state" direction="out">
+		           <tp:docstring>
+			   </tp:docstring>
+		   </arg>
+	   </method>
+
+	   <method name="setNoiseSuppressState" tp:name-for-binding="setNoiseSuppressState">
+	           <arg type="s" name="state" direction="in">
+	           </arg>
+	   </method>
+
 	   <!--    General Settings Panel         -->
 
 	   <method name="isMd5CredentialHashing" tp:name-for-bindings="isMd5CredentialHashing">
@@ -603,20 +588,6 @@
 		   </arg>
 	   </method>
 
-	   <method name="setNotify" tp:name-for-bindings="setNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getNotify" tp:name-for-bindings="getNotify">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="level" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
 	   <method name="setMailNotify" tp:name-for-bindings="setMailNotify">
 		   <tp:docstring>
 		   </tp:docstring>
@@ -631,69 +602,6 @@
 		   </arg>
 	   </method>
 
-	   <method name="getDialpad" tp:name-for-bindings="getDialpad">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setDialpad" tp:name-for-bindings="setDialpad">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="display" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getSearchbar" tp:name-for-bindings="getSearchbar">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setSearchbar" tp:name-for-bindings="setSearchbar">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="setHistoryEnabled" tp:name-for-bindings="setHistoryEnabled">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getHistoryEnabled" tp:name-for-bindings="getHistoryEnabled">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="s" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getVolumeControls" tp:name-for-bindings="getVolumeControls">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setVolumeControls" tp:name-for-bindings="setVolumeControls">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="b" name="display" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
 
 	   <method name="getHistoryLimit" tp:name-for-bindings="getHistoryLimit">
 		   <tp:docstring>
@@ -713,137 +621,6 @@
 		   </arg>
 	   </method>
 
-	   <method name="startHidden" tp:name-for-bindings="startHidden">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="isStartHidden" tp:name-for-bindings="isStartHidden">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="popupMode" tp:name-for-bindings="popupMode">
-		   <tp:docstring>
-		   </tp:docstring>
-		   <arg type="i" name="state" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="switchPopupMode" tp:name-for-bindings="switchPopupMode">
-		   <tp:docstring>
-		   </tp:docstring>
-	   </method>
-
-	   <method name="getWindowWidth" tp:name-for-bindings="getWindowWidth">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="width" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getWindowHeight" tp:name-for-bindings="getWindowHeight">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="height" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowWidth" tp:name-for-bindings="setWindowWidth">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="width" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowHeight" tp:name-for-bindings="setWindowHeight">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="height" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getWindowPositionX" tp:name-for-bindings="getWindowPositionX">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="posX" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowPositionX" tp:name-for-bindings="setWindowPositionX">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="posX" direction="in">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="getWindowPositionY" tp:name-for-bindings="getWindowPositionY">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="posY" direction="out">
-			   <tp:docstring>
-			   </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="setWindowPositionY" tp:name-for-bindings="setWindowPositionY">
-		   <tp:docstring>
-		     Unused
-		   </tp:docstring>
-		   <arg type="i" name="posY" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="enableStatusIcon" tp:name-for-bindings="enableStatusIcon">
-		   <tp:docstring>
-		     Allow SFLphone icon to be displayed in system tray
-		   </tp:docstring>
-		   <arg type="s" name="value" direction="in">
-		     <tp:docstring>
-		       true/false
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-	   <method name="isStatusIconEnabled" tp:name-for-bindings="isStatusIconEnabled">
-		   <tp:docstring>
-		     Test if SFLphone icon is displayed in system tray.
-		   </tp:docstring>
-		   <arg type="s" name="value" direction="out">
-		     <tp:docstring>
-		       true/false
-		     </tp:docstring>
-		   </arg>
-	   </method>
-
-
 	   <!-- Addressbook configuration -->
 	   <method name="getAddressbookSettings" tp:name-for-bindings="getAddressbookSettings">
 		   <tp:docstring>
@@ -922,162 +699,110 @@
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
 		   <arg type="a{ss}" name="entries" direction="in">
-		     <tp:docstring>
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <signal name="accountsChanged" tp:name-for-bindings="accountsChanged">
-	           <tp:docstring>
-		     Signal emited on account changes. Clients should update
-		     all account status with <tp:member-ref>getAccountDetails</tp:member-ref>
-		     iterating over the list provided by <tp:member-ref>getAccountList</tp:member-ref>
-		   </tp:docstring>
 	   </signal>  
 
 	   <signal name="errorAlert" tp:name-for-bindings="errorAlert">
 		   <arg type="i" name="code">
-		     <tp:docstring>
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </signal> 
 
 	   <!-- TLS Methods -->
 	   <method name="getSupportedTlsMethod" tp:name-for-bindings="getSupportedTlsMethod">
 		   <tp:docstring>
-		     Provide a list of supported TLS method
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
-		     <tp:docstring>
-		       A list of TLS method: (TLSv1, SSLv1, SSLv2,
-		       SSLv3, SSLv23)
-		     </tp:docstring>
+			   <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>
-		     Get default TLS setting for new accounts
 		   </tp:docstring>
 		   <arg type="a{ss}" name="details" direction="out">
-		     <tp:docstring>
-		       A hash table containing details. Refer
-		       to <tp:member-ref>getTlsSettings</tp:member-ref>
-		       for possible keys
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getTlsSettings" tp:name-for-bindings="getTlsSettings">
 		   <tp:docstring>
-		     Get current TLS setting for a specific 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:docstring>
-			 A hash table containing details with key:
-			 <ul>
-			   <li>"TLS.listenerPort": valid numerical port</li>
-			   <li>"TLS.enable": true/false</li>
-			   <li>"TLS.certificateListFile": A valid path to
-			     a .pem file containing CA certificate</li>
-			   <li>"TLS.certificateFile": A valid path to a
-			     file containing the public end-point
-			     certificate (optional)</li>
-			   <li>"TLS.privateKeyFile": A valid path to a
-			     file containing the public end-point private
-			     key (optional)</li>
-			   <li>"TLS.password": Public end-point private
-			     key password (optional)</li>
-			   <li>"TLS.method": (TLSv1, SSLv1, SSLv2,
-			     SSLv3, SSLv23)</li>
-		       </ul>  
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="setTlsSettings" tp:name-for-bindings="setTlsSettings">
 		   <tp:docstring>
-		     Update TLS setting for a specific account
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="MapStringString"/>
-		   <arg type="s" name="accountID" direction="in">
-		     <tp:docstring>
-		       The account ID
-		     </tp:docstring>
-		   </arg>
 		   <arg type="a{ss}" name="details" direction="in">
-		     <tp:docstring>
-		       A hash table containing details. Refer
-		       to <tp:member-ref>getTlsSettings</tp:member-ref>
-		       for possible keys.  
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getAddrFromInterfaceName" tp:name-for-bindings="getAddrFromInterfaceName">
 		   <tp:docstring>
-		     Resolve interface IPv4 address provided its name. 
 		   </tp:docstring>
 		   <arg type="s" name="interface" direction="in">
-		     <tp:docstring>
-		       Interface name
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 		   <arg type="s" name="address" direction="out">
-		     <tp:docstring>
-		       Interface IPv4 address
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getAllIpInterface" tp:name-for-bindings="getAllIpInterface">
 		   <tp:docstring>
-		     Provide a list of IP interface's IPv4 address.
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
-		     <tp:docstring>
-		       A list of interface's IPv4 address
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getAllIpInterfaceByName" tp:name-for-bindings="getAllIpInterfaceByName">
 		   <tp:docstring>
-		     Provide a list of IP interface's name: default
-		     (0.0.0.0), lo, eth0 ...
 		   </tp:docstring>
 		   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="VectorString"/>
 		   <arg type="as" name="list" direction="out">
-		     <tp:docstring>
-		       A list of interface's name
-		     </tp:docstring>
+			   <tp:docstring>
+			   </tp:docstring>
 		   </arg>
 	   </method>
 
 	   <method name="getShortcuts" tp:name-for-bindings="getShortcuts">
-                   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringInt"/>
+                   <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="MapStringString"/>
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="a{si}" name="shortcutsMap" direction="out">
+		   <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="MapStringInt"/>
+                   <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="MapStringString"/>
 		   <tp:docstring>
 		   </tp:docstring>
-		   <arg type="a{si}" name="shortcutsMap" direction="in">
+		   <arg type="a{ss}" name="shortcutsMap" direction="in">
 			   <tp:docstring>
 			   </tp:docstring>
 		   </arg>
diff --git a/sflphone-common/src/dbus/configurationmanager.cpp b/sflphone-common/src/dbus/configurationmanager.cpp
index 798bdaf58c204cee82011f22c7049c981333df24..2273ce8381b24e44df1c198007ab245d28d43d98 100644
--- a/sflphone-common/src/dbus/configurationmanager.cpp
+++ b/sflphone-common/src/dbus/configurationmanager.cpp
@@ -35,603 +35,598 @@
 #include <sstream>
 #include "../manager.h"
 #include "sip/sipvoiplink.h"
+#include "sip/sipaccount.h"
 
 const char* ConfigurationManager::SERVER_PATH =
-		"/org/sflphone/SFLphone/ConfigurationManager";
-
-ConfigurationManager::ConfigurationManager(DBus::Connection& connection) :
-	DBus::ObjectAdaptor(connection, SERVER_PATH) {
-	shortcutsKeys.push_back("pick_up");
-	shortcutsKeys.push_back("hang_up");
-	shortcutsKeys.push_back("popup_window");
-	shortcutsKeys.push_back("toggle_pick_up_hang_up");
-	shortcutsKeys.push_back("toggle_hold");
-}
-
-std::map<std::string, std::string> ConfigurationManager::getAccountDetails(
-		const std::string& accountID) {
-	return Manager::instance().getAccountDetails(accountID);
-}
-
-std::map<std::string, std::string> ConfigurationManager::getTlsSettingsDefault(
-		void) {
-
-	std::map<std::string, std::string> tlsSettingsDefault;
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_CA_LIST_FILE, ""));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_CERTIFICATE_FILE, ""));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_PRIVATE_KEY_FILE, ""));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(TLS_PASSWORD,
-			""));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(TLS_METHOD,
-			"TLSv1"));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(TLS_CIPHERS,
-			""));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_SERVER_NAME, ""));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_VERIFY_SERVER, "true"));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_VERIFY_CLIENT, "true"));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_REQUIRE_CLIENT_CERTIFICATE, "true"));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_NEGOTIATION_TIMEOUT_SEC, "2"));
-	tlsSettingsDefault.insert(std::pair<std::string, std::string>(
-			TLS_NEGOTIATION_TIMEOUT_MSEC, "0"));
-
-	return tlsSettingsDefault;
-}
-
-std::map<std::string, std::string> ConfigurationManager::getIp2IpDetails(void) {
-
-	std::map<std::string, std::string> ip2ipAccountDetails;
-
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(ACCOUNT_ID,
-			IP2IP_PROFILE));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			SRTP_KEY_EXCHANGE, Manager::instance().getConfigString(
-					IP2IP_PROFILE, SRTP_KEY_EXCHANGE)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(SRTP_ENABLE,
-			Manager::instance().getConfigString(IP2IP_PROFILE, SRTP_ENABLE)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			SRTP_RTP_FALLBACK, Manager::instance().getConfigString(
-					IP2IP_PROFILE, SRTP_RTP_FALLBACK)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			ZRTP_DISPLAY_SAS, Manager::instance().getConfigString(
-					IP2IP_PROFILE, ZRTP_DISPLAY_SAS)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			ZRTP_HELLO_HASH, Manager::instance().getConfigString(IP2IP_PROFILE,
-					ZRTP_HELLO_HASH)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			ZRTP_NOT_SUPP_WARNING, Manager::instance().getConfigString(
-					IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			ZRTP_DISPLAY_SAS_ONCE, Manager::instance().getConfigString(
-					IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE)));
-
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(
-			LOCAL_INTERFACE, Manager::instance().getConfigString(IP2IP_PROFILE,
-					LOCAL_INTERFACE)));
-	ip2ipAccountDetails.insert(std::pair<std::string, std::string>(LOCAL_PORT,
-			Manager::instance().getConfigString(IP2IP_PROFILE, LOCAL_PORT)));
-
-	std::map<std::string, std::string> tlsSettings;
-	tlsSettings = getTlsSettings(IP2IP_PROFILE);
-	std::copy(tlsSettings.begin(), tlsSettings.end(), std::inserter(
-			ip2ipAccountDetails, ip2ipAccountDetails.end()));
-
-	return ip2ipAccountDetails;
-
-}
-
-void ConfigurationManager::setIp2IpDetails(const std::map<std::string,
-		std::string>& details) {
-	std::map<std::string, std::string> map_cpy = details;
-	std::map<std::string, std::string>::iterator it;
-
-	it = map_cpy.find(LOCAL_INTERFACE);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_INTERFACE,
-				it->second);
-	}
-
-	it = map_cpy.find(LOCAL_PORT);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, LOCAL_PORT, it->second);
-	}
-
-	it = map_cpy.find(SRTP_ENABLE);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, SRTP_ENABLE, it->second);
-	}
-
-	it = map_cpy.find(SRTP_RTP_FALLBACK);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, SRTP_RTP_FALLBACK,
-				it->second);
-	}
-
-	it = map_cpy.find(SRTP_KEY_EXCHANGE);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, SRTP_KEY_EXCHANGE,
-				it->second);
-	}
-
-	it = map_cpy.find(ZRTP_DISPLAY_SAS);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS,
-				it->second);
-	}
-
-	it = map_cpy.find(ZRTP_NOT_SUPP_WARNING);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_NOT_SUPP_WARNING,
-				it->second);
-	}
-
-	it = map_cpy.find(ZRTP_HELLO_HASH);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_HELLO_HASH,
-				it->second);
-	}
-
-	it = map_cpy.find(ZRTP_DISPLAY_SAS_ONCE);
-
-	if (it != details.end()) {
-		Manager::instance().setConfig(IP2IP_PROFILE, ZRTP_DISPLAY_SAS_ONCE,
-				it->second);
-	}
-
-	setTlsSettings(IP2IP_PROFILE, details);
-
-	Manager::instance().saveConfig();
-
-	// Update account details to the client side
-	accountsChanged();
+    "/org/sflphone/SFLphone/ConfigurationManager";
+
+ConfigurationManager::ConfigurationManager (DBus::Connection& connection) :
+        DBus::ObjectAdaptor (connection, SERVER_PATH)
+{
+    shortcutsKeys.push_back ("pick_up");
+    shortcutsKeys.push_back ("hang_up");
+    shortcutsKeys.push_back ("popup_window");
+    shortcutsKeys.push_back ("toggle_pick_up_hang_up");
+    shortcutsKeys.push_back ("toggle_hold");
+}
 
-	// Reload account settings from config
-	Manager::instance().getAccount(IP2IP_PROFILE)->loadConfig();
+std::map<std::string, std::string> ConfigurationManager::getAccountDetails (
+    const std::string& accountID)
+{
 
+    _debug ("ConfigurationManager: get account details %s", accountID.c_str());
+    return Manager::instance().getAccountDetails (accountID);
 }
 
-std::map<std::string, std::string> ConfigurationManager::getTlsSettings(
-		const std::string& section) {
-	std::map<std::string, std::string> tlsSettings;
+std::map<std::string, std::string> ConfigurationManager::getTlsSettingsDefault (
+    void)
+{
+
+    std::map<std::string, std::string> tlsSettingsDefault;
 
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT,
-			Manager::instance().getConfigString(section, TLS_LISTENER_PORT)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_ENABLE,
-			Manager::instance().getConfigString(section, TLS_ENABLE)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE,
-			Manager::instance().getConfigString(section, TLS_CA_LIST_FILE)));
-	tlsSettings.insert(std::pair<std::string, std::string>(
-			TLS_CERTIFICATE_FILE, Manager::instance().getConfigString(section,
-					TLS_CERTIFICATE_FILE)));
-	tlsSettings.insert(std::pair<std::string, std::string>(
-			TLS_PRIVATE_KEY_FILE, Manager::instance().getConfigString(section,
-					TLS_PRIVATE_KEY_FILE)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_PASSWORD,
-			Manager::instance().getConfigString(section, TLS_PASSWORD)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_METHOD,
-			Manager::instance().getConfigString(section, TLS_METHOD)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_CIPHERS,
-			Manager::instance().getConfigString(section, TLS_CIPHERS)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME,
-			Manager::instance().getConfigString(section, TLS_SERVER_NAME)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER,
-			Manager::instance().getConfigString(section, TLS_VERIFY_SERVER)));
-	tlsSettings.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT,
-			Manager::instance().getConfigString(section, TLS_VERIFY_CLIENT)));
-	tlsSettings.insert(std::pair<std::string, std::string>(
-			TLS_REQUIRE_CLIENT_CERTIFICATE,
-			Manager::instance().getConfigString(section,
-					TLS_REQUIRE_CLIENT_CERTIFICATE)));
-	tlsSettings.insert(std::pair<std::string, std::string>(
-			TLS_NEGOTIATION_TIMEOUT_SEC, Manager::instance().getConfigString(
-					section, TLS_NEGOTIATION_TIMEOUT_SEC)));
-	tlsSettings.insert(std::pair<std::string, std::string>(
-			TLS_NEGOTIATION_TIMEOUT_MSEC, Manager::instance().getConfigString(
-					section, TLS_NEGOTIATION_TIMEOUT_MSEC)));
-	return tlsSettings;
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_CA_LIST_FILE, ""));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_CERTIFICATE_FILE, ""));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_PRIVATE_KEY_FILE, ""));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_PASSWORD,
+                               ""));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_METHOD,
+                               "TLSv1"));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (TLS_CIPHERS,
+                               ""));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_SERVER_NAME, ""));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_VERIFY_SERVER, "true"));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_VERIFY_CLIENT, "true"));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_REQUIRE_CLIENT_CERTIFICATE, "true"));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_NEGOTIATION_TIMEOUT_SEC, "2"));
+    tlsSettingsDefault.insert (std::pair<std::string, std::string> (
+                                   TLS_NEGOTIATION_TIMEOUT_MSEC, "0"));
+
+    return tlsSettingsDefault;
 }
 
-void ConfigurationManager::setTlsSettings(const std::string& section,
-		const std::map<std::string, std::string>& details) {
-	std::map<std::string, std::string> map_cpy = details;
-	std::map<std::string, std::string>::iterator it;
+std::map<std::string, std::string> ConfigurationManager::getIp2IpDetails (void)
+{
+
+    std::map<std::string, std::string> ip2ipAccountDetails;
 
-	it = map_cpy.find(TLS_LISTENER_PORT);
-	if (it != details.end()) {
-		Manager::instance().setConfig(section, TLS_LISTENER_PORT, it->second);
-	}
+    SIPAccount *sipaccount = (SIPAccount *) Manager::instance().getAccount (IP2IP_PROFILE);
 
-	it = map_cpy.find(TLS_ENABLE);
+    if (!sipaccount) {
+        _error ("ConfigurationManager: could not find account");
+        return ip2ipAccountDetails;
+    }
 
-	if (it != details.end()) {
-		Manager::instance().setConfig(section, TLS_ENABLE, it->second);
-	}
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ACCOUNT_ID, IP2IP_PROFILE));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (SRTP_KEY_EXCHANGE, sipaccount->getSrtpKeyExchange()));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (SRTP_ENABLE, sipaccount->getSrtpEnable() ? "true" : "false"));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (SRTP_RTP_FALLBACK, sipaccount->getSrtpFallback() ? "true" : "false"));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_DISPLAY_SAS, sipaccount->getZrtpDisplaySas() ? "true" : "false"));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_HELLO_HASH, sipaccount->getZrtpHelloHash() ? "true" : "false"));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_NOT_SUPP_WARNING, sipaccount->getZrtpNotSuppWarning() ? "true" : "false"));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (ZRTP_DISPLAY_SAS_ONCE, sipaccount->getZrtpDiaplaySasOnce() ? "true" : "false"));
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_INTERFACE, sipaccount->getLocalInterface()));
+    std::stringstream portstr;
+    portstr << sipaccount->getLocalPort();
+    ip2ipAccountDetails.insert (std::pair<std::string, std::string> (LOCAL_PORT, portstr.str()));
 
-	it = map_cpy.find(TLS_CA_LIST_FILE);
+    std::map<std::string, std::string> tlsSettings;
+    tlsSettings = getTlsSettings();
+    std::copy (tlsSettings.begin(), tlsSettings.end(), std::inserter (
+                   ip2ipAccountDetails, ip2ipAccountDetails.end()));
+
+    return ip2ipAccountDetails;
+
+}
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_CA_LIST_FILE, it->second);
-	}
+void ConfigurationManager::setIp2IpDetails (const std::map<std::string,
+        std::string>& details)
+{
+    std::map<std::string, std::string> map_cpy = details;
+    std::map<std::string, std::string>::iterator it;
 
-	it = map_cpy.find(TLS_CERTIFICATE_FILE);
+    SIPAccount *sipaccount = (SIPAccount *) Manager::instance().getAccount (IP2IP_PROFILE);
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_CERTIFICATE_FILE, it->second);
-	}
+    if (!sipaccount) {
+        _error ("ConfigurationManager: could not find account");
+    }
 
-	it = map_cpy.find(TLS_PRIVATE_KEY_FILE);
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_PRIVATE_KEY_FILE, it->second);
-	}
+    it = map_cpy.find (LOCAL_INTERFACE);
 
-	it = map_cpy.find(TLS_PASSWORD);
+    if (it != details.end()) sipaccount->setLocalInterface (it->second);
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_PASSWORD, it->second);
-	}
+    it = map_cpy.find (LOCAL_PORT);
 
-	it = map_cpy.find(TLS_METHOD);
+    if (it != details.end()) sipaccount->setLocalPort (atoi (it->second.data()));
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_METHOD, it->second);
-	}
+    it = map_cpy.find (SRTP_ENABLE);
 
-	it = map_cpy.find(TLS_CIPHERS);
+    if (it != details.end()) sipaccount->setSrtpEnable ( (it->second == "true"));
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_CIPHERS, it->second);
-	}
+    it = map_cpy.find (SRTP_RTP_FALLBACK);
 
-	it = map_cpy.find(TLS_SERVER_NAME);
+    if (it != details.end()) sipaccount->setSrtpFallback ( (it->second == "true"));
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_SERVER_NAME, it->second);
-	}
+    it = map_cpy.find (SRTP_KEY_EXCHANGE);
 
-	it = map_cpy.find(TLS_VERIFY_CLIENT);
+    if (it != details.end()) sipaccount->setSrtpKeyExchange (it->second);
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_VERIFY_CLIENT, it->second);
-	}
+    it = map_cpy.find (ZRTP_DISPLAY_SAS);
 
-	it = map_cpy.find(TLS_REQUIRE_CLIENT_CERTIFICATE);
+    if (it != details.end()) sipaccount->setZrtpDisplaySas ( (it->second == "true"));
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_REQUIRE_CLIENT_CERTIFICATE,
-				it->second);
-	}
+    it = map_cpy.find (ZRTP_NOT_SUPP_WARNING);
 
-	it = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_SEC);
+    if (it != details.end()) sipaccount->setZrtpNotSuppWarning ( (it->second == "true"));
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_SEC,
-				it->second);
-	}
+    it = map_cpy.find (ZRTP_HELLO_HASH);
 
-	it = map_cpy.find(TLS_NEGOTIATION_TIMEOUT_MSEC);
+    if (it != details.end()) sipaccount->setZrtpHelloHash ( (it->second == "true"));
 
-	if (it != map_cpy.end()) {
-		Manager::instance().setConfig(section, TLS_NEGOTIATION_TIMEOUT_MSEC,
-				it->second);
-	}
+    it = map_cpy.find (ZRTP_DISPLAY_SAS_ONCE);
 
-	Manager::instance().saveConfig();
+    if (it != details.end()) sipaccount->setZrtpDiaplaySasOnce ( (it->second == "true"));
 
-	// Update account details to the client side
-	accountsChanged();
+    setTlsSettings (details);
+
+    Manager::instance().saveConfig();
+
+    // Update account details to the client side
+    accountsChanged();
+
+    // Reload account settings from config
+    Manager::instance().getAccount (IP2IP_PROFILE)->loadConfig();
 
 }
 
-std::map<std::string, std::string> ConfigurationManager::getCredential(
-		const std::string& accountID, const int32_t& index) {
+std::map<std::string, std::string> ConfigurationManager::getTlsSettings()
+{
 
-	std::string credentialIndex;
-	std::stringstream streamOut;
-	streamOut << index;
-	credentialIndex = streamOut.str();
+    std::map<std::string, std::string> tlsSettings;
 
-	std::string section = std::string("Credential") + std::string(":")
-			+ accountID + std::string(":") + credentialIndex;
+    SIPAccount *sipaccount = (SIPAccount *) Manager::instance().getAccount (IP2IP_PROFILE);
 
-	std::map<std::string, std::string> credentialInformation;
-	std::string username = Manager::instance().getConfigString(section,
-			USERNAME);
-	std::string password = Manager::instance().getConfigString(section,
-			PASSWORD);
-	std::string realm = Manager::instance().getConfigString(section, REALM);
+    if (!sipaccount)
+        return tlsSettings;
 
-	credentialInformation.insert(std::pair<std::string, std::string>(USERNAME,
-			username));
-	credentialInformation.insert(std::pair<std::string, std::string>(PASSWORD,
-			password));
-	credentialInformation.insert(std::pair<std::string, std::string>(REALM,
-			realm));
+    std::stringstream portstr;
+    portstr << sipaccount->getTlsListenerPort();
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_LISTENER_PORT, portstr.str()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_ENABLE, sipaccount->getTlsEnable()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_CA_LIST_FILE, sipaccount->getTlsCaListFile()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_CERTIFICATE_FILE, sipaccount->getTlsCertificateFile()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_PRIVATE_KEY_FILE, sipaccount->getTlsPrivateKeyFile()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_PASSWORD, sipaccount->getTlsPassword()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_METHOD, sipaccount->getTlsMethod()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_CIPHERS, sipaccount->getTlsCiphers()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_SERVER_NAME, sipaccount->getTlsServerName()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_VERIFY_SERVER, sipaccount->getTlsVerifyServer() ? "true" : "false"));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_VERIFY_CLIENT, sipaccount->getTlsVerifyClient() ? "true" : "false"));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_REQUIRE_CLIENT_CERTIFICATE, sipaccount->getTlsRequireClientCertificate() ? "true" : "false"));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_SEC, sipaccount->getTlsNegotiationTimeoutSec()));
+    tlsSettings.insert (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_MSEC, sipaccount->getTlsNegotiationTimeoutMsec()));
 
-	return credentialInformation;
+    return tlsSettings;
 }
 
-int32_t ConfigurationManager::getNumberOfCredential(
-		const std::string& accountID) {
-	return Manager::instance().getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER);
+void ConfigurationManager::setTlsSettings (const std::map<std::string, std::string>& details)
+{
+
+    std::map<std::string, std::string> map_cpy = details;
+    std::map<std::string, std::string>::iterator it;
+
+    SIPAccount * sipaccount = (SIPAccount *) Manager::instance().getAccount (IP2IP_PROFILE);
+
+    if (!sipaccount) {
+        _debug ("ConfigurationManager: Error: No valid account in set TLS settings");
+        return;
+    }
+
+    it = map_cpy.find (TLS_LISTENER_PORT);
+
+    if (it != details.end()) sipaccount->setTlsListenerPort (atoi (it->second.data()));
+
+    it = map_cpy.find (TLS_ENABLE);
+
+    if (it != details.end()) sipaccount->setTlsEnable (it->second);
+
+    it = map_cpy.find (TLS_CA_LIST_FILE);
+
+    if (it != map_cpy.end()) sipaccount->setTlsCaListFile (it->second);
+
+    it = map_cpy.find (TLS_CERTIFICATE_FILE);
+
+    if (it != map_cpy.end()) sipaccount->setTlsCertificateFile (it->second);
+
+    it = map_cpy.find (TLS_PRIVATE_KEY_FILE);
+
+    if (it != map_cpy.end()) sipaccount->setTlsPrivateKeyFile (it->second);
+
+    it = map_cpy.find (TLS_PASSWORD);
+
+    if (it != map_cpy.end()) sipaccount->setTlsPassword (it->second);
+
+    it = map_cpy.find (TLS_METHOD);
+
+    if (it != map_cpy.end()) sipaccount->setTlsMethod (it->second);
+
+    it = map_cpy.find (TLS_CIPHERS);
+
+    if (it != map_cpy.end()) sipaccount->setTlsCiphers (it->second);
+
+    it = map_cpy.find (TLS_SERVER_NAME);
+
+    if (it != map_cpy.end()) sipaccount->setTlsServerName (it->second);
+
+    it = map_cpy.find (TLS_VERIFY_CLIENT);
+
+    if (it != map_cpy.end()) sipaccount->setTlsVerifyClient ( (it->second == "true") ? true : false);
+
+    it = map_cpy.find (TLS_REQUIRE_CLIENT_CERTIFICATE);
+
+    if (it != map_cpy.end()) sipaccount->setTlsRequireClientCertificate ( (it->second == "true") ? true : false);
+
+    it = map_cpy.find (TLS_NEGOTIATION_TIMEOUT_SEC);
+
+    if (it != map_cpy.end()) sipaccount->setTlsNegotiationTimeoutSec (it->second);
+
+    it = map_cpy.find (TLS_NEGOTIATION_TIMEOUT_MSEC);
+
+    if (it != map_cpy.end()) sipaccount->setTlsNegotiationTimeoutMsec (it->second);
+
+    Manager::instance().saveConfig();
+
+    // Update account details to the client side
+    accountsChanged();
+
 }
 
-void ConfigurationManager::setNumberOfCredential(const std::string& accountID,
-		const int32_t& number) {
-	if (accountID != AccountNULL || !accountID.empty()) {
-		Manager::instance().setConfig(accountID, CONFIG_CREDENTIAL_NUMBER,
-				number);
-	}
+std::map<std::string, std::string> ConfigurationManager::getCredential (
+    const std::string& accountID, const int32_t& index)
+{
+
+    Account *account = Manager::instance().getAccount (accountID);
+
+    std::map<std::string, std::string> credentialInformation;
+
+    if (account->getType() != "SIP")
+        return credentialInformation;
+
+    SIPAccount *sipaccount = (SIPAccount *) account;
+
+
+    if (index == 0) {
+        std::string username = sipaccount->getUsername();
+        std::string password = sipaccount->getPassword();
+        std::string realm = sipaccount->getRealm();
+
+        credentialInformation.insert (std::pair<std::string, std::string> (USERNAME, username));
+        credentialInformation.insert (std::pair<std::string, std::string> (PASSWORD, password));
+        credentialInformation.insert (std::pair<std::string, std::string> (REALM, realm));
+    } else {
+
+        // TODO: implement for extra credentials
+        std::string username = sipaccount->getUsername();
+        std::string password = sipaccount->getPassword();
+        std::string realm = sipaccount->getRealm();
+
+        credentialInformation.insert (std::pair<std::string, std::string> (USERNAME, username));
+        credentialInformation.insert (std::pair<std::string, std::string> (PASSWORD, password));
+        credentialInformation.insert (std::pair<std::string, std::string> (REALM, realm));
+    }
+
+    return credentialInformation;
+}
+
+int32_t ConfigurationManager::getNumberOfCredential (
+    const std::string& accountID)
+{
+
+    Account *account = Manager::instance().getAccount (accountID);
+
+    if (!account)
+        return 0;
+
+    if (account->getType() == "SIP") {
+        SIPAccount *sipaccount = static_cast<SIPAccount *> (account);
+        return sipaccount->getCredentialCount();
+    } else
+        return 0;
 }
 
-void ConfigurationManager::setCredential(const std::string& accountID,
-		const int32_t& index, const std::map<std::string, std::string>& details) {
-	Manager::instance().setCredential(accountID, index, details);
+void ConfigurationManager::setCredential (const std::string& accountID,
+        const int32_t& index, const std::map<std::string, std::string>& details)
+{
+    Manager::instance().setCredential (accountID, index, details);
 }
 
-void ConfigurationManager::deleteAllCredential(const std::string& accountID) {
-	Manager::instance().deleteAllCredential(accountID);
+void ConfigurationManager::deleteAllCredential (const std::string& accountID)
+{
+    Manager::instance().deleteAllCredential (accountID);
 }
 
-void ConfigurationManager::setAccountDetails(const std::string& accountID,
-		const std::map<std::string, std::string>& details) {
-	Manager::instance().setAccountDetails(accountID, details);
+void ConfigurationManager::setAccountDetails (const std::string& accountID,
+        const std::map<std::string, std::string>& details)
+{
+    Manager::instance().setAccountDetails (accountID, details);
 }
 
-void ConfigurationManager::sendRegister(const std::string& accountID,
-		const int32_t& expire) {
-	Manager::instance().sendRegister(accountID, expire);
+void ConfigurationManager::sendRegister (const std::string& accountID,
+        const int32_t& expire)
+{
+    Manager::instance().sendRegister (accountID, expire);
 }
 
-std::string ConfigurationManager::addAccount(const std::map<std::string,
-		std::string>& details) {
-	return Manager::instance().addAccount(details);
+std::string ConfigurationManager::addAccount (const std::map<std::string,
+        std::string>& details)
+{
+    return Manager::instance().addAccount (details);
 }
 
-void ConfigurationManager::removeAccount(const std::string& accoundID) {
-	return Manager::instance().removeAccount(accoundID);
+void ConfigurationManager::removeAccount (const std::string& accoundID)
+{
+    return Manager::instance().removeAccount (accoundID);
 }
 
-std::vector<std::string> ConfigurationManager::getAccountList() {
-	return Manager::instance().getAccountList();
+std::vector<std::string> ConfigurationManager::getAccountList()
+{
+    return Manager::instance().getAccountList();
 }
 
 //TODO
-std::vector<std::string> ConfigurationManager::getToneLocaleList() {
-	std::vector<std::string> ret;
-	return ret;
+std::vector<std::string> ConfigurationManager::getToneLocaleList()
+{
+    std::vector<std::string> ret;
+    return ret;
 }
 
 //TODO
-std::string ConfigurationManager::getVersion() {
-	std::string ret("");
-	return ret;
+std::string ConfigurationManager::getVersion()
+{
+    std::string ret ("");
+    return ret;
 }
 
 //TODO
-std::vector<std::string> ConfigurationManager::getRingtoneList() {
-	std::vector<std::string> ret;
-	return ret;
+std::vector<std::string> ConfigurationManager::getRingtoneList()
+{
+    std::vector<std::string> ret;
+    return ret;
 }
 
 /**
  * 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<std::string> ConfigurationManager::getCodecList(void) {
+std::vector<std::string> ConfigurationManager::getCodecList (void)
+{
 
-	std::vector<std::string> list;
+    std::vector<std::string> list;
 
-	CodecsMap codecs =
-			Manager::instance().getCodecDescriptorMap().getCodecsMap();
-	CodecsMap::iterator iter = codecs.begin();
+    CodecsMap codecs = Manager::instance().getCodecDescriptorMap().getCodecsMap();
+    CodecsMap::iterator iter = codecs.begin();
 
-	while (iter != codecs.end()) {
-		std::stringstream ss;
+    while (iter != codecs.end()) {
+        std::stringstream ss;
 
-		if (iter->second != NULL) {
-			ss << iter->first;
-			list.push_back((ss.str()).data());
-		}
+        if (iter->second != NULL) {
+            ss << iter->first;
+            list.push_back ( (ss.str()).data());
+        }
 
-		iter++;
-	}
+        iter++;
+    }
 
-	return list;
+    return list;
 }
 
-std::vector<std::string> ConfigurationManager::getSupportedTlsMethod(void) {
-	std::vector<std::string> method;
-	method.push_back("Default");
-	method.push_back("TLSv1");
-	method.push_back("SSLv2");
-	method.push_back("SSLv3");
-	method.push_back("SSLv23");
-	return method;
+std::vector<std::string> ConfigurationManager::getSupportedTlsMethod (void)
+{
+    std::vector<std::string> method;
+    method.push_back ("Default");
+    method.push_back ("TLSv1");
+    method.push_back ("SSLv2");
+    method.push_back ("SSLv3");
+    method.push_back ("SSLv23");
+    return method;
 }
 
-std::vector<std::string> ConfigurationManager::getCodecDetails(
-		const int32_t& payload) {
+std::vector<std::string> ConfigurationManager::getCodecDetails (
+    const int32_t& payload)
+{
 
-	return Manager::instance().getCodecDescriptorMap().getCodecSpecifications(
-			payload);
+    return Manager::instance().getCodecDescriptorMap().getCodecSpecifications (
+               payload);
 }
 
-std::vector<std::string> ConfigurationManager::getActiveCodecList(
-		const std::string& accountID) {
-
-	_debug("Send active codec list for account %s", accountID.c_str ());
+std::vector<std::string> ConfigurationManager::getActiveCodecList (
+    const std::string& accountID)
+{
 
-	std::vector<std::string> v;
-	Account *acc;
-	CodecOrder active;
-	unsigned int i = 0;
-	size_t size;
+    _debug ("Send active codec list for account %s", accountID.c_str ());
 
-	acc = Manager::instance().getAccount(accountID);
-	if (acc != NULL) {
-		active = acc->getActiveCodecs();
-		size = active.size();
-		while (i < size) {
-			std::stringstream ss;
-			ss << active[i];
-			v.push_back((ss.str()).data());
-			i++;
-		}
-	}
+    std::vector<std::string> v;
+    Account *acc;
+    CodecOrder active;
+    unsigned int i = 0;
+    size_t size;
 
-	return v;
+    acc = Manager::instance().getAccount (accountID);
 
-}
-
-void ConfigurationManager::setActiveCodecList(
-		const std::vector<std::string>& list, const std::string& accountID) {
+    if (acc != NULL) {
+        active = acc->getActiveCodecs();
+        size = active.size();
 
-	_debug ("ConfigurationManager: Active codec list received");
+        while (i < size) {
+            std::stringstream ss;
+            ss << active[i];
+            v.push_back ( (ss.str()).data());
+            i++;
+        }
+    }
 
-	Account *acc;
+    return v;
 
-	// Save the codecs list per account
-	acc = Manager::instance().getAccount(accountID);
-	if (acc != NULL) {
-		acc->setActiveCodecs(list);
-	}
 }
 
+void ConfigurationManager::setActiveCodecList (
+    const std::vector<std::string>& list, const std::string& accountID)
+{
 
-// Audio devices related methods
-std::vector<std::string> ConfigurationManager::getInputAudioPluginList() {
-
-	_debug("ConfigurationManager: Active codec list received");
+    _debug ("ConfigurationManager: Active codec list received");
 
-	std::vector<std::string> v;
+    Account *acc;
 
-	v.push_back("default");
-	v.push_back("surround40");
-	v.push_back("plug:hw");
+    // Save the codecs list per account
+    acc = Manager::instance().getAccount (accountID);
 
-	return v;
+    if (acc != NULL) {
+        acc->setActiveCodecs (list);
+    }
 }
 
 
+std::vector<std::string> ConfigurationManager::getAudioPluginList()
+{
 
-std::vector<std::string> ConfigurationManager::getOutputAudioPluginList() {
+    std::vector<std::string> v;
 
-	std::vector<std::string> v;
+    v.push_back (PCM_DEFAULT);
+    // v.push_back(PCM_DMIX);
+    v.push_back (PCM_DMIX_DSNOOP);
 
-	v.push_back(PCM_DEFAULT);
-	v.push_back(PCM_DMIX);
+    return v;
+}
+
+
+void ConfigurationManager::setAudioPlugin (const std::string& audioPlugin)
+{
+    _debug ("ConfigurationManager: Set audio plugin %s", audioPlugin.c_str());
 
-	return v;
+    return Manager::instance().setAudioPlugin (audioPlugin);
 }
 
+std::vector<std::string> ConfigurationManager::getAudioOutputDeviceList()
+{
+    return Manager::instance().getAudioOutputDeviceList();
+}
 
-void ConfigurationManager::setInputAudioPlugin(const std::string& audioPlugin) {
-	return Manager::instance().setInputAudioPlugin(audioPlugin);
+std::vector<std::string> ConfigurationManager::getAudioInputDeviceList()
+{
+    return Manager::instance().getAudioInputDeviceList();
 }
 
-void ConfigurationManager::setOutputAudioPlugin(const std::string& audioPlugin) {
-	return Manager::instance().setOutputAudioPlugin(audioPlugin);
+void ConfigurationManager::setAudioOutputDevice (const int32_t& index)
+{
+    return Manager::instance().setAudioDevice (index, SFL_PCM_PLAYBACK);
 }
 
-std::vector<std::string> ConfigurationManager::getAudioOutputDeviceList() {
-	return Manager::instance().getAudioOutputDeviceList();
+void ConfigurationManager::setAudioInputDevice (const int32_t& index)
+{
+    return Manager::instance().setAudioDevice (index, SFL_PCM_CAPTURE);
 }
 
-void ConfigurationManager::setAudioOutputDevice(const int32_t& index) {
-	return Manager::instance().setAudioOutputDevice(index);
+void ConfigurationManager::setAudioRingtoneDevice (const int32_t& index)
+{
+    return Manager::instance().setAudioDevice (index, SFL_PCM_RINGTONE);
 }
 
-std::vector<std::string> ConfigurationManager::getAudioInputDeviceList() {
-	return Manager::instance().getAudioInputDeviceList();
+std::vector<std::string> ConfigurationManager::getCurrentAudioDevicesIndex()
+{
+    return Manager::instance().getCurrentAudioDevicesIndex();
 }
 
-void ConfigurationManager::setAudioInputDevice(const int32_t& index) {
-	return Manager::instance().setAudioInputDevice(index);
+int32_t ConfigurationManager::getAudioDeviceIndex (const std::string& name)
+{
+    return Manager::instance().getAudioDeviceIndex (name);
 }
 
-std::vector<std::string> ConfigurationManager::getCurrentAudioDevicesIndex() {
-	return Manager::instance().getCurrentAudioDevicesIndex();
+std::string ConfigurationManager::getCurrentAudioOutputPlugin (void)
+{
+    _debug ("ConfigurationManager: Get audio plugin %s", Manager::instance().getCurrentAudioOutputPlugin().c_str());
+
+    return Manager::instance().getCurrentAudioOutputPlugin();
 }
 
-int32_t ConfigurationManager::getAudioDeviceIndex(const std::string& name) {
-	return Manager::instance().getAudioDeviceIndex(name);
+std::string ConfigurationManager::getNoiseSuppressState (void)
+{
+    return Manager::instance().getNoiseSuppressState();
 }
 
-std::string ConfigurationManager::getCurrentAudioOutputPlugin(void) {
-	return Manager::instance().getCurrentAudioOutputPlugin();
+void ConfigurationManager::setNoiseSuppressState (const std::string& state)
+{
+    Manager::instance().setNoiseSuppressState (state);
 }
 
-std::vector<std::string> ConfigurationManager::getPlaybackDeviceList() {
-	std::vector<std::string> ret;
-	return ret;
+std::vector<std::string> ConfigurationManager::getPlaybackDeviceList()
+{
+    std::vector<std::string> ret;
+    return ret;
 }
 
-std::vector<std::string> ConfigurationManager::getRecordDeviceList() {
-	std::vector<std::string> ret;
-	return ret;
+std::vector<std::string> ConfigurationManager::getRecordDeviceList()
+{
+    std::vector<std::string> ret;
+    return ret;
 
 }
 
-bool ConfigurationManager::isMd5CredentialHashing(void) {
-	bool isEnabled = Manager::instance().getConfigBool(PREFERENCES,
-			CONFIG_MD5HASH);
-	return isEnabled;
+bool ConfigurationManager::isMd5CredentialHashing (void)
+{
+    return Manager::instance().preferences.getMd5Hash();
 }
 
-void ConfigurationManager::setMd5CredentialHashing(const bool& enabled) {
-	if (enabled) {
-		Manager::instance().setConfig(PREFERENCES, CONFIG_MD5HASH, TRUE_STR);
-	} else {
-		Manager::instance().setConfig(PREFERENCES, CONFIG_MD5HASH, FALSE_STR);
-	}
+void ConfigurationManager::setMd5CredentialHashing (const bool& enabled)
+{
+    Manager::instance().preferences.setMd5Hash (enabled);
 }
 
-int32_t ConfigurationManager::isIax2Enabled(void) {
-	return Manager::instance().isIax2Enabled();
+int32_t ConfigurationManager::isIax2Enabled (void)
+{
+    return Manager::instance().isIax2Enabled();
 }
 
-void ConfigurationManager::ringtoneEnabled(void) {
-	Manager::instance().ringtoneEnabled();
+void ConfigurationManager::ringtoneEnabled (const std::string& accountID)
+{
+    Manager::instance().ringtoneEnabled (accountID);
 }
 
-int32_t ConfigurationManager::isRingtoneEnabled(void) {
-	return Manager::instance().isRingtoneEnabled();
+int32_t ConfigurationManager::isRingtoneEnabled (const std::string& accountID)
+{
+    return Manager::instance().isRingtoneEnabled (accountID);
 }
 
-std::string ConfigurationManager::getRingtoneChoice(void) {
-	return Manager::instance().getRingtoneChoice();
+std::string ConfigurationManager::getRingtoneChoice (const std::string& accountID)
+{
+    return Manager::instance().getRingtoneChoice (accountID);
 }
 
-void ConfigurationManager::setRingtoneChoice(const std::string& tone) {
-	Manager::instance().setRingtoneChoice(tone);
+void ConfigurationManager::setRingtoneChoice (const std::string& accountID, const std::string& tone)
+{
+    Manager::instance().setRingtoneChoice (accountID, tone);
 }
 
-std::string ConfigurationManager::getRecordPath(void) {
-	return Manager::instance().getRecordPath();
+std::string ConfigurationManager::getRecordPath (void)
+{
+    return Manager::instance().getRecordPath();
 }
 
-void ConfigurationManager::setRecordPath(const std::string& recPath) {
-	Manager::instance().setRecordPath(recPath);
+void ConfigurationManager::setRecordPath (const std::string& recPath)
+{
+    Manager::instance().setRecordPath (recPath);
 }
 
+/*
 int32_t ConfigurationManager::getDialpad(void) {
 	return Manager::instance().getDialpad();
 }
@@ -655,15 +650,19 @@ int32_t ConfigurationManager::getVolumeControls(void) {
 void ConfigurationManager::setVolumeControls(const bool& display) {
 	Manager::instance().setVolumeControls(display);
 }
+*/
 
-int32_t ConfigurationManager::getHistoryLimit(void) {
-	return Manager::instance().getHistoryLimit();
+int32_t ConfigurationManager::getHistoryLimit (void)
+{
+    return Manager::instance().getHistoryLimit();
 }
 
-void ConfigurationManager::setHistoryLimit(const int32_t& days) {
-	Manager::instance().setHistoryLimit(days);
+void ConfigurationManager::setHistoryLimit (const int32_t& days)
+{
+    Manager::instance().setHistoryLimit (days);
 }
 
+/*
 void ConfigurationManager::setHistoryEnabled(void) {
 	Manager::instance().setHistoryEnabled();
 }
@@ -695,175 +694,142 @@ void ConfigurationManager::setNotify(void) {
 int32_t ConfigurationManager::getNotify(void) {
 	return Manager::instance().getNotify();
 }
+*/
 
-void ConfigurationManager::setAudioManager(const int32_t& api) {
-	Manager::instance().setAudioManager(api);
-}
-
-int32_t ConfigurationManager::getAudioManager(void) {
-	return Manager::instance().getAudioManager();
-}
-
-void ConfigurationManager::setMailNotify(void) {
-	Manager::instance().setMailNotify();
-}
-
-int32_t ConfigurationManager::getMailNotify(void) {
-	return Manager::instance().getMailNotify();
-}
-
-std::map<std::string, int32_t> ConfigurationManager::getAddressbookSettings(
-		void) {
-	return Manager::instance().getAddressbookSettings();
+void ConfigurationManager::setAudioManager (const int32_t& api)
+{
+    Manager::instance().setAudioManager (api);
 }
 
-void ConfigurationManager::setAddressbookSettings(const std::map<std::string,
-		int32_t>& settings) {
-	Manager::instance().setAddressbookSettings(settings);
+int32_t ConfigurationManager::getAudioManager (void)
+{
+    return Manager::instance().getAudioManager();
 }
 
-std::vector<std::string> ConfigurationManager::getAddressbookList(void) {
-	return Manager::instance().getAddressbookList();
+void ConfigurationManager::setMailNotify (void)
+{
+    Manager::instance().setMailNotify();
 }
 
-void ConfigurationManager::setAddressbookList(
-		const std::vector<std::string>& list) {
-	Manager::instance().setAddressbookList(list);
+int32_t ConfigurationManager::getMailNotify (void)
+{
+    return Manager::instance().getMailNotify();
 }
 
-std::map<std::string, std::string> ConfigurationManager::getHookSettings(void) {
-	return Manager::instance().getHookSettings();
+std::map<std::string, int32_t> ConfigurationManager::getAddressbookSettings (
+    void)
+{
+    return Manager::instance().getAddressbookSettings();
 }
 
-void ConfigurationManager::setHookSettings(const std::map<std::string,
-		std::string>& settings) {
-	Manager::instance().setHookSettings(settings);
+void ConfigurationManager::setAddressbookSettings (const std::map<std::string,
+        int32_t>& settings)
+{
+    Manager::instance().setAddressbookSettings (settings);
 }
 
-void ConfigurationManager::setAccountsOrder(const std::string& order) {
-	Manager::instance().setAccountsOrder(order);
+std::vector<std::string> ConfigurationManager::getAddressbookList (void)
+{
+    return Manager::instance().getAddressbookList();
 }
 
-std::map<std::string, std::string> ConfigurationManager::getHistory(void) {
-	return Manager::instance().send_history_to_client();
+void ConfigurationManager::setAddressbookList (
+    const std::vector<std::string>& list)
+{
+    Manager::instance().setAddressbookList (list);
 }
 
-void ConfigurationManager::setHistory(
-		const std::map<std::string, std::string>& entries) {
-	Manager::instance().receive_history_from_client(entries);
-}
-
-std::string ConfigurationManager::getAddrFromInterfaceName(
-		const std::string& interface) {
-
-	std::string address = SIPVoIPLink::instance("")->getInterfaceAddrFromName(
-			interface);
-
-	return address;
+std::map<std::string, std::string> ConfigurationManager::getHookSettings (void)
+{
+    return Manager::instance().getHookSettings();
 }
 
-std::vector<std::string> ConfigurationManager::getAllIpInterface(void) {
-
-	std::vector<std::string> vector;
-	SIPVoIPLink * sipLink = NULL;
-	sipLink = SIPVoIPLink::instance("");
-
-	if (sipLink != NULL) {
-		vector = sipLink->getAllIpInterface();
-	}
-
-	return vector;
+void ConfigurationManager::setHookSettings (const std::map<std::string,
+        std::string>& settings)
+{
+    Manager::instance().setHookSettings (settings);
 }
 
-std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName(void) {
-	std::vector<std::string> vector;
-	SIPVoIPLink * sipLink = NULL;
-	sipLink = SIPVoIPLink::instance("");
-
-	if (sipLink != NULL) {
-		vector = sipLink->getAllIpInterfaceByName();
-	}
-
-	return vector;
+void ConfigurationManager::setAccountsOrder (const std::string& order)
+{
+    Manager::instance().setAccountsOrder (order);
 }
 
-int32_t ConfigurationManager::getWindowWidth(void) {
-
-	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_WIDTH);
+std::map<std::string, std::string> ConfigurationManager::getHistory (void)
+{
+    return Manager::instance().send_history_to_client();
 }
 
-int32_t ConfigurationManager::getWindowHeight(void) {
-
-	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_HEIGHT);
+void ConfigurationManager::setHistory (
+    const std::map<std::string, std::string>& entries)
+{
+    Manager::instance().receive_history_from_client (entries);
 }
 
-void ConfigurationManager::setWindowWidth(const int32_t& width) {
-
-	Manager::instance().setConfig(PREFERENCES, WINDOW_WIDTH, width);
-}
+std::string ConfigurationManager::getAddrFromInterfaceName (
+    const std::string& interface)
+{
 
-void ConfigurationManager::setWindowHeight(const int32_t& height) {
+    std::string address = SIPVoIPLink::instance ("")->getInterfaceAddrFromName (
+                              interface);
 
-	Manager::instance().setConfig(PREFERENCES, WINDOW_HEIGHT, height);
+    return address;
 }
 
-int32_t ConfigurationManager::getWindowPositionX(void) {
+std::vector<std::string> ConfigurationManager::getAllIpInterface (void)
+{
 
-	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_POSITION_X);
-}
+    std::vector<std::string> vector;
+    SIPVoIPLink * sipLink = NULL;
+    sipLink = SIPVoIPLink::instance ("");
 
-int32_t ConfigurationManager::getWindowPositionY(void) {
+    if (sipLink != NULL) {
+        vector = sipLink->getAllIpInterface();
+    }
 
-	return Manager::instance().getConfigInt(PREFERENCES, WINDOW_POSITION_Y);
+    return vector;
 }
 
-void ConfigurationManager::setWindowPositionX(const int32_t& posX) {
-
-	Manager::instance().setConfig(PREFERENCES, WINDOW_POSITION_X, posX);
-}
+std::vector<std::string> ConfigurationManager::getAllIpInterfaceByName (void)
+{
+    std::vector<std::string> vector;
+    SIPVoIPLink * sipLink = NULL;
+    sipLink = SIPVoIPLink::instance ("");
 
-void ConfigurationManager::setWindowPositionY(const int32_t& posY) {
+    if (sipLink != NULL) {
+        vector = sipLink->getAllIpInterfaceByName();
+    }
 
-	Manager::instance().setConfig(PREFERENCES, WINDOW_POSITION_Y, posY);
+    return vector;
 }
 
-std::map<std::string, int32_t> ConfigurationManager::getShortcuts() {
-
-	std::map<std::string, int> shortcutsMap;
-	int shortcut;
 
-	for (int i = 0; i < (int)shortcutsKeys.size(); i++) {
-		std::string key = shortcutsKeys.at(i);
-		shortcut = Manager::instance().getConfigInt("Shortcuts", key);
-		shortcutsMap.insert(std::pair<std::string, int>(key, shortcut));
-	}
+std::map<std::string, std::string> ConfigurationManager::getShortcuts()
+{
 
-	return shortcutsMap;
+    return Manager::instance().shortcutPreferences.getShortcuts();
 }
 
-void ConfigurationManager::setShortcuts(
-		const std::map<std::string, int32_t>& shortcutsMap) {
-
-	std::map<std::string, int> map_cpy = shortcutsMap;
-	std::map<std::string, int>::iterator it;
+void ConfigurationManager::setShortcuts (
+    const std::map<std::string, std::string>& shortcutsMap)
+{
 
-	for (int i = 0; i < (int)shortcutsKeys.size(); i++) {
-		std::string key = shortcutsKeys.at(i);
-		it = map_cpy.find(key);
-		if (it != shortcutsMap.end()) {
-			Manager::instance().setConfig("Shortcuts", key, it->second);
-		}
-	}
+    std::map<std::string, std::string> map_cpy = shortcutsMap;
+    /*
+      std::map<std::string, std::string> map_cpy = shortcutsMap;
+      std::map<std::string, std::string>::iterator it;
 
-	Manager::instance().saveConfig();
-}
+      for (int i = 0; i < (int)shortcutsKeys.size(); i++) {
+      	std::string key = shortcutsKeys.at(i);
+      	it = map_cpy.find(key);
+      	if (it != shortcutsMap.end()) {
 
-void ConfigurationManager::enableStatusIcon (const std::string& value) {
+      		Manager::instance().setConfig("Shortcuts", key, it->second);
+      	}
+      }
+    */
+    Manager::instance().shortcutPreferences.setShortcuts (map_cpy);
 
-	Manager::instance ().setConfig (PREFERENCES, SHOW_STATUSICON, value);
+    Manager::instance().saveConfig();
 }
 
-std::string ConfigurationManager::isStatusIconEnabled (void) {
-
-	return Manager::instance ().getConfigString (PREFERENCES, SHOW_STATUSICON);
-}
diff --git a/sflphone-common/src/dbus/configurationmanager.h b/sflphone-common/src/dbus/configurationmanager.h
index c21a2f85b8149c458043d1c215e530ffa975017e..df510731c0ee45c3b220e6f3e77a132739fcdd6f 100644
--- a/sflphone-common/src/dbus/configurationmanager.h
+++ b/sflphone-common/src/dbus/configurationmanager.h
@@ -34,135 +34,114 @@
 #ifndef CONFIGURATIONMANAGER_H
 #define CONFIGURATIONMANAGER_H
 
+#pragma GCC diagnostic ignored "-Wignored-qualifiers"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
 #include "configurationmanager-glue.h"
+#pragma GCC diagnostic warning "-Wignored-qualifiers"
+#pragma GCC diagnostic warning "-Wunused-parameter"
+
 #include <dbus-c++/dbus.h>
 
 
 class ConfigurationManager
-: public org::sflphone::SFLphone::ConfigurationManager_adaptor,
-  public DBus::IntrospectableAdaptor,
-  public DBus::ObjectAdaptor
+        : public org::sflphone::SFLphone::ConfigurationManager_adaptor,
+        public DBus::IntrospectableAdaptor,
+        public DBus::ObjectAdaptor
 {
-public:
-
-    ConfigurationManager(DBus::Connection& connection);
-    static const char* SERVER_PATH;
-
-private:
-    std::vector<std::string> shortcutsKeys;
-
-public:
-
-    std::map< std::string, std::string > getAccountDetails( const std::string& accountID );
-    void setAccountDetails( const std::string& accountID, const std::map< std::string, std::string >& details );
-    std::string addAccount( const std::map< std::string, std::string >& details );
-    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 );
-
-    std::map< std::string, std::string > getTlsSettingsDefault (void);
-    void setIp2IpDetails(const std::map< std::string, std::string >& details);
-    std::map< std::string, std::string > getIp2IpDetails(void);
-    std::map< std::string, std::string > getCredential (const std::string& accountID, const int32_t& index);
-    int32_t getNumberOfCredential (const std::string& accountID);
-    void setCredential (const std::string& accountID, const int32_t& index, const std::map< std::string, std::string >& details);
-    void setNumberOfCredential (const std::string& accountID, const int32_t& number);
-
-    std::vector< std::string > getCodecList(void);
-    std::vector< std::string > getSupportedTlsMethod(void);
-    std::vector< std::string > getCodecDetails( const int32_t& payload );
-    std::vector< std::string > getActiveCodecList (const std::string& accountID);
-    void setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID);
-
-    std::vector< std::string > getInputAudioPluginList();
-    std::vector< std::string > getOutputAudioPluginList();
-    void setInputAudioPlugin(const std::string& audioPlugin);
-    void setOutputAudioPlugin(const std::string& audioPlugin);
-    std::vector< std::string > getAudioOutputDeviceList();
-    void setAudioOutputDevice(const int32_t& index);
-    std::vector< std::string > getAudioInputDeviceList();
-    void setAudioInputDevice(const int32_t& index);
-    std::vector< std::string > getCurrentAudioDevicesIndex();
-    int32_t getAudioDeviceIndex(const std::string& name);
-    std::string getCurrentAudioOutputPlugin( void );
-
-
-    std::vector< std::string > getToneLocaleList(  );
-    std::vector< std::string > getPlaybackDeviceList(  );
-    std::vector< std::string > getRecordDeviceList(  );
-    std::string getVersion(  );
-    std::vector< std::string > getRingtoneList(  );
-    int32_t getAudioManager( void );
-    void setAudioManager( const int32_t& api );
-
-    bool isMd5CredentialHashing (void);
-    void setMd5CredentialHashing (const bool& enabled);
-    int32_t isIax2Enabled( void );
-    int32_t isRingtoneEnabled( void );
-    void ringtoneEnabled( void );
-    std::string getRingtoneChoice( void );
-    void setRingtoneChoice( const std::string& tone );
-    std::string getRecordPath( void );
-    void setRecordPath(const std::string& recPath );
-    int32_t getDialpad( void );
-    void setDialpad (const bool& display);
-    int32_t getSearchbar( void );
-    
-    void setSearchbar( void );
-    
-    void setHistoryLimit( const int32_t& days);
-    int32_t getHistoryLimit (void);
-    
-    void setHistoryEnabled (void);
-	std::string getHistoryEnabled (void);
-
-    int32_t getVolumeControls( void );
-    void setVolumeControls (const bool& display);
-    int32_t isStartHidden( void );
-    void startHidden( void );
-    int32_t popupMode( void );
-    void switchPopupMode( void );
-    int32_t getNotify( void );
-    void setNotify( void );
-    int32_t getMailNotify( void );
-    void setMailNotify( void );
-
-	int32_t getWindowWidth (void);
-	int32_t getWindowHeight (void);
-	void setWindowWidth (const int32_t& width);
-	void setWindowHeight (const int32_t& height);
-	int32_t getWindowPositionX (void);
-	int32_t getWindowPositionY (void);
-	void setWindowPositionX (const int32_t& posX);
-	void setWindowPositionY (const int32_t& posY);
-
-	void enableStatusIcon (const std::string&);
-	std::string isStatusIconEnabled (void);
-
-    std::map<std::string, int32_t> getAddressbookSettings (void);
-    void setAddressbookSettings (const std::map<std::string, int32_t>& settings);
-    std::vector< std::string > getAddressbookList ( void );
-    void setAddressbookList( const std::vector< std::string >& list );
-
-    void setAccountsOrder (const std::string& order);
-
-    std::map<std::string, std::string> getHookSettings (void);
-    void setHookSettings (const std::map<std::string, std::string>& settings);
-    
-    std::map <std::string, std::string> getHistory (void);
-    void setHistory (const std::map <std::string, std::string>& entries);
-
-    std::map<std::string, std::string> getTlsSettings(const std::string& accountID);
-    void setTlsSettings(const std::string& accountID, const std::map< std::string, std::string >& details);
-
-    std::string getAddrFromInterfaceName(const std::string& interface);
-    
-    std::vector<std::string> getAllIpInterface(void);
-    std::vector<std::string> getAllIpInterfaceByName(void);
-
-    std::map< std::string, int32_t > getShortcuts ();
-    void setShortcuts (const std::map< std::string, int32_t >& shortcutsMap);
+    public:
+
+        ConfigurationManager (DBus::Connection& connection);
+        static const char* SERVER_PATH;
+
+    private:
+        std::vector<std::string> shortcutsKeys;
+
+    public:
+
+        std::map< std::string, std::string > getAccountDetails (const std::string& accountID);
+        void setAccountDetails (const std::string& accountID, const std::map< std::string, std::string >& details);
+        std::string addAccount (const std::map< std::string, std::string >& details);
+        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);
+
+        std::map< std::string, std::string > getTlsSettingsDefault (void);
+        void setIp2IpDetails (const std::map< std::string, std::string >& details);
+        std::map< std::string, std::string > getIp2IpDetails (void);
+        std::map< std::string, std::string > getCredential (const std::string& accountID, const int32_t& index);
+        int32_t getNumberOfCredential (const std::string& accountID);
+        void setCredential (const std::string& accountID, const int32_t& index, const std::map< std::string, std::string >& details);
+
+        std::vector< std::string > getCodecList (void);
+        std::vector< std::string > getSupportedTlsMethod (void);
+        std::vector< std::string > getCodecDetails (const int32_t& payload);
+        std::vector< std::string > getActiveCodecList (const std::string& accountID);
+        void setActiveCodecList (const std::vector< std::string >& list, const std::string& accountID);
+
+        std::vector< std::string > getAudioPluginList();
+        void setAudioPlugin (const std::string& audioPlugin);
+        std::vector< std::string > getAudioOutputDeviceList();
+        void setAudioOutputDevice (const int32_t& index);
+        void setAudioInputDevice (const int32_t& index);
+        void setAudioRingtoneDevice (const int32_t& index);
+        std::vector< std::string > getAudioInputDeviceList();
+        std::vector< std::string > getCurrentAudioDevicesIndex();
+        int32_t getAudioDeviceIndex (const std::string& name);
+        std::string getCurrentAudioOutputPlugin (void);
+        std::string getNoiseSuppressState (void);
+        void setNoiseSuppressState (const std::string& state);
+
+
+        std::vector< std::string > getToneLocaleList();
+        std::vector< std::string > getPlaybackDeviceList();
+        std::vector< std::string > getRecordDeviceList();
+        std::string getVersion();
+        std::vector< std::string > getRingtoneList();
+        int32_t getAudioManager (void);
+        void setAudioManager (const int32_t& api);
+
+        bool isMd5CredentialHashing (void);
+        void setMd5CredentialHashing (const bool& enabled);
+        int32_t isIax2Enabled (void);
+        int32_t isRingtoneEnabled (const std::string& accountID);
+        void ringtoneEnabled (const std::string& accountID);
+        std::string getRingtoneChoice (const std::string& accountID);
+        void setRingtoneChoice (const std::string& accountID, const std::string& tone);
+        std::string getRecordPath (void);
+        void setRecordPath (const std::string& recPath);
+
+
+        void setHistoryLimit (const int32_t& days);
+        int32_t getHistoryLimit (void);
+
+        int32_t getMailNotify (void);
+        void setMailNotify (void);
+
+
+        std::map<std::string, int32_t> getAddressbookSettings (void);
+        void setAddressbookSettings (const std::map<std::string, int32_t>& settings);
+        std::vector< std::string > getAddressbookList (void);
+        void setAddressbookList (const std::vector< std::string >& list);
+
+        void setAccountsOrder (const std::string& order);
+
+        std::map<std::string, std::string> getHookSettings (void);
+        void setHookSettings (const std::map<std::string, std::string>& settings);
+
+        std::map <std::string, std::string> getHistory (void);
+        void setHistory (const std::map <std::string, std::string>& entries);
+
+        std::map<std::string, std::string> getTlsSettings (void);
+        void setTlsSettings (const std::map< std::string, std::string >& details);
+
+        std::string getAddrFromInterfaceName (const std::string& interface);
+
+        std::vector<std::string> getAllIpInterface (void);
+        std::vector<std::string> getAllIpInterfaceByName (void);
+
+        std::map< std::string, std::string > getShortcuts ();
+        void setShortcuts (const std::map< std::string, std::string >& shortcutsMap);
 };
 
 
diff --git a/sflphone-common/src/dbus/contactmanager.h b/sflphone-common/src/dbus/contactmanager.h
index 5611b41f9b8b0b90438955a0e332edcf3fa64574..a7a06b1bf73d061c1a7de27fcdec6b1a9adc4427 100644
--- a/sflphone-common/src/dbus/contactmanager.h
+++ b/sflphone-common/src/dbus/contactmanager.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@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.
@@ -27,29 +27,29 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef CONTACTMANAGER_H
 #define CONTACTMANAGER_H
 
 #include "contactmanager-glue.h"
 #include <dbus-c++/dbus.h>
 
-    
+
 class ContactManager
-: public org::sflphone::SFLphone::ContactManager_adaptor,
-  public DBus::IntrospectableAdaptor,
-  public DBus::ObjectAdaptor
+        : public org::sflphone::SFLphone::ContactManager_adaptor,
+        public DBus::IntrospectableAdaptor,
+        public DBus::ObjectAdaptor
 {
-public:
+    public:
 
-    ContactManager(DBus::Connection& connection);
-    static const char* SERVER_PATH;
+        ContactManager (DBus::Connection& connection);
+        static const char* SERVER_PATH;
 
-public:
-    std::map< std::string, std::string > getContacts( const std::string& accountID );
-    void setContacts( const std::string& accountID, const std::map< std::string, std::string >& details );
-    void setPresence( const std::string& accountID, const std::string& presence, const std::string& additionalInfo );
-    void setContactPresence( const std::string& accountID, const std::string& presence, const std::string& additionalInfo );
+    public:
+        std::map< std::string, std::string > getContacts (const std::string& accountID);
+        void setContacts (const std::string& accountID, const std::map< std::string, std::string >& details);
+        void setPresence (const std::string& accountID, const std::string& presence, const std::string& additionalInfo);
+        void setContactPresence (const std::string& accountID, const std::string& presence, const std::string& additionalInfo);
 
 };
 
diff --git a/sflphone-common/src/dbus/dbusmanager.h b/sflphone-common/src/dbus/dbusmanager.h
index 47a36d304fd5d1f7af3b0493f301c36913708811..acd97c95fc267c9fce807bc0d438bf2d0be0b24e 100644
--- a/sflphone-common/src/dbus/dbusmanager.h
+++ b/sflphone-common/src/dbus/dbusmanager.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
diff --git a/sflphone-common/src/dbus/dbusmanagerimpl.cpp b/sflphone-common/src/dbus/dbusmanagerimpl.cpp
index 1c70b42df81d09bb5d7bfd4820d57ebfcdb22e9c..93ca99589c6083ff4e340c2bdc97c3d6fe1ba0e2 100644
--- a/sflphone-common/src/dbus/dbusmanagerimpl.cpp
+++ b/sflphone-common/src/dbus/dbusmanagerimpl.cpp
@@ -53,7 +53,7 @@ DBusManagerImpl::exec()
     _instanceManager = new Instance (sessionConnection);
 
 #ifdef USE_NETWORKMANAGER
-    _networkManager = new NetworkManager(systemConnection, "/org/freedesktop/NetworkManager", "");
+    _networkManager = new NetworkManager (systemConnection, "/org/freedesktop/NetworkManager", "");
 #endif
 
     // Register accounts
diff --git a/sflphone-common/src/dbus/dbusmanagerimpl.h b/sflphone-common/src/dbus/dbusmanagerimpl.h
index 916ae5a407aabd158bb5a92345a9e47a23313f0b..94a1cfc9d9908d4328bd10fa54ed3cc7c7e45e10 100644
--- a/sflphone-common/src/dbus/dbusmanagerimpl.h
+++ b/sflphone-common/src/dbus/dbusmanagerimpl.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -37,20 +37,25 @@ class ConfigurationManager;
 class CallManager;
 class NetworkManager;
 
-class DBusManagerImpl {
+class DBusManagerImpl
+{
     public:
-        CallManager * getCallManager(){ return _callManager; };
-        ConfigurationManager * getConfigurationManager(){ return _configurationManager; };
+        CallManager * getCallManager() {
+            return _callManager;
+        };
+        ConfigurationManager * getConfigurationManager() {
+            return _configurationManager;
+        };
         int exec();
         void exit();
         static const char* SERVER_NAME;
-        
+
     private:
         CallManager*          _callManager;
         ConfigurationManager* _configurationManager;
         Instance*             _instanceManager;
         DBus::BusDispatcher   _dispatcher;
-	NetworkManager* _networkManager;
+        NetworkManager* _networkManager;
 };
 
 #endif
diff --git a/sflphone-common/src/dbus/instance.h b/sflphone-common/src/dbus/instance.h
index d963e5d1319860a7d137edba0c4081dc9dcc9eac..edccb09d9f662f6fb8040fc5eebb5fd03a053958 100644
--- a/sflphone-common/src/dbus/instance.h
+++ b/sflphone-common/src/dbus/instance.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Pierre-Luc Beaudoin <pierre-luc.beaudoin@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.
@@ -27,30 +27,34 @@
  *  shall include the source code for the parts of OpenSSL used as well
  *  as that of the covered work.
  */
- 
+
 #ifndef INSTANCE_H
 #define INSTANCE_H
 
+#pragma GCC diagnostic ignored "-Wignored-qualifiers"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
 #include "instance-glue.h"
+#pragma GCC diagnostic warning "-Wignored-qualifiers"
+#pragma GCC diagnostic warning "-Wunused-parameter"
 #include <dbus-c++/dbus.h>
 
-    
+
 class Instance
-: public org::sflphone::SFLphone::Instance_adaptor,
-  public DBus::IntrospectableAdaptor,
-  public DBus::ObjectAdaptor
+        : public org::sflphone::SFLphone::Instance_adaptor,
+        public DBus::IntrospectableAdaptor,
+        public DBus::ObjectAdaptor
 {
-private:
-  int count;
-
-public:
-  Instance(DBus::Connection& connection);
-  static const char* SERVER_PATH;
-  
-  void Register( const int32_t& pid, const std::string& name ); 
-  void Unregister( const int32_t& pid );
-  int32_t getRegistrationCount( void );
-    
+    private:
+        int count;
+
+    public:
+        Instance (DBus::Connection& connection);
+        static const char* SERVER_PATH;
+
+        void Register (const int32_t& pid, const std::string& name);
+        void Unregister (const int32_t& pid);
+        int32_t getRegistrationCount (void);
+
 };
 
 
diff --git a/sflphone-common/src/dbus/networkmanager.cpp b/sflphone-common/src/dbus/networkmanager.cpp
index 2e106167591b267648886a046fa168819d471d4a..80fc2ad5e88bf0d4e2b7710ea9b6f94c430dcb5b 100644
--- a/sflphone-common/src/dbus/networkmanager.cpp
+++ b/sflphone-common/src/dbus/networkmanager.cpp
@@ -40,51 +40,51 @@ using namespace std;
 
 const string NetworkManager::statesString[5] = {"unknown", "asleep", "connecting", "connected", "disconnected"};
 
-string NetworkManager::stateAsString(const uint32_t& state)
+string NetworkManager::stateAsString (const uint32_t& state)
 {
-	return statesString[state];
+    return statesString[state];
 }
 
-void NetworkManager::StateChanged(const uint32_t& state)
+void NetworkManager::StateChanged (const uint32_t& state)
 {
-	_warn("Network state changed: %s", stateAsString(state).c_str());
+    _warn ("Network state changed: %s", stateAsString (state).c_str());
 }
 
-void NetworkManager::PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0)
+void NetworkManager::PropertiesChanged (const std::map< std::string, ::DBus::Variant >& argin0)
 {
-	const map< string, ::DBus::Variant >::const_iterator iter = argin0.begin();
+    const map< string, ::DBus::Variant >::const_iterator iter = argin0.begin();
 
-	string message = iter->first;
+    string message = iter->first;
 
-	_warn("Properties changed: %s", iter->first.c_str());
-/*
-	DBus::Variant variant = iter->second;
-	DBus::MessageIter i = variant.reader();
-	cout << i.type() << endl;// 97
-	cout << (char )i.type() << endl;
-	cout << (char)i.array_type() << endl;
+    _warn ("Properties changed: %s", iter->first.c_str());
+    /*
+    	DBus::Variant variant = iter->second;
+    	DBus::MessageIter i = variant.reader();
+    	cout << i.type() << endl;// 97
+    	cout << (char )i.type() << endl;
+    	cout << (char)i.array_type() << endl;
 
-	cout << i.is_array() << endl;// 1
-	cout << i.is_dict() << endl;// 0
-	cout << i.array_type() << endl;// 111
+    	cout << i.is_array() << endl;// 1
+    	cout << i.is_dict() << endl;// 0
+    	cout << i.array_type() << endl;// 111
 
-	int size;
-	::DBus::Path* value = new ::DBus::Path[10];
-	size = i.get_array(value);
-	cout << "length: " << size << endl;
+    	int size;
+    	::DBus::Path* value = new ::DBus::Path[10];
+    	size = i.get_array(value);
+    	cout << "length: " << size << endl;
 
-	while (!i.at_end())
-	{
-		char **array = new char*[2];
-		size_t length = i.get_array(&array);
-		cout << "length: " << length << endl;
-		i = i.recurse();
-	}
-*/
-	Manager::instance().registerAccounts();
+    	while (!i.at_end())
+    	{
+    		char **array = new char*[2];
+    		size_t length = i.get_array(&array);
+    		cout << "length: " << length << endl;
+    		i = i.recurse();
+    	}
+    */
+    Manager::instance().registerAccounts();
 }
 
-NetworkManager::NetworkManager(DBus::Connection& connection, const DBus::Path& path, const char* destination): DBus::ObjectProxy (connection, path, destination)
+NetworkManager::NetworkManager (DBus::Connection& connection, const DBus::Path& path, const char* destination) : DBus::ObjectProxy (connection, path, destination)
 {
 }
 
diff --git a/sflphone-common/src/dbus/networkmanager.h b/sflphone-common/src/dbus/networkmanager.h
index 3754669751e101a6038130cb7d4d93c29b7219d7..78ee117f9324509a98d4c6e2e5360986ecaf8b8f 100644
--- a/sflphone-common/src/dbus/networkmanager.h
+++ b/sflphone-common/src/dbus/networkmanager.h
@@ -31,32 +31,35 @@
 #ifndef NETWORKMANAGER_H
 #define NETWORKMANAGER_H
 
+#pragma GCC diagnostic ignored "-Wignored-qualifiers"
+#pragma GCC diagnostic ignored "-Wunused-parameter"
 #include "networkmanager_proxy.h"
+#pragma GCC diagnostic warning "-Wignored-qualifiers"
+#pragma GCC diagnostic warning "-Wunused-parameter"
 
 using namespace std;
 
 class NetworkManager
-: public org::freedesktop::NetworkManager_proxy,
-  public DBus::IntrospectableProxy,
-  public DBus::ObjectProxy
+        : public org::freedesktop::NetworkManager_proxy,
+        public DBus::IntrospectableProxy,
+        public DBus::ObjectProxy
 {
-public:
-
-    NetworkManager(DBus::Connection&, const DBus::Path&, const char*);
-    void StateChanged(const uint32_t& state);
-    void PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0);
-    string stateAsString(const uint32_t& state);
-
-    enum NMState
-    {
-        NM_STATE_UNKNOWN = 0,
-        NM_STATE_ASLEEP,
-        NM_STATE_CONNECTING,
-        NM_STATE_CONNECTED,
-        NM_STATE_DISCONNECTED
-    };
-
-   static const string statesString[5];
+    public:
+
+        NetworkManager (DBus::Connection&, const DBus::Path&, const char*);
+        void StateChanged (const uint32_t& state);
+        void PropertiesChanged (const std::map< std::string, ::DBus::Variant >& argin0);
+        string stateAsString (const uint32_t& state);
+
+        enum NMState {
+            NM_STATE_UNKNOWN = 0,
+            NM_STATE_ASLEEP,
+            NM_STATE_CONNECTING,
+            NM_STATE_CONNECTED,
+            NM_STATE_DISCONNECTED
+        };
+
+        static const string statesString[5];
 };
 #endif
 
diff --git a/sflphone-common/src/dbus/networkmanager_proxy.h b/sflphone-common/src/dbus/networkmanager_proxy.h
index 078925ceff22c9e0ebd0e21cf90868ab4b2da370..364b0e7bbb7952b24b5b7ab3505625387cfd3fb3 100644
--- a/sflphone-common/src/dbus/networkmanager_proxy.h
+++ b/sflphone-common/src/dbus/networkmanager_proxy.h
@@ -9,70 +9,69 @@
 #include <dbus-c++/dbus.h>
 #include <cassert>
 
-namespace org {
-namespace freedesktop {
+namespace org
+{
+namespace freedesktop
+{
 
 class NetworkManager_proxy
-: public ::DBus::InterfaceProxy
+        : public ::DBus::InterfaceProxy
 {
-public:
-
-    NetworkManager_proxy()
-    : ::DBus::InterfaceProxy("org.freedesktop.NetworkManager")
-    {
-        connect_signal(NetworkManager_proxy, StateChanged, _StateChanged_stub);
-        connect_signal(NetworkManager_proxy, PropertiesChanged, _PropertiesChanged_stub);
-    }
-
-public:
-
-    /* properties exported by this interface */
-public:
-
-    /* methods exported by this interface,
-     * this functions will invoke the corresponding methods on the remote objects
-     */
-    std::vector< ::DBus::Path > GetDevices()
-    {
-        ::DBus::CallMessage call;
-        call.member("GetDevices");
-        ::DBus::Message ret = invoke_method (call);
-        ::DBus::MessageIter ri = ret.reader();
-
-        std::vector< ::DBus::Path > argout;
-        ri >> argout;
-        return argout;
-    }
-
-
-public:
-
-    /* signal handlers for this interface
-     */
-    virtual void StateChanged(const uint32_t& argin0) = 0;
-    virtual void PropertiesChanged(const std::map< std::string, ::DBus::Variant >& argin0) = 0;
-
-private:
-
-    /* unmarshalers (to unpack the DBus message before calling the actual signal handler)
-     */
-    void _StateChanged_stub(const ::DBus::SignalMessage &sig)
-    {
-        ::DBus::MessageIter ri = sig.reader();
-
-        uint32_t arg0;
-        ri >> arg0;
-        StateChanged(arg0);
-    }
-    void _PropertiesChanged_stub(const ::DBus::SignalMessage &sig)
-    {
-        ::DBus::MessageIter ri = sig.reader();
-
-        std::map< std::string, ::DBus::Variant > arg0;
-        ri >> arg0;
-        PropertiesChanged(arg0);
-    }
+    public:
+
+        NetworkManager_proxy()
+                : ::DBus::InterfaceProxy ("org.freedesktop.NetworkManager") {
+            connect_signal (NetworkManager_proxy, StateChanged, _StateChanged_stub);
+            connect_signal (NetworkManager_proxy, PropertiesChanged, _PropertiesChanged_stub);
+        }
+
+    public:
+
+        /* properties exported by this interface */
+    public:
+
+        /* methods exported by this interface,
+         * this functions will invoke the corresponding methods on the remote objects
+         */
+        std::vector< ::DBus::Path > GetDevices() {
+            ::DBus::CallMessage call;
+            call.member ("GetDevices");
+            ::DBus::Message ret = invoke_method (call);
+            ::DBus::MessageIter ri = ret.reader();
+
+            std::vector< ::DBus::Path > argout;
+            ri >> argout;
+            return argout;
+        }
+
+
+    public:
+
+        /* signal handlers for this interface
+         */
+        virtual void StateChanged (const uint32_t& argin0) = 0;
+        virtual void PropertiesChanged (const std::map< std::string, ::DBus::Variant >& argin0) = 0;
+
+    private:
+
+        /* unmarshalers (to unpack the DBus message before calling the actual signal handler)
+         */
+        void _StateChanged_stub (const ::DBus::SignalMessage &sig) {
+            ::DBus::MessageIter ri = sig.reader();
+
+            uint32_t arg0;
+            ri >> arg0;
+            StateChanged (arg0);
+        }
+        void _PropertiesChanged_stub (const ::DBus::SignalMessage &sig) {
+            ::DBus::MessageIter ri = sig.reader();
+
+            std::map< std::string, ::DBus::Variant > arg0;
+            ri >> arg0;
+            PropertiesChanged (arg0);
+        }
 };
 
-} } 
+}
+}
 #endif //__dbusxx__networkmanager_proxy_h__PROXY_MARSHAL_H
diff --git a/sflphone-common/src/eventthread.cpp b/sflphone-common/src/eventthread.cpp
index 93bca48010e8bbc022e74b81f4fca8acc3423fe5..a1aa2416e6b0b3f62d8791695699cb7e44620619 100644
--- a/sflphone-common/src/eventthread.cpp
+++ b/sflphone-common/src/eventthread.cpp
@@ -46,7 +46,8 @@ EventThread::EventThread (VoIPLink *link)
 void EventThread::run (void)
 {
     while (!testCancel()) {
-        _linkthread->getEvent();
+        if (_linkthread)
+            _linkthread->getEvent();
     }
 }
 
@@ -65,7 +66,7 @@ void AudioThread::run (void)
 {
     while (!testCancel()) {
         _alsa->audioCallback();
-        Thread::sleep (3);
+        Thread::sleep (20);
     }
 }
 
diff --git a/sflphone-common/src/eventthread.h b/sflphone-common/src/eventthread.h
index aed9f5b5159052acb9cb776c94948798cf3cb384..0285deec51f4af54641a5741746d87c7615294be 100644
--- a/sflphone-common/src/eventthread.h
+++ b/sflphone-common/src/eventthread.h
@@ -1,17 +1,17 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Emmanuel Milou <emmanuel.milou@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.
@@ -33,6 +33,7 @@
 
 #include <cc++/thread.h>
 
+
 class VoIPLink;
 class AlsaLayer;
 
@@ -41,34 +42,36 @@ class AlsaLayer;
  * @brief General thread to listen events continuously
  */
 
-class EventThread : public ost::Thread {
+class EventThread : public ost::Thread
+{
 
     public:
         /**
-         * Thread constructor 
+         * Thread constructor
          */
-        EventThread (VoIPLink* link);        
-        
-        ~EventThread (void){
+        EventThread (VoIPLink* link);
+
+        ~EventThread (void) {
             terminate();
         }
-        
+
         virtual void run () ;
-        
+
     private:
-        EventThread(const EventThread& rh); // copy constructor
-        EventThread& operator=(const EventThread& rh);  // assignment operator	
+        EventThread (const EventThread& rh); // copy constructor
+        EventThread& operator= (const EventThread& rh); // assignment operator
 
         /** VoIPLink is the object being called by getEvents() method  */
         VoIPLink*	_linkthread;
 };
 
-class AudioThread : public ost::Thread {
+class AudioThread : public ost::Thread
+{
 
     public:
         AudioThread (AlsaLayer *alsa);
 
-        ~AudioThread (void){
+        ~AudioThread (void) {
             terminate();
         }
 
@@ -76,7 +79,7 @@ class AudioThread : public ost::Thread {
 
     private:
         AudioThread (const AudioThread& at);
-        AudioThread& operator=(const AudioThread& at);
+        AudioThread& operator= (const AudioThread& at);
 
         AlsaLayer* _alsa;
 };
diff --git a/sflphone-common/src/global.h b/sflphone-common/src/global.h
index 3ed01299249a17df11fc469a886af17e12780893..1ba1be17aaf644cafe0f6df786534840ac6d26d5 100644
--- a/sflphone-common/src/global.h
+++ b/sflphone-common/src/global.h
@@ -3,17 +3,17 @@
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
  *  Author: Laurielle Lea <laurielle.lea@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.
@@ -71,7 +71,7 @@ static const SOUND_FORMAT INT32 = 0x8;
 #define SUCCESS                 0
 
 #define ASSERT( expected , value)       if( value == expected ) return SUCCESS; \
-                                        else return 1; 
+                                        else return 1;
 #define PIDFILE "sfl.pid"
 
 #ifdef DATAFORMAT_IS_FLOAT
@@ -89,23 +89,26 @@ static const SOUND_FORMAT INT32 = 0x8;
 #define RINGDIR          "ringtones"		/** Ringtones directory */
 #define CODECDIR         "codecs"		/** Codecs directory */
 
-#define SIZEBUF 				1024*1024
+#define SIZEBUF 				100000 /** About 12 sec of buffering at 8000 Hz*/
 #define STATIC_BUFSIZE 	 5000
 
 #define ALSA_DFT_CARD_ID     0			/** Index of the default soundcard */
 
-#define PCM_PLUGHW	"plughw"		/** Alsa plugin */ 
+#define PCM_PLUGHW	"plughw"		/** Alsa plugin */
 #define PCM_DEFAULT	"default"		/** Default ALSA plugin */
 #define PCM_DMIX	"plug:dmix"		/** Alsa plugin for software mixing */
+#define PCM_DSNOOP	"plug:dsnoop"		/** Alsa plugin for microphone sharing */
+#define PCM_DMIX_DSNOOP "dmix/dsnoop"           /** Audio profile using Alsa dmix/dsnoop */
 
-#define SFL_CODEC_VALID_PREFIX	"libcodec_"	/** Valid prefix for codecs shared library */ 
+#define SFL_CODEC_VALID_PREFIX	"libcodec_"	/** Valid prefix for codecs shared library */
 #define SFL_CODEC_VALID_EXTEN	".so"		/** Valid extension for codecs shared library */
 #define CURRENT_DIR		"."		/** Current directory */
 #define PARENT_DIR		".."		/** Parent directory */
 
-#define SFL_PCM_BOTH		0x0021		/** To open both playback and capture devices */ 
+#define SFL_PCM_BOTH		0x0021		/** To open both playback and capture devices */
 #define SFL_PCM_PLAYBACK	0x0022		/** To open playback device only */
 #define SFL_PCM_CAPTURE		0x0023		/** To open capture device only */
+#define SFL_PCM_RINGTONE        0x0024
 
 #ifdef USE_IAX
 #define	IAX2_ENABLED  true			/** IAX2 support */
@@ -130,11 +133,11 @@ static const SOUND_FORMAT INT32 = 0x8;
 #define NETWORK_UNREACHABLE           0x0011	/** Network unreachable */
 #define PULSEAUDIO_NOT_RUNNING          0x0100  /** Pulseaudio is not running */
 
-#define ALSA			  0 
+#define ALSA			  0
 #define PULSEAUDIO		  1
-#define CHECK_INTERFACE( layer , api )		  (layer == api) 
+#define CHECK_INTERFACE( layer , api )		  (layer == api)
 
-#define UNUSED          __attribute__((__unused__))      
+#define UNUSED          __attribute__((__unused__))
 
 #define DEFAULT_SIP_PORT    "5060"
 #define DEFAULT_SIP_TLS_PORT "5061"
@@ -144,27 +147,27 @@ static const SOUND_FORMAT INT32 = 0x8;
 
 /** Enumeration that contains known audio payloads */
 typedef enum {
-  // http://www.iana.org/assignments/rtp-parameters
-  // http://www.gnu.org/software/ccrtp/doc/refman/html/formats_8h.html#a0
-  // 0 PCMU A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_ULAW = 0, 
-  // 3 GSM  A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_GSM = 3,
-  // 8 PCMA A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_ALAW = 8,
-  // 9 G722 A 8000 1 [RFC3551]
-  PAYLOAD_CODEC_G722 = 9,
-  // http://www.ietf.org/rfc/rfc3952.txt
-  // 97 iLBC/8000
-  PAYLOAD_CODEC_ILBC_20 = 97,
-  PAYLOAD_CODEC_ILBC_30 = 98,
-  // http://www.speex.org/drafts/draft-herlein-speex-rtp-profile-00.txt
-  //  97 speex/8000
-  // http://support.xten.com/viewtopic.php?p=8684&sid=3367a83d01fdcad16c7459a79859b08e
-  // 100 speex/16000
-  PAYLOAD_CODEC_SPEEX_8000 = 110,
-  PAYLOAD_CODEC_SPEEX_16000 = 111,
-  PAYLOAD_CODEC_SPEEX_32000 = 112
+    // http://www.iana.org/assignments/rtp-parameters
+    // http://www.gnu.org/software/ccrtp/doc/refman/html/formats_8h.html#a0
+    // 0 PCMU A 8000 1 [RFC3551]
+    PAYLOAD_CODEC_ULAW = 0,
+    // 3 GSM  A 8000 1 [RFC3551]
+    PAYLOAD_CODEC_GSM = 3,
+    // 8 PCMA A 8000 1 [RFC3551]
+    PAYLOAD_CODEC_ALAW = 8,
+    // 9 G722 A 8000 1 [RFC3551]
+    PAYLOAD_CODEC_G722 = 9,
+    // http://www.ietf.org/rfc/rfc3952.txt
+    // 97 iLBC/8000
+    PAYLOAD_CODEC_ILBC_20 = 97,
+    PAYLOAD_CODEC_ILBC_30 = 98,
+    // http://www.speex.org/drafts/draft-herlein-speex-rtp-profile-00.txt
+    //  97 speex/8000
+    // http://support.xten.com/viewtopic.php?p=8684&sid=3367a83d01fdcad16c7459a79859b08e
+    // 100 speex/16000
+    PAYLOAD_CODEC_SPEEX_8000 = 110,
+    PAYLOAD_CODEC_SPEEX_16000 = 111,
+    PAYLOAD_CODEC_SPEEX_32000 = 112
 } AudioCodecType;
 
 /** The struct to reflect the order the user wants to use the codecs */
diff --git a/sflphone-common/src/history/historyitem.h b/sflphone-common/src/history/historyitem.h
index 55b12cb5b8785516cbb77f46b43570018a037ff2..52721d8522939a1fd0514893a565b17eb0e20626 100644
--- a/sflphone-common/src/history/historyitem.h
+++ b/sflphone-common/src/history/historyitem.h
@@ -40,10 +40,11 @@ typedef enum CallType {
     CALL_MISSED,
     CALL_INCOMING,
     CALL_OUTGOING
-}CallType; 
+} CallType;
 
 
-class HistoryItem {
+class HistoryItem
+{
 
     public:
         /*
@@ -55,7 +56,7 @@ class HistoryItem {
          * Constructor from a serialized form
          */
         HistoryItem (std::string, std::string="");
-        
+
         /*
          * Destructor
          */
@@ -82,7 +83,7 @@ class HistoryItem {
         std::string _timestamp_start;
         std::string _timestamp_stop;
 
-        /* 
+        /*
          * Represents the type of call
          * Has be either CALL_MISSED, CALL_INCOMING or CALL_OUTGOING
          */
@@ -96,7 +97,7 @@ class HistoryItem {
 
         /*
          * The account the call was made with
-         */ 
+         */
         std::string _account_id;
 };
 
diff --git a/sflphone-common/src/history/historymanager.cpp b/sflphone-common/src/history/historymanager.cpp
index 54fa6d1eb614b40a17f35f645f5b5e02b53f6ac4..57a70f8459fa76f51b13c10a89f5419bdd86b23d 100644
--- a/sflphone-common/src/history/historymanager.cpp
+++ b/sflphone-common/src/history/historymanager.cpp
@@ -43,14 +43,15 @@ HistoryManager::HistoryManager ()
 
 HistoryManager::~HistoryManager ()
 {
-	 HistoryItemMap::iterator iter = _history_items.begin();
+    HistoryItemMap::iterator iter = _history_items.begin();
 
-	 HistoryItem * item;
-	 while(iter != _history_items.end()){
-		 item = iter->second;
-		 delete item;
-		 iter++;
-	 }
+    HistoryItem * item;
+
+    while (iter != _history_items.end()) {
+        item = iter->second;
+        delete item;
+        iter++;
+    }
 
     // Clear the history map
     _history_items.clear ();
@@ -76,12 +77,14 @@ bool HistoryManager::save_history (void)
 
 bool HistoryManager::load_history_from_file (Conf::ConfigTree *history_list)
 {
-    bool exist;
+    int exist;
+
+    _debug ("HistoryManager: Load history from file %s", _history_path.c_str());
 
-    exist = history_list->populateFromFile (_history_path);
+    exist = history_list->populateFromFile (_history_path.c_str());
     _history_loaded = (exist == 2) ? false : true;
 
-    return exist;
+    return _history_loaded;
 }
 
 int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int limit)
@@ -96,6 +99,8 @@ int HistoryManager::load_history_items_map (Conf::ConfigTree *history_list, int
     int history_limit;
     time_t current_timestamp;
 
+    _debug ("HistoryManager: Load history items");
+
     // We want to save only the items recent enough (ie compared to CONFIG_HISTORY_LIMIT)
     // Get the current timestamp
     (void) time (&current_timestamp);
diff --git a/sflphone-common/src/history/historymanager.h b/sflphone-common/src/history/historymanager.h
index 357635db6494c58ff290a012355d33a88ab90d42..2796315aeaaf641ae24be164afa2546a8ea3c260 100644
--- a/sflphone-common/src/history/historymanager.h
+++ b/sflphone-common/src/history/historymanager.h
@@ -32,15 +32,16 @@
 #ifndef _HISTORY_MANAGER
 #define _HISTORY_MANAGER
 
-#include "historyitem.h" 
+#include "historyitem.h"
 #include <global.h>
 #include <user_cfg.h>
 
 #define DAY_UNIX_TIMESTAMP      86400   // Number of seconds in one day: 60 x 60 x 24
 
-typedef std::map <std::string, HistoryItem*> HistoryItemMap; 
+typedef std::map <std::string, HistoryItem*> HistoryItemMap;
 
-class HistoryManager {
+class HistoryManager
+{
 
     public:
         /*
@@ -56,7 +57,7 @@ class HistoryManager {
         /**
          *@param path  A specific file to use; if empty, use the global one
          *
-         *@return int The number of history items succesfully loaded
+         *@return int The number of history items successfully loaded
          */
         int load_history (int limit, std::string path="");
 
@@ -95,7 +96,7 @@ class HistoryManager {
         inline void set_history_path (std::string filename) {
             _history_path = filename;
         }
-    
+
         /*
          *@return int   The number of items found in the history file
          */
@@ -108,13 +109,12 @@ class HistoryManager {
         int set_serialized_history (std::map <std::string, std::string> history, int limit);
 
     private:
-        inline int get_unix_timestamp_equivalent (int days)
-        {
+        inline int get_unix_timestamp_equivalent (int days) {
             return days * DAY_UNIX_TIMESTAMP;
         }
-        
-        int getConfigInt(const std::string& section, const std::string& name, Conf::ConfigTree *history_list);
-        std::string getConfigString(const std::string& section, const std::string& name, Conf::ConfigTree *history_list);
+
+        int getConfigInt (const std::string& section, const std::string& name, Conf::ConfigTree *history_list);
+        std::string getConfigString (const std::string& section, const std::string& name, Conf::ConfigTree *history_list);
 
         /*
          * Set the path to the history file
@@ -139,7 +139,7 @@ class HistoryManager {
 
         /*
          * The path to the history file
-         */ 
+         */
 
         std::string _history_path;
 
diff --git a/sflphone-common/src/hooks/urlhook.cpp b/sflphone-common/src/hooks/urlhook.cpp
index f74aa00ef0794c41f15e84bb96d2040b5e476f40..d9191309de71760d77a26df608a93fd8449f3e0b 100644
--- a/sflphone-common/src/hooks/urlhook.cpp
+++ b/sflphone-common/src/hooks/urlhook.cpp
@@ -40,32 +40,33 @@ int UrlHook::addAction (std::string field_value, std::string command)
 {
 
     std::string command_bg;
-	std::string temp;
-	std::vector <std::string> args;
-	size_t pos;
-	unsigned int i;
+    std::string temp;
+    std::vector <std::string> args;
+    size_t pos;
+    unsigned int i;
 
-	/* Escape the '&' char to not discard $_GET parameters in the URL - #2659 */ 
-	while ( (pos = field_value.find ("&", 0)) != std::string::npos) {
+    /* Escape the '&' char to not discard $_GET parameters in the URL - #2659 */
+    while ( (pos = field_value.find ("&", 0)) != std::string::npos) {
         temp = field_value.substr (0, pos);
         field_value.erase (0, pos + 1);
-		args.push_back (temp);
-		std::cout << temp << " " << std::endl;	
-	}
+        args.push_back (temp);
+        std::cout << temp << " " << std::endl;
+    }
 
     command_bg = command + " ";
 
-	pos = args.size ();
-	for (i=0; i<pos; i++) {
-		// Escape the "&"
-		command_bg += args[i] + "\\&";
-	}
+    pos = args.size ();
 
-	// Retrieve the last argument
-	command_bg +=  field_value;
+    for (i=0; i<pos; i++) {
+        // Escape the "&"
+        command_bg += args[i] + "\\&";
+    }
+
+    // Retrieve the last argument
+    command_bg +=  field_value;
 
     /* Execute the command in the background to not block the application */
-	command_bg += "&";
+    command_bg += "&";
 
     /* Execute a system call */
     return RUN_COMMAND (command_bg.c_str());
diff --git a/sflphone-common/src/hooks/urlhook.h b/sflphone-common/src/hooks/urlhook.h
index 49208656063665caf781c681d8247c368e9e5e3b..90a463771f7edd8d499440c63835b6a087130401 100644
--- a/sflphone-common/src/hooks/urlhook.h
+++ b/sflphone-common/src/hooks/urlhook.h
@@ -36,7 +36,8 @@
 
 #define RUN_COMMAND(command)   system(command);
 
-class UrlHook {
+class UrlHook
+{
 
     public:
         /**
diff --git a/sflphone-common/src/iax/iaxaccount.cpp b/sflphone-common/src/iax/iaxaccount.cpp
index 2c277cb0827ee138efb7e835d4362a188ba7d032..ee4428aaba68048e3c13a84ae27482974c069f3c 100644
--- a/sflphone-common/src/iax/iaxaccount.cpp
+++ b/sflphone-common/src/iax/iaxaccount.cpp
@@ -47,6 +47,195 @@ IAXAccount::~IAXAccount()
     _link = NULL;
 }
 
+void IAXAccount::serialize (Conf::YamlEmitter *emitter)
+{
+    _debug ("IaxAccount: serialize %s", _accountID.c_str());
+
+    Conf::MappingNode accountmap (NULL);
+
+    Conf::ScalarNode id (Account::_accountID);
+    Conf::ScalarNode username (Account::_username);
+    Conf::ScalarNode password (Account::_password);
+    Conf::ScalarNode alias (Account::_alias);
+    Conf::ScalarNode hostname (Account::_hostname);
+    Conf::ScalarNode enable (_enabled ? "true" : "false");
+    Conf::ScalarNode type (Account::_type);
+    Conf::ScalarNode mailbox ("97");
+
+    Conf::ScalarNode codecs (_codecStr);
+    Conf::ScalarNode displayName (_displayName);
+
+    accountmap.setKeyValue (aliasKey, &alias);
+    accountmap.setKeyValue (typeKey, &type);
+    accountmap.setKeyValue (idKey, &id);
+    accountmap.setKeyValue (usernameKey, &username);
+    accountmap.setKeyValue (passwordKey, &password);
+    accountmap.setKeyValue (hostnameKey, &hostname);
+    accountmap.setKeyValue (accountEnableKey, &enable);
+    accountmap.setKeyValue (mailboxKey, &mailbox);
+
+    accountmap.setKeyValue (displayNameKey, &displayName);
+    accountmap.setKeyValue (codecsKey, &codecs);
+
+    try {
+        emitter->serializeAccount (&accountmap);
+    } catch (Conf::YamlEmitterException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
+}
+
+void IAXAccount::unserialize (Conf::MappingNode *map)
+{
+    Conf::ScalarNode *val;
+
+    _debug ("IaxAccount: Unserialize");
+
+    val = (Conf::ScalarNode *) (map->getValue (aliasKey));
+
+    if (val) {
+        _alias = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (typeKey));
+
+    if (val) {
+        _type = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (idKey));
+
+    if (val) {
+        _accountID = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (usernameKey));
+
+    if (val) {
+        _username = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (passwordKey));
+
+    if (val) {
+        _password = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (hostnameKey));
+
+    if (val) {
+        _hostname = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (accountEnableKey));
+
+    if (val) {
+        _enabled = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    //  val = (Conf::ScalarNode *)(map->getValue(mailboxKey));
+
+    val = (Conf::ScalarNode *) (map->getValue (codecsKey));
+
+    if (val) {
+        _codecStr = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (displayNameKey));
+
+    if (val) {
+        _displayName = val->getValue();
+        val = NULL;
+    }
+
+}
+
+void IAXAccount::setAccountDetails (const std::map<std::string, std::string>& details)
+{
+    std::map<std::string, std::string> map_cpy;
+    std::map<std::string, std::string>::iterator iter;
+
+    _debug ("IaxAccount: Set account details: %s", _accountID.c_str());
+
+    // Work on a copy
+    map_cpy = details;
+
+    std::string alias;
+    std::string type;
+    std::string hostname;
+    std::string username;
+    std::string password;
+    std::string mailbox;
+    std::string accountEnable;
+
+    std::string ua_name;
+
+    // Account setting common to SIP and IAX
+    find_in_map (CONFIG_ACCOUNT_ALIAS, alias)
+    find_in_map (CONFIG_ACCOUNT_TYPE, type)
+    find_in_map (HOSTNAME, hostname)
+    find_in_map (USERNAME, username)
+    find_in_map (PASSWORD, password)
+    find_in_map (CONFIG_ACCOUNT_MAILBOX, mailbox);
+    find_in_map (CONFIG_ACCOUNT_ENABLE, accountEnable);
+
+    setAlias (alias);
+    setType (type);
+    setUsername (username);
+    setHostname (hostname);
+    setPassword (password);
+    setEnabled ( (accountEnable.compare ("true") == 0) ? true : false);
+
+    std::string displayName;
+    find_in_map (DISPLAY_NAME, displayName)
+    setDisplayName (displayName);
+
+    find_in_map (USERAGENT, ua_name)
+    setUseragent (ua_name);
+
+}
+
+std::map<std::string, std::string> IAXAccount::getAccountDetails()
+{
+    std::map<std::string, std::string> a;
+
+    _debug ("IaxAccount: get account details  %s", _accountID.c_str());
+
+    a.insert (std::pair<std::string, std::string> (ACCOUNT_ID, _accountID));
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ALIAS, getAlias()));
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ENABLE, isEnabled() ? "true" : "false"));
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_TYPE, getType()));
+    a.insert (std::pair<std::string, std::string> (HOSTNAME, getHostname()));
+    a.insert (std::pair<std::string, std::string> (USERNAME, getUsername()));
+    a.insert (std::pair<std::string, std::string> (PASSWORD, getPassword()));
+
+    RegistrationState state = Unregistered;
+    std::string registrationStateCode;
+    std::string registrationStateDescription;
+
+    state = getRegistrationState();
+    int code = getRegistrationStateDetailed().first;
+    std::stringstream out;
+    out << code;
+    registrationStateCode = out.str();
+    registrationStateDescription = getRegistrationStateDetailed().second;
+
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATUS, Manager::instance().mapStateNumberToString (state)));
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATE_CODE, registrationStateCode));
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATE_DESCRIPTION, registrationStateDescription));
+    a.insert (std::pair<std::string, std::string> (USERAGENT, getUseragent()));
+
+    return a;
+}
+
+
 void IAXAccount::setVoIPLink()
 {
 
@@ -57,9 +246,9 @@ int IAXAccount::registerVoIPLink()
     _link->init();
 
     // Stuff needed for IAX registration
-    setHostname (Manager::instance().getConfigString (_accountID, HOSTNAME));
-    setUsername (Manager::instance().getConfigString (_accountID, USERNAME));
-    setPassword (Manager::instance().getConfigString (_accountID, PASSWORD));
+    setHostname (_hostname);
+    setUsername (_username);
+    setPassword (_password);
 
     _link->sendRegister (_accountID);
 
diff --git a/sflphone-common/src/iax/iaxaccount.h b/sflphone-common/src/iax/iaxaccount.h
index 5202c36090c8274dc901ab759a89942843872340..d9596abb9b60d548d5fd32f8cb5bce5e2c6d4e90 100644
--- a/sflphone-common/src/iax/iaxaccount.h
+++ b/sflphone-common/src/iax/iaxaccount.h
@@ -2,17 +2,17 @@
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
  *  Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
  *  Author: Yan Morin <yan.morin@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.
@@ -40,14 +40,22 @@
 class IAXAccount : public Account
 {
     public:
-        IAXAccount(const AccountID& accountID);
+        IAXAccount (const AccountID& accountID);
 
         ~IAXAccount();
 
-	void setVoIPLink ();
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
 
-        /** 
-         * Actually unuseful, since config loading is done in init() 
+        void setAccountDetails (const std::map<std::string, std::string>& details);
+
+        std::map<std::string, std::string> getAccountDetails();
+
+        void setVoIPLink ();
+
+        /**
+         * Actually useless, since config loading is done in init()
          */
         void loadConfig();
 
diff --git a/sflphone-common/src/iax/iaxcall.cpp b/sflphone-common/src/iax/iaxcall.cpp
index 7964df857fdf82434c65277334068f0b97d34bf1..52bc6c7c5bfb50285a8240acf061fffe0f12ccbe 100644
--- a/sflphone-common/src/iax/iaxcall.cpp
+++ b/sflphone-common/src/iax/iaxcall.cpp
@@ -39,172 +39,173 @@ IAXCall::IAXCall (const CallID& id, Call::CallType type) : Call (id, type), _ses
 
 IAXCall::~IAXCall()
 {
-	_session = NULL; // just to be sure to don't have unknown pointer, do not delete it!
+    _session = NULL; // just to be sure to don't have unknown pointer, do not delete it!
 }
 
-	void
+void
 IAXCall::setFormat (int format)
 {
-	_format = format;
-
-	_info ("IAX set supported format: ");
-
-	switch (format) {
-
-		case AST_FORMAT_ULAW:
-			_info("PCMU");
-			setAudioCodec (PAYLOAD_CODEC_ULAW);
-			break;
-
-		case AST_FORMAT_GSM:
-			_info ("GSM");
-			setAudioCodec (PAYLOAD_CODEC_GSM);
-			break;
-
-		case AST_FORMAT_ALAW:
-			_info ("ALAW");
-			setAudioCodec (PAYLOAD_CODEC_ALAW);
-			break;
-
-		case AST_FORMAT_ILBC:
-			_info ("ILBC");
-			setAudioCodec (PAYLOAD_CODEC_ILBC_20);
-			break;
-
-		case AST_FORMAT_SPEEX:
-			_info ("SPEEX");
-			setAudioCodec (PAYLOAD_CODEC_SPEEX_8000);
-			break;
-
-		default:
-			_info ("Error audio codec type %i not supported!", format);
-			setAudioCodec ( (AudioCodecType) -1);
-			break;
-	}
+    _format = format;
+
+    _info ("IAX set supported format: ");
+
+    switch (format) {
+
+        case AST_FORMAT_ULAW:
+            _info ("PCMU");
+            setAudioCodec (PAYLOAD_CODEC_ULAW);
+            break;
+
+        case AST_FORMAT_GSM:
+            _info ("GSM");
+            setAudioCodec (PAYLOAD_CODEC_GSM);
+            break;
+
+        case AST_FORMAT_ALAW:
+            _info ("ALAW");
+            setAudioCodec (PAYLOAD_CODEC_ALAW);
+            break;
+
+        case AST_FORMAT_ILBC:
+            _info ("ILBC");
+            setAudioCodec (PAYLOAD_CODEC_ILBC_20);
+            break;
+
+        case AST_FORMAT_SPEEX:
+            _info ("SPEEX");
+            setAudioCodec (PAYLOAD_CODEC_SPEEX_8000);
+            break;
+
+        default:
+            _info ("Error audio codec type %i not supported!", format);
+            setAudioCodec ( (AudioCodecType) -1);
+            break;
+    }
 }
 
 
-	int
+int
 IAXCall::getSupportedFormat (std::string accountID)
 {
-	CodecOrder map;
-	int format = 0;
-	unsigned int iter;
-	Account *account;
-
-	_info ("IAX get supported format: ");
-
-	account = Manager::instance().getAccount (accountID);
-	if (account != NULL) {
-		map = account->getActiveCodecs();
-	}
-	else {
-		_error ("No IAx account could be found");
-	}
-
-	for (iter=0 ; iter < map.size() ; iter++) {
-		switch (map[iter]) {
-
-			case PAYLOAD_CODEC_ULAW:
-				_info ("PCMU ");
-				format |= AST_FORMAT_ULAW;
-				break;
-
-			case PAYLOAD_CODEC_GSM:
-				_info ("GSM ");
-				format |= AST_FORMAT_GSM;
-				break;
-
-			case PAYLOAD_CODEC_ALAW:
-				_info ("PCMA ");
-				format |= AST_FORMAT_ALAW;
-				break;
-
-			case PAYLOAD_CODEC_ILBC_20:
-				_info ("ILBC ");
-				format |= AST_FORMAT_ILBC;
-				break;
-
-			case PAYLOAD_CODEC_SPEEX_8000:
-				_info ("SPEEX ");
-				format |= AST_FORMAT_SPEEX;
-				break;
-
-			default:
-				break;
-		}
-	}
-
-	return format;
+    CodecOrder map;
+    int format = 0;
+    unsigned int iter;
+    Account *account;
+
+    _info ("IAX get supported format: ");
+
+    account = Manager::instance().getAccount (accountID);
+
+    if (account != NULL) {
+        map = account->getActiveCodecs();
+    } else {
+        _error ("No IAx account could be found");
+    }
+
+    for (iter=0 ; iter < map.size() ; iter++) {
+        switch (map[iter]) {
+
+            case PAYLOAD_CODEC_ULAW:
+                _info ("PCMU ");
+                format |= AST_FORMAT_ULAW;
+                break;
+
+            case PAYLOAD_CODEC_GSM:
+                _info ("GSM ");
+                format |= AST_FORMAT_GSM;
+                break;
+
+            case PAYLOAD_CODEC_ALAW:
+                _info ("PCMA ");
+                format |= AST_FORMAT_ALAW;
+                break;
+
+            case PAYLOAD_CODEC_ILBC_20:
+                _info ("ILBC ");
+                format |= AST_FORMAT_ILBC;
+                break;
+
+            case PAYLOAD_CODEC_SPEEX_8000:
+                _info ("SPEEX ");
+                format |= AST_FORMAT_SPEEX;
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    return format;
 
 }
 
-int IAXCall::getFirstMatchingFormat (int needles, std::string accountID) {
+int IAXCall::getFirstMatchingFormat (int needles, std::string accountID)
+{
+
+    Account *account;
+    CodecOrder map;
+    int format = 0;
+    unsigned int iter;
 
-	Account *account;
-	CodecOrder map;
-	int format = 0;
-	unsigned int iter;
+    _debug ("IAX get first matching codec: ");
 
-	_debug ("IAX get first matching codec: ");
+    account = Manager::instance().getAccount (accountID);
 
-	account = Manager::instance().getAccount (accountID);
-	if (account != NULL) {
-		map = account->getActiveCodecs();
-	}
-	else {
-		_error ("No IAx account could be found");
-	}
+    if (account != NULL) {
+        map = account->getActiveCodecs();
+    } else {
+        _error ("No IAx account could be found");
+    }
 
-	for (iter=0 ; iter < map.size() ; iter++) {
-		switch (map[iter]) {
+    for (iter=0 ; iter < map.size() ; iter++) {
+        switch (map[iter]) {
 
-			case PAYLOAD_CODEC_ULAW:
-				_debug ("PCMU");
-				format = AST_FORMAT_ULAW;
-				break;
+            case PAYLOAD_CODEC_ULAW:
+                _debug ("PCMU");
+                format = AST_FORMAT_ULAW;
+                break;
 
-			case PAYLOAD_CODEC_GSM:
-				_debug ("GSM");
-				format = AST_FORMAT_GSM;
-				break;
+            case PAYLOAD_CODEC_GSM:
+                _debug ("GSM");
+                format = AST_FORMAT_GSM;
+                break;
 
-			case PAYLOAD_CODEC_ALAW:
-				_debug ("PCMA");
-				format = AST_FORMAT_ALAW;
-				break;
+            case PAYLOAD_CODEC_ALAW:
+                _debug ("PCMA");
+                format = AST_FORMAT_ALAW;
+                break;
 
-			case PAYLOAD_CODEC_ILBC_20:
-				_debug ("ILBC");
-				format = AST_FORMAT_ILBC;
-				break;
+            case PAYLOAD_CODEC_ILBC_20:
+                _debug ("ILBC");
+                format = AST_FORMAT_ILBC;
+                break;
 
-			case PAYLOAD_CODEC_SPEEX_8000:
-				_debug ("SPEEX");
-				format = AST_FORMAT_SPEEX;
-				break;
+            case PAYLOAD_CODEC_SPEEX_8000:
+                _debug ("SPEEX");
+                format = AST_FORMAT_SPEEX;
+                break;
 
-			default:
-				break;
-		}
+            default:
+                break;
+        }
 
-		// Return the first that matches
-		if (format & needles)
-			return format;
+        // Return the first that matches
+        if (format & needles)
+            return format;
 
-	}
+    }
 
-	return 0;
+    return 0;
 }
 
 CodecDescriptor& IAXCall::getCodecMap()
 {
-	return _codecMap;
+    return _codecMap;
 }
 
 AudioCodecType IAXCall::getAudioCodec()
 {
-	return _audioCodec;
+    return _audioCodec;
 }
 
 
diff --git a/sflphone-common/src/iax/iaxcall.h b/sflphone-common/src/iax/iaxcall.h
index 7ecb1558cacf79ab3e79f6c56276726fd4d24503..fae514039eefac9d4b3f33017ad2a6f48871eddd 100644
--- a/sflphone-common/src/iax/iaxcall.h
+++ b/sflphone-common/src/iax/iaxcall.h
@@ -39,110 +39,120 @@
 
 /**
  * @file: iaxcall.h
- * @brief IAXCall are IAX implementation of a normal Call 
+ * @brief IAXCall are IAX implementation of a normal Call
  */
 
 class IAXCall : public Call
 {
-public:
-    /**
-     * Constructor
-     * @param id  The unique ID of the call
-     * @param type  The type of the call
-     */
-    IAXCall(const CallID& id, Call::CallType type);
-
-    /**
-     * Destructor
-     */
-    ~IAXCall();
-
-    /** 
-     * @return iax_session* The session pointer or NULL
-     */
-    struct iax_session* getSession() { return _session; }
-
-    /** 
-     * Set the session pointer 
-     * @param session the session pointer to assign
-     */
-    void setSession(struct iax_session* session) { _session = session; }
-
-    /**
-     * Set format (one single bit)
-     * This function sets the _audioCodec variable with the correct
-     * codec.
-     * @param format  The format representing the codec
-     */
-    void setFormat(int format);
-
-    /**
-     * Get format for the voice codec used
-     * @return int  Bitmask for codecs defined in iax/frame.h
-     */
-    int getFormat() { return _format; }
-
-
-    /**
-     * @return int  The bitwise list of supported formats
-     */
-    int getSupportedFormat (std::string accountID);
-
-    /**
-     * Return a format (int) with the first matching codec selected.
-     * 
-     * This considers the order of the appearance in the CodecMap,
-     * thus, the order of preference.
-     *
-     * NOTE: Everything returned is bound to the content of the local
-     *       CodecMap, so it won't return format values that aren't valid
-     *       in this call context.
-     *
-     * @param needles  The format(s) (bitwise) you are looking for to match
-     * @return int  The matching format, thus 0 if none matches
-     */
-    int getFirstMatchingFormat(int needles, std::string accountID);
-
-    // AUDIO
-    /** 
-     * Set internal codec Map: initialization only, not protected 
-     * @param map The codec map
-     */
-    void setCodecMap(const CodecDescriptor& map) { _codecMap = map; } 
-
-    /** 
-     * Get internal codec Map: initialization only, not protected 
-     * @return CodecDescriptor	The codec map
-     */
-    CodecDescriptor& getCodecMap();
-
-    /** 
-     * Return audio codec [mutex protected]
-     * @return AudioCodecType The payload of the codec
-     */
-    AudioCodecType getAudioCodec();
-
-private:
-    /** Each call is associated with an iax_session */
-    struct iax_session* _session;
-
-    /** 
-     * Set the audio codec used.  [not protected] 
-     * @param audioCodec  The payload of the codec
-     */
-    void setAudioCodec(AudioCodecType audioCodec) { _audioCodec = audioCodec; }
-
-    /** Codec Map */
-    CodecDescriptor _codecMap;
-
-    /** Codec pointer */
-    AudioCodecType _audioCodec;
-
-    /**
-     * Format currently in use in the conversation,
-     * sent in each outgoing voice packet.
-     */
-    int _format;
+    public:
+        /**
+         * Constructor
+         * @param id  The unique ID of the call
+         * @param type  The type of the call
+         */
+        IAXCall (const CallID& id, Call::CallType type);
+
+        /**
+         * Destructor
+         */
+        ~IAXCall();
+
+        /**
+         * @return iax_session* The session pointer or NULL
+         */
+        struct iax_session* getSession() {
+            return _session;
+        }
+
+        /**
+         * Set the session pointer
+         * @param session the session pointer to assign
+         */
+        void setSession (struct iax_session* session) {
+            _session = session;
+        }
+
+        /**
+         * Set format (one single bit)
+         * This function sets the _audioCodec variable with the correct
+         * codec.
+         * @param format  The format representing the codec
+         */
+        void setFormat (int format);
+
+        /**
+         * Get format for the voice codec used
+         * @return int  Bitmask for codecs defined in iax/frame.h
+         */
+        int getFormat() {
+            return _format;
+        }
+
+
+        /**
+         * @return int  The bitwise list of supported formats
+         */
+        int getSupportedFormat (std::string accountID);
+
+        /**
+         * Return a format (int) with the first matching codec selected.
+         *
+         * This considers the order of the appearance in the CodecMap,
+         * thus, the order of preference.
+         *
+         * NOTE: Everything returned is bound to the content of the local
+         *       CodecMap, so it won't return format values that aren't valid
+         *       in this call context.
+         *
+         * @param needles  The format(s) (bitwise) you are looking for to match
+         * @return int  The matching format, thus 0 if none matches
+         */
+        int getFirstMatchingFormat (int needles, std::string accountID);
+
+        // AUDIO
+        /**
+         * Set internal codec Map: initialization only, not protected
+         * @param map The codec map
+         */
+        void setCodecMap (const CodecDescriptor& map) {
+            _codecMap = map;
+        }
+
+        /**
+         * Get internal codec Map: initialization only, not protected
+         * @return CodecDescriptor	The codec map
+         */
+        CodecDescriptor& getCodecMap();
+
+        /**
+         * Return audio codec [mutex protected]
+         * @return AudioCodecType The payload of the codec
+         */
+        AudioCodecType getAudioCodec();
+
+    private:
+        /** Each call is associated with an iax_session */
+        struct iax_session* _session;
+
+        /**
+         * Set the audio codec used.  [not protected]
+         * @param audioCodec  The payload of the codec
+         */
+        void setAudioCodec (AudioCodecType audioCodec) {
+            _audioCodec = audioCodec;
+        }
+
+        /** Codec Map */
+        CodecDescriptor _codecMap;
+
+        /** Codec pointer */
+        AudioCodecType _audioCodec;
+
+        /**
+         * Format currently in use in the conversation,
+         * sent in each outgoing voice packet.
+         */
+        int _format;
 };
 
 #endif
diff --git a/sflphone-common/src/iax/iaxvoiplink.cpp b/sflphone-common/src/iax/iaxvoiplink.cpp
index 0649b34df34770174505e3618ddab47c0512aad1..6679bbf4b783bdb4880ec9d39c5ceaaf71aa2e89 100644
--- a/sflphone-common/src/iax/iaxvoiplink.cpp
+++ b/sflphone-common/src/iax/iaxvoiplink.cpp
@@ -51,20 +51,26 @@
 #define CHK_VALID_CALL   if (call == NULL) { _debug("IAX: Call doesn't exists"); \
 	return false; }
 
-IAXVoIPLink::IAXVoIPLink (const AccountID& accountID)
-        : VoIPLink (accountID)
+IAXVoIPLink::IAXVoIPLink (const AccountID& accountID) : VoIPLink (accountID)
+        , _evThread (NULL)
+        , _regSession (NULL)
+        , _nextRefreshStamp (0)
+        , audiolayer (NULL)
+        , micData (NULL)
+        , micDataConverted (NULL)
+        , micDataEncoded (NULL)
+        , spkrDataDecoded (NULL)
+        , spkrDataConverted (NULL)
+        , converter (NULL)
+        , converterSamplingRate (NULL)
+        , urlhook (NULL)
+        , countTime (0)
 {
-    // _debug("IAXVoIPLink::IAXVoIPLink : creating eventhread  ");
     _evThread = new EventThread (this);
-    _regSession = NULL;
-    _nextRefreshStamp = 0;
-    countTime = 0;
 
     // to get random number for RANDOM_PORT
     srand (time (NULL));
 
-    audiolayer = NULL;
-
     converter = new SamplerateConverter();
 
     int nbSamplesMax = (int) (converter->getFrequence() * converter->getFramesize() / 1000);
@@ -82,26 +88,46 @@ IAXVoIPLink::IAXVoIPLink (const AccountID& accountID)
 
 IAXVoIPLink::~IAXVoIPLink()
 {
-    delete _evThread;
-    _evThread = NULL;
+    if (_evThread) {
+        delete _evThread;
+        _evThread = NULL;
+    }
+
     _regSession = NULL; // shall not delete it
     terminate();
 
     audiolayer = NULL;
 
-    delete converter;
+    if (converter) {
+        delete converter;
+        converter = NULL;
+    }
+
+    if (micData) {
+        delete [] micData;
+        micData = NULL;
+    }
+
+    if (micDataConverted) {
+        delete [] micDataConverted;
+        micDataConverted = NULL;
+    }
+
+    if (micDataEncoded) {
+        delete [] micDataEncoded;
+        micDataEncoded = NULL;
+    }
+
+    if (spkrDataDecoded) {
+        delete [] spkrDataDecoded;
+        spkrDataDecoded = NULL;
+    }
 
-    delete [] micData;
-    micData = NULL;
-    delete [] micDataConverted;
-    micDataConverted = NULL;
-    delete [] micDataEncoded;
-    micDataEncoded = NULL;
+    if (spkrDataConverted) {
+        delete [] spkrDataConverted;
+        spkrDataConverted = NULL;
+    }
 
-    delete [] spkrDataDecoded;
-    spkrDataDecoded = NULL;
-    delete [] spkrDataConverted;
-    spkrDataConverted = NULL;
 }
 
 bool
@@ -219,6 +245,8 @@ IAXVoIPLink::getEvent()
 {
     IAXCall* call = NULL;
 
+    Manager::instance().getAudioLayerMutex()->enter();
+
     // lock iax_ stuff..
     _mutexIAX.enterMutex();
     iax_event* event = NULL;
@@ -254,11 +282,7 @@ IAXVoIPLink::getEvent()
 
     sendAudioFromMic();
 
-    if (call) {
-        call->recAudio.recData (spkrDataDecoded, micData, nbSampleForRec_, nbSampleForRec_);
-
-        // Do the doodle-moodle to send audio from the microphone to the IAX channel.
-    }
+    Manager::instance().getAudioLayerMutex()->leave();
 
     // Do the doodle-moodle to send audio from the microphone to the IAX channel.
     // sendAudioFromMic();
@@ -408,19 +432,23 @@ IAXVoIPLink::getIAXCall (const CallID& id)
 
 
 int
-IAXVoIPLink::sendRegister (AccountID id)
+IAXVoIPLink::sendRegister (AccountID id UNUSED)
 {
     IAXAccount *account;
     bool result;
 
+    _debug ("IAX: Sending registration");
+
     result = false;
     account = dynamic_cast<IAXAccount *> (getAccountPtr());
 
     if (account->getHostname().empty()) {
+        _error ("IAX: Error: Account hostname is empty");
         return false;
     }
 
     if (account->getUsername().empty()) {
+        _error ("IAX: Error: Account username is empty");
         return false;
     }
 
@@ -435,11 +463,11 @@ IAXVoIPLink::sendRegister (AccountID id)
     _regSession = iax_session_new();
 
     if (!_regSession) {
-        _debug ("Error when generating new session for register");
+        _debug ("IAX: Error when generating new session for register");
     } else {
-        _debug ("IAX Sending registration to %s with user %s", account->getHostname().c_str() , account->getUsername().c_str());
+        _debug ("IAX: Sending registration to %s with user %s", account->getHostname().c_str() , account->getUsername().c_str());
         int val = iax_register (_regSession, account->getHostname().data(), account->getUsername().data(), account->getPassword().data(), 120);
-        _debug ("Return value: %d", val);
+        _debug ("IAX: Return value: %d", val);
         // set the time-out to 15 seconds, after that, resend a registration request.
         // until we unregister.
         _nextRefreshStamp = time (NULL) + 10;
@@ -455,7 +483,7 @@ IAXVoIPLink::sendRegister (AccountID id)
 }
 
 int
-IAXVoIPLink::sendUnregister (AccountID id)
+IAXVoIPLink::sendUnregister (AccountID id UNUSED)
 {
     IAXAccount *account;
 
@@ -491,7 +519,7 @@ IAXVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
 
     if (call) {
         call->setPeerNumber (toUrl);
-        call->initRecFileName();
+        call->initRecFileName (toUrl);
 
         if (iaxOutgoingInvite (call)) {
             call->setConnectionState (Call::Progressing);
@@ -533,7 +561,7 @@ IAXVoIPLink::answer (const CallID& id)
 bool
 IAXVoIPLink::hangup (const CallID& id)
 {
-    _debug ("IAXVoIPLink::hangup() : function called once hangup ");
+    _debug ("IAXVoIPLink: Hangup");
     IAXCall* call = getIAXCall (id);
     std::string reason = "Dumped Call";
     CHK_VALID_CALL;
@@ -561,7 +589,7 @@ IAXVoIPLink::hangup (const CallID& id)
 bool
 IAXVoIPLink::peerHungup (const CallID& id)
 {
-    _debug ("IAXVoIPLink::peerHangup() : function called once hangup ");
+    _debug ("IAXVoIPLink: Peer hung up");
     IAXCall* call = getIAXCall (id);
     std::string reason = "Dumped Call";
     CHK_VALID_CALL;
@@ -677,6 +705,24 @@ IAXVoIPLink::carryingDTMFdigits (const CallID& id, char code)
     return true;
 }
 
+bool
+IAXVoIPLink::sendTextMessage (sfl::InstantMessaging *module, const std::string& callID, const std::string& message, const std::string& from)
+{
+    IAXCall* call = getIAXCall (callID);
+
+    CHK_VALID_CALL;
+
+    // Must active the mutex for this session
+    _mutexIAX.enterMutex();
+
+    module->send_iax_message (call->getSession(), callID, message.c_str());
+
+    // iax_send_text (call->getSession(), message.c_str());
+    _mutexIAX.leaveMutex();
+
+    return true;
+}
+
 
 std::string
 IAXVoIPLink::getCurrentCodecName()
@@ -866,6 +912,7 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call)
             break;
 
         case IAX_EVENT_TEXT:
+            Manager::instance ().incomingMessage (call->getCallId (), call->getPeerNumber(), std::string ( (const char*) event->data));
             break;
 
         case IAX_EVENT_RINGA:
@@ -894,6 +941,37 @@ IAXVoIPLink::iaxHandleCallEvent (iax_event* event, IAXCall* call)
             break;
 
         case IAX_EVENT_TRANSFER:
+            _debug ("IAX_EVENT_TRANSFER");
+
+            if (call->getConnectionState() != Call::Connected) {
+
+                Manager::instance().addStream (call->getCallId());
+
+                call->setConnectionState (Call::Connected);
+                call->setState (Call::Active);
+                // audiolayer->startStream();
+
+                _debug ("IAX_EVENT_ANSWER: codec format: ");
+
+                if (event->ies.format) {
+                    // Should not get here, should have been set in EVENT_ACCEPT
+                    printf ("%i", event->ies.format);
+                    call->setFormat (event->ies.format);
+                }
+
+                {
+                    printf ("no codec format");
+                }
+
+                Manager::instance().peerAnsweredCall (id);
+
+                // start audio here?
+                audiolayer->startStream();
+                audiolayer->flushMain();
+            } else {
+                // deja connecté ?
+            }
+
             break;
 
         default:
@@ -1113,7 +1191,7 @@ IAXVoIPLink::iaxHandlePrecallEvent (iax_event* event)
                 call->setPeerName (std::string (event->ies.calling_name));
 
             // if peerNumber exist append it to the name string
-            call->initRecFileName();
+            call->initRecFileName (std::string (event->ies.calling_number));
 
             if (Manager::instance().incomingCall (call, getAccountID())) {
                 /** @todo Faudra considérer éventuellement le champ CODEC PREFS pour
diff --git a/sflphone-common/src/iax/iaxvoiplink.h b/sflphone-common/src/iax/iaxvoiplink.h
index 0f61f5958823b218193d838a2c89df133654805b..d01436caf50b9c8fd508483e748d90d7a9664939 100644
--- a/sflphone-common/src/iax/iaxvoiplink.h
+++ b/sflphone-common/src/iax/iaxvoiplink.h
@@ -3,17 +3,17 @@
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  Author: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>
  *  Author: Yan Morin <yan.morin@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.
@@ -40,6 +40,8 @@
 #include "audio/samplerateconverter.h"
 #include "hooks/urlhook.h"
 
+#include "im/InstantMessaging.h"
+
 class EventThread;
 class IAXCall;
 
@@ -48,270 +50,275 @@ class AudioLayer;
 
 /**
  * @file iaxvoiplink.h
- * @brief VoIPLink contains a thread that listen to external events 
+ * @brief VoIPLink contains a thread that listen to external events
  * and contains IAX Call related functions
  */
 
 class IAXVoIPLink : public VoIPLink
 {
-  public:
-  
-    /**
-     * Constructor
-     * @param accountID	The account containing the voip link
-     */
-    IAXVoIPLink(const AccountID& accountID);
-
-    /**
-     * Destructor
-     */
-    ~IAXVoIPLink();
-
-    /**
-     *	Listen to events sent by the call manager ( asterisk, etc .. )
-     */
-    void getEvent(void);
-    
-    /**
-     * Init the voip link
-     * @return true if successful
-     *	      false otherwise
-     */
-    bool init (void);
-    
-    /**
-     * Terminate a voip link by clearing the call list
-     */
-    void terminate (void);
-
-    /**
-     * Terminate on call
-     */
-    void terminateOneCall(const CallID& id);
-
-    /**
-     * Send out registration
-     * @return bool The new registration state (are we registered ?)
-     */
-    int sendRegister (AccountID id);
-
-    /**
-     * Destroy registration session
-     * @todo Send an IAX_COMMAND_REGREL to force unregistration upstream.
-     *       Urgency: low
-     * @return bool true if we're registered upstream
-     *		  false otherwise
-     */
-    int sendUnregister (AccountID id);
-
-    /**
-     * Create a new outgoing call
-     * @param id  The ID of the call
-     * @param toUrl The address to call
-     * @return Call*  A pointer on the call
-     */
-    Call* newOutgoingCall(const CallID& id, const std::string& toUrl);
-    
-    /**
-     * Answer a call 
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool answer(const CallID& id);
-
-    /**
-     * Hangup a call 
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool hangup(const CallID& id);
-
-    /**
-     * Peer Hungup a call 
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool peerHungup(const CallID& id);
-
-    /**
-     * Cancel a call 
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool cancel(const CallID& id UNUSED ) { return false; }
-    
-    /**
-     * Put a call on hold 
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool onhold(const CallID& id);
-    
-    /**
-     * Put a call off hold
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool offhold(const CallID& id);
-    
-    /**
-     * Transfer a call 
-     * @param id The ID of the call
-     * @param to The recipient of the transfer
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool transfer(const CallID& id, const std::string& to);
-    
-    /**
-     * Refuse a call 
-     * @param id The ID of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool refuse (const CallID& id);
- 
-    /**
-     * Send DTMF  
-     * @param id The ID of the call
-     * @param code  The code of the DTMF
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool carryingDTMFdigits(const CallID& id, char code);
-    
-    bool sendMessage(const std::string& to UNUSED, const std::string& body UNUSED) { return false; }
-    
-    bool isContactPresenceSupported() { return false; }
-
-    /**
-     * Return the codec protocol used for this call 
-     * @param id The call identifier
-     */
-    std::string getCurrentCodecName();
-
-
-  public: // iaxvoiplink only
-   
-    void updateAudiolayer( void ); 
-
-  private:
-
-    /* 
-     * Decode the message count IAX send.
-     * Returns only the new messages number
-     * 
-     * @param msgcount  The value sent by IAX in the REGACK message
-     * @return int  The number of new messages waiting for the current registered user
-     */
-     int processIAXMsgCount( int msgcount );
-
-
-    /**
-     * Get IAX Call from an id
-     * @param id CallId
-     * @return IAXCall pointer or 0
-     */
-    IAXCall* getIAXCall(const CallID& id);
-
-    /**
-     * Delete every call 
-     */
-    void terminateIAXCall();
-
-    /**
-     * Find a iaxcall by iax session number
-     * @param session an iax_session valid pointer
-     * @return iaxcall or 0 if not found
-     */
-    IAXCall* iaxFindCallBySession(struct iax_session* session);
-
-    /**
-     * Handle IAX Event for a call
-     * @param event An iax_event pointer
-     * @param call  An IAXCall pointer 
-     */
-    void iaxHandleCallEvent(iax_event* event, IAXCall* call);
-
-    /**
-     * Handle the VOICE events specifically
-     * @param event The iax_event containing the IAX_EVENT_VOICE
-     * @param call  The associated IAXCall
-     */
-    void iaxHandleVoiceEvent(iax_event* event, IAXCall* call);
-
-    /**
-     * Handle IAX Registration Reply event
-     * @param event An iax_event pointer
-     */
-    void iaxHandleRegReply(iax_event* event);
-
-    /**
-     * Handle IAX pre-call setup-related events
-     * @param event An iax_event pointer
-     */
-    void iaxHandlePrecallEvent(iax_event* event);
-
-    /**
-     * Work out the audio data from Microphone to IAX2 channel
-     */
-    void sendAudioFromMic(void);
-
-    /**
-     * Send an outgoing call invite to iax
-     * @param call An IAXCall pointer
-     */
-    bool iaxOutgoingInvite(IAXCall* call);
-
-    /** Threading object */
-    EventThread* _evThread;
-
-    /** registration session : 0 if not register */
-    struct iax_session* _regSession;
-
-    /** Timestamp of when we should refresh the registration up with
-     * the registrar.  Values can be: EPOCH timestamp, 0 if we want no registration, 1
-     * to force a registration. */
-    int _nextRefreshStamp;
-
-    /** Mutex for iax_ calls, since we're the only one dealing with the incorporated
-     * iax_stuff inside this class. */
-    ost::Mutex _mutexIAX;
-
-    /** Connection to audio card/device */
-    AudioLayer* audiolayer;
-
-    /** Mic-data related buffers */
-    SFLDataFormat* micData;
-    SFLDataFormat* micDataConverted;
-    unsigned char* micDataEncoded;
-
-    /** Speaker-data related buffers */
-    SFLDataFormat* spkrDataDecoded;
-    SFLDataFormat* spkrDataConverted;
-
-    /** Sample rate converter object */
-    SamplerateConverter* converter;
-
-    int converterSamplingRate;
-    
-    /** number of sample */
-    int nbSample_;
-     
-    /** number of sample before conversion (recording) */
-    int nbSampleForRec_;
-
-    /* URL hook */
-    UrlHook *urlhook;
-
-    /** Counter for IncomingCallNotification */
-    int countTime;
+    public:
+
+        /**
+         * Constructor
+         * @param accountID	The account containing the voip link
+         */
+        IAXVoIPLink (const AccountID& accountID);
+
+        /**
+         * Destructor
+         */
+        ~IAXVoIPLink();
+
+        /**
+         *	Listen to events sent by the call manager ( asterisk, etc .. )
+         */
+        void getEvent (void);
+
+        /**
+         * Init the voip link
+         * @return true if successful
+         *	      false otherwise
+         */
+        bool init (void);
+
+        /**
+         * Terminate a voip link by clearing the call list
+         */
+        void terminate (void);
+
+        /**
+         * Terminate on call
+         */
+        void terminateOneCall (const CallID& id);
+
+        /**
+         * Send out registration
+         * @return bool The new registration state (are we registered ?)
+         */
+        int sendRegister (AccountID id);
+
+        /**
+         * Destroy registration session
+         * @todo Send an IAX_COMMAND_REGREL to force unregistration upstream.
+         *       Urgency: low
+         * @return bool true if we're registered upstream
+         *		  false otherwise
+         */
+        int sendUnregister (AccountID id);
+
+        /**
+         * Create a new outgoing call
+         * @param id  The ID of the call
+         * @param toUrl The address to call
+         * @return Call*  A pointer on the call
+         */
+        Call* newOutgoingCall (const CallID& id, const std::string& toUrl);
+
+        /**
+         * Answer a call
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool answer (const CallID& id);
+
+        /**
+         * Hangup a call
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool hangup (const CallID& id);
+
+        /**
+         * Peer Hungup a call
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool peerHungup (const CallID& id);
+
+        /**
+         * Cancel a call
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool cancel (const CallID& id UNUSED) {
+            return false;
+        }
+
+        /**
+         * Put a call on hold
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool onhold (const CallID& id);
+
+        /**
+         * Put a call off hold
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool offhold (const CallID& id);
+
+        /**
+         * Transfer a call
+         * @param id The ID of the call
+         * @param to The recipient of the transfer
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool transfer (const CallID& id, const std::string& to);
+
+        /**
+         * Refuse a call
+         * @param id The ID of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool refuse (const CallID& id);
+
+        /**
+         * Send DTMF
+         * @param id The ID of the call
+         * @param code  The code of the DTMF
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool carryingDTMFdigits (const CallID& id, char code);
+
+
+        bool sendTextMessage (sfl::InstantMessaging *module, const std::string& callID, const std::string& message, const std::string& from);
+
+        bool isContactPresenceSupported() {
+            return false;
+        }
+
+        /**
+         * Return the codec protocol used for this call
+         * @param id The call identifier
+         */
+        std::string getCurrentCodecName();
+
+
+    public: // iaxvoiplink only
+
+        void updateAudiolayer (void);
+
+    private:
+
+        /*
+         * Decode the message count IAX send.
+         * Returns only the new messages number
+         *
+         * @param msgcount  The value sent by IAX in the REGACK message
+         * @return int  The number of new messages waiting for the current registered user
+         */
+        int processIAXMsgCount (int msgcount);
+
+
+        /**
+         * Get IAX Call from an id
+         * @param id CallId
+         * @return IAXCall pointer or 0
+         */
+        IAXCall* getIAXCall (const CallID& id);
+
+        /**
+         * Delete every call
+         */
+        void terminateIAXCall();
+
+        /**
+         * Find a iaxcall by iax session number
+         * @param session an iax_session valid pointer
+         * @return iaxcall or 0 if not found
+         */
+        IAXCall* iaxFindCallBySession (struct iax_session* session);
+
+        /**
+         * Handle IAX Event for a call
+         * @param event An iax_event pointer
+         * @param call  An IAXCall pointer
+         */
+        void iaxHandleCallEvent (iax_event* event, IAXCall* call);
+
+        /**
+         * Handle the VOICE events specifically
+         * @param event The iax_event containing the IAX_EVENT_VOICE
+         * @param call  The associated IAXCall
+         */
+        void iaxHandleVoiceEvent (iax_event* event, IAXCall* call);
+
+        /**
+         * Handle IAX Registration Reply event
+         * @param event An iax_event pointer
+         */
+        void iaxHandleRegReply (iax_event* event);
+
+        /**
+         * Handle IAX pre-call setup-related events
+         * @param event An iax_event pointer
+         */
+        void iaxHandlePrecallEvent (iax_event* event);
+
+        /**
+         * Work out the audio data from Microphone to IAX2 channel
+         */
+        void sendAudioFromMic (void);
+
+        /**
+         * Send an outgoing call invite to iax
+         * @param call An IAXCall pointer
+         */
+        bool iaxOutgoingInvite (IAXCall* call);
+
+        /** Threading object */
+        EventThread* _evThread;
+
+        /** registration session : 0 if not register */
+        struct iax_session* _regSession;
+
+        /** Timestamp of when we should refresh the registration up with
+         * the registrar.  Values can be: EPOCH timestamp, 0 if we want no registration, 1
+         * to force a registration. */
+        int _nextRefreshStamp;
+
+        /** Mutex for iax_ calls, since we're the only one dealing with the incorporated
+         * iax_stuff inside this class. */
+        ost::Mutex _mutexIAX;
+
+        /** Connection to audio card/device */
+        AudioLayer* audiolayer;
+
+        /** Mic-data related buffers */
+        SFLDataFormat* micData;
+        SFLDataFormat* micDataConverted;
+        unsigned char* micDataEncoded;
+
+        /** Speaker-data related buffers */
+        SFLDataFormat* spkrDataDecoded;
+        SFLDataFormat* spkrDataConverted;
+
+        /** Sample rate converter object */
+        SamplerateConverter* converter;
+
+        int converterSamplingRate;
+
+        /** number of sample */
+        int nbSample_;
+
+        /** number of sample before conversion (recording) */
+        int nbSampleForRec_;
+
+        /* URL hook */
+        UrlHook *urlhook;
+
+        /** Counter for IncomingCallNotification */
+        int countTime;
 };
 
 #endif
diff --git a/sflphone-common/src/im/InstantMessaging.cpp b/sflphone-common/src/im/InstantMessaging.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8c8f2757eca687fb1874ca50d532920d6e0d3221
--- /dev/null
+++ b/sflphone-common/src/im/InstantMessaging.cpp
@@ -0,0 +1,431 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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 "InstantMessaging.h"
+
+#include "expat.h"
+
+namespace sfl
+{
+
+static inline char* duplicateString (char dst[], const char src[], size_t len)
+{
+    memcpy (dst, src, len);
+    dst[len] = 0;
+    return dst;
+}
+
+static void XMLCALL startElementCallback (void *userData, const char *name, const char **atts)
+{
+
+    char attribute[100];
+    char value[100];
+
+    const char **att;
+
+    // _debug ("InstantMessaging: StartElement Callback: %s", name);
+
+    if (strcmp (name, "entry") == 0) {
+
+        sfl::InstantMessaging::UriList *list = static_cast<sfl::InstantMessaging::UriList *> (userData);
+        sfl::InstantMessaging::UriEntry entry = sfl::InstantMessaging::UriEntry();
+
+        for (att = atts; *att; att += 2) {
+
+            const char **val = att+1;
+
+            duplicateString (attribute, *att, strlen (*att));
+            duplicateString (value, *val, strlen (*val));
+
+            // _debug ("InstantMessaging: attribute: %s, value: %s", attribute, value);
+
+            entry.insert (std::pair<std::string, std::string> (std::string (attribute), std::string (value)));
+        }
+
+        list->push_back (entry);
+    }
+
+}
+
+static void XMLCALL endElementCallback (void *userData, const char *name)
+{
+    // std::cout << "endElement " << name << std::endl;
+}
+
+
+InstantMessaging::InstantMessaging()
+        : imFiles ()
+        , messageMaxSize (MAXIMUM_MESSAGE_LENGTH) {}
+
+
+InstantMessaging::~InstantMessaging() {}
+
+bool InstantMessaging::init ()
+{
+    return true;
+}
+
+int InstantMessaging::openArchive (CallID& id)
+{
+
+    // Create a new file stream
+    std::ofstream File (id.c_str (), std::ios::out | std::ios::app);
+    imFiles[id] = &File;
+
+    // Attach it to the call ID
+    return (int) imFiles.size ();
+}
+
+int InstantMessaging::closeArchive (CallID& id)
+{
+
+    // Erase it from the map
+    imFiles.erase (id);
+    return (int) imFiles.size ();
+}
+
+bool InstantMessaging::saveMessage (const std::string& message, const std::string& author, CallID& id, int mode)
+{
+
+    // We need here to write the text message in the right file.
+    // We will use the Call ID
+
+    std::ofstream File;
+    std::string filename = "im:";
+
+    filename.append (id);
+    File.open (filename.c_str (), (std::_Ios_Openmode) mode);
+
+    if (!File.good () || !File.is_open ())
+        return false;
+
+    File << "[" << author << "] " << message << '\n';
+    File.close ();
+
+    return true;
+}
+
+std::string InstantMessaging::receive (const std::string& message, const std::string& author, CallID& id)
+{
+
+    // We just receive a TEXT message. Before sent it to the recipient, we must assure that the message is complete.
+    // We should use a queue to push these messages in
+
+    _debug ("New message : %s", message.c_str ());
+
+    // TODO Security check
+    // TODO String cleaning
+
+    // Archive the message
+    // TODO Deactivate this for the momment, this is an extra feature.
+    // this->saveMessage (message, author, id);
+
+
+    return message;
+
+}
+
+pj_status_t InstantMessaging::notify (CallID& id)
+{
+    // Notify the clients through a D-Bus signal
+    return PJ_SUCCESS;
+}
+
+pj_status_t InstantMessaging::sip_send (pjsip_inv_session *session, CallID& id, const std::string& text)
+{
+
+    pjsip_method msg_method;
+    const pj_str_t type =  STR_TEXT;
+    const pj_str_t subtype = STR_PLAIN;
+    pjsip_tx_data *tdata;
+    pj_status_t status;
+    pjsip_dialog* dialog;
+    pj_str_t message;
+
+    msg_method.id = PJSIP_OTHER_METHOD;
+    msg_method.name = METHOD_NAME;
+
+    // Get the dialog associated to the call
+    dialog = session->dlg;
+    // Convert the text into a format readable by pjsip
+
+    message = pj_str ( (char*) text.c_str ());
+
+    // Must lock dialog
+    pjsip_dlg_inc_lock (dialog);
+
+    // Create the message request
+    status = pjsip_dlg_create_request (dialog, &msg_method, -1, &tdata);
+    PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
+
+    // Attach "text/plain" body
+    tdata->msg->body = pjsip_msg_body_create (tdata->pool, &type, &subtype, &message);
+
+    // Create the Require header to handle recipient-list Content-Disposition type
+    // pjsip_generic_string_hdr reqhdr;
+    // pj_str_t reqhname = pj_str ("Require");
+    // pj_str_t reqhvalue = pj_str ("recipient-list");
+
+    // Create the Content-Type header to handle multipart/mixed and boundary MIME types
+    // pj_str_t ctype = pj_str ("Content-Type");
+    // pj_str_t sctype = pj_str ("ctype"); // small version of the header name
+    // ctypehdr = pjsip_msg_find_hdr_by_names (tdata->msg, &ctype, &sctype, NULL);
+    // pjsip_generic_string_hdr ctypehdr;
+    // pj_str_t ctypehname = pj_str ("Content-Type");
+    // pj_str_t ctypehvalue = pj_str ("multipart/mixed;boundary=\"boundary\"");
+
+    // Add headers to the message
+    // pjsip_generic_string_hdr_init2 (&reqhdr, &reqhname, &reqhvalue);
+    // pj_list_push_back (& (tdata->msg->hdr), (pjsip_hdr*) (&reqhdr));
+    // pj_list_push_back (& (tdata->msg->hdr), (pjsip_hdr*) (&ctypehdr));
+
+    // Send the request
+    status = pjsip_dlg_send_request (dialog, tdata, -1, NULL);
+    // PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
+
+    // Done
+    pjsip_dlg_dec_lock (dialog);
+
+    // Archive the message
+    this->saveMessage (text, "Me", id);
+
+    printf ("SIPVoIPLink::sendTextMessage %s %s\n", id.c_str(), text.c_str());
+    return PJ_SUCCESS;
+}
+
+pj_status_t InstantMessaging::send_sip_message (pjsip_inv_session *session, CallID& id, const std::string& message)
+{
+
+    /* Check the length of the message */
+    if (message.length() < getMessageMaximumSize()) {
+        /* No problem here */
+        sip_send (session, id, message);
+    }
+
+    else {
+        /* It exceeds the size limit of a SIP MESSAGE (1300 bytes), o plit it and send multiple messages */
+        std::vector<std::string> multiple_messages = split_message (message);
+        /* Send multiple messages */
+        // int size = multiple_messages.size();
+        int i = 0;
+
+        // Maximum is above 1500 character
+        // TODO: Send every messages
+        sip_send (session, id, multiple_messages[i]);
+    }
+
+    return PJ_SUCCESS;
+}
+
+
+bool InstantMessaging::iax_send (iax_session* session, const CallID& id, const std::string& message)
+{
+    if (iax_send_text (session, message.c_str()) != -1)
+        return true;
+    else
+        return false;
+
+
+}
+
+bool InstantMessaging::send_iax_message (iax_session* session, const CallID& id, const std::string& message)
+{
+
+    bool ret;
+
+    /* Check the length of the message */
+    if (message.length() < getMessageMaximumSize()) {
+        /* No problem here */
+        ret = iax_send (session, id, message);
+    }
+
+    else {
+        /* It exceeds the size limit of a SIP MESSAGE (1300 bytes), o plit it and send multiple messages */
+        std::vector<std::string> multiple_messages = split_message (message);
+        /* Send multiple messages */
+        // int size = multiple_messages.size();
+        int i = 0;
+
+        // Maximum is above 1500 character
+        // TODO: Send every messages
+        ret = iax_send (session, id, multiple_messages[i]);
+    }
+
+    return ret;
+}
+
+
+std::vector<std::string> InstantMessaging::split_message (const std::string& text)
+{
+
+    std::vector<std::string> messages;
+    std::string text_to_split = text;
+
+    /* Iterate over the message length */
+    while (text_to_split.length() > getMessageMaximumSize()) {
+        /* The remaining string is still too long */
+
+        /* Compute the substring */
+        std::string split_message = text_to_split.substr (0, (size_t) getMessageMaximumSize());
+        /* Append our split character \n\n */
+        split_message.append (DELIMITER_CHAR);
+        /* Append in the vector */
+        messages.push_back (split_message);
+        /* Use the remaining string to not loop forever */
+        text_to_split = text_to_split.substr ( (size_t) getMessageMaximumSize());
+    }
+
+    /* Push the last message */
+    /* If the message length does not exceed the maximum size of a SIP MESSAGE, we go directly here */
+    messages.push_back (text_to_split);
+
+    return messages;
+}
+
+std::string InstantMessaging::generateXmlUriList (UriList& list)
+{
+
+    std::string xmlbuffer = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+    xmlbuffer.append ("<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\">");
+    xmlbuffer.append ("<list>");
+
+    // An iterator over xml attribute
+    UriEntry::iterator iterAttr;
+
+    // An iterator over list entries
+    UriList::iterator iterEntry = list.begin();
+
+    while (iterEntry != list.end()) {
+        xmlbuffer.append ("<entry uri=");
+        UriEntry entry = static_cast<UriEntry> (*iterEntry);
+        iterAttr = entry.find (sfl::IM_XML_URI);
+        xmlbuffer.append (iterAttr->second);
+        xmlbuffer.append (" cp:copyControl=\"to\" />");
+
+        iterEntry++;
+    }
+
+    xmlbuffer.append ("</list>");
+    xmlbuffer.append ("</resource-lists>");
+
+    return xmlbuffer;
+}
+
+
+InstantMessaging::UriList InstantMessaging::parseXmlUriList (std::string& urilist)
+{
+    InstantMessaging::UriList list;
+
+    XML_Parser parser = XML_ParserCreate (NULL);
+    XML_SetUserData (parser, &list);
+    XML_SetElementHandler (parser, startElementCallback, endElementCallback);
+
+    if (XML_Parse (parser, urilist.c_str(), urilist.size(), 1) == XML_STATUS_ERROR) {
+        std::cout << "Error: " << XML_ErrorString (XML_GetErrorCode (parser))
+                  << " at line " << XML_GetCurrentLineNumber (parser) << std::endl;
+        throw InstantMessageException ("Error while parsing uri-list xml content");
+    }
+
+    return list;
+}
+
+std::string InstantMessaging::appendUriList (std::string text, UriList& list)
+{
+
+    std::string formatedText = "--boundary Content-Type: text/plain";
+
+    formatedText.append (text);
+    formatedText.append ("--boundary Content-Type: application/resource-lists+xml");
+    formatedText.append ("Content-Disposition: recipient-list");
+
+    std::string recipientlist = generateXmlUriList (list);
+
+    formatedText.append (recipientlist);
+
+    formatedText.append ("--boundary--");
+
+    return formatedText;
+}
+
+std::string InstantMessaging::findTextUriList (std::string& text)
+{
+    std::string ctype = "Content-Type: application/resource-lists+xml";
+    std::string cdispo = "Content-Disposition: recipient-list";
+    std::string boundary = ("--boundary--");
+
+    // init position pointer
+    size_t pos = 0;
+    size_t begin = 0;
+    size_t end = 0;
+
+    // find the content type
+    if ( (pos = text.find (ctype)) == std::string::npos)
+        throw InstantMessageException ("Could not find Content-Type tag while parsing sip message for recipient-list");
+
+    // find the content disposition
+    if ( (pos = text.find (cdispo, pos)) == std::string::npos)
+        throw InstantMessageException ("Could not find Content-Disposition tag while parsing sip message for recipient-list");
+
+    // xml content start after content disposition tag (plus \n\n)
+    begin = pos+cdispo.size();
+
+    // find final boundary
+    if ( (end = text.find (boundary, begin)) == std::string::npos)
+        throw InstantMessageException ("Could not find final \"boundary\" while parsing sip message for recipient-list");
+
+    return text.substr (begin, end-begin);
+}
+
+std::string InstantMessaging::findTextMessage (std::string& text)
+{
+    std::string ctype = "Content-Type: text/plain";
+    std::string boundary = "--boundary";
+
+    size_t pos = 0;
+    size_t begin = 0;
+    size_t end = 0;
+
+    // find the content type
+    if ( (pos = text.find (ctype)) == std::string::npos)
+        throw InstantMessageException ("Could not find Content-Type tag while parsing sip message for text");
+
+    // plain text content start after content type tag (plus \n\n)
+    begin = pos+ctype.size();
+
+    // retrive end of the text content
+    if ( (end = text.find (boundary, begin)) == std::string::npos)
+        throw InstantMessageException ("Could not find end of text \"boundary\" while parsing sip message for text");
+
+    return text.substr (begin, end-begin);
+}
+
+
+}
diff --git a/sflphone-common/src/im/InstantMessaging.h b/sflphone-common/src/im/InstantMessaging.h
new file mode 100644
index 0000000000000000000000000000000000000000..0c0e3328a2e4bb5bfd60d7c8f871a4b314557367
--- /dev/null
+++ b/sflphone-common/src/im/InstantMessaging.h
@@ -0,0 +1,253 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 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 _INSTANT_MESSAGING_H
+#define _INSTANT_MESSAGING_H
+
+#include <string>
+#include <iostream>
+#include <fstream>
+#include <pjsip.h>
+#include <pjlib.h>
+#include <pjsip_ua.h>
+#include <pjlib-util.h>
+
+#include "call.h"
+#include "sip/sipcall.h"
+
+#include <map>
+#include <list>
+#include <exception>
+
+#include <iax-client.h>
+
+#define EMPTY_MESSAGE   pj_str((char*)"")
+#define STR_TEXT        pj_str((char*)"text")
+#define STR_PLAIN       pj_str((char*)"plain")
+#define METHOD_NAME     pj_str((char*)"MESSAGE")
+#define MAXIMUM_MESSAGE_LENGTH		1560			/* PJSIP's sip message limit */
+#define DELIMITER_CHAR				"\n\n"
+
+#define MODE_APPEND			std::ios::out || std::ios::app
+#define MODE_TEST			std::ios::out
+
+namespace sfl
+{
+
+const std::string IM_XML_URI ("uri");
+const std::string BOUNDARY ("--boundary");
+
+class InstantMessageException : public std::exception
+{
+    public:
+        InstantMessageException (const std::string& str="") throw() : errstr (str) {}
+
+        virtual ~InstantMessageException() throw() {}
+
+        virtual const char *what() const throw() {
+            std::string expt ("InstantMessageException occured: ");
+            expt.append (errstr);
+
+            return expt.c_str();
+        }
+    private:
+        std::string errstr;
+};
+
+class InstantMessaging
+{
+
+    public:
+
+        typedef std::map <std::string, std::string> UriEntry;
+        typedef std::list <UriEntry> UriList;
+
+        /*
+         * Class constructor
+         */
+        InstantMessaging();
+
+        /*
+         * Class destructor
+         */
+        ~InstantMessaging();
+
+        /*
+         * Register and initialize instant messaging support
+         */
+        bool init ();
+
+        /**
+         * Set maximum size fo this module.
+             */
+        void setMessageMaximumSize (unsigned int max) {
+            messageMaxSize = max;
+        }
+
+        /**
+         * Return the maximum number if character for a single SIP MESSAGE.
+         * Longer messages should be splitted in several smaller messages using split_message
+         */
+        unsigned int getMessageMaximumSize (void) {
+            return messageMaxSize;
+        }
+
+        /*
+         * Open an existing file if possible or create a new one.			 *
+         * @param id	The current call
+         * @return int	The number of currently open file stream
+         */
+        int openArchive (CallID& id);
+
+        /*
+         * Close the file corresponding to the specified call
+         *
+         * @param id	The current call
+         * @return int	The number of remaining open file stream
+         */
+        int closeArchive (CallID& id);
+
+        /*
+         * Write the text message to the right file
+         * The call ID is associated to a file descriptor, so it is easy then to retrieve the right file
+         *
+         * @param message	The text message
+         * @param id	The current call
+         * @return True if the message could have been successfully saved, False otherwise
+         */
+        bool saveMessage (const std::string& message, const std::string& author, CallID& id, int mode = MODE_APPEND);
+
+        /*
+           * Receive a string SIP message, for a specific call
+         *
+           * @param message	The message contained in the TEXT message
+         * @param id		The call recipient of the message
+         */
+        std::string receive (const std::string& message, const std::string& author, CallID& id);
+
+        /*
+         * Send a SIP string message inside a call
+         *
+         * @param id	The call ID we will retrieve the invite session from
+         * @param message	The string message, as sent by the client
+         *
+         * @return pj_status_t  0 on success
+         *                      1 otherwise
+         */
+        pj_status_t sip_send (pjsip_inv_session*, CallID& id, const std::string&);
+
+        pj_status_t send_sip_message (pjsip_inv_session*, CallID& id, const std::string&);
+
+        bool iax_send (iax_session* session, const CallID& id, const std::string& message);
+
+        bool send_iax_message (iax_session *session, const CallID& id, const std::string&);
+
+        std::vector<std::string> split_message (const std::string&);
+
+
+        /**
+          * Notify the clients, through D-Bus, that a new message has arrived
+         *
+            * @param id	The callID to notify (TODO: accountID?)
+         */
+        pj_status_t notify (CallID& id);
+
+
+        /**
+         * Generate Xml participant list for multi recipient based on RFC Draft 5365
+         *
+        * @param A UriList of UriEntry
+        *
+        * @return A string containing the full XML formated information to be included in the
+        *         sip instant message.
+        */
+        std::string generateXmlUriList (UriList& list);
+
+        /**
+         * Parse the Urilist from a SIP Instant Message provided by a UriList service.
+         *
+         * @param A XML formated string as obtained from a SIP instant message.
+         *
+         * @return An UriList of UriEntry containing parsed XML information as a map.
+         */
+        UriList parseXmlUriList (std::string& urilist);
+
+        /**
+         * Format text message according to RFC 5365, append recipient-list to the message
+         *
+         * @param text to be displayed
+         * @param list containing the recipients
+         *
+         * @return formated text stored into a string to be included in sip MESSAGE
+         */
+        std::string appendUriList (std::string text, UriList& list);
+
+        /**
+             * Retreive the xml formated uri list in formated text data according to RFC 5365
+             *
+         * @param text The formated text message as retreived in the SIP message
+         *
+         * @return A string containing the XML content
+         */
+        std::string findTextUriList (std::string& text);
+
+        /**
+             * Retrive the plain text message in formated text data according to RFC 5365
+             *
+         * @param text The formated text message as retreived in the SIP message
+         *
+         * @return A string containing the actual message
+         */
+        std::string findTextMessage (std::string& text);
+
+    private:
+
+        /**
+         * A queue to handle messages
+         */
+        // std::queue<std::string> queuedMessages;
+
+        /**
+         * A map to handle opened file descriptors
+         * A file descriptor is associated to a call ID
+         */
+        std::map<std::string, std::ofstream*> imFiles;
+
+        InstantMessaging (const InstantMessaging&); //No Copy Constructor
+        InstantMessaging& operator= (const InstantMessaging&); //No Assignment Operator
+
+        /**
+          * Maximum size in char of an instant message
+         */
+        unsigned int messageMaxSize;
+};
+}
+#endif // _INSTANT_MESSAGING_H
diff --git a/sflphone-common/src/im/Makefile.am b/sflphone-common/src/im/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..a59fdac64525c2115e8ecc5ea0c9e03222439068
--- /dev/null
+++ b/sflphone-common/src/im/Makefile.am
@@ -0,0 +1,8 @@
+SUBDIRS = 
+
+include $(top_srcdir)/globals.mak
+
+noinst_LTLIBRARIES = libim.la
+
+libim_la_SOURCES = \
+	InstantMessaging.cpp InstantMessaging.h
diff --git a/sflphone-common/src/logger.cpp b/sflphone-common/src/logger.cpp
index 9269553817df1e55b73465fba9445a6cb1b64fd3..958842bcc6e86115349617b31a0189f69d73e3f7 100644
--- a/sflphone-common/src/logger.cpp
+++ b/sflphone-common/src/logger.cpp
@@ -41,69 +41,63 @@ namespace Logger
 bool consoleLog = false;
 bool debugMode = false;
 
-void log(const int level, const char* format, ...)
+void log (const int level, const char* format, ...)
 {
-	if(!debugMode && level == LOG_DEBUG)
-		return;
+    if (!debugMode && level == LOG_DEBUG)
+        return;
 
-	va_list ap;
-	string prefix = "<> ";
-	char buffer[4096];
-	string message = "";
-	string color_prefix = "";
+    va_list ap;
+    string prefix = "<> ";
+    char buffer[4096];
+    string message = "";
+    string color_prefix = "";
 
-	switch(level)
-	{
-		case LOG_ERR:
-		{
-			prefix = "<error> ";
-			color_prefix = RED;
-			break;
-		}
-		case LOG_WARNING:
-		{
-			prefix = "<warning> ";
-			color_prefix = LIGHT_RED;
-			break;
-		}
-		case LOG_INFO:
-		{
-			prefix = "<info> ";
-			color_prefix = "";
-			break;
-		}
-		case LOG_DEBUG:
-		{
-			prefix = "<debug> ";
-			color_prefix = "";
-			break;
-		}
-	}
-	
-	va_start(ap, format);
-	vsprintf(buffer, format, ap);
-	va_end(ap);
+    switch (level) {
+        case LOG_ERR: {
+            prefix = "<error> ";
+            color_prefix = RED;
+            break;
+        }
+        case LOG_WARNING: {
+            prefix = "<warning> ";
+            color_prefix = LIGHT_RED;
+            break;
+        }
+        case LOG_INFO: {
+            prefix = "<info> ";
+            color_prefix = "";
+            break;
+        }
+        case LOG_DEBUG: {
+            prefix = "<debug> ";
+            color_prefix = "";
+            break;
+        }
+    }
 
-	message = buffer;
-	message = prefix + message;
+    va_start (ap, format);
+    vsprintf (buffer, format, ap);
+    va_end (ap);
 
-	syslog(level, message.c_str());
+    message = buffer;
+    message = prefix + message;
 
-	if(consoleLog)
-	{
-		message = color_prefix + message + END_COLOR + "\n";
-		fprintf(stderr, message.c_str());
-	}
+    syslog (level, "%s", message.c_str());
+
+    if (consoleLog) {
+        message = color_prefix + message + END_COLOR + "\n";
+        fprintf (stderr, "%s", message.c_str());
+    }
 }
 
-void setConsoleLog(bool c)
+void setConsoleLog (bool c)
 {
-	Logger::consoleLog = c;
+    Logger::consoleLog = c;
 }
 
-void setDebugMode(bool d)
+void setDebugMode (bool d)
 {
-	Logger::debugMode = d;
+    Logger::debugMode = d;
 }
 
 }
diff --git a/sflphone-common/src/logger.h b/sflphone-common/src/logger.h
index 7bf8ec75d60e7a0607d6abfbeeda9a17921f92ad..58c15c4d94cbd9ac8256fd47cf446fc906c75696 100644
--- a/sflphone-common/src/logger.h
+++ b/sflphone-common/src/logger.h
@@ -35,10 +35,10 @@
 
 namespace Logger
 {
-	void log(const int, const char*, ...);
+void log (const int, const char*, ...);
 
-	void setConsoleLog(bool);
-	void setDebugMode(bool);
+void setConsoleLog (bool);
+void setDebugMode (bool);
 };
 
 #define _error(...)	Logger::log(LOG_ERR, __VA_ARGS__)
diff --git a/sflphone-common/src/main.cpp b/sflphone-common/src/main.cpp
index aca2e1f1547ccfcf0770eddbd476ccf90b87253b..4e4c581c39317de2b7f579b92219a23a83955e67 100644
--- a/sflphone-common/src/main.cpp
+++ b/sflphone-common/src/main.cpp
@@ -48,170 +48,168 @@
 using namespace std;
 using namespace ost;
 
-CommandOptionArg	level(
-        "log-level", "l", "Log level (not yet implemented)"
+CommandOptionArg	level (
+    "log-level", "l", "Log level (not yet implemented)"
 );
 
-CommandOptionNoArg	console(
-        "console", "c", "Log in console (instead of syslog)"
+CommandOptionNoArg	console (
+    "console", "c", "Log in console (instead of syslog)"
 );
 
-CommandOptionNoArg	debug(
-        "debug", "d", "Debug mode (more verbose)"
+CommandOptionNoArg	debug (
+    "debug", "d", "Debug mode (more verbose)"
 );
 
-CommandOptionNoArg	help(
-        "help", "h", "Print help"
+CommandOptionNoArg	help (
+    "help", "h", "Print help"
 );
 
 int
 main (int argc, char **argv)
 {
-	int exit_code = 0;
+    int exit_code = 0;
 
-	Logger::setConsoleLog(false);
-	Logger::setDebugMode(false);
+    Logger::setConsoleLog (false);
+    Logger::setDebugMode (false);
 
-	CommandOptionParse * args = makeCommandOptionParse(argc, argv, "");
+    CommandOptionParse * args = makeCommandOptionParse (argc, argv, "");
 
-	printf ("SFLphone Daemon %s, by Savoir-Faire Linux 2004-2009\n", VERSION);
-        printf ("http://www.sflphone.org/\n");
+    printf ("SFLphone Daemon %s, by Savoir-Faire Linux 2004-2009\n", VERSION);
+    printf ("http://www.sflphone.org/\n");
 
-        if ( help.numSet ) {
-                cerr << args->printUsage();
-		::exit(0);
-        }
+    if (help.numSet) {
+        cerr << args->printUsage();
+        ::exit (0);
+    }
 
-        if ( args->argsHaveError() ) {
-                cerr << args->printErrors();
-                cerr << args->printUsage();
-                ::exit(1);
-        }
+    if (args->argsHaveError()) {
+        cerr << args->printErrors();
+        cerr << args->printUsage();
+        ::exit (1);
+    }
 
-	if( console.numSet )
-	{
-		_info("Console logging activated");
-		Logger::setConsoleLog(true);
-	}
+    if (console.numSet) {
+        _info ("Console logging activated");
+        Logger::setConsoleLog (true);
+    }
 
-	if( debug.numSet )
-	{
-		_info("Debug mode activated");
-		Logger::setDebugMode(true);
-	}
+    if (debug.numSet) {
+        _info ("Debug mode activated");
+        Logger::setDebugMode (true);
+    }
 
-        delete args;
+    delete args;
 
-        FILE *fp;
-        char homepid[128];
-        char sfldir[128];
+    FILE *fp;
+    char homepid[128];
+    char sfldir[128];
 
-        unsigned int iPid = getpid();
-        char cPid[64], cOldPid[64];
-        sprintf (cPid,"%d", iPid);
-        std::string xdg_cache, xdg_env, path;
+    unsigned int iPid = getpid();
+    char cPid[64], cOldPid[64];
+    sprintf (cPid,"%d", iPid);
+    std::string xdg_cache, xdg_env, path;
 
-        xdg_cache = std::string (HOMEDIR) + DIR_SEPARATOR_STR + ".cache/";
+    xdg_cache = std::string (HOMEDIR) + DIR_SEPARATOR_STR + ".cache/";
 
-        if (XDG_CACHE_HOME != NULL) {
-            xdg_env = std::string (XDG_CACHE_HOME);
-            (xdg_env.length() > 0) ? path = xdg_env
-                                            :		path = xdg_cache;
-        } else
-            path = xdg_cache;
+    if (XDG_CACHE_HOME != NULL) {
+        xdg_env = std::string (XDG_CACHE_HOME);
+        (xdg_env.length() > 0) ? path = xdg_env
+                                        :		path = xdg_cache;
+    } else
+        path = xdg_cache;
 
-        sprintf (sfldir, "%s", path.c_str ());
+    sprintf (sfldir, "%s", path.c_str ());
 
-        path  = path + "sflphone";
+    path  = path + "sflphone";
 
-        sprintf (homepid, "%s/%s", path.c_str (), PIDFILE);
+    sprintf (homepid, "%s/%s", path.c_str (), PIDFILE);
 
-        if ( (fp = fopen (homepid,"r")) == NULL) {
-            // Check if $XDG_CACHE_HOME directory exists or not.
-            DIR *dir;
+    if ( (fp = fopen (homepid,"r")) == NULL) {
+        // Check if $XDG_CACHE_HOME directory exists or not.
+        DIR *dir;
 
-            if ( (dir = opendir (sfldir)) == NULL) {
-                //Create it
-                if (mkdir (sfldir, 0755) != 0) {
-                    fprintf (stderr, "Creating directory %s failed. Exited.", sfldir);
-                    exit (-1);
-                }
+        if ( (dir = opendir (sfldir)) == NULL) {
+            //Create it
+            if (mkdir (sfldir, 0755) != 0) {
+                fprintf (stderr, "Creating directory %s failed. Exited.", sfldir);
+                exit (-1);
             }
+        }
 
-            // Then create the sflphone directory inside the $XDG_CACHE_HOME dir
-            sprintf (sfldir, "%s", path.c_str ());
-
-            if ( (dir = opendir (sfldir)) == NULL) {
-                //Create it
-                if (mkdir (sfldir, 0755) != 0) {
-                    fprintf (stderr, "Creating directory %s failed. Exited.", sfldir);
-                    exit (-1);
-                }
-            }
+        // Then create the sflphone directory inside the $XDG_CACHE_HOME dir
+        sprintf (sfldir, "%s", path.c_str ());
 
-            // PID file doesn't exists, create and write pid in it
-            if ( (fp = fopen (homepid,"w")) == NULL) {
-                fprintf (stderr, "Creating PID file %s failed. Exited.", homepid);
+        if ( (dir = opendir (sfldir)) == NULL) {
+            //Create it
+            if (mkdir (sfldir, 0755) != 0) {
+                fprintf (stderr, "Creating directory %s failed. Exited.", sfldir);
                 exit (-1);
-            } else {
-                fputs (cPid , fp);
-                fclose (fp);
             }
+        }
+
+        // PID file doesn't exists, create and write pid in it
+        if ( (fp = fopen (homepid,"w")) == NULL) {
+            fprintf (stderr, "Creating PID file %s failed. Exited.", homepid);
+            exit (-1);
         } else {
-            // PID file exists. Check the former process still alive or not. If alive, give user a hint.
-            char *res;
-            res = fgets (cOldPid, 64, fp);
+            fputs (cPid , fp);
+            fclose (fp);
+        }
+    } else {
+        // PID file exists. Check the former process still alive or not. If alive, give user a hint.
+        char *res;
+        res = fgets (cOldPid, 64, fp);
 
-            if (res == NULL)	perror ("Error getting string from stream");
+        if (res == NULL)	perror ("Error getting string from stream");
 
-            else {
-                fclose (fp);
+        else {
+            fclose (fp);
 
-                if (kill (atoi (cOldPid), 0) == SUCCESS) {
-                    fprintf (stderr, "There is already a sflphoned daemon running in the system. Starting Failed.");
+            if (kill (atoi (cOldPid), 0) == SUCCESS) {
+                fprintf (stderr, "There is already a sflphoned daemon running in the system. Starting Failed.");
+                exit (-1);
+            } else {
+                if ( (fp = fopen (homepid,"w")) == NULL) {
+                    fprintf (stderr, "Writing to PID file %s failed. Exited.", homepid);
                     exit (-1);
                 } else {
-                    if ( (fp = fopen (homepid,"w")) == NULL) {
-                        fprintf (stderr, "Writing to PID file %s failed. Exited.", homepid);
-                        exit (-1);
-                    } else {
-                        fputs (cPid , fp);
-                        fclose (fp);
-                    }
-
+                    fputs (cPid , fp);
+                    fclose (fp);
                 }
-            }
-        }
-
-        int sessionPort = 0;
 
-        if (argc == 2) {
-            char* ptrPort = strstr (argv[1], "--port=");
-
-            if (ptrPort != 0) {
-                sessionPort = atoi (ptrPort+7);
             }
         }
+    }
 
-        bool initOK = false;
-
-        try {
-            // TODO Use $XDG_CONFIG_HOME to save the config file (which default to $HOME/.config)
-            Manager::instance().initConfigFile();
-            Manager::instance().init();
-            initOK = true;
-        } catch (std::exception &e) {
-            std::cerr << e.what() << std::endl;
-            exit_code = -1;
-        } catch (...) {
-            fprintf (stderr, "An exception occured when initializing the system.");
-            exit_code = -1;
-        }
+    int sessionPort = 0;
+
+    if (argc == 2) {
+        char* ptrPort = strstr (argv[1], "--port=");
 
-        if (initOK) {
-            Manager::instance().setDBusManager (&DBusManager::instance());
-            exit_code = DBusManager::instance().exec();  // UI Loop
+        if (ptrPort != 0) {
+            sessionPort = atoi (ptrPort+7);
         }
+    }
+
+    bool initOK = false;
+
+    try {
+        // TODO Use $XDG_CONFIG_HOME to save the config file (which default to $HOME/.config)
+        Manager::instance().initConfigFile();
+        Manager::instance().init();
+        initOK = true;
+    } catch (std::exception &e) {
+        std::cerr << e.what() << std::endl;
+        exit_code = -1;
+    } catch (...) {
+        fprintf (stderr, "An exception occured when initializing the system.");
+        exit_code = -1;
+    }
+
+    if (initOK) {
+        Manager::instance().setDBusManager (&DBusManager::instance());
+        exit_code = DBusManager::instance().exec();  // UI Loop
+    }
 
     return exit_code;
 }
diff --git a/sflphone-common/src/manager.h b/sflphone-common/src/manager.h
index e9324055911b07075cc5ff6420b79b64a5a2c643..df04243699c2ff41a0eab0e0f140f98cb5963ade 100644
--- a/sflphone-common/src/manager.h
+++ b/sflphone-common/src/manager.h
@@ -1,18 +1,18 @@
 /*
  *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  Author : Jean-Philippe Barrette-LaPierre 
+ *  Author : Jean-Philippe Barrette-LaPierre
  *              <jean-philippe.barrette-lapierre@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.
@@ -37,5 +37,5 @@
 
 typedef utilspp::SingletonHolder<ManagerImpl> Manager;
 
-#endif 
+#endif
 
diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index e80185d06797290d67e7414dfa2798cc94bf0a86..e903d15b016c2f98fcc30403168e38607b9fb833 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -48,6 +48,7 @@
 #include "history/historymanager.h"
 #include "accountcreator.h" // create new account
 #include "sip/sipvoiplink.h"
+#include "iax/iaxvoiplink.h"
 #include "manager.h"
 #include "dbus/configurationmanager.h"
 
@@ -61,6 +62,7 @@
 #include <sstream>
 #include <sys/types.h> // mkdir(2)
 #include <sys/stat.h>  // mkdir(2)
+
 #include <pwd.h>       // getpwuid
 
 #define DIRECT_IP_CALL	"IP CALL"
@@ -72,130 +74,157 @@
 
 #define MD5_APPEND(pms,buf,len) pj_md5_update(pms, (const pj_uint8_t*)buf, len)
 
-#define find_in_map(X, Y)  if((iter = map_cpy.find(X)) != map_cpy.end()) { Y = iter->second; }
+// Default account used to get default parametersa if requested by client (to build ne account)
+SIPAccount defaultAccount ("default");
 
 ManagerImpl::ManagerImpl (void) :
-	_hasTriedToRegister(false), _config(), _currentCallId2(),
-			_currentCallMutex(), _codecBuilder(NULL), _audiodriver(NULL),
-			_dtmfKey(NULL), _codecDescriptorMap(), _toneMutex(),
-			_telephoneTone(NULL), _audiofile(), _spkr_volume(0),
-			_mic_volume(0), _mutex(), _dbus(NULL), _waitingCall(),
-			_waitingCallMutex(), _nbIncomingWaitingCall(0), _path(""),
-			_exist(0), _setupLoaded(false), _callAccountMap(),
-			_callAccountMapMutex(), _callConfigMap(), _accountMap(),
-			_directIpAccount(NULL), _cleaner(NULL), _history(NULL) {
-
-	// initialize random generator for call id
-	srand(time(NULL));
-
-	_cleaner = new NumberCleaner();
-	_history = new HistoryManager();
+        _hasTriedToRegister (false), _config(), _currentCallId2(),
+        _currentCallMutex(), _codecBuilder (NULL), _audiodriver (NULL),
+        _dtmfKey (NULL), _codecDescriptorMap(), _toneMutex(),
+        _telephoneTone (NULL), _audiofile (NULL), _spkr_volume (0),
+        _mic_volume (0), _mutex(), _dbus (NULL), _waitingCall(),
+        _waitingCallMutex(), _nbIncomingWaitingCall (0), _path (""),
+        _exist (0), _setupLoaded (false), _callAccountMap(),
+        _callAccountMapMutex(), _callConfigMap(), _accountMap(),
+        _directIpAccount (NULL), _cleaner (NULL), _history (NULL)
+{
+
+    // initialize random generator for call id
+    srand (time (NULL));
+
+    _cleaner = new NumberCleaner();
+    _history = new HistoryManager();
+    _imModule = new sfl::InstantMessaging();
 
 #ifdef TEST
-	testAccountMap();
-	loadAccountMap();
-	testCallAccountMap();
-	unloadAccountMap();
+    testAccountMap();
+    loadAccountMap();
+    testCallAccountMap();
+    unloadAccountMap();
 #endif
 
-	// should be call before initConfigFile
-	// loadAccountMap();, called in init() now.
+    // should be call before initConfigFile
+    // loadAccountMap();, called in init() now.
 }
 
 // never call if we use only the singleton...
-ManagerImpl::~ManagerImpl (void) {
-	// terminate();
-	delete _cleaner; _cleaner = NULL;
-	delete _history; _history = NULL;
+ManagerImpl::~ManagerImpl (void)
+{
+    if (_audiofile) {
+        delete _audiofile;
+        _audiofile = NULL;
+    }
 
-	_debug ("Manager: %s stop correctly.", PROGNAME);
+    delete _cleaner;
+    _cleaner = NULL;
+    delete _history;
+    _history = NULL;
+    delete _imModule;
+    _imModule = NULL;
+
+    _debug ("Manager: %s stop correctly.", PROGNAME);
 }
 
-void ManagerImpl::init () {
+void ManagerImpl::init ()
+{
+
+    _debug ("Manager: Init");
 
-	// Load accounts, init map
-	loadAccountMap();
+    // Load accounts, init map
+    buildConfiguration();
+
+    _debug ("Manager: account map loaded");
+
+    initVolume();
+
+    if (_exist == 0) {
+        _warn ("Manager: Cannot create config file in your home directory");
+    }
 
-	initVolume();
+    initAudioDriver();
 
-	if (_exist == 0) {
-		_warn ("Manager: Cannot create config file in your home directory");
-	}
+    selectAudioDriver();
 
-	initAudioDriver();
+    // Initialize the list of supported audio codecs
+    initAudioCodec();
 
-	selectAudioDriver();
+    AudioLayer *audiolayer = getAudioDriver();
 
-	// Initialize the list of supported audio codecs
-	initAudioCodec();
+    if (audiolayer) {
+        unsigned int sampleRate = audiolayer->getSampleRate();
 
-	AudioLayer *audiolayer = getAudioDriver();
+        _debugInit ("Manager: Load telephone tone");
+        std::string country = preferences.getZoneToneChoice();
+        _telephoneTone = new TelephoneTone (country, sampleRate);
 
-	if (audiolayer != 0) {
-		unsigned int sampleRate = audiolayer->getSampleRate();
+        _debugInit ("Manager: Loading DTMF key");
+        _dtmfKey = new DTMF (sampleRate);
+    }
 
-		_debugInit ("Manager: Load telephone tone");
-		std::string country = getConfigString(PREFERENCES, ZONE_TONE);
-		_telephoneTone = new TelephoneTone(country, sampleRate);
+    // Load the history
+    _history->load_history (preferences.getHistoryLimit());
 
-		_debugInit ("Manager: Loading DTMF key");
-		_dtmfKey = new DTMF(sampleRate);
-	}
+    // Init the instant messaging module
+    _imModule->init();
 
-	if (audiolayer == 0)
-		audiolayer->stopStream();
 
-	// Load the history
-	_history->load_history(getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT));
 }
 
-void ManagerImpl::terminate () {
+void ManagerImpl::terminate ()
+{
 
-	_debug ("Manager: Terminate ");
-	saveConfig();
+    _debug ("Manager: Terminate ");
+    saveConfig();
 
-	unloadAccountMap();
+    unloadAccountMap();
 
-	_debug ("Manager: Unload DTMF key");
-	delete _dtmfKey;
+    _debug ("Manager: Unload DTMF key");
+    delete _dtmfKey;
 
-	_debug("Manager: Unload telephone tone");
-	delete _telephoneTone; _telephoneTone = NULL;
+    _debug ("Manager: Unload telephone tone");
+    delete _telephoneTone;
+    _telephoneTone = NULL;
 
-	_debug ("Manager: Unload audio driver");
-	delete _audiodriver; _audiodriver = NULL;
+    _debug ("Manager: Unload audio driver");
+    delete _audiodriver;
+    _audiodriver = NULL;
 
-	_debug ("Manager: Unload telephone tone");
-	delete _telephoneTone; _telephoneTone = NULL;
+    _debug ("Manager: Unload telephone tone");
+    delete _telephoneTone;
+    _telephoneTone = NULL;
 
-	_debug ("Manager: Unload audio codecs ");
-	_codecDescriptorMap.deleteHandlePointer();
+    _debug ("Manager: Unload audio codecs ");
+    _codecDescriptorMap.deleteHandlePointer();
 
 }
 
-bool ManagerImpl::isCurrentCall (const CallID& callId) {
-	return (_currentCallId2 == callId ? true : false);
+bool ManagerImpl::isCurrentCall (const CallID& callId)
+{
+    return (_currentCallId2 == callId ? true : false);
 }
 
-bool ManagerImpl::hasCurrentCall () {
-	// _debug ("ManagerImpl::hasCurrentCall current call ID = %s", _currentCallId2.c_str());
+bool ManagerImpl::hasCurrentCall ()
+{
+    // _debug ("ManagerImpl::hasCurrentCall current call ID = %s", _currentCallId2.c_str());
 
-	if (_currentCallId2 != "") {
-		return true;
-	}
+    if (_currentCallId2 != "") {
+        return true;
+    }
 
-	return false;
+    return false;
 }
 
 const CallID&
-ManagerImpl::getCurrentCallId () {
-	return _currentCallId2;
+ManagerImpl::getCurrentCallId ()
+{
+    return _currentCallId2;
 }
 
-void ManagerImpl::switchCall (const CallID& id) {
-	ost::MutexLock m(_currentCallMutex);
-	_debug ("----- Switch current call id to %s -----", id.c_str());
-	_currentCallId2 = id;
+void ManagerImpl::switchCall (const CallID& id)
+{
+    ost::MutexLock m (_currentCallMutex);
+    _debug ("----- Switch current call id to %s -----", id.c_str());
+    _currentCallId2 = id;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -204,1772 +233,2055 @@ void ManagerImpl::switchCall (const CallID& id) {
 /* Main Thread */
 
 bool ManagerImpl::outgoingCall (const std::string& account_id,
-		const CallID& call_id, const std::string& to) {
+                                const CallID& call_id, const std::string& to)
+{
+
+    std::string pattern, to_cleaned;
+    Call::CallConfiguration callConfig;
+    SIPVoIPLink *siplink;
 
-	std::string pattern, to_cleaned;
-	Call::CallConfiguration callConfig;
-	SIPVoIPLink *siplink;
+    if (call_id.empty()) {
+        _debug ("Manager: New outgoing call abbort, missing callid");
+        return false;
+    }
+
+    _debug ("Manager: New outgoing call %s to %s", call_id.c_str(), to.c_str());
 
-	_debug ("Manager: New outgoing call %s to %s", call_id.c_str(), to.c_str());
+    CallID current_call_id = getCurrentCallId();
 
-	CallID current_call_id = getCurrentCallId();
+    if (hookPreference.getNumberEnabled())
+        _cleaner->set_phone_number_prefix (hookPreference.getNumberAddPrefix());
+    else
+        _cleaner->set_phone_number_prefix ("");
 
-	if (getConfigString(HOOKS, PHONE_NUMBER_HOOK_ENABLED) == "1")
-		_cleaner->set_phone_number_prefix(getConfigString(HOOKS,
-				PHONE_NUMBER_HOOK_ADD_PREFIX));
-	else
-		_cleaner->set_phone_number_prefix("");
+    to_cleaned = _cleaner->clean (to);
 
-	to_cleaned = _cleaner->clean(to);
+    /* Check what kind of call we are dealing with */
+    check_call_configuration (call_id, to_cleaned, &callConfig);
 
-	/* Check what kind of call we are dealing with */
-	check_call_configuration(call_id, to_cleaned, &callConfig);
+    // in any cases we have to detach from current communication
+    if (hasCurrentCall()) {
 
-	// in any cases we have to detach from current communication
-	if (hasCurrentCall()) {
+        _debug ("Manager: Has current call (%s) put it onhold", current_call_id.c_str());
+
+        // if this is not a conferenceand this and is not a conference participant
+        if (!isConference (current_call_id) && !participToConference (current_call_id)) {
+            onHoldCall (current_call_id);
+        } else if (isConference (current_call_id) && !participToConference (call_id)) {
+            detachParticipant (default_id, current_call_id);
+        }
+    }
 
-		_debug ("Manager: Has current call (%s) put it onhold", current_call_id.c_str());
-		// if this is not a conferenceand this and is not a conference participant
-		if (!isConference(current_call_id) && !participToConference(current_call_id)) {
-			onHoldCall(current_call_id);
-		} else if (isConference(current_call_id) && !participToConference(call_id)) {
-			detachParticipant(default_id, current_call_id);
-		}
-	}
+    if (callConfig == Call::IPtoIP) {
+        _debug ("Manager: Start IP2IP call");
+        /* We need to retrieve the sip voiplink instance */
+        siplink = SIPVoIPLink::instance ("");
 
-	if (callConfig == Call::IPtoIP) {
-		_debug ("Manager: Start IP2IP call");
-		/* We need to retrieve the sip voiplink instance */
-		siplink = SIPVoIPLink::instance("");
+        if (siplink->new_ip_to_ip_call (call_id, to_cleaned)) {
+            switchCall (call_id);
+            return true;
+        } else {
+            callFailure (call_id);
+        }
 
-		if (siplink->new_ip_to_ip_call(call_id, to_cleaned)) {
-			switchCall(call_id);
-			return true;
-		} else {
-			callFailure(call_id);
-		}
+        return false;
+    }
 
-		return false;
-	}
+    _debug ("Manager: Selecting account %s", account_id.c_str());
 
-	_debug("Manager: Selecting account %s", account_id.c_str());
-	if (!accountExists(account_id)) {
-		_error ("Manager: Error: Account doesn't exist in new outgoing call");
-		return false;
-	}
+    if (!accountExists (account_id)) {
+        _error ("Manager: Error: Account doesn't exist in new outgoing call");
+        return false;
+    }
 
-	if (getAccountFromCall(call_id) != AccountNULL) {
-		_error ("Manager: Error: Call id already exists in outgoing call");
-		return false;
-	}
+    if (getAccountFromCall (call_id) != AccountNULL) {
+        _error ("Manager: Error: Call id already exists in outgoing call");
+        return false;
+    }
 
-	_debug ("Manager: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data());
-	associateCallToAccount(call_id, account_id);
+    _debug ("Manager: Adding Outgoing Call %s on account %s", call_id.data(), account_id.data());
+    associateCallToAccount (call_id, account_id);
 
-	if (getAccountLink(account_id)->newOutgoingCall(call_id, to_cleaned)) {
-	    switchCall(call_id);
-	    return true;
-	} else {
-	    callFailure(call_id);
-	    _debug ("Manager: Error: An error occur, the call was not created");
-	}
+    if (getAccountLink (account_id)->newOutgoingCall (call_id, to_cleaned)) {
+        switchCall (call_id);
+        return true;
+    } else {
+        callFailure (call_id);
+        _debug ("Manager: Error: An error occur, the call was not created");
+    }
 
-	return false;
+    return false;
 }
 
 //THREAD=Main : for outgoing Call
-bool ManagerImpl::answerCall (const CallID& call_id) {
+bool ManagerImpl::answerCall (const CallID& call_id)
+{
 
-	_debug ("ManagerImpl: Answer call %s", call_id.c_str());
+    _debug ("ManagerImpl: Answer call %s", call_id.c_str());
 
-	stopTone();
+    stopTone();
 
-	// store the current call id
-	CallID current_call_id = getCurrentCallId();
+    // store the current call id
+    CallID current_call_id = getCurrentCallId();
 
-	AccountID account_id = getAccountFromCall(call_id);
+    AccountID account_id = getAccountFromCall (call_id);
 
-	if (account_id == AccountNULL) {
-		_debug ("    answerCall: AccountId is null");
-	}
+    if (account_id == AccountNULL) {
+        _debug ("    answerCall: AccountId is null");
+    }
 
-	Call* call = NULL;
+    Call* call = NULL;
 
-	call = getAccountLink(account_id)->getCall(call_id);
+    call = getAccountLink (account_id)->getCall (call_id);
 
-	if (call == NULL) {
-		_debug ("    answerCall: Call is null");
-	}
+    if (call == NULL) {
+        _debug ("    answerCall: Call is null");
+    }
 
-	// in any cases we have to detach from current communication
-	if (hasCurrentCall()) {
+    // in any cases we have to detach from current communication
+    if (hasCurrentCall()) {
 
-		_debug ("    answerCall: Currently conversing with %s", current_call_id.c_str());
-		// if it is not a conference and is not a conference participant
+        _debug ("    answerCall: Currently conversing with %s", current_call_id.c_str());
+        // if it is not a conference and is not a conference participant
 
-		if (!isConference(current_call_id) && !participToConference(
-				current_call_id)) {
-			_debug ("    answerCall: Put the current call (%s) on hold", current_call_id.c_str());
-			onHoldCall(current_call_id);
-		}
+        if (!isConference (current_call_id) && !participToConference (
+                    current_call_id)) {
+            _debug ("    answerCall: Put the current call (%s) on hold", current_call_id.c_str());
+            onHoldCall (current_call_id);
+        }
 
-		// if we are talking to a conference and we are answering an incoming call
-		else if (isConference(current_call_id)
-				&& !participToConference(call_id)) {
-			_debug ("    answerCall: Detach main participant from conference");
-			detachParticipant(default_id, current_call_id);
-		}
+        // if we are talking to a conference and we are answering an incoming call
+        else if (isConference (current_call_id)
+                 && !participToConference (call_id)) {
+            _debug ("    answerCall: Detach main participant from conference");
+            detachParticipant (default_id, current_call_id);
+        }
 
-	}
+    }
 
-	if (!getAccountLink(account_id)->answer(call_id)) {
-		// error when receiving...
-		removeCallAccount(call_id);
-		return false;
-	}
+    if (!getAccountLink (account_id)->answer (call_id)) {
+        // error when receiving...
+        removeCallAccount (call_id);
+        return false;
+    }
 
-	// if it was waiting, it's waiting no more
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(call_id, "CURRENT");
+    // if it was waiting, it's waiting no more
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (call_id, "CURRENT");
 
-	// std::string codecName = Manager::instance().getCurrentCodecName (call_id);
-	// if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id, codecName.c_str());
+    // std::string codecName = Manager::instance().getCurrentCodecName (call_id);
+    // if (_dbus) _dbus->getCallManager()->currentSelectedCodec (call_id, codecName.c_str());
 
-	removeWaitingCall(call_id);
+    removeWaitingCall (call_id);
 
-	// if we dragged this call into a conference already
-	if (participToConference(call_id)) {
+    // if we dragged this call into a conference already
+    if (participToConference (call_id)) {
 
-		// AccountID currentAccountId;
-		// Call* call = NULL;
+        // AccountID currentAccountId;
+        // Call* call = NULL;
 
-		// currentAccountId = getAccountFromCall (call_id);
-		// call = getAccountLink (currentAccountId)->getCall (call_id);
+        // currentAccountId = getAccountFromCall (call_id);
+        // call = getAccountLink (currentAccountId)->getCall (call_id);
 
-		switchCall(call->getConfId());
-	} else {
-		switchCall(call_id);
-	}
+        switchCall (call->getConfId());
+    } else {
+        switchCall (call_id);
+    }
 
-	return true;
+    return true;
 }
 
 //THREAD=Main
-bool ManagerImpl::hangupCall (const CallID& call_id) {
+bool ManagerImpl::hangupCall (const CallID& call_id)
+{
 
-	_info("Manager: Hangup call %s", call_id.c_str());
+    _info ("Manager: Hangup call %s", call_id.c_str());
 
-	PulseLayer *pulselayer;
-	AccountID account_id;
-	bool returnValue = true;
+    PulseLayer *pulselayer;
+    AccountID account_id;
+    bool returnValue = true;
 
-	// store the current call id
-	CallID current_call_id = getCurrentCallId();
+    // store the current call id
+    CallID current_call_id = getCurrentCallId();
 
-	stopTone();
+    stopTone();
 
-	/* Broadcast a signal over DBus */
-	_debug ("Manager: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str());
+    /* Broadcast a signal over DBus */
+    _debug ("Manager: Send DBUS call state change (HUNGUP) for id %s", call_id.c_str());
 
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
-
-	if (participToConference(call_id)) {
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP");
 
-		Conference *conf = getConferenceFromCallID(call_id);
+    if (participToConference (call_id)) {
 
-		if (conf != NULL) {
-			// remove this participant
-			removeParticipant(call_id);
+        Conference *conf = getConferenceFromCallID (call_id);
 
-			processRemainingParticipant(current_call_id, conf);
-		}
+        if (conf != NULL) {
+            // remove this participant
+            removeParticipant (call_id);
 
-	} else {
-		// we are not participating to a conference, current call switched to ""
-		if (!isConference(current_call_id))
-			switchCall("");
-	}
+            processRemainingParticipant (current_call_id, conf);
+        }
 
-	/* Direct IP to IP call */
-	if (getConfigFromCall(call_id) == Call::IPtoIP) {
-		returnValue = SIPVoIPLink::instance(AccountNULL)->hangup(call_id);
-	}
-	/* Classic call, attached to an account */
-	else {
-		account_id = getAccountFromCall(call_id);
+    } else {
+        // we are not participating to a conference, current call switched to ""
+        if (!isConference (current_call_id))
+            switchCall ("");
+    }
 
-		// Account may be NULL if call have not been sent yet
-		if (account_id == AccountNULL) {
-			_error ("Manager: Error: account id is NULL in hangup");
-			returnValue = false;
-		} else {
-			returnValue = getAccountLink(account_id)->hangup(call_id);
-			removeCallAccount(call_id);
-		}
-	}
+    /* Direct IP to IP call */
+    if (getConfigFromCall (call_id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)->hangup (call_id);
+    }
+    /* Classic call, attached to an account */
+    else {
+        account_id = getAccountFromCall (call_id);
+
+        // Account may be NULL if call have not been sent yet
+        if (account_id == AccountNULL) {
+            _error ("Manager: Error: account id is NULL in hangup");
+            returnValue = false;
+        } else {
+            returnValue = getAccountLink (account_id)->hangup (call_id);
+            removeCallAccount (call_id);
+        }
+    }
 
-	int nbCalls = getCallList().size();
+    int nbCalls = getCallList().size();
 
-	AudioLayer *audiolayer = getAudioDriver();
+    AudioLayer *audiolayer = getAudioDriver();
 
-	// stop streams
-	if (audiolayer && (nbCalls <= 0)) {
-		_debug ("Manager: stop audio stream, ther is only %i call(s) remaining", nbCalls);
-		audiolayer->stopStream();
-	}
+    // stop streams
+    if (audiolayer && (nbCalls <= 0)) {
+        _debug ("Manager: stop audio stream, ther is only %i call(s) remaining", nbCalls);
+        audiolayer->stopStream();
+    }
 
-	if (_audiodriver->getLayerType() == PULSEAUDIO) {
-		pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-	}
+    if (_audiodriver->getLayerType() == PULSEAUDIO) {
+        pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
+    }
 
-	return returnValue;
+    return returnValue;
 }
 
-bool ManagerImpl::hangupConference (const ConfID& id) {
+bool ManagerImpl::hangupConference (const ConfID& id)
+{
 
-	_debug ("Manager: Hangup conference %s", id.c_str());
+    _debug ("Manager: Hangup conference %s", id.c_str());
 
-	Conference *conf;
-	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
+    Conference *conf;
+    ConferenceMap::iterator iter_conf = _conferencemap.find (id);
 
-	AccountID currentAccountId;
+    AccountID currentAccountId;
 
-	// Call* call = NULL;
+    // Call* call = NULL;
 
 
-	if (iter_conf != _conferencemap.end()) {
-		conf = iter_conf->second;
+    if (iter_conf != _conferencemap.end()) {
+        conf = iter_conf->second;
 
-		ParticipantSet participants = conf->getParticipantList();
-		ParticipantSet::iterator iter_participant = participants.begin();
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
-			_debug ("Manager: Hangup onference participant %s", (*iter_participant).c_str());
+        while (iter_participant != participants.end()) {
+            _debug ("Manager: Hangup onference participant %s", (*iter_participant).c_str());
 
-			hangupCall(*iter_participant);
+            hangupCall (*iter_participant);
 
-			iter_participant++;
+            iter_participant++;
 
-		}
+        }
 
-	}
+    }
 
-	switchCall("");
+    switchCall ("");
 
-	return true;
+    return true;
 }
 
 //THREAD=Main
-bool ManagerImpl::cancelCall (const CallID& id) {
-	AccountID accountid;
-	bool returnValue;
+bool ManagerImpl::cancelCall (const CallID& id)
+{
+    AccountID accountid;
+    bool returnValue;
 
-	_debug("Manager: Cancel call");
+    _debug ("Manager: Cancel call");
 
-	stopTone();
+    stopTone();
 
-	/* Direct IP to IP call */
+    /* Direct IP to IP call */
 
-	if (getConfigFromCall(id) == Call::IPtoIP) {
-		returnValue = SIPVoIPLink::instance(AccountNULL)->cancel(id);
-	}
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)->cancel (id);
+    }
 
-	/* Classic call, attached to an account */
-	else {
-		accountid = getAccountFromCall(id);
+    /* Classic call, attached to an account */
+    else {
+        accountid = getAccountFromCall (id);
 
-		if (accountid == AccountNULL) {
-			_debug ("! Manager Cancel Call: Call doesn't exists");
-			return false;
-		}
+        if (accountid == AccountNULL) {
+            _debug ("! Manager Cancel Call: Call doesn't exists");
+            return false;
+        }
 
-		returnValue = getAccountLink(accountid)->cancel(id);
+        returnValue = getAccountLink (accountid)->cancel (id);
 
-		removeCallAccount(id);
-	}
+        removeCallAccount (id);
+    }
 
-	// it could be a waiting call?
-	removeWaitingCall(id);
+    // it could be a waiting call?
+    removeWaitingCall (id);
 
-	switchCall("");
+    switchCall ("");
 
-	return returnValue;
+    return returnValue;
 }
 
 //THREAD=Main
-bool ManagerImpl::onHoldCall (const CallID& call_id) {
-	AccountID account_id;
-	bool returnValue;
+bool ManagerImpl::onHoldCall (const CallID& call_id)
+{
+    AccountID account_id;
+    bool returnValue;
 
-	_debug ("Manager: Put call %s on hold", call_id.c_str());
+    _debug ("Manager: Put call %s on hold", call_id.c_str());
 
-	stopTone();
+    stopTone();
 
-	CallID current_call_id = getCurrentCallId();
+    CallID current_call_id = getCurrentCallId();
 
 
-	/* Direct IP to IP call */
+    /* Direct IP to IP call */
 
-	if (getConfigFromCall(call_id) == Call::IPtoIP) {
-		returnValue = SIPVoIPLink::instance(AccountNULL)-> onhold(call_id);
-	}
+    if (getConfigFromCall (call_id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> onhold (call_id);
+    }
 
-	/* Classic call, attached to an account */
-	else {
-		account_id = getAccountFromCall(call_id);
+    /* Classic call, attached to an account */
+    else {
+        account_id = getAccountFromCall (call_id);
 
-		if (account_id == AccountNULL) {
-			_debug ("Manager: Account ID %s or callid %s doesn't exists in call onHold", account_id.c_str(), call_id.c_str());
-			return false;
-		}
+        if (account_id == AccountNULL) {
+            _debug ("Manager: Account ID %s or callid %s doesn't exists in call onHold", account_id.c_str(), call_id.c_str());
+            return false;
+        }
 
-		returnValue = getAccountLink(account_id)->onhold(call_id);
-	}
+        returnValue = getAccountLink (account_id)->onhold (call_id);
+    }
 
-	removeWaitingCall(call_id);
+    removeWaitingCall (call_id);
 
-	// keeps current call id if the action is not holding this call or a new outgoing call
+    // keeps current call id if the action is not holding this call or a new outgoing call
 
-	if (current_call_id == call_id) {
+    if (current_call_id == call_id) {
 
-		switchCall("");
-	}
+        switchCall ("");
+    }
 
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(call_id, "HOLD");
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (call_id, "HOLD");
 
-	return returnValue;
+    return returnValue;
 }
 
 //THREAD=Main
-bool ManagerImpl::offHoldCall (const CallID& call_id) {
+bool ManagerImpl::offHoldCall (const CallID& call_id)
+{
 
-	AccountID account_id;
-	bool returnValue, is_rec;
-	std::string codecName;
+    AccountID account_id;
+    bool returnValue, is_rec;
+    std::string codecName;
 
-	is_rec = false;
+    is_rec = false;
 
-	_debug ("Manager: Put call %s off hold", call_id.c_str());
+    _debug ("Manager: Put call %s off hold", call_id.c_str());
 
-	stopTone();
+    stopTone();
 
-	CallID current_call_id = getCurrentCallId();
+    CallID current_call_id = getCurrentCallId();
 
-	//Place current call on hold if it isn't
+    //Place current call on hold if it isn't
 
-	if (hasCurrentCall()) {
-		// if this is not a conferenceand this and is not a conference participant
-		if (!isConference(current_call_id) && !participToConference(
-				current_call_id)) {
-			onHoldCall(current_call_id);
-		} else if (isConference(current_call_id) && !participToConference(
-				call_id)) {
-			detachParticipant(default_id, current_call_id);
-		}
-	}
+    if (hasCurrentCall()) {
+        // if this is not a conferenceand this and is not a conference participant
+        if (!isConference (current_call_id) && !participToConference (
+                    current_call_id)) {
+            onHoldCall (current_call_id);
+        } else if (isConference (current_call_id) && !participToConference (
+                       call_id)) {
+            detachParticipant (default_id, current_call_id);
+        }
+    }
 
-	// switch current call id to id since sipvoip link need it to amke a call
-	// switchCall(id);
+    // switch current call id to id since sipvoip link need it to amke a call
+    // switchCall(id);
 
-	/* Direct IP to IP call */
-	if (getConfigFromCall(call_id) == Call::IPtoIP) {
-		// is_rec = SIPVoIPLink::instance (AccountNULL)-> isRecording (call_id);
-		returnValue = SIPVoIPLink::instance(AccountNULL)-> offhold(call_id);
-	}
+    /* Direct IP to IP call */
+    if (getConfigFromCall (call_id) == Call::IPtoIP) {
+        // is_rec = SIPVoIPLink::instance (AccountNULL)-> isRecording (call_id);
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> offhold (call_id);
+    }
 
-	/* Classic call, attached to an account */
-	else {
-		account_id = getAccountFromCall(call_id);
+    /* Classic call, attached to an account */
+    else {
+        account_id = getAccountFromCall (call_id);
 
-		if (account_id == AccountNULL) {
-			_warn ("Manager: Error: Call doesn't exists in off hold");
-			return false;
-		}
+        if (account_id == AccountNULL) {
+            _warn ("Manager: Error: Call doesn't exists in off hold");
+            return false;
+        }
 
-		_debug ("Manager: Setting offhold, Account %s, callid %s", account_id.c_str(), call_id.c_str());
+        _debug ("Manager: Setting offhold, Account %s, callid %s", account_id.c_str(), call_id.c_str());
 
-		is_rec = getAccountLink(account_id)->getCall(call_id)->isRecording();
-		returnValue = getAccountLink(account_id)->offhold(call_id);
-	}
+        is_rec = getAccountLink (account_id)->getCall (call_id)->isRecording();
+        returnValue = getAccountLink (account_id)->offhold (call_id);
+    }
 
-	if (_dbus) {
-		if (is_rec)
-			_dbus->getCallManager()->callStateChanged(call_id, "UNHOLD_RECORD");
-		else
-			_dbus->getCallManager()->callStateChanged(call_id, "UNHOLD_CURRENT");
+    if (_dbus) {
+        if (is_rec)
+            _dbus->getCallManager()->callStateChanged (call_id, "UNHOLD_RECORD");
+        else
+            _dbus->getCallManager()->callStateChanged (call_id, "UNHOLD_CURRENT");
 
-	}
+    }
 
-	if (participToConference(call_id)) {
+    if (participToConference (call_id)) {
 
-		AccountID currentAccountId;
-		Call* call = NULL;
+        AccountID currentAccountId;
+        Call* call = NULL;
 
-		currentAccountId = getAccountFromCall(call_id);
-		call = getAccountLink(currentAccountId)->getCall(call_id);
+        currentAccountId = getAccountFromCall (call_id);
+        call = getAccountLink (currentAccountId)->getCall (call_id);
 
-		switchCall(call->getConfId());
+        switchCall (call->getConfId());
 
-	} else {
-		switchCall(call_id);
-		_audiodriver->flushMain();
-	}
+    } else {
+        switchCall (call_id);
+        _audiodriver->flushMain();
+    }
 
-	return returnValue;
+    return returnValue;
 }
 
 //THREAD=Main
-bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to) {
-	AccountID accountid;
-	bool returnValue;
+bool ManagerImpl::transferCall (const CallID& call_id, const std::string& to)
+{
+    AccountID accountid;
+    bool returnValue;
 
-	_info("Manager: Transfer call %s\n", call_id.c_str());
+    _info ("Manager: Transfer call %s", call_id.c_str());
 
-	CallID current_call_id = getCurrentCallId();
+    CallID current_call_id = getCurrentCallId();
 
-	// Direct IP to IP call
-	if (getConfigFromCall(call_id) == Call::IPtoIP) {
-		returnValue = SIPVoIPLink::instance(AccountNULL)-> transfer(call_id, to);
-	}
-	// Classic call, attached to an account
-	else {
+    // Direct IP to IP call
+    if (getConfigFromCall (call_id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> transfer (call_id, to);
+    }
+    // Classic call, attached to an account
+    else {
 
-	accountid = getAccountFromCall(call_id);
+        accountid = getAccountFromCall (call_id);
 
-		if (accountid == AccountNULL) {
-			_warn ("Manager: Call doesn't exists");
-			return false;
-		}
+        if (accountid == AccountNULL) {
+            _warn ("Manager: Call doesn't exists");
+            return false;
+        }
 
-		returnValue = getAccountLink(accountid)->transfer(call_id, to);
+        returnValue = getAccountLink (accountid)->transfer (call_id, to);
 
-	}
+    }
 
-	// remove waiting call in case we make transfer without even answer
-	removeWaitingCall(call_id);
+    // remove waiting call in case we make transfer without even answer
+    removeWaitingCall (call_id);
 
-	return returnValue;
+    return returnValue;
 }
 
-void ManagerImpl::transferFailed () {
+void ManagerImpl::transferFailed ()
+{
 
-	_debug("UserAgent: Transfer failed");
+    _debug ("UserAgent: Transfer failed");
 
-	if (_dbus)
-		_dbus->getCallManager()->transferFailed();
+    if (_dbus)
+        _dbus->getCallManager()->transferFailed();
 }
 
-void ManagerImpl::transferSucceded () {
+void ManagerImpl::transferSucceded ()
+{
 
-	_debug("UserAgent: Transfer succeded");
+    _debug ("UserAgent: Transfer succeded");
 
-	if (_dbus)
-		_dbus->getCallManager()->transferSucceded();
+    if (_dbus)
+        _dbus->getCallManager()->transferSucceded();
 
 }
 
 //THREAD=Main : Call:Incoming
-bool ManagerImpl::refuseCall (const CallID& id) {
-	AccountID accountid;
-	bool returnValue;
+bool ManagerImpl::refuseCall (const CallID& id)
+{
+    AccountID accountid;
+    bool returnValue;
 
-	_debug("Manager: Refuse call %s", id.c_str());
+    _debug ("Manager: Refuse call %s", id.c_str());
 
-	CallID current_call_id = getCurrentCallId();
+    CallID current_call_id = getCurrentCallId();
 
-	stopTone();
+    stopTone();
 
-	int nbCalls = getCallList().size();
+    int nbCalls = getCallList().size();
 
-	// AudioLayer* audiolayer = getAudioDriver();
+    // AudioLayer* audiolayer = getAudioDriver();
 
-	if (nbCalls <= 1) {
-		_debug ("    refuseCall: stop audio stream, there is only %i call(s) remaining", nbCalls);
+    if (nbCalls <= 1) {
+        _debug ("    refuseCall: stop audio stream, there is only %i call(s) remaining", nbCalls);
 
-		AudioLayer* audiolayer = getAudioDriver();
-		audiolayer->stopStream();
-	}
+        AudioLayer* audiolayer = getAudioDriver();
+        audiolayer->stopStream();
+    }
 
-	/* Direct IP to IP call */
+    /* Direct IP to IP call */
 
-	if (getConfigFromCall(id) == Call::IPtoIP) {
-		returnValue = SIPVoIPLink::instance(AccountNULL)-> refuse(id);
-	}
+    if (getConfigFromCall (id) == Call::IPtoIP) {
+        returnValue = SIPVoIPLink::instance (AccountNULL)-> refuse (id);
+    }
 
-	/* Classic call, attached to an account */
-	else {
-		accountid = getAccountFromCall(id);
+    /* Classic call, attached to an account */
+    else {
+        accountid = getAccountFromCall (id);
 
-		if (accountid == AccountNULL) {
-			_warn ("Manager: Call doesn't exists");
-			return false;
-		}
+        if (accountid == AccountNULL) {
+            _warn ("Manager: Call doesn't exists");
+            return false;
+        }
 
-		returnValue = getAccountLink(accountid)->refuse(id);
+        returnValue = getAccountLink (accountid)->refuse (id);
 
-		removeCallAccount(id);
-	}
+        removeCallAccount (id);
+    }
 
-	// if the call was outgoing or established, we didn't refuse it
-	// so the method did nothing
-	if (returnValue) {
-		removeWaitingCall(id);
+    // if the call was outgoing or established, we didn't refuse it
+    // so the method did nothing
+    if (returnValue) {
+        removeWaitingCall (id);
 
-		if (_dbus)
-			_dbus->getCallManager()->callStateChanged(id, "HUNGUP");
-	}
+        if (_dbus)
+            _dbus->getCallManager()->callStateChanged (id, "HUNGUP");
+    }
 
-	return returnValue;
+    return returnValue;
 }
 
 Conference*
-ManagerImpl::createConference (const CallID& id1, const CallID& id2) {
-	_debug ("Manager: Create conference with call %s and %s", id1.c_str(), id2.c_str());
+ManagerImpl::createConference (const CallID& id1, const CallID& id2)
+{
+    _debug ("Manager: Create conference with call %s and %s", id1.c_str(), id2.c_str());
 
-	Conference* conf = new Conference();
+    Conference* conf = new Conference();
 
-	conf->add(id1);
-	conf->add(id2);
+    conf->add (id1);
+    conf->add (id2);
 
-	// Add conference to map
-	_conferencemap.insert( std::pair<CallID, Conference*>(conf->getConfID(), conf));
+    // Add conference to map
+    _conferencemap.insert (std::pair<CallID, Conference*> (conf->getConfID(), conf));
 
-	// broadcast a signal over dbus
-	_dbus->getCallManager()->conferenceCreated(conf->getConfID());
+    // broadcast a signal over dbus
+    if (_dbus)
+        _dbus->getCallManager()->conferenceCreated (conf->getConfID());
 
-	return conf;
+    return conf;
 }
 
-void ManagerImpl::removeConference (const ConfID& conference_id) {
+void ManagerImpl::removeConference (const ConfID& conference_id)
+{
 
-	_debug ("Manager: Remove conference %s", conference_id.c_str());
+    _debug ("Manager: Remove conference %s", conference_id.c_str());
 
-	Conference* conf = NULL;
+    Conference* conf = NULL;
 
-	_debug ("Manager: number of participant: %d", (int) _conferencemap.size());
-	ConferenceMap::iterator iter = _conferencemap.find(conference_id);
+    _debug ("Manager: number of participant: %d", (int) _conferencemap.size());
+    ConferenceMap::iterator iter = _conferencemap.find (conference_id);
 
-	if (iter != _conferencemap.end()) {
-		conf = iter->second;
-	}
+    if (iter != _conferencemap.end()) {
+        conf = iter->second;
+    }
 
-	if (conf == NULL) {
-		_error ("Manager: Error: Conference not found");
-		return;
-	}
+    if (conf == NULL) {
+        _error ("Manager: Error: Conference not found");
+        return;
+    }
 
-	// We now need to bind the audio to the remain participant
+    // We now need to bind the audio to the remain participant
 
-	// Unbind main participant audio from conference
-	_audiodriver->getMainBuffer()->unBindAll(default_id);
+    // Unbind main participant audio from conference
+    _audiodriver->getMainBuffer()->unBindAll (default_id);
 
-	ParticipantSet participants = conf->getParticipantList();
+    ParticipantSet participants = conf->getParticipantList();
 
-	// bind main participant audio to remaining conference call
-	ParticipantSet::iterator iter_p = participants.begin();
+    // bind main participant audio to remaining conference call
+    ParticipantSet::iterator iter_p = participants.begin();
 
-	if (iter_p != participants.end()) {
+    if (iter_p != participants.end()) {
 
-		_audiodriver->getMainBuffer()->bindCallID(*iter_p, default_id);
-	}
+        _audiodriver->getMainBuffer()->bindCallID (*iter_p, default_id);
+    }
 
-	// Then remove the conference from the conference map
-	if (_conferencemap.erase(conference_id) == 1)
-		_debug ("Manager: Conference %s removed succesfully", conference_id.c_str());
-	else
-		_error ("Manager: Error: Cannot remove conference: %s", conference_id.c_str());
+    // Then remove the conference from the conference map
+    if (_conferencemap.erase (conference_id) == 1)
+        _debug ("Manager: Conference %s removed successfully", conference_id.c_str());
+    else
+        _error ("Manager: Error: Cannot remove conference: %s", conference_id.c_str());
 
-	// broadcast a signal over dbus
-	_dbus->getCallManager()->conferenceRemoved(conference_id);
+    // broadcast a signal over dbus
+    if (_dbus)
+        _dbus->getCallManager()->conferenceRemoved (conference_id);
 
 }
 
 Conference*
-ManagerImpl::getConferenceFromCallID (const CallID& call_id) {
-	AccountID account_id;
-	Call* call = NULL;
+ManagerImpl::getConferenceFromCallID (const CallID& call_id)
+{
+    AccountID account_id;
+    Call* call = NULL;
 
-	account_id = getAccountFromCall(call_id);
-	call = getAccountLink(account_id)->getCall(call_id);
+    account_id = getAccountFromCall (call_id);
+    call = getAccountLink (account_id)->getCall (call_id);
 
-	ConferenceMap::iterator iter = _conferencemap.find(call->getConfId());
+    ConferenceMap::iterator iter = _conferencemap.find (call->getConfId());
 
-	if (iter != _conferencemap.end()) {
-		return iter->second;
-	} else {
-		return NULL;
-	}
+    if (iter != _conferencemap.end()) {
+        return iter->second;
+    } else {
+        return NULL;
+    }
 }
 
-void ManagerImpl::holdConference (const CallID& id) {
-	_debug ("Manager: Hold conference()");
+void ManagerImpl::holdConference (const CallID& id)
+{
+    _debug ("Manager: Hold conference()");
 
-	Conference *conf;
-	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
+    Conference *conf;
+    ConferenceMap::iterator iter_conf = _conferencemap.find (id);
 
-	AccountID currentAccountId;
+    AccountID currentAccountId;
 
-	Call* call = NULL;
+    Call* call = NULL;
 
-	if (iter_conf != _conferencemap.end()) {
-		conf = iter_conf->second;
+    if (iter_conf != _conferencemap.end()) {
+        conf = iter_conf->second;
 
-		ParticipantSet participants = conf->getParticipantList();
-		ParticipantSet::iterator iter_participant = participants.begin();
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
-			_debug ("    holdConference: participant %s", (*iter_participant).c_str());
-			currentAccountId = getAccountFromCall(*iter_participant);
-			call = getAccountLink(currentAccountId)->getCall(*iter_participant);
+        while (iter_participant != participants.end()) {
+            _debug ("    holdConference: participant %s", (*iter_participant).c_str());
+            currentAccountId = getAccountFromCall (*iter_participant);
+            call = getAccountLink (currentAccountId)->getCall (*iter_participant);
 
-			switchCall(*iter_participant);
-			onHoldCall(*iter_participant);
+            switchCall (*iter_participant);
+            onHoldCall (*iter_participant);
 
-			iter_participant++;
+            iter_participant++;
 
-		}
+        }
 
-		conf->setState(Conference::Hold);
+        conf->setState (Conference::Hold);
 
-		_dbus->getCallManager()->conferenceChanged(conf->getConfID(),
-				conf->getStateStr());
+        if (_dbus)
+            _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
 
-	}
+    }
 
 }
 
-void ManagerImpl::unHoldConference (const CallID& id) {
+void ManagerImpl::unHoldConference (const CallID& id)
+{
 
-	_debug ("Manager: Unhold conference()");
+    _debug ("Manager: Unhold conference()");
 
-	Conference *conf;
-	ConferenceMap::iterator iter_conf = _conferencemap.find(id);
+    Conference *conf;
+    ConferenceMap::iterator iter_conf = _conferencemap.find (id);
 
-	AccountID currentAccountId;
+    AccountID currentAccountId;
 
-	Call* call = NULL;
+    Call* call = NULL;
 
-	if (iter_conf != _conferencemap.end()) {
-		conf = iter_conf->second;
+    if (iter_conf != _conferencemap.end()) {
+        conf = iter_conf->second;
 
-		ParticipantSet participants = conf->getParticipantList();
-		ParticipantSet::iterator iter_participant = participants.begin();
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
-			_debug ("    unholdConference: participant %s", (*iter_participant).c_str());
-			currentAccountId = getAccountFromCall(*iter_participant);
-			call = getAccountLink(currentAccountId)->getCall(*iter_participant);
+        while (iter_participant != participants.end()) {
+            _debug ("    unholdConference: participant %s", (*iter_participant).c_str());
+            currentAccountId = getAccountFromCall (*iter_participant);
+            call = getAccountLink (currentAccountId)->getCall (*iter_participant);
 
-			offHoldCall(*iter_participant);
+            offHoldCall (*iter_participant);
 
-			iter_participant++;
+            iter_participant++;
 
-		}
+        }
 
-		conf->setState(Conference::Active_Atached);
+        conf->setState (Conference::Active_Atached);
 
-		_dbus->getCallManager()->conferenceChanged(conf->getConfID(),
-				conf->getStateStr());
+        if (_dbus)
+            _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
 
-	}
+    }
 
 }
 
-bool ManagerImpl::isConference (const CallID& id) {
-	ConferenceMap::iterator iter = _conferencemap.find(id);
+bool ManagerImpl::isConference (const CallID& id)
+{
+    ConferenceMap::iterator iter = _conferencemap.find (id);
 
-	if (iter == _conferencemap.end()) {
-		return false;
-	} else {
-		return true;
-	}
+    if (iter == _conferencemap.end()) {
+        return false;
+    } else {
+        return true;
+    }
 }
 
-bool ManagerImpl::participToConference (const CallID& call_id) {
+bool ManagerImpl::participToConference (const CallID& call_id)
+{
 
-	AccountID accountId;
+    AccountID accountId;
 
-	Call* call = NULL;
+    Call* call = NULL;
 
-	accountId = getAccountFromCall(call_id);
-	call = getAccountLink(accountId)->getCall(call_id);
+    accountId = getAccountFromCall (call_id);
+    call = getAccountLink (accountId)->getCall (call_id);
 
-	if (call == NULL) {
-		return false;
+    if (call == NULL) {
+        return false;
 
-	}
+    }
 
-	if (call->getConfId() == "") {
-		return false;
-	} else {
+    if (call->getConfId() == "") {
+        return false;
+    } else {
 
-		return true;
-	}
+        return true;
+    }
 }
 
-void ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id) {
-	_debug ("ManagerImpl: Add participant %s to %s", call_id.c_str(), conference_id.c_str());
+void ManagerImpl::addParticipant (const CallID& call_id, const CallID& conference_id)
+{
+    _debug ("ManagerImpl: Add participant %s to %s", call_id.c_str(), conference_id.c_str());
 
-	std::map<std::string, std::string> call_details = getCallDetails(call_id);
+    std::map<std::string, std::string> call_details = getCallDetails (call_id);
 
-	ConferenceMap::iterator iter = _conferencemap.find(conference_id);
-	std::map<std::string, std::string>::iterator iter_details;
+    ConferenceMap::iterator iter = _conferencemap.find (conference_id);
+    std::map<std::string, std::string>::iterator iter_details;
 
-	// store the current call id (it will change in offHoldCall or in answerCall)
-	CallID current_call_id = getCurrentCallId();
+    // store the current call id (it will change in offHoldCall or in answerCall)
+    CallID current_call_id = getCurrentCallId();
 
-	// detach from the conference and switch to this conference
+    // detach from the conference and switch to this conference
 
-	if (current_call_id != call_id) {
-		if (isConference(current_call_id)) {
-			detachParticipant(default_id, current_call_id);
-		} else
-			onHoldCall(current_call_id);
-	}
+    if (current_call_id != call_id) {
+        if (isConference (current_call_id)) {
+            detachParticipant (default_id, current_call_id);
+        } else
+            onHoldCall (current_call_id);
+    }
 
-	// TODO: remove this ugly hack => There should be different calls when double clicking
-	// a conference to add main participant to it, or (in this case) adding a participant
-	// toconference
-	switchCall("");
+    // TODO: remove this ugly hack => There should be different calls when double clicking
+    // a conference to add main participant to it, or (in this case) adding a participant
+    // toconference
+    switchCall ("");
 
-	addMainParticipant(conference_id);
+    addMainParticipant (conference_id);
 
-	_debug ("    addParticipant: enter main process");
+    _debug ("    addParticipant: enter main process");
 
-	if (iter != _conferencemap.end()) {
+    if (iter != _conferencemap.end()) {
 
-		Conference* conf = iter->second;
-		switchCall(conf->getConfID());
+        Conference* conf = iter->second;
+        switchCall (conf->getConfID());
 
-		AccountID currentAccountId;
-		Call* call = NULL;
+        AccountID currentAccountId;
+        Call* call = NULL;
 
-		currentAccountId = getAccountFromCall(call_id);
-		call = getAccountLink(currentAccountId)->getCall(call_id);
-		call->setConfId(conf->getConfID());
+        currentAccountId = getAccountFromCall (call_id);
+        call = getAccountLink (currentAccountId)->getCall (call_id);
+        call->setConfId (conf->getConfID());
 
-		conf->add(call_id);
+        conf->add (call_id);
 
-		iter_details = call_details.find("CALL_STATE");
+        iter_details = call_details.find ("CALL_STATE");
 
-		_debug ("    addParticipant: call state: %s", iter_details->second.c_str());
+        _debug ("    addParticipant: call state: %s", iter_details->second.c_str());
 
-		if (iter_details->second == "HOLD") {
-			_debug ("    OFFHOLD %s", call_id.c_str());
+        if (iter_details->second == "HOLD") {
+            _debug ("    OFFHOLD %s", call_id.c_str());
 
-			// offHoldCall create a new rtp session which use addStream to bind participant
-			offHoldCall(call_id);
-		} else if (iter_details->second == "INCOMING") {
-			_debug ("    ANSWER %s", call_id.c_str());
-			// answerCall create a new rtp session which use addStream to bind participant
-			answerCall(call_id);
-		} else if (iter_details->second == "CURRENT") {
-			// Already a curent call, so we beed to reset audio stream bindings manually
-			_audiodriver->getMainBuffer()->unBindAll(call_id);
-			conf->bindParticipant(call_id);
-		}
+            // offHoldCall create a new rtp session which use addStream to bind participant
+            offHoldCall (call_id);
+        } else if (iter_details->second == "INCOMING") {
+            _debug ("    ANSWER %s", call_id.c_str());
+            // answerCall create a new rtp session which use addStream to bind participant
+            answerCall (call_id);
+        } else if (iter_details->second == "CURRENT") {
+            // Already a curent call, so we beed to reset audio stream bindings manually
+            _audiodriver->getMainBuffer()->unBindAll (call_id);
+            conf->bindParticipant (call_id);
+        }
 
-		// _dbus->getCallManager()->conferenceChanged(conference_id, conf->getStateStr());
+        // _dbus->getCallManager()->conferenceChanged(conference_id, conf->getStateStr());
 
-		ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet participants = conf->getParticipantList();
 
-		// reset ring buffer for all conference participant
-		ParticipantSet::iterator iter_p = participants.begin();
+        // reset ring buffer for all conference participant
+        ParticipantSet::iterator iter_p = participants.begin();
 
-		while (iter_p != participants.end()) {
+        while (iter_p != participants.end()) {
 
-			// flush conference participants only
-			_audiodriver->getMainBuffer()->flush(*iter_p);
+            // flush conference participants only
+            _audiodriver->getMainBuffer()->flush (*iter_p);
 
-			iter_p++;
-		}
+            iter_p++;
+        }
 
-		_audiodriver->getMainBuffer()->flush(default_id);
-	} else {
-		_debug ("    addParticipant: Error, conference %s conference_id not found!", conference_id.c_str());
-	}
+        _audiodriver->getMainBuffer()->flush (default_id);
+    } else {
+        _debug ("    addParticipant: Error, conference %s conference_id not found!", conference_id.c_str());
+    }
 
 }
 
-void ManagerImpl::addMainParticipant (const CallID& conference_id) {
-	if (hasCurrentCall()) {
-		CallID current_call_id = getCurrentCallId();
+void ManagerImpl::addMainParticipant (const CallID& conference_id)
+{
+    if (hasCurrentCall()) {
+        CallID current_call_id = getCurrentCallId();
 
-		if (isConference(current_call_id)) {
-			detachParticipant(default_id, current_call_id);
-		} else {
-			onHoldCall(current_call_id);
-		}
-	}
+        if (isConference (current_call_id)) {
+            detachParticipant (default_id, current_call_id);
+        } else {
+            onHoldCall (current_call_id);
+        }
+    }
 
-	ConferenceMap::iterator iter = _conferencemap.find(conference_id);
+    ConferenceMap::iterator iter = _conferencemap.find (conference_id);
 
-	Conference *conf = NULL;
+    Conference *conf = NULL;
 
-	if (iter != _conferencemap.end()) {
-		conf = iter->second;
+    if (iter != _conferencemap.end()) {
+        conf = iter->second;
 
-		ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet participants = conf->getParticipantList();
 
-		ParticipantSet::iterator iter_participant = participants.begin();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
-			_audiodriver->getMainBuffer()->bindCallID(*iter_participant,
-					default_id);
+        while (iter_participant != participants.end()) {
+            _audiodriver->getMainBuffer()->bindCallID (*iter_participant,
+                    default_id);
 
-			iter_participant++;
-		}
+            iter_participant++;
+        }
 
-		// Reset ringbuffer's readpointers
-		iter_participant = participants.begin();
+        // Reset ringbuffer's readpointers
+        iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
-			_audiodriver->getMainBuffer()->flush(*iter_participant);
+        while (iter_participant != participants.end()) {
+            _audiodriver->getMainBuffer()->flush (*iter_participant);
 
-			iter_participant++;
-		}
+            iter_participant++;
+        }
 
-		_audiodriver->getMainBuffer()->flush(default_id);
+        _audiodriver->getMainBuffer()->flush (default_id);
 
-		conf->setState(Conference::Active_Atached);
+        conf->setState (Conference::Active_Atached);
 
-		_dbus->getCallManager()->conferenceChanged(conference_id,
-				conf->getStateStr());
+        if (_dbus)
+            _dbus->getCallManager()->conferenceChanged (conference_id, conf->getStateStr());
 
-	}
+    }
 
-	switchCall(conference_id);
+    switchCall (conference_id);
 }
 
-void ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2) {
+void ManagerImpl::joinParticipant (const CallID& call_id1, const CallID& call_id2)
+{
 
-	_debug ("Manager: Join participants %s, %s", call_id1.c_str(), call_id2.c_str());
+    _debug ("Manager: Join participants %s, %s", call_id1.c_str(), call_id2.c_str());
 
-	std::map<std::string, std::string> call1_details = getCallDetails(call_id1);
-	std::map<std::string, std::string> call2_details = getCallDetails(call_id2);
+    std::map<std::string, std::string> call1_details = getCallDetails (call_id1);
+    std::map<std::string, std::string> call2_details = getCallDetails (call_id2);
 
-	std::map<std::string, std::string>::iterator iter_details;
+    std::map<std::string, std::string>::iterator iter_details;
 
-	// Test if we have valid call ids
-	iter_details = call1_details.find("PEER_NUMBER");
-	if(iter_details->second == "Unknown") {
-		_error("Manager: Error: Id %s is not a valid call", call_id1.c_str());
-		return;
-	}
+    // Test if we have valid call ids
+    iter_details = call1_details.find ("PEER_NUMBER");
 
-	iter_details = call2_details.find("PEER_NUMBER");
-	if(iter_details->second == "Unknown") {
-		_error("Manager: Error: Id %s is not a valid call", call_id2.c_str());
-		return;
-	}
+    if (iter_details->second == "Unknown") {
+        _error ("Manager: Error: Id %s is not a valid call", call_id1.c_str());
+        return;
+    }
+
+    iter_details = call2_details.find ("PEER_NUMBER");
+
+    if (iter_details->second == "Unknown") {
+        _error ("Manager: Error: Id %s is not a valid call", call_id2.c_str());
+        return;
+    }
 
-	AccountID currentAccountId;
-	Call* call = NULL;
+    AccountID currentAccountId;
+    Call* call = NULL;
 
-	CallID current_call_id = getCurrentCallId();
-	_debug ("Manager: current_call_id %s", current_call_id.c_str());
+    CallID current_call_id = getCurrentCallId();
+    _debug ("Manager: current_call_id %s", current_call_id.c_str());
 
-	// detach from the conference and switch to this conference
-	if ((current_call_id != call_id1) && (current_call_id != call_id2)) {
+    // detach from the conference and switch to this conference
+    if ( (current_call_id != call_id1) && (current_call_id != call_id2)) {
 
-		// If currently in a conference
-		if (isConference(current_call_id))
-			detachParticipant(default_id, current_call_id);
-		// If currently in a call
-		else
-			onHoldCall(current_call_id);
-	}
+        // If currently in a conference
+        if (isConference (current_call_id))
+            detachParticipant (default_id, current_call_id);
+        // If currently in a call
+        else
+            onHoldCall (current_call_id);
+    }
 
-	_debug ("Manager: Create a conference");
+    _debug ("Manager: Create a conference");
 
-	Conference *conf = createConference(call_id1, call_id2);
-	switchCall(conf->getConfID());
+    Conference *conf = createConference (call_id1, call_id2);
+    switchCall (conf->getConfID());
 
-	currentAccountId = getAccountFromCall(call_id1);
-	call = getAccountLink(currentAccountId)->getCall(call_id1);
-	call->setConfId(conf->getConfID());
+    currentAccountId = getAccountFromCall (call_id1);
+    call = getAccountLink (currentAccountId)->getCall (call_id1);
+    call->setConfId (conf->getConfID());
 
-	iter_details = call1_details.find("CALL_STATE");
-	_debug ("Manager: Process call %s state: %s", call_id1.c_str(), iter_details->second.c_str());
+    iter_details = call1_details.find ("CALL_STATE");
+    _debug ("Manager: Process call %s state: %s", call_id1.c_str(), iter_details->second.c_str());
 
-	if (iter_details->second == "HOLD") {
-		offHoldCall(call_id1);
-	} else if (iter_details->second == "INCOMING") {
-		answerCall(call_id1);
-	} else if (iter_details->second == "CURRENT") {
-		_audiodriver->getMainBuffer()->unBindAll(call_id1);
-		conf->bindParticipant(call_id1);
-	} else if (iter_details->second == "INACTIVE") {
-		answerCall(call_id1);
-	} else {
-		_warn ("Manager: Call state not recognized");
-	}
+    if (iter_details->second == "HOLD") {
+        offHoldCall (call_id1);
+    } else if (iter_details->second == "INCOMING") {
+        answerCall (call_id1);
+    } else if (iter_details->second == "CURRENT") {
+        _audiodriver->getMainBuffer()->unBindAll (call_id1);
+        conf->bindParticipant (call_id1);
+    } else if (iter_details->second == "INACTIVE") {
+        answerCall (call_id1);
+    } else {
+        _warn ("Manager: Call state not recognized");
+    }
 
-	currentAccountId = getAccountFromCall(call_id2);
+    currentAccountId = getAccountFromCall (call_id2);
 
-	call = getAccountLink(currentAccountId)->getCall(call_id2);
-	call->setConfId(conf->getConfID());
+    call = getAccountLink (currentAccountId)->getCall (call_id2);
+    call->setConfId (conf->getConfID());
 
-	iter_details = call2_details.find("CALL_STATE");
-	_debug ("Manager: Process call %s state: %s", call_id2.c_str(), iter_details->second.c_str());
+    iter_details = call2_details.find ("CALL_STATE");
+    _debug ("Manager: Process call %s state: %s", call_id2.c_str(), iter_details->second.c_str());
 
-	if (iter_details->second == "HOLD") {
-		offHoldCall(call_id2);
-	} else if (iter_details->second == "INCOMING") {
-		answerCall(call_id2);
-	} else if (iter_details->second == "CURRENT") {
-		_audiodriver->getMainBuffer()->unBindAll(call_id2);
-		conf->bindParticipant(call_id2);
-	} else if (iter_details->second == "INACTIVE") {
-		answerCall(call_id2);
-	} else {
-		_warn ("Manager: Call state not recognized");
-	}
+    if (iter_details->second == "HOLD") {
+        offHoldCall (call_id2);
+    } else if (iter_details->second == "INCOMING") {
+        answerCall (call_id2);
+    } else if (iter_details->second == "CURRENT") {
+        _audiodriver->getMainBuffer()->unBindAll (call_id2);
+        conf->bindParticipant (call_id2);
+    } else if (iter_details->second == "INACTIVE") {
+        answerCall (call_id2);
+    } else {
+        _warn ("Manager: Call state not recognized");
+    }
 
-	if (_audiodriver)
-		_audiodriver->getMainBuffer()->stateInfo();
+    if (_audiodriver)
+        _audiodriver->getMainBuffer()->stateInfo();
 
 }
 
 void ManagerImpl::detachParticipant (const CallID& call_id,
-		const CallID& current_id) {
+                                     const CallID& current_id)
+{
 
-	_debug ("Manager: Detach participant %s from conference", call_id.c_str());
+    _debug ("Manager: Detach participant %s from conference", call_id.c_str());
 
-	CallID current_call_id = current_id;
+    CallID current_call_id = current_id;
 
-	current_call_id = getCurrentCallId();
+    current_call_id = getCurrentCallId();
 
-	if (call_id != default_id) {
-		AccountID currentAccountId;
-		Call* call = NULL;
+    if (call_id != default_id) {
+        AccountID currentAccountId;
+        Call* call = NULL;
 
-		currentAccountId = getAccountFromCall(call_id);
-		call = getAccountLink(currentAccountId)->getCall(call_id);
+        currentAccountId = getAccountFromCall (call_id);
+        call = getAccountLink (currentAccountId)->getCall (call_id);
 
-		// TODO: add conference_id as a second parameter
-		ConferenceMap::iterator iter = _conferencemap.find(call->getConfId());
+        // TODO: add conference_id as a second parameter
+        ConferenceMap::iterator iter = _conferencemap.find (call->getConfId());
 
-		Conference *conf = getConferenceFromCallID(call_id);
+        Conference *conf = getConferenceFromCallID (call_id);
 
-		if (conf != NULL) {
+        if (conf != NULL) {
 
-			_debug ("Manager: Detaching participant %s", call_id.c_str());
-			std::map<std::string, std::string> call_details = getCallDetails(
-					call_id);
-			std::map<std::string, std::string>::iterator iter_details;
+            _debug ("Manager: Detaching participant %s", call_id.c_str());
+            std::map<std::string, std::string> call_details = getCallDetails (
+                        call_id);
+            std::map<std::string, std::string>::iterator iter_details;
 
-			iter_details = call_details.find("CALL_STATE");
+            iter_details = call_details.find ("CALL_STATE");
 
-			if (iter_details->second == "RINGING") {
+            if (iter_details->second == "RINGING") {
 
-			    removeParticipant(call_id);
-			} 
-			else {
-			    onHoldCall(call_id);
-			    removeParticipant(call_id);
-			    processRemainingParticipant(current_call_id, conf);
+                removeParticipant (call_id);
+            } else {
+                onHoldCall (call_id);
+                removeParticipant (call_id);
+                processRemainingParticipant (current_call_id, conf);
 
-			    _dbus->getCallManager()->conferenceChanged(conf->getConfID(),
-								       conf->getStateStr());
-			}
-		} 
-		else {
+                if (_dbus)
+                    _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
+            }
+        } else {
 
-			_debug ("Manager: Call is not conferencing, cannot detach");
+            _debug ("Manager: Call is not conferencing, cannot detach");
 
-		}
-	} 
-	else {
-		_debug ("Manager: Unbind main participant from all");
-		_audiodriver->getMainBuffer()->unBindAll(default_id);
+        }
+    } else {
+        _debug ("Manager: Unbind main participant from all");
+        _audiodriver->getMainBuffer()->unBindAll (default_id);
 
-		if (isConference(current_call_id)) {
+        if (isConference (current_call_id)) {
 
-			ConferenceMap::iterator iter = _conferencemap.find(current_call_id);
-			Conference *conf = iter->second;
+            ConferenceMap::iterator iter = _conferencemap.find (current_call_id);
+            Conference *conf = iter->second;
 
-			conf->setState(Conference::Active_Detached);
+            conf->setState (Conference::Active_Detached);
 
-			_dbus->getCallManager()->conferenceChanged(conf->getConfID(),
-					conf->getStateStr());
-		}
+            if (_dbus)
+                _dbus->getCallManager()->conferenceChanged (conf->getConfID(), conf->getStateStr());
+        }
 
-		switchCall("");
+        switchCall ("");
 
-	}
+    }
 
 }
 
-void ManagerImpl::removeParticipant (const CallID& call_id) {
-	_debug ("Manager: Remove participant %s", call_id.c_str());
+void ManagerImpl::removeParticipant (const CallID& call_id)
+{
+    _debug ("Manager: Remove participant %s", call_id.c_str());
 
-	// TODO: add conference_id as a second parameter
-	Conference* conf;
+    // TODO: add conference_id as a second parameter
+    Conference* conf;
 
-	AccountID currentAccountId;
-	Call* call = NULL;
+    AccountID currentAccountId;
+    Call* call = NULL;
 
-	// this call is no more a conference participant
-	currentAccountId = getAccountFromCall(call_id);
-	call = getAccountLink(currentAccountId)->getCall(call_id);
+    // this call is no more a conference participant
+    currentAccountId = getAccountFromCall (call_id);
+    call = getAccountLink (currentAccountId)->getCall (call_id);
 
-	ConferenceMap conf_map = _conferencemap;
-	ConferenceMap::iterator iter = conf_map.find(call->getConfId());
+    ConferenceMap conf_map = _conferencemap;
+    ConferenceMap::iterator iter = conf_map.find (call->getConfId());
 
-	if (iter == conf_map.end()) {
-		_debug ("Manager: Error: No conference created, cannot remove participant");
-	} else {
+    if (iter == conf_map.end()) {
+        _debug ("Manager: Error: No conference created, cannot remove participant");
+    } else {
 
-		conf = iter->second;
+        conf = iter->second;
 
-		_debug ("Manager: Remove participant %s", call_id.c_str());
-		conf->remove(call_id);
-		call->setConfId("");
+        _debug ("Manager: Remove participant %s", call_id.c_str());
+        conf->remove (call_id);
+        call->setConfId ("");
 
-	}
+    }
 
-	if (_audiodriver)
-		_audiodriver->getMainBuffer()->stateInfo();
+    if (_audiodriver)
+        _audiodriver->getMainBuffer()->stateInfo();
 
 }
 
 void ManagerImpl::processRemainingParticipant (CallID current_call_id,
-		Conference *conf) {
+        Conference *conf)
+{
 
-        _debug ("Manager: Process remaining %d participant(s) from conference %s", 
-		conf->getNbParticipants(), conf->getConfID().c_str());
+    _debug ("Manager: Process remaining %d participant(s) from conference %s",
+            conf->getNbParticipants(), conf->getConfID().c_str());
 
-	if (conf->getNbParticipants() > 1) {
+    if (conf->getNbParticipants() > 1) {
 
-		ParticipantSet participants = conf->getParticipantList();
-		ParticipantSet::iterator iter_participant = participants.begin();
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		// Reset ringbuffer's readpointers
-		iter_participant = participants.begin();
+        // Reset ringbuffer's readpointers
+        iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
-			_audiodriver->getMainBuffer()->flush(*iter_participant);
+        while (iter_participant != participants.end()) {
+            _audiodriver->getMainBuffer()->flush (*iter_participant);
 
-			iter_participant++;
-		}
+            iter_participant++;
+        }
 
-		_audiodriver->getMainBuffer()->flush(default_id);
+        _audiodriver->getMainBuffer()->flush (default_id);
 
-	} else if (conf->getNbParticipants() == 1) {
+    } else if (conf->getNbParticipants() == 1) {
 
-	       _debug ("Manager: Only one remaining participant"); 
+        _debug ("Manager: Only one remaining participant");
 
-		AccountID currentAccountId;
-		Call* call = NULL;
+        AccountID currentAccountId;
+        Call* call = NULL;
 
-		ParticipantSet participants = conf->getParticipantList();
-		ParticipantSet::iterator iter_participant = participants.begin();
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		// bind main participant to remaining conference call
-		if (iter_participant != participants.end()) {
+        // bind main participant to remaining conference call
+        if (iter_participant != participants.end()) {
 
-			// this call is no more a conference participant
-			currentAccountId = getAccountFromCall(*iter_participant);
-			call = getAccountLink(currentAccountId)->getCall(*iter_participant);
-			call->setConfId("");
+            // this call is no more a conference participant
+            currentAccountId = getAccountFromCall (*iter_participant);
+            call = getAccountLink (currentAccountId)->getCall (*iter_participant);
+            call->setConfId ("");
 
-			// if we are not listening to this conference
+            // if we are not listening to this conference
 
-			if (current_call_id != conf->getConfID()) {
-				onHoldCall(call->getCallId());
-			} else {
-				switchCall(*iter_participant);
-			}
-		}
+            if (current_call_id != conf->getConfID()) {
+                onHoldCall (call->getCallId());
+            } else {
+                switchCall (*iter_participant);
+            }
+        }
 
-		removeConference(conf->getConfID());
+        removeConference (conf->getConfID());
 
-	} else {
+    } else {
 
-	        _debug ("Manager: No remaining participant, remove conference"); 
+        _debug ("Manager: No remaining participant, remove conference");
 
-		removeConference(conf->getConfID());
+        removeConference (conf->getConfID());
 
-		switchCall("");
-	}
+        switchCall ("");
+    }
 
 }
 
 void ManagerImpl::joinConference (const CallID& conf_id1,
-		const CallID& conf_id2) {
-	_debug ("Manager: Join conference %s, %s", conf_id1.c_str(), conf_id2.c_str());
+                                  const CallID& conf_id2)
+{
+    _debug ("Manager: Join conference %s, %s", conf_id1.c_str(), conf_id2.c_str());
 
-	ConferenceMap::iterator iter;
+    ConferenceMap::iterator iter;
 
-	Conference *conf1 = NULL;
-	Conference *conf2 = NULL;
+    Conference *conf1 = NULL;
+    Conference *conf2 = NULL;
 
-	iter = _conferencemap.find(conf_id1);
+    iter = _conferencemap.find (conf_id1);
 
-	if (iter != _conferencemap.end()) {
-		conf1 = iter->second;
-	}
-	else {
-		_error("Manager: Error: Not a valid conference ID");
-		return;
-	}
+    if (iter != _conferencemap.end()) {
+        conf1 = iter->second;
+    } else {
+        _error ("Manager: Error: Not a valid conference ID");
+        return;
+    }
 
-	iter = _conferencemap.find(conf_id2);
+    iter = _conferencemap.find (conf_id2);
 
-	if (iter != _conferencemap.end()) {
-		conf2 = iter->second;
-	}
-	else {
-		_error("Manager: Error: Not a valid conference ID");
-		return;
-	}
+    if (iter != _conferencemap.end()) {
+        conf2 = iter->second;
+    } else {
+        _error ("Manager: Error: Not a valid conference ID");
+        return;
+    }
 
-	ParticipantSet participants = conf1->getParticipantList();
+    ParticipantSet participants = conf1->getParticipantList();
 
-	ParticipantSet::iterator iter_participant = participants.begin();
+    ParticipantSet::iterator iter_participant = participants.begin();
 
-	while (iter_participant != participants.end()) {
-		detachParticipant(*iter_participant, "");
-		addParticipant(*iter_participant, conf_id2);
+    while (iter_participant != participants.end()) {
+        detachParticipant (*iter_participant, "");
+        addParticipant (*iter_participant, conf_id2);
 
-		iter_participant++;
-	}
+        iter_participant++;
+    }
 
-	// detachParticipant(default_id, "");
+    // detachParticipant(default_id, "");
 
 }
 
-void ManagerImpl::addStream (const CallID& call_id) {
-	_debug ("Manager: Add audio stream %s", call_id.c_str());
+void ManagerImpl::addStream (const CallID& call_id)
+{
 
-	AccountID currentAccountId;
-	Call* call = NULL;
+    _debug ("Manager: Add audio stream %s", call_id.c_str());
 
-	currentAccountId = getAccountFromCall(call_id);
-	call = getAccountLink(currentAccountId)->getCall(call_id);
+    AccountID currentAccountId;
+    Call* call = NULL;
 
-	if (participToConference(call_id)) {
+    currentAccountId = getAccountFromCall (call_id);
+    call = getAccountLink (currentAccountId)->getCall (call_id);
 
-		// bind to conference participant
-		ConferenceMap::iterator iter = _conferencemap.find(call->getConfId());
+    if (participToConference (call_id)) {
 
-		if (iter != _conferencemap.end()) {
-			Conference* conf = iter->second;
+        _debug ("Manager: Add stream to conference");
 
-			conf->bindParticipant(call_id);
+        // bind to conference participant
+        ConferenceMap::iterator iter = _conferencemap.find (call->getConfId());
 
-			ParticipantSet participants = conf->getParticipantList();
-			// reset ring buffer for all conference participant
-			ParticipantSet::iterator iter_p = participants.begin();
+        if (iter != _conferencemap.end()) {
+            Conference* conf = iter->second;
 
-			while (iter_p != participants.end()) {
+            conf->bindParticipant (call_id);
 
-				// to avoid puting onhold the call
-				// switchCall("");
-				_audiodriver->getMainBuffer()->flush(*iter_p);
+            ParticipantSet participants = conf->getParticipantList();
+            // reset ring buffer for all conference participant
+            ParticipantSet::iterator iter_p = participants.begin();
 
-				iter_p++;
-			}
+            while (iter_p != participants.end()) {
 
-			_audiodriver->getMainBuffer()->flush(default_id);
-		}
+                // to avoid puting onhold the call
+                // switchCall("");
+                _audiodriver->getMainBuffer()->flush (*iter_p);
 
-	} else {
+                iter_p++;
+            }
 
-		// bind to main
-		getAudioDriver()->getMainBuffer()->bindCallID(call_id);
+            _audiodriver->getMainBuffer()->flush (default_id);
+        }
+
+    } else {
+
+        _debug ("Manager: Add stream to call");
 
-		// _audiodriver->getMainBuffer()->flush(default_id);
-		_audiodriver->flushUrgent();
-		_audiodriver->flushMain();
+        // bind to main
+        getAudioDriver()->getMainBuffer()->bindCallID (call_id);
 
-	}
+        // _audiodriver->getMainBuffer()->flush(default_id);
+        _audiodriver->flushUrgent();
+        _audiodriver->flushMain();
 
-	if (_audiodriver)
-		_audiodriver->getMainBuffer()->stateInfo();
+    }
+
+    if (_audiodriver)
+        _audiodriver->getMainBuffer()->stateInfo();
 }
 
-void ManagerImpl::removeStream (const CallID& call_id) {
-	_debug ("Manager: Remove audio stream %s", call_id.c_str());
+void ManagerImpl::removeStream (const CallID& call_id)
+{
+    _debug ("Manager: Remove audio stream %s", call_id.c_str());
 
-	getAudioDriver()->getMainBuffer()->unBindAll(call_id);
+    getAudioDriver()->getMainBuffer()->unBindAll (call_id);
 
-	if (participToConference(call_id)) {
-		removeParticipant(call_id);
-	}
+    if (participToConference (call_id)) {
+        removeParticipant (call_id);
+    }
 
-	if (_audiodriver)
-		_audiodriver->getMainBuffer()->stateInfo();
+    if (_audiodriver)
+        _audiodriver->getMainBuffer()->stateInfo();
 }
 
 //THREAD=Main
-bool ManagerImpl::saveConfig (void) {
-	_debug ("Saving Configuration to XDG directory %s ... ", _path.c_str());
-	setConfig(AUDIO, VOLUME_SPKR, getSpkrVolume());
-	setConfig(AUDIO, VOLUME_MICRO, getMicVolume());
+bool ManagerImpl::saveConfig (void)
+{
+    _debug ("Manager: Saving Configuration to XDG directory %s ... ", _path.c_str());
+    audioPreference.setVolumemic (getMicVolume());
+    audioPreference.setVolumespkr (getSpkrVolume());
 
-	_setupLoaded = _config.saveConfigTree(_path.data());
-	return _setupLoaded;
-}
+    AccountMap::iterator iter = _accountMap.begin();
 
-//THREAD=Main
-bool ManagerImpl::sendDtmf (const CallID& id, char code) {
+    try {
+        // emitter = new Conf::YamlEmitter("sequenceEmitter.yml");
+        emitter = new Conf::YamlEmitter (_path.c_str());
+
+        while (iter != _accountMap.end()) {
+            _debug ("Manager: Saving account: %s", iter->first.c_str());
 
-	AccountID accountid = getAccountFromCall(id);
+            if (iter->first == "") {
+                iter++;
+                continue;
+            }
 
-	bool returnValue = false;
+            iter->second->serialize (emitter);
+            iter++;
+        }
 
-	playDtmf(code);
+        preferences.serialize (emitter);
+        voipPreferences.serialize (emitter);
+        addressbookPreference.serialize (emitter);
+        hookPreference.serialize (emitter);
+        audioPreference.serialize (emitter);
+        shortcutPreferences.serialize (emitter);
 
-	CallAccountMap::iterator iter = _callAccountMap.find(id);
+        emitter->serializeData();
 
-	// Make sure the call exist before sending DTMF, ths could be simply call dialing
-	if(iter != _callAccountMap.end())
-		returnValue = getAccountLink(accountid)->carryingDTMFdigits(id, code);
+        delete emitter;
+    } catch (Conf::YamlEmitterException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
 
-	return returnValue;
+    // _setupLoaded = _config.saveConfigTree(_path.data());
+    return _setupLoaded;
 }
 
-//THREAD=Main | VoIPLink
-bool ManagerImpl::playDtmf (char code) {
-	int pulselen, layer, size;
-	bool ret = false;
-	AudioLayer *audiolayer;
-	SFLDataFormat *buf;
+//THREAD=Main
+bool ManagerImpl::sendDtmf (const CallID& id, char code)
+{
+
+    AccountID accountid = getAccountFromCall (id);
+
+    bool returnValue = false;
 
-	stopTone();
+    playDtmf (code);
 
-	bool hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_DTMF);
+    CallAccountMap::iterator iter = _callAccountMap.find (id);
 
-	if (!hasToPlayTone) {
-		_debug ("Manager: playDtmf: Do not have to play a tone...");
-		return false;
-	}
+    // Make sure the call exist before sending DTMF, ths could be simply call dialing
+    if (iter != _callAccountMap.end())
+        returnValue = getAccountLink (accountid)->carryingDTMFdigits (id, code);
 
-	// length in milliseconds
-	pulselen = getConfigInt(SIGNALISATION, PULSE_LENGTH);
+    return returnValue;
+}
+
+//THREAD=Main | VoIPLink
+bool ManagerImpl::playDtmf (char code)
+{
+    int pulselen, layer, size;
+    bool ret = false;
+    AudioLayer *audiolayer;
+    SFLDataFormat *buf;
+
+    stopTone();
 
-	if (!pulselen) {
-		_debug ("Manager: playDtmf: Pulse length is not set...");
-		return false;
-	}
+    bool hasToPlayTone = voipPreferences.getPlayDtmf();
 
-	// numbers of int = length in milliseconds / 1000 (number of seconds)
-	//                = number of seconds * SAMPLING_RATE by SECONDS
-	audiolayer = getAudioDriver();
+    if (!hasToPlayTone) {
+        _debug ("Manager: playDtmf: Do not have to play a tone...");
+        return false;
+    }
 
-	layer = audiolayer->getLayerType();
+    // length in milliseconds
+    pulselen = voipPreferences.getPulseLength();
 
-	// fast return, no sound, so no dtmf
-	if (audiolayer == 0 || _dtmfKey == 0) {
-		_debug ("Manager: playDtmf: Error no audio layer...");
-		return false;
-	}
+    if (!pulselen) {
+        _debug ("Manager: playDtmf: Pulse length is not set...");
+        return false;
+    }
 
-	// number of data sampling in one pulselen depends on samplerate
-	// size (n sampling) = time_ms * sampling/s
-	//                     ---------------------
-	//                            ms/s
-	size = (int) ((pulselen * (float) audiolayer->getSampleRate()) / 1000);
+    // numbers of int = length in milliseconds / 1000 (number of seconds)
+    //                = number of seconds * SAMPLING_RATE by SECONDS
+    audiolayer = getAudioDriver();
 
-	// this buffer is for mono
-	// TODO <-- this should be global and hide if same size
-	buf = new SFLDataFormat[size];
+    layer = audiolayer->getLayerType();
 
-	// Handle dtmf
-	_dtmfKey->startTone(code);
+    // fast return, no sound, so no dtmf
+    if (audiolayer == 0 || _dtmfKey == 0) {
+        _debug ("Manager: playDtmf: Error no audio layer...");
+        return false;
+    }
 
-	// copy the sound
-	if (_dtmfKey->generateDTMF(buf, size)) {
-		// Put buffer to urgentRingBuffer
-		// put the size in bytes...
-		// so size * 1 channel (mono) * sizeof (bytes for the data)
-		// audiolayer->flushUrgent();
-		audiolayer->startStream();
-		audiolayer->putUrgent(buf, size * sizeof(SFLDataFormat));
-	}
+    // number of data sampling in one pulselen depends on samplerate
+    // size (n sampling) = time_ms * sampling/s
+    //                     ---------------------
+    //                            ms/s
+    size = (int) ( (pulselen * (float) audiolayer->getSampleRate()) / 1000);
+
+    // this buffer is for mono
+    // TODO <-- this should be global and hide if same size
+    buf = new SFLDataFormat[size];
+
+    // Handle dtmf
+    _dtmfKey->startTone (code);
+
+    // copy the sound
+    if (_dtmfKey->generateDTMF (buf, size)) {
+        // Put buffer to urgentRingBuffer
+        // put the size in bytes...
+        // so size * 1 channel (mono) * sizeof (bytes for the data)
+        // audiolayer->flushUrgent();
+        audiolayer->startStream();
+        audiolayer->putUrgent (buf, size * sizeof (SFLDataFormat));
+    }
 
-	ret = true;
+    ret = true;
 
-	// TODO Cache the DTMF
+    // TODO Cache the DTMF
 
-	delete[] buf;
-	buf = 0;
+    delete[] buf;
+    buf = 0;
 
-	return ret;
+    return ret;
 }
 
 // Multi-thread
-bool ManagerImpl::incomingCallWaiting () {
-	return (_nbIncomingWaitingCall > 0) ? true : false;
+bool ManagerImpl::incomingCallWaiting ()
+{
+    return (_nbIncomingWaitingCall > 0) ? true : false;
 }
 
-void ManagerImpl::addWaitingCall (const CallID& id) {
+void ManagerImpl::addWaitingCall (const CallID& id)
+{
 
-        _info("Manager: Add waiting call %s (%d calls)", id.c_str(), _nbIncomingWaitingCall);
+    _info ("Manager: Add waiting call %s (%d calls)", id.c_str(), _nbIncomingWaitingCall);
 
-	ost::MutexLock m(_waitingCallMutex);
-	_waitingCall.insert(id);
-	_nbIncomingWaitingCall++;
+    ost::MutexLock m (_waitingCallMutex);
+    _waitingCall.insert (id);
+    _nbIncomingWaitingCall++;
 }
 
-void ManagerImpl::removeWaitingCall (const CallID& id) {
+void ManagerImpl::removeWaitingCall (const CallID& id)
+{
 
-        _info("Manager: Remove waiting call %s (%d calls)", id.c_str(), _nbIncomingWaitingCall);
+    _info ("Manager: Remove waiting call %s (%d calls)", id.c_str(), _nbIncomingWaitingCall);
 
-	ost::MutexLock m(_waitingCallMutex);
-	// should return more than 1 if it erase a call
+    ost::MutexLock m (_waitingCallMutex);
+    // should return more than 1 if it erase a call
 
-	if (_waitingCall.erase(id)) {
-		_nbIncomingWaitingCall--;
-	}
+    if (_waitingCall.erase (id)) {
+        _nbIncomingWaitingCall--;
+    }
 }
 
-bool ManagerImpl::isWaitingCall (const CallID& id) {
-	CallIDSet::iterator iter = _waitingCall.find(id);
+bool ManagerImpl::isWaitingCall (const CallID& id)
+{
+    CallIDSet::iterator iter = _waitingCall.find (id);
 
-	if (iter != _waitingCall.end()) {
-		return false;
-	}
+    if (iter != _waitingCall.end()) {
+        return false;
+    }
 
-	return true;
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // Management of event peer IP-phone
 ////////////////////////////////////////////////////////////////////////////////
 // SipEvent Thread
-bool ManagerImpl::incomingCall (Call* call, const AccountID& accountId) {
+bool ManagerImpl::incomingCall (Call* call, const AccountID& accountId)
+{
+
+    std::string from, number, display_name, display;
+
+    if (!call)
+        _error ("Manager: Error: no call at this point");
+
+    stopTone();
+
+    _debug ("Manager: Incoming call %s for account %s", call->getCallId().data(), accountId.c_str());
+
+    associateCallToAccount (call->getCallId(), accountId);
+
+    // If account is null it is an ip to ip call
+    if (accountId == AccountNULL) {
+        associateConfigToCall (call->getCallId(), Call::IPtoIP);
+    } else {
+        // strip sip: which is not required and bring confusion with ip to ip calls
+        // when placing new call from history (if call is IAX, do nothing)
+        std::string peerNumber = call->getPeerNumber();
+
+        int startIndex = peerNumber.find ("sip:");
+
+        if (startIndex != (int) string::npos) {
+            std::string strippedPeerNumber = peerNumber.substr (startIndex + 4);
+            call->setPeerNumber (strippedPeerNumber);
+        }
+
+    }
+
+    if (!hasCurrentCall()) {
+        _debug ("Manager: Has no current call");
+
+        call->setConnectionState (Call::Ringing);
+        ringtone (accountId);
 
-	std::string from, number, display_name, display;
+    } else {
+        _debug ("Manager: has current call");
+    }
+
+    addWaitingCall (call->getCallId());
+
+    from = call->getPeerName();
+    number = call->getPeerNumber();
+    display_name = call->getDisplayName();
+
+    if (from != "" && number != "") {
+        from.append (" <");
+        from.append (number);
+        from.append (">");
+    } else if (from.empty()) {
+        from.append ("<");
+        from.append (number);
+        from.append (">");
+    }
+
+    /* Broadcast a signal over DBus */
+    _debug ("Manager: From: %s, Number: %s, Display Name: %s", from.c_str(), number.c_str(), display_name.c_str());
+
+    display = display_name;
+    display.append (" ");
+    display.append (from);
 
-	if(!call)
-		_error("Manager: Error: no call at this point");
+    if (_dbus)
+        _dbus->getCallManager()->incomingCall (accountId, call->getCallId(), display.c_str());
 
-	stopTone();
+    return true;
+}
 
-	_debug ("Manager: Incoming call %s for account %s", call->getCallId().data(), accountId.c_str());
 
-	associateCallToAccount(call->getCallId(), accountId);
+//THREAD=VoIP
+void ManagerImpl::incomingMessage (const CallID& callID,
+                                   const std::string& from,
+                                   const std::string& message)
+{
 
-	// If account is null it is an ip to ip call
-	if (accountId == AccountNULL) {
-		associateConfigToCall(call->getCallId(), Call::IPtoIP);
-	}
-	else {
-		// strip sip: which is not required and bring confusion with ip to ip calls
-		// when placing new call from history (if call is IAX, do nothing)
-		std::string peerNumber = call->getPeerNumber();
+    if (participToConference (callID)) {
+        _debug ("Manager: Particip to a conference, send message to everyone");
 
-		int startIndex = peerNumber.find("sip:");
+        Conference *conf = getConferenceFromCallID (callID);
 
-		if (startIndex != (int) string::npos) {
-			std::string strippedPeerNumber = peerNumber.substr(startIndex + 4);
-			call->setPeerNumber(strippedPeerNumber);
-		}
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-	}
+        while (iter_participant != participants.end()) {
 
-	if (!hasCurrentCall()) {
-		_debug ("Manager: Has no current call");
+            if (*iter_participant == callID)
+                continue;
 
-		call->setConnectionState(Call::Ringing);
-		ringtone();
+            AccountID accountId = getAccountFromCall (*iter_participant);
 
-	}
-	else {
-		_debug ("Manager: has current call");
-	}
+            _debug ("Manager: Send message to %s, (%s)", (*iter_participant).c_str(), accountId.c_str());
 
-	addWaitingCall(call->getCallId());
+            Account *account = getAccount (accountId);
 
-	from = call->getPeerName();
-	number = call->getPeerNumber();
-	display_name = call->getDisplayName();
+            if (!account) {
+                _debug ("Manager: Failed to get account while sending instant message");
+                return;
+            }
 
-	if (from != "" && number != "") {
-		from.append(" <");
-		from.append(number);
-		from.append(">");
-	} else if (from.empty()) {
-		from.append("<");
-		from.append(number);
-		from.append(">");
-	}
+            if (account->getType() == "SIP")
+                // link = dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId));
+                dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId))->sendTextMessage (_imModule, callID, message, from);
+            else if (account->getType() == "IAX")
+                // link = dynamic_cast<IAXVoIPLink *> (account->getVoIPLink());
+                dynamic_cast<IAXVoIPLink *> (account->getVoIPLink())->sendTextMessage (_imModule, callID, message, from);
+            else {
+                _debug ("Manager: Failed to get voip link while sending instant message");
+                return;
+            }
 
-	/* Broadcast a signal over DBus */
-	_debug ("Manager: From: %s, Number: %s, Display Name: %s", from.c_str(), number.c_str(), display_name.c_str());
+            iter_participant++;
+        }
 
-	display = display_name;
-	display.append(" ");
-	display.append(from);
+        // in case of a conference we must notify client using conference id
+        if (_dbus) {
+            _dbus->getCallManager()->incomingMessage (conf->getConfID(), from, message);
+        }
 
-	if (_dbus)
-		_dbus->getCallManager()->incomingCall(accountId, call->getCallId(), display.c_str());
+    } else {
 
-	return true;
+        if (_dbus) {
+            _dbus->getCallManager()->incomingMessage (callID, from, message);
+        }
+    }
 }
 
+
 //THREAD=VoIP
-void ManagerImpl::incomingMessage (const AccountID& accountId,
-				   const std::string& message) {
-	if (_dbus) {
-		_dbus->getCallManager()->incomingMessage(accountId, message);
-	}
+bool ManagerImpl::sendTextMessage (const CallID& callID, const std::string& message, const std::string& from)
+{
+
+    if (isConference (callID)) {
+        _debug ("Manager: Is a conference, send instant message to everyone");
+
+        ConferenceMap::iterator it = _conferencemap.find (callID);
+
+        if (it == _conferencemap.end())
+            return false;
+
+        Conference *conf = it->second;
+
+        if (!conf)
+            return false;
+
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
+
+        while (iter_participant != participants.end()) {
+
+            AccountID accountId = getAccountFromCall (*iter_participant);
+
+            Account *account = getAccount (accountId);
+
+            if (!account) {
+                _debug ("Manager: Failed to get account while sending instant message");
+                return false;
+            }
+
+            if (account->getType() == "SIP")
+                // link = dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId));
+                dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId))->sendTextMessage (_imModule, *iter_participant, message, from);
+            else if (account->getType() == "IAX")
+                // link = dynamic_cast<IAXVoIPLink *> (account->getVoIPLink());
+                dynamic_cast<IAXVoIPLink *> (account->getVoIPLink())->sendTextMessage (_imModule, *iter_participant, message, from);
+            else {
+                _debug ("Manager: Failed to get voip link while sending instant message");
+                return false;
+            }
+
+            iter_participant++;
+        }
+
+        return true;
+    }
+
+    if (participToConference (callID)) {
+        _debug ("Manager: Particip to a conference, send instant message to everyone");
+
+        Conference *conf = getConferenceFromCallID (callID);
+
+        if (!conf)
+            return false;
+
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
+
+        while (iter_participant != participants.end()) {
+
+            AccountID accountId = getAccountFromCall (*iter_participant);
+
+            Account *account = getAccount (accountId);
+
+            if (!account) {
+                _debug ("Manager: Failed to get account while sending instant message");
+                return false;
+            }
+
+            if (account->getType() == "SIP")
+                // link = dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId));
+                dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId))->sendTextMessage (_imModule, *iter_participant, message, from);
+            else if (account->getType() == "IAX")
+                // link = dynamic_cast<IAXVoIPLink *> (account->getVoIPLink());
+                dynamic_cast<IAXVoIPLink *> (account->getVoIPLink())->sendTextMessage (_imModule, *iter_participant, message, from);
+            else {
+                _debug ("Manager: Failed to get voip link while sending instant message");
+                return false;
+            }
+
+            iter_participant++;
+        }
+
+    } else {
+
+        AccountID accountId = getAccountFromCall (callID);
+
+        Account *account = getAccount (accountId);
+
+        if (!account) {
+            _debug ("Manager: Failed to get account while sending instant message");
+            return false;
+        }
+
+        if (account->getType() == "SIP")
+            // link = dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId));
+            dynamic_cast<SIPVoIPLink *> (getAccountLink (accountId))->sendTextMessage (_imModule, callID, message, from);
+        else if (account->getType() == "IAX")
+            // link = dynamic_cast<IAXVoIPLink *> (account->getVoIPLink());
+            dynamic_cast<IAXVoIPLink *> (account->getVoIPLink())->sendTextMessage (_imModule, callID, message, from);
+        else {
+            _debug ("Manager: Failed to get voip link while sending instant message");
+            return false;
+        }
+    }
+
+    return true;
 }
 
 //THREAD=VoIP CALL=Outgoing
-void ManagerImpl::peerAnsweredCall (const CallID& id) {
+void ManagerImpl::peerAnsweredCall (const CallID& id)
+{
 
-        _debug ("Manager: Peer answered call %s", id.c_str());
+    _debug ("Manager: Peer answered call %s", id.c_str());
 
-	// The if statement is usefull only if we sent two calls at the same time.
-	if (isCurrentCall(id)) {
-		stopTone();
-	}
+    // The if statement is usefull only if we sent two calls at the same time.
+    if (isCurrentCall (id)) {
+        stopTone();
+    }
 
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(id, "CURRENT");
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (id, "CURRENT");
 
-	_audiodriver->flushMain();
+    _audiodriver->flushMain();
 
-	_audiodriver->flushUrgent();
+    _audiodriver->flushUrgent();
 }
 
 //THREAD=VoIP Call=Outgoing
-void ManagerImpl::peerRingingCall (const CallID& id) {
+void ManagerImpl::peerRingingCall (const CallID& id)
+{
 
-        _debug ("Manager: Peer call %s ringing", id.c_str());
+    _debug ("Manager: Peer call %s ringing", id.c_str());
 
-	if (isCurrentCall(id)) {
-		ringback();
-	}
+    if (isCurrentCall (id)) {
+        ringback();
+    }
 
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(id, "RINGING");
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (id, "RINGING");
 }
 
 //THREAD=VoIP Call=Outgoing/Ingoing
-void ManagerImpl::peerHungupCall (const CallID& call_id) {
-	PulseLayer *pulselayer;
-	AccountID account_id;
-	bool returnValue;
+void ManagerImpl::peerHungupCall (const CallID& call_id)
+{
+    PulseLayer *pulselayer;
+    AccountID account_id;
+    bool returnValue;
 
-	_debug ("Manager: Peer hungup call %s", call_id.c_str());
+    _debug ("Manager: Peer hungup call %s", call_id.c_str());
 
-	// store the current call id
-	CallID current_call_id = getCurrentCallId();
+    // store the current call id
+    CallID current_call_id = getCurrentCallId();
 
-	if (participToConference(call_id)) {
+    if (participToConference (call_id)) {
 
-		Conference *conf = getConferenceFromCallID(call_id);
+        Conference *conf = getConferenceFromCallID (call_id);
 
-		if (conf != NULL) {
+        if (conf != NULL) {
 
-			removeParticipant(call_id);
-			processRemainingParticipant(current_call_id, conf);
+            removeParticipant (call_id);
+            processRemainingParticipant (current_call_id, conf);
 
-		}
-	} else {
-		if (isCurrentCall(call_id)) {
-			stopTone();
+        }
+    } else {
+        if (isCurrentCall (call_id)) {
+            stopTone();
 
-			switchCall("");
-		}
-	}
+            switchCall ("");
+        }
+    }
 
-	/* Direct IP to IP call */
-	if (getConfigFromCall(call_id) == Call::IPtoIP) {
-		SIPVoIPLink::instance(AccountNULL)->hangup(call_id);
-	}
+    /* Direct IP to IP call */
+    if (getConfigFromCall (call_id) == Call::IPtoIP) {
+        SIPVoIPLink::instance (AccountNULL)->hangup (call_id);
+    }
 
-	else {
+    else {
 
-		account_id = getAccountFromCall(call_id);
+        account_id = getAccountFromCall (call_id);
 
-		returnValue = getAccountLink(account_id)->peerHungup(call_id);
-	}
+        returnValue = getAccountLink (account_id)->peerHungup (call_id);
+    }
 
-	/* Broadcast a signal over DBus */
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(call_id, "HUNGUP");
+    /* Broadcast a signal over DBus */
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (call_id, "HUNGUP");
 
-	removeWaitingCall(call_id);
+    removeWaitingCall (call_id);
 
-	removeCallAccount(call_id);
+    removeCallAccount (call_id);
 
-	int nbCalls = getCallList().size();
+    int nbCalls = getCallList().size();
 
-	// stop streams
+    // stop streams
 
-	if (nbCalls <= 0) {
-		_debug ("Manager: Stop audio stream, ther is only %i call(s) remaining", nbCalls);
+    if (nbCalls <= 0) {
+        _debug ("Manager: Stop audio stream, ther is only %i call(s) remaining", nbCalls);
 
-		AudioLayer* audiolayer = getAudioDriver();
-		audiolayer->stopStream();
-	}
+        AudioLayer* audiolayer = getAudioDriver();
+        audiolayer->stopStream();
+    }
 
-	if (_audiodriver->getLayerType() == PULSEAUDIO) {
-		pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-	}
+    if (_audiodriver->getLayerType() == PULSEAUDIO) {
+        pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
+    }
 }
 
 //THREAD=VoIP
-void ManagerImpl::callBusy (const CallID& id) {
-        _debug ("Manager: Call %s busy", id.c_str());
+void ManagerImpl::callBusy (const CallID& id)
+{
+    _debug ("Manager: Call %s busy", id.c_str());
 
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(id, "BUSY");
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (id, "BUSY");
 
-	if (isCurrentCall(id)) {
-		playATone(Tone::TONE_BUSY);
-		switchCall("");
-	}
+    if (isCurrentCall (id)) {
+        playATone (Tone::TONE_BUSY);
+        switchCall ("");
+    }
 
-	removeCallAccount(id);
+    removeCallAccount (id);
 
-	removeWaitingCall(id);
+    removeWaitingCall (id);
 }
 
 //THREAD=VoIP
-void ManagerImpl::callFailure (const CallID& call_id) {
-	if (_dbus)
-		_dbus->getCallManager()->callStateChanged(call_id, "FAILURE");
+void ManagerImpl::callFailure (const CallID& call_id)
+{
+    if (_dbus)
+        _dbus->getCallManager()->callStateChanged (call_id, "FAILURE");
 
-	if (isCurrentCall(call_id)) {
-		playATone(Tone::TONE_BUSY);
-		switchCall("");
-	}
+    if (isCurrentCall (call_id)) {
+        playATone (Tone::TONE_BUSY);
+        switchCall ("");
+    }
 
-	CallID current_call_id = getCurrentCallId();
+    CallID current_call_id = getCurrentCallId();
 
-	if (participToConference(call_id)) {
+    if (participToConference (call_id)) {
 
-		_debug ("Manager: Call %s participating to a conference failed", call_id.c_str());
+        _debug ("Manager: Call %s participating to a conference failed", call_id.c_str());
 
-		Conference *conf = getConferenceFromCallID(call_id);
+        Conference *conf = getConferenceFromCallID (call_id);
 
-		if (conf != NULL) {
-			// remove this participant
-			removeParticipant(call_id);
+        if (conf != NULL) {
+            // remove this participant
+            removeParticipant (call_id);
 
-			processRemainingParticipant(current_call_id, conf);
-		}
+            processRemainingParticipant (current_call_id, conf);
+        }
 
-	}
+    }
 
-	removeCallAccount(call_id);
+    removeCallAccount (call_id);
 
-	removeWaitingCall(call_id);
+    removeWaitingCall (call_id);
 
 }
 
 //THREAD=VoIP
 void ManagerImpl::startVoiceMessageNotification (const AccountID& accountId,
-		int nb_msg) {
-	if (_dbus)
-		_dbus->getCallManager()->voiceMailNotify(accountId, nb_msg);
+        int nb_msg)
+{
+    if (_dbus)
+        _dbus->getCallManager()->voiceMailNotify (accountId, nb_msg);
 }
 
-void ManagerImpl::connectionStatusNotification () {
-	if (_dbus != NULL) {
-		_dbus->getConfigurationManager()->accountsChanged();
-	}
+void ManagerImpl::connectionStatusNotification ()
+{
+
+    _debug ("Manager: connectionStatusNotification");
+
+    if (_dbus != NULL) {
+        _dbus->getConfigurationManager()->accountsChanged();
+    }
 }
 
 /**
  * Multi Thread
  */
-bool ManagerImpl::playATone (Tone::TONEID toneId) {
+bool ManagerImpl::playATone (Tone::TONEID toneId)
+{
 
-	bool hasToPlayTone;
-	AudioLayer *audiolayer;
+    bool hasToPlayTone;
+    AudioLayer *audiolayer;
 
-	// _debug ("Manager: Play tone %d", toneId);
+    // _debug ("Manager: Play tone %d", toneId);
 
-	hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_TONES);
+    hasToPlayTone = voipPreferences.getPlayTones();
 
-	if (!hasToPlayTone)
-		return false;
+    if (!hasToPlayTone)
+        return false;
 
-	audiolayer = getAudioDriver();
+    audiolayer = getAudioDriver();
 
-	if (audiolayer) {
+    if (audiolayer) {
 
-		audiolayer->flushUrgent();
-		audiolayer->startStream();
-	}
+        audiolayer->flushUrgent();
+        audiolayer->startStream();
+    }
 
-	if (_telephoneTone != 0) {
-		_toneMutex.enterMutex();
-		_telephoneTone->setCurrentTone(toneId);
-		_toneMutex.leaveMutex();
-	}
+    if (_telephoneTone != 0) {
+        _toneMutex.enterMutex();
+        _telephoneTone->setCurrentTone (toneId);
+        _toneMutex.leaveMutex();
+    }
 
-	return true;
+    return true;
 }
 
 /**
  * Multi Thread
  */
-void ManagerImpl::stopTone () {
-	bool hasToPlayTone;
+void ManagerImpl::stopTone ()
+{
+    bool hasToPlayTone;
+
+    hasToPlayTone = voipPreferences.getPlayTones();
 
-	hasToPlayTone = getConfigBool(SIGNALISATION, PLAY_TONES);
+    if (!hasToPlayTone)
+        return;
 
-	if (!hasToPlayTone)
-		return;
+    _toneMutex.enterMutex();
 
-	_toneMutex.enterMutex();
+    if (_telephoneTone != 0) {
+        _telephoneTone->setCurrentTone (Tone::TONE_NULL);
+    }
 
-	if (_telephoneTone != 0) {
-		_telephoneTone->setCurrentTone(Tone::TONE_NULL);
-	}
+    if (_audiofile)
+        _audiofile->stop();
 
-	_audiofile.stop();
-	_toneMutex.leaveMutex();
+    _toneMutex.leaveMutex();
 }
 
 /**
  * Multi Thread
  */
-bool ManagerImpl::playTone () {
-	playATone(Tone::TONE_DIALTONE);
-	return true;
+bool ManagerImpl::playTone ()
+{
+    playATone (Tone::TONE_DIALTONE);
+    return true;
 }
 
 /**
  * Multi Thread
  */
-bool ManagerImpl::playToneWithMessage () {
-	playATone(Tone::TONE_CONGESTION);
-	return true;
+bool ManagerImpl::playToneWithMessage ()
+{
+    playATone (Tone::TONE_CONGESTION);
+    return true;
 }
 
 /**
  * Multi Thread
  */
-void ManagerImpl::congestion () {
-	playATone(Tone::TONE_CONGESTION);
+void ManagerImpl::congestion ()
+{
+    playATone (Tone::TONE_CONGESTION);
 }
 
 /**
  * Multi Thread
  */
-void ManagerImpl::ringback () {
-	playATone(Tone::TONE_RINGTONE);
+void ManagerImpl::ringback ()
+{
+    playATone (Tone::TONE_RINGTONE);
 }
 
 /**
  * Multi Thread
  */
-void ManagerImpl::ringtone () {
-	std::string ringchoice;
-	AudioLayer *audiolayer;
-	AudioCodec *codecForTone;
-	int layer, samplerate;
-	bool loadFile;
+void ManagerImpl::ringtone (const AccountID& accountID)
+{
+    std::string ringchoice;
+    AudioLayer *audiolayer;
+    AudioCodec *codecForTone;
+    int layer, samplerate;
+    bool loadFile;
+
+    _debug ("Manager: Ringtone");
+
+    Account *account = getAccount (accountID);
+
+    if (!account) {
+        _warn ("Manager: Warning: invalid account in ringtone");
+        return;
+    }
+
+    if (account->getRingtoneEnabled()) {
 
-	_debug("Manager: Ringtone");
+        _debug ("Manager: Tone is enabled");
+        //TODO Comment this because it makes the daemon crashes since the main thread
+        //synchronizes the ringtone thread.
 
-	if (isRingtoneEnabled()) {
+        ringchoice = account->getRingtonePath();
+        //if there is no / inside the path
+
+        if (ringchoice.find (DIR_SEPARATOR_CH) == std::string::npos) {
+            // check inside global share directory
+            ringchoice = std::string (PROGSHAREDIR) + DIR_SEPARATOR_STR
+                         + RINGDIR + DIR_SEPARATOR_STR + ringchoice;
+        }
 
-		_debug ("Manager: Tone is enabled");
-		//TODO Comment this because it makes the daemon crashes since the main thread
-		//synchronizes the ringtone thread.
+        audiolayer = getAudioDriver();
 
-		ringchoice = getConfigString(AUDIO, RING_CHOICE);
-		//if there is no / inside the path
+        if (!audiolayer) {
+            _error ("Manager: Error: no audio layer in ringtone");
+            return;
+        }
 
-		if (ringchoice.find(DIR_SEPARATOR_CH) == std::string::npos) {
-			// check inside global share directory
-			ringchoice = std::string(PROGSHAREDIR) + DIR_SEPARATOR_STR
-					+ RINGDIR + DIR_SEPARATOR_STR + ringchoice;
-		}
+        layer = audiolayer->getLayerType();
 
-		audiolayer = getAudioDriver();
+        samplerate = audiolayer->getSampleRate();
+        codecForTone = _codecDescriptorMap.getFirstCodecAvailable();
 
-		if (!audiolayer) {
-			_error("Manager: Error: no audio layer in ringtone");
-			return;
-		}
+        _toneMutex.enterMutex();
 
-		layer = audiolayer->getLayerType();
+        if (_audiofile) {
+            delete _audiofile;
+            _audiofile = NULL;
+        }
 
-		samplerate = audiolayer->getSampleRate();
+        std::string wave (".wav");
+        size_t found = ringchoice.find (wave);
 
-		codecForTone = _codecDescriptorMap.getFirstCodecAvailable();
+        if (found != std::string::npos)
+            _audiofile = static_cast<AudioFile *> (new WaveFile());
+        else
+            _audiofile = static_cast<AudioFile *> (new RawFile());
 
-		_toneMutex.enterMutex();
+        loadFile = false;
 
-		loadFile = _audiofile.loadFile(ringchoice, codecForTone, samplerate);
+        if (_audiofile)
+            loadFile = _audiofile->loadFile (ringchoice, codecForTone, samplerate);
 
-		_toneMutex.leaveMutex();
+        _toneMutex.leaveMutex();
 
-		if (loadFile) {
+        if (loadFile) {
 
-			_toneMutex.enterMutex();
-			_audiofile.start();
-			_toneMutex.leaveMutex();
+            _toneMutex.enterMutex();
+            _audiofile->start();
+            _toneMutex.leaveMutex();
 
-			// start audio if not started AND flush all buffers (main and urgent)
-			audiolayer->startStream();
+            // start audio if not started AND flush all buffers (main and urgent)
+            audiolayer->startStream();
 
-		} else {
-			ringback();
-		}
+        } else {
+            ringback();
+        }
 
-	} else {
-		ringback();
-	}
+    } else {
+        ringback();
+    }
 }
 
 AudioLoop*
-ManagerImpl::getTelephoneTone () {
-	// _debug("ManagerImpl::getTelephoneTone()");
-	if (_telephoneTone != 0) {
-		ost::MutexLock m(_toneMutex);
-		return _telephoneTone->getCurrentTone();
-	} else {
-		return 0;
-	}
+ManagerImpl::getTelephoneTone ()
+{
+    // _debug("ManagerImpl::getTelephoneTone()");
+    if (_telephoneTone != 0) {
+        ost::MutexLock m (_toneMutex);
+        return _telephoneTone->getCurrentTone();
+    } else {
+        return 0;
+    }
 }
 
 AudioLoop*
-ManagerImpl::getTelephoneFile () {
-	// _debug("ManagerImpl::getTelephoneFile()");
-	ost::MutexLock m(_toneMutex);
+ManagerImpl::getTelephoneFile ()
+{
+    // _debug("ManagerImpl::getTelephoneFile()");
+    ost::MutexLock m (_toneMutex);
 
-	if (_audiofile.isStarted()) {
-		return &_audiofile;
-	} else {
-		return 0;
-	}
-}
+    if (!_audiofile)
+        return NULL;
 
-void ManagerImpl::notificationIncomingCall (void) {
-	AudioLayer *audiolayer;
-	std::ostringstream frequency;
-	unsigned int samplerate, nbSampling;
+    if (_audiofile->isStarted()) {
+        return _audiofile;
+    } else {
+        return NULL;
+    }
+}
 
-	audiolayer = getAudioDriver();
+void ManagerImpl::notificationIncomingCall (void)
+{
+    AudioLayer *audiolayer;
+    std::ostringstream frequency;
+    unsigned int samplerate, nbSampling;
 
-	_debug ("ManagerImpl::notificationIncomingCall");
+    audiolayer = getAudioDriver();
 
-	if (audiolayer != 0) {
-		samplerate = audiolayer->getSampleRate();
-		frequency << "440/" << FRAME_PER_BUFFER;
-		Tone tone(frequency.str(), samplerate);
-		nbSampling = tone.getSize();
-		SFLDataFormat buf[nbSampling];
-		tone.getNext(buf, tone.getSize());
-		/* Put the data in the urgent ring buffer */
-		audiolayer->flushUrgent();
-		audiolayer->putUrgent(buf, sizeof(SFLDataFormat) * nbSampling);
-	}
+    _debug ("ManagerImpl::notificationIncomingCall");
+
+    if (audiolayer != 0) {
+        samplerate = audiolayer->getSampleRate();
+        frequency << "440/" << 160;
+        Tone tone (frequency.str(), samplerate);
+        nbSampling = tone.getSize();
+        SFLDataFormat buf[nbSampling];
+        tone.getNext (buf, tone.getSize());
+        /* Put the data in the urgent ring buffer */
+        audiolayer->flushUrgent();
+        audiolayer->putUrgent (buf, sizeof (SFLDataFormat) * nbSampling);
+    }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1980,942 +2292,883 @@ void ManagerImpl::notificationIncomingCall (void) {
  * @return 1: ok
  -1: error directory
  */
-int ManagerImpl::createSettingsPath (void) {
+int ManagerImpl::createSettingsPath (void)
+{
 
-	std::string xdg_config, xdg_env;
+    std::string xdg_config, xdg_env;
 
-	_debug ("XDG_CONFIG_HOME: %s", XDG_CONFIG_HOME);
+    _debug ("XDG_CONFIG_HOME: %s", XDG_CONFIG_HOME);
 
-	xdg_config = std::string(HOMEDIR) + DIR_SEPARATOR_STR + ".config"
-			+ DIR_SEPARATOR_STR + PROGDIR;
+    xdg_config = std::string (HOMEDIR) + DIR_SEPARATOR_STR + ".config"
+                 + DIR_SEPARATOR_STR + PROGDIR;
 
-	if (XDG_CONFIG_HOME != NULL) {
-		xdg_env = std::string(XDG_CONFIG_HOME);
-		(xdg_env.length() > 0) ? _path = xdg_env : _path = xdg_config;
-	} else
-		_path = xdg_config;
+    if (XDG_CONFIG_HOME != NULL) {
+        xdg_env = std::string (XDG_CONFIG_HOME);
+        (xdg_env.length() > 0) ? _path = xdg_env : _path = xdg_config;
+    } else
+        _path = xdg_config;
 
-	if (mkdir(_path.data(), 0700) != 0) {
-		// If directory	creation failed
-		if (errno != EEXIST) {
-			_debug ("Cannot create directory: %s", strerror (errno));
-			return -1;
-		}
-	}
+    if (mkdir (_path.data(), 0700) != 0) {
+        // If directory	creation failed
+        if (errno != EEXIST) {
+            _debug ("Cannot create directory: %s", strerror (errno));
+            return -1;
+        }
+    }
 
-	// Load user's configuration
-	_path = _path + DIR_SEPARATOR_STR + PROGNAME + "rc";
+    // Load user's configuration
+    _path = _path + DIR_SEPARATOR_STR + PROGNAME + ".yml";
 
-	return 1;
+    return 1;
 }
 
 /**
  * Initialization: Main Thread
  */
-void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate) {
-	_debug ("Manager: InitConfigFile");
-
-	// Default values, that will be overwritten by the call to
-	// 'populateFromFile' below.
-
-	// Peer to peer settings
-	_config.addDefaultValue(std::pair<std::string, std::string>(SRTP_ENABLE,
-			FALSE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			SRTP_RTP_FALLBACK, FALSE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			SRTP_KEY_EXCHANGE, "1"), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ZRTP_HELLO_HASH, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ZRTP_DISPLAY_SAS, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ZRTP_DISPLAY_SAS_ONCE, FALSE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ZRTP_NOT_SUPP_WARNING, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_LISTENER_PORT, DEFAULT_SIP_TLS_PORT), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(TLS_ENABLE,
-			FALSE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_CA_LIST_FILE, EMPTY_FIELD), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_CERTIFICATE_FILE, EMPTY_FIELD), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_PRIVATE_KEY_FILE, EMPTY_FIELD), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(TLS_PASSWORD,
-			EMPTY_FIELD), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(TLS_METHOD,
-			"TLSv1"), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(TLS_CIPHERS,
-			EMPTY_FIELD), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_SERVER_NAME, EMPTY_FIELD), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_VERIFY_SERVER, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_VERIFY_CLIENT, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_REQUIRE_CLIENT_CERTIFICATE, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_NEGOTIATION_TIMEOUT_SEC, "2"), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			TLS_NEGOTIATION_TIMEOUT_MSEC, "0"), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			LOCAL_INTERFACE, "default"), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			PUBLISHED_SAMEAS_LOCAL, TRUE_STR), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(LOCAL_PORT,
-			DEFAULT_SIP_PORT), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(PUBLISHED_PORT,
-			DEFAULT_SIP_PORT), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			PUBLISHED_ADDRESS, DEFAULT_ADDRESS), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(STUN_ENABLE,
-			DFT_STUN_ENABLE), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(STUN_SERVER,
-			DFT_STUN_SERVER), IP2IP_PROFILE);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_ALIAS, EMPTY_FIELD), IP2IP_PROFILE);
-
-	// Init display name to the username under which
-	// this sflphone instance is running.
-	std::string diplayName("");
-	uid_t uid = getuid();
-
-	struct passwd * user_info = NULL;
-	user_info = getpwuid(uid);
-
-	if (user_info != NULL) {
-		diplayName = user_info->pw_name;
-	}
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(DISPLAY_NAME,
-			diplayName), IP2IP_PROFILE);
-
-	// Signalisation settings
-	_config.addDefaultValue(std::pair<std::string, std::string>(SYMMETRIC,
-			TRUE_STR), SIGNALISATION);
-	_config.addDefaultValue(std::pair<std::string, std::string>(PLAY_DTMF,
-			TRUE_STR), SIGNALISATION);
-	_config.addDefaultValue(std::pair<std::string, std::string>(PLAY_TONES,
-			TRUE_STR), SIGNALISATION);
-	_config.addDefaultValue(std::pair<std::string, std::string>(PULSE_LENGTH,
-			DFT_PULSE_LENGTH_STR), SIGNALISATION);
-	_config.addDefaultValue(std::pair<std::string, std::string>(SEND_DTMF_AS,
-			SIP_INFO_STR), SIGNALISATION);
-	_config.addDefaultValue(std::pair<std::string, std::string>(ZRTP_ZIDFILE,
-			ZRTP_ZID_FILENAME), SIGNALISATION);
-
-	// Audio settings
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ALSA_CARD_ID_IN, ALSA_DFT_CARD), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ALSA_CARD_ID_OUT, ALSA_DFT_CARD), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			AUDIO_SAMPLE_RATE, DFT_SAMPLE_RATE), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ALSA_FRAME_SIZE, DFT_FRAME_SIZE), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(ALSA_PLUGIN,
-			PCM_DEFAULT), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(RING_CHOICE,
-			DFT_RINGTONE), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(VOLUME_SPKR,
-			DFT_VOL_SPKR_STR), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(VOLUME_MICRO,
-			DFT_VOL_MICRO_STR), AUDIO);
-	_config.addDefaultValue(std::pair<std::string, std::string>(RECORD_PATH,
-			DFT_RECORD_PATH), AUDIO);
-
-	// General settings
-	_config.addDefaultValue(std::pair<std::string, std::string>(ZONE_TONE,
-			DFT_ZONE), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_RINGTONE, TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_DIALPAD,
-			TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_SEARCHBAR, TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_START,
-			FALSE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_POPUP,
-			TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_NOTIFY,
-			TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_MAIL_NOTIFY, FALSE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_VOLUME,
-			TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_HISTORY_LIMIT, DFT_HISTORY_LIMIT), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_HISTORY_ENABLED, TRUE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_AUDIO,
-			DFT_AUDIO_MANAGER), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_SIP_PORT, DFT_SIP_PORT), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNTS_ORDER, EMPTY_FIELD), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(CONFIG_MD5HASH,
-			FALSE_STR), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(WINDOW_WIDTH,
-			DFT_WINDOW_WIDTH), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(WINDOW_HEIGHT,
-			DFT_WINDOW_HEIGHT), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			WINDOW_POSITION_X, "0"), PREFERENCES);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			WINDOW_POSITION_Y, "0"), PREFERENCES);
-
-	// Addressbook settings
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ADDRESSBOOK_ENABLE, TRUE_STR), ADDRESSBOOK);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ADDRESSBOOK_MAX_RESULTS, "25"), ADDRESSBOOK);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, FALSE_STR), ADDRESSBOOK);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, TRUE_STR), ADDRESSBOOK);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ADDRESSBOOK_DISPLAY_PHONE_HOME, FALSE_STR), ADDRESSBOOK);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			ADDRESSBOOK_DISPLAY_PHONE_MOBILE, FALSE_STR), ADDRESSBOOK);
-
-	// Hooks settings
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			URLHOOK_SIP_FIELD, HOOK_DEFAULT_SIP_FIELD), HOOKS);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			URLHOOK_COMMAND, HOOK_DEFAULT_URL_COMMAND), HOOKS);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			URLHOOK_SIP_ENABLED, FALSE_STR), HOOKS);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			URLHOOK_IAX2_ENABLED, FALSE_STR), HOOKS);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			PHONE_NUMBER_HOOK_ENABLED, FALSE_STR), HOOKS);
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			PHONE_NUMBER_HOOK_ADD_PREFIX, EMPTY_FIELD), HOOKS);
-
-	std::string path;
-	// Loads config from ~/.sflphone/sflphonedrc or so..
-
-	if (createSettingsPath() == 1 && load_user_value) {
-		(alternate == "") ? path = _path : path = alternate;
-		std::cout << path << std::endl;
-		_exist = _config.populateFromFile(path);
-	}
-
-	// Globally shared default values (not to be populated from file)
-	_config.addDefaultValue(std::pair<std::string, std::string>(HOSTNAME,
-			EMPTY_FIELD));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			AUTHENTICATION_USERNAME, EMPTY_FIELD));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(USERNAME,
-			EMPTY_FIELD));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(PASSWORD,
-			EMPTY_FIELD));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(REALM,
-			DEFAULT_REALM));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(USERAGENT,
-			DFT_USERAGENT));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_REGISTRATION_EXPIRE, DFT_EXPIRE_VALUE));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_RESOLVE_ONCE, FALSE_STR));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_ALIAS, EMPTY_FIELD));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_MAILBOX, EMPTY_FIELD));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_ENABLE, TRUE_STR));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_CREDENTIAL_NUMBER, "0"));
-
-	_config.addDefaultValue(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_TYPE, DEFAULT_ACCOUNT_TYPE));
-
-	_setupLoaded = (_exist == 2) ? false : true;
+void ManagerImpl::initConfigFile (bool load_user_value, std::string alternate)
+{
+
+    _debug ("Manager: Init config file");
+
+    // Init display name to the username under which
+    // this sflphone instance is running.
+    uid_t uid = getuid();
+
+    struct passwd * user_info = NULL;
+    user_info = getpwuid (uid);
+
+    std::string path;
+    // Loads config from ~/.sflphone/sflphoned.yml or so..
+
+    if (createSettingsPath() == 1 && load_user_value) {
+
+        (alternate == "") ? path = _path : path = alternate;
+        std::cout << path << std::endl;
+
+        _path = path;
+    }
+
+    _debug ("Manager: configuration file path: %s", path.c_str());
+
+
+    bool fileExist = true;
+    bool out = false;
+
+    if (path.empty()) {
+        _error ("Manager: Error: XDG config file path is empty!");
+        fileExist = false;
+    }
+
+    std::fstream file;
+
+    file.open (path.data(), std::fstream::in);
+
+    if (!file.is_open()) {
+
+        _debug ("Manager: File %s not opened, create new one", path.c_str());
+        file.open (path.data(), std::fstream::out);
+        out = true;
+
+        if (!file.is_open()) {
+            _error ("Manager: Error: could not create empty configurationfile!");
+            fileExist = false;
+        }
+
+        file.close();
+
+        fileExist = false;
+    }
+
+    // get length of file:
+    file.seekg (0, std::ios::end);
+    int length = file.tellg();
+
+    file.seekg (0, std::ios::beg);
+
+    if (length <= 0) {
+        _debug ("Manager: Configuration file length is empty", length);
+        file.close();
+        fileExist = false; // should load config
+    }
+
+    if (fileExist) {
+        try {
+
+            // parser = new Conf::YamlParser("sequenceParser.yml");
+            parser = new Conf::YamlParser (_path.c_str());
+
+            parser->serializeEvents();
+
+            parser->composeEvents();
+
+            parser->constructNativeData();
+
+            _setupLoaded = true;
+
+            _debug ("Manager: Configuration file parsed successfully");
+        } catch (Conf::YamlParserException &e) {
+            _error ("Manager: %s", e.what());
+        }
+    }
 }
 
 /**
  * Initialization: Main Thread
  */
-void ManagerImpl::initAudioCodec (void) {
-	_info("Manager: Init audio codecs");
+void ManagerImpl::initAudioCodec (void)
+{
+    _info ("Manager: Init audio codecs");
 
-	/* Init list of all supported codecs by the application.
-	 * This is a global list. Every account will inherit it.
-	 */
-	_codecDescriptorMap.init();
+    /* Init list of all supported codecs by the application.
+     * This is a global list. Every account will inherit it.
+     */
+    _codecDescriptorMap.init();
 }
 
 /*
  * TODO Retrieve the active codec list per account
  */
-std::vector<std::string> ManagerImpl::retrieveActiveCodecs () {
+std::vector<std::string> ManagerImpl::retrieveActiveCodecs ()
+{
 
-	// This property is now set per account basis
-	std::string s = getConfigString(AUDIO, "ActiveCodecs");
-	_info("Manager: Retrieve active codecs: %s", s.c_str ());
-	return unserialize(s);
+    // This property is now set per account basis so we should remove it...
+    std::string s = "";
+    _info ("Manager: Retrieve active codecs: %s", s.c_str ());
+    return unserialize (s);
 }
 
-std::vector<std::string> ManagerImpl::unserialize (std::string s) {
+std::vector<std::string> ManagerImpl::unserialize (std::string s)
+{
 
-	std::vector<std::string> list;
-	std::string temp;
+    std::vector<std::string> list;
+    std::string temp;
 
-	while (s.find("/", 0) != std::string::npos) {
-		size_t pos = s.find("/", 0);
-		temp = s.substr(0, pos);
-		s.erase(0, pos + 1);
-		list.push_back(temp);
-	}
+    while (s.find ("/", 0) != std::string::npos) {
+        size_t pos = s.find ("/", 0);
+        temp = s.substr (0, pos);
+        s.erase (0, pos + 1);
+        list.push_back (temp);
+    }
 
-	return list;
+    return list;
 }
 
-std::string ManagerImpl::serialize (std::vector<std::string> v) {
+std::string ManagerImpl::serialize (std::vector<std::string> v)
+{
 
-	unsigned int i;
-	std::string res;
+    unsigned int i;
+    std::string res;
 
-	for (i = 0; i < v.size(); i++) {
-		res += v[i] + "/";
-	}
+    for (i = 0; i < v.size(); i++) {
+        res += v[i] + "/";
+    }
 
-	return res;
+    return res;
 }
 
-std::string ManagerImpl::getCurrentCodecName (const CallID& id) {
+std::string ManagerImpl::getCurrentCodecName (const CallID& id)
+{
 
-	AccountID accountid = getAccountFromCall(id);
-	VoIPLink* link = getAccountLink(accountid);
-	Call* call = link->getCall(id);
+    AccountID accountid = getAccountFromCall (id);
+    VoIPLink* link = getAccountLink (accountid);
+    Call* call = link->getCall (id);
 
-	if (!call)
-		return "";
+    if (!call)
+        return "";
 
-	if (call->getState() != Call::Active)
-		return "";
-	else
-		return link->getCurrentCodecName();
+    if (call->getState() != Call::Active)
+        return "";
+    else
+        return link->getCurrentCodecName();
 }
 
 /**
  * Set input audio plugin
  */
-void ManagerImpl::setInputAudioPlugin (const std::string& audioPlugin) {
-	int layer = _audiodriver -> getLayerType();
+void ManagerImpl::setAudioPlugin (const std::string& audioPlugin)
+{
+    int layer = _audiodriver -> getLayerType();
+
+    audioPreference.setPlugin (audioPlugin);
 
-	if (CHECK_INTERFACE (layer , ALSA)) {
-		_debug ("Set input audio plugin");
-		_audiodriver -> setErrorMessage(-1);
-		_audiodriver -> openDevice(_audiodriver -> getIndexIn(),
-				_audiodriver -> getIndexOut(), _audiodriver -> getSampleRate(),
-				_audiodriver -> getFrameSize(), SFL_PCM_CAPTURE, audioPlugin);
+    if (CHECK_INTERFACE (layer , ALSA)) {
+        _debug ("Set input audio plugin");
+        _audiodriver -> setErrorMessage (-1);
+        _audiodriver -> openDevice (_audiodriver->getIndexIn(), _audiodriver->getIndexOut(),
+                                    _audiodriver->getIndexRing(), _audiodriver -> getSampleRate(),
+                                    _audiodriver -> getFrameSize(), SFL_PCM_BOTH, audioPlugin);
 
-		if (_audiodriver -> getErrorMessage() != -1)
-			notifyErrClient(_audiodriver -> getErrorMessage());
-	} else {
-	}
+        if (_audiodriver -> getErrorMessage() != -1)
+            notifyErrClient (_audiodriver -> getErrorMessage());
+    }
 
 }
 
 /**
- * Set output audio plugin
+ * Set audio output device
  */
-void ManagerImpl::setOutputAudioPlugin (const std::string& audioPlugin) {
+void ManagerImpl::setAudioDevice (const int index, int streamType)
+{
+
+    AlsaLayer *alsalayer = NULL;
+    std::string alsaplugin;
+    _debug ("Manager: Set audio device: %i", index);
 
-	int res;
+    _audiodriver -> setErrorMessage (-1);
+
+    if (! (alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver()))) {
+        _warn ("Manager: Error: No audio driver");
+        return;
+    }
 
-	_debug ("Manager: Set output audio plugin");
-	_audiodriver -> setErrorMessage(-1);
-	res = _audiodriver -> openDevice(_audiodriver -> getIndexIn(),
-			_audiodriver -> getIndexOut(), _audiodriver -> getSampleRate(),
-			_audiodriver -> getFrameSize(), SFL_PCM_BOTH, audioPlugin);
+    alsaplugin = alsalayer->getAudioPlugin();
+
+    _debug ("Manager: Set ALSA plugin: %s", alsaplugin.c_str());
+
+
+    switch (streamType) {
+        case SFL_PCM_PLAYBACK:
+            _debug ("Manager: Set output device");
+            _audiodriver->openDevice (_audiodriver->getIndexIn(), index, _audiodriver->getIndexRing(),
+                                      _audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
+                                      SFL_PCM_PLAYBACK, alsaplugin);
+            audioPreference.setCardout (index);
+            break;
+        case SFL_PCM_CAPTURE:
+            _debug ("Manager: Set input device");
+            _audiodriver->openDevice (index, _audiodriver->getIndexOut(), _audiodriver->getIndexRing(),
+                                      _audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
+                                      SFL_PCM_CAPTURE, alsaplugin);
+            audioPreference.setCardin (index);
+            break;
+        case SFL_PCM_RINGTONE:
+            _debug ("Manager: Set ringtone device");
+            _audiodriver->openDevice (_audiodriver->getIndexOut(), _audiodriver->getIndexOut(), index,
+                                      _audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
+                                      SFL_PCM_RINGTONE, alsaplugin);
+            audioPreference.setCardring (index);
+            break;
+        default:
+            _warn ("Unknown stream type");
+    }
 
-	if (_audiodriver -> getErrorMessage() != -1)
-		notifyErrClient(_audiodriver -> getErrorMessage());
+    if (_audiodriver -> getErrorMessage() != -1)
+        notifyErrClient (_audiodriver -> getErrorMessage());
 
-	// set config
-	if (res)
-		setConfig(AUDIO, ALSA_PLUGIN, audioPlugin);
 }
 
 /**
  * Get list of supported audio output device
  */
-std::vector<std::string> ManagerImpl::getAudioOutputDeviceList (void) {
-	_debug ("Manager: Get audio output device list");
-	AlsaLayer *layer;
-	std::vector<std::string> devices;
+std::vector<std::string> ManagerImpl::getAudioOutputDeviceList (void)
+{
+    _debug ("Manager: Get audio output device list");
+    AlsaLayer *layer;
+    std::vector<std::string> devices;
 
-	layer = dynamic_cast<AlsaLayer*> (getAudioDriver());
+    layer = dynamic_cast<AlsaLayer*> (getAudioDriver());
 
-	if (layer)
-		devices = layer -> getSoundCardsInfo(SFL_PCM_PLAYBACK);
+    if (layer)
+        devices = layer -> getSoundCardsInfo (SFL_PCM_PLAYBACK);
 
-	return devices;
+    return devices;
 }
 
+
 /**
- * Set audio output device
+ * Get list of supported audio input device
  */
-void ManagerImpl::setAudioOutputDevice (const int index) {
-	AlsaLayer *alsalayer;
-	std::string alsaplugin;
-	_debug ("Set audio output device: %i", index);
-
-	_audiodriver -> setErrorMessage(-1);
+std::vector<std::string> ManagerImpl::getAudioInputDeviceList (void)
+{
+    AlsaLayer *audiolayer;
+    std::vector<std::string> devices;
 
-	alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
-	alsaplugin = alsalayer->getAudioPlugin();
+    audiolayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
 
-	_debug ("  set output plugin: %s", alsaplugin.c_str());
+    if (audiolayer)
+        devices = audiolayer->getSoundCardsInfo (SFL_PCM_CAPTURE);
 
-	_audiodriver->openDevice(_audiodriver->getIndexIn(), index,
-			_audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
-			SFL_PCM_PLAYBACK, alsaplugin);
-
-	if (_audiodriver -> getErrorMessage() != -1)
-		notifyErrClient(_audiodriver -> getErrorMessage());
-
-	// set config
-	setConfig(AUDIO, ALSA_CARD_ID_OUT, index);
+    return devices;
 }
 
 /**
- * Get list of supported audio input device
+ * Get string array representing integer indexes of output and input device
  */
-std::vector<std::string> ManagerImpl::getAudioInputDeviceList (void) {
-	AlsaLayer *audiolayer;
-	std::vector<std::string> devices;
+std::vector<std::string> ManagerImpl::getCurrentAudioDevicesIndex ()
+{
+    _debug ("Get current audio devices index");
+    std::vector<std::string> v;
+    std::stringstream ssi, sso, ssr;
+    sso << _audiodriver->getIndexOut();
+    v.push_back (sso.str());
+    ssi << _audiodriver->getIndexIn();
+    v.push_back (ssi.str());
+    ssr << _audiodriver->getIndexRing();
+    v.push_back (ssr.str());
+    return v;
+}
+
+int ManagerImpl::isIax2Enabled (void)
+{
+#ifdef USE_IAX
+    return true;
+#else
+    return false;
+#endif
+}
 
-	audiolayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
+int ManagerImpl::isRingtoneEnabled (const AccountID& id)
+{
+    Account *account = getAccount (id);
 
-	if (audiolayer)
-		devices = audiolayer->getSoundCardsInfo(SFL_PCM_CAPTURE);
+    if (!account) {
+        _warn ("Manager: Warning: invalid account in ringtone enabled");
+        return 0;
+    }
 
-	return devices;
+    return account->getRingtoneEnabled() ? 1 : 0;
 }
 
-/**
- * Set audio input device
- */
-void ManagerImpl::setAudioInputDevice (const int index) {
-	AlsaLayer *alsalayer;
-	std::string alsaplugin;
+void ManagerImpl::ringtoneEnabled (const AccountID& id)
+{
 
-	_debug ("Set audio input device %i", index);
+    Account *account = getAccount (id);
 
-	_audiodriver -> setErrorMessage(-1);
+    if (!account) {
+        _warn ("Manager: Warning: invalid account in ringtone enabled");
+        return;
+    }
 
-	alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
-	alsaplugin = alsalayer->getAudioPlugin();
+    account->getRingtoneEnabled() ? account->setRingtoneEnabled (false) : account->setRingtoneEnabled (true);
 
-	_debug ("  set input plugin: %s", alsaplugin.c_str());
+}
 
-	_audiodriver->openDevice(index, _audiodriver->getIndexOut(),
-			_audiodriver->getSampleRate(), _audiodriver->getFrameSize(),
-			SFL_PCM_CAPTURE, alsaplugin);
+std::string ManagerImpl::getRingtoneChoice (const AccountID& id)
+{
 
-	if (_audiodriver -> getErrorMessage() != -1)
-		notifyErrClient(_audiodriver -> getErrorMessage());
+    // retreive specified account id
+    Account *account = getAccount (id);
 
-	// set config
-	setConfig(AUDIO, ALSA_CARD_ID_IN, index);
-}
+    if (!account) {
+        _warn ("Manager: Warning: Not a valid account ID for ringone choice");
+        return std::string ("");
+    }
 
-/**
- * Get string array representing integer indexes of output and input device
- */
-std::vector<std::string> ManagerImpl::getCurrentAudioDevicesIndex () {
-	_debug ("Get current audio devices index");
-	std::vector<std::string> v;
-	std::stringstream ssi, sso;
-	sso << _audiodriver->getIndexOut();
-	v.push_back(sso.str());
-	ssi << _audiodriver->getIndexIn();
-	v.push_back(ssi.str());
-	return v;
-}
-
-int ManagerImpl::isIax2Enabled (void) {
-#ifdef USE_IAX
-	return true;
-#else
-	return false;
-#endif
-}
+    // we need the absolute path
+    std::string tone_name = account->getRingtonePath();
+    std::string tone_path;
 
-int ManagerImpl::isRingtoneEnabled (void) {
-	return (getConfigString(PREFERENCES, CONFIG_RINGTONE) == "true") ? 1 : 0;
-}
+    if (tone_name.find (DIR_SEPARATOR_CH) == std::string::npos) {
+        // check in ringtone directory ($(PREFIX)/share/sflphone/ringtones)
+        tone_path = std::string (PROGSHAREDIR) + DIR_SEPARATOR_STR + RINGDIR
+                    + DIR_SEPARATOR_STR + tone_name;
+    } else {
+        // the absolute has been saved; do nothing
+        tone_path = tone_name;
+    }
 
-void ManagerImpl::ringtoneEnabled (void) {
-	(getConfigString(PREFERENCES, CONFIG_RINGTONE) == RINGTONE_ENABLED) ? setConfig(
-			PREFERENCES, CONFIG_RINGTONE, FALSE_STR)
-			: setConfig(PREFERENCES, CONFIG_RINGTONE, TRUE_STR);
-}
+    _debug ("Manager: get ringtone path %s", tone_path.c_str());
 
-std::string ManagerImpl::getRingtoneChoice (void) {
-	// we need the absolute path
-	std::string tone_name = getConfigString(AUDIO, RING_CHOICE);
-	std::string tone_path;
+    return tone_path;
+}
 
-	if (tone_name.find(DIR_SEPARATOR_CH) == std::string::npos) {
-		// check in ringtone directory ($(PREFIX)/share/sflphone/ringtones)
-		tone_path = std::string(PROGSHAREDIR) + DIR_SEPARATOR_STR + RINGDIR
-				+ DIR_SEPARATOR_STR + tone_name;
-	} else {
-		// the absolute has been saved; do nothing
-		tone_path = tone_name;
-	}
+void ManagerImpl::setRingtoneChoice (const std::string& tone, const AccountID& id)
+{
 
-	_debug ("%s", tone_path.c_str());
+    _debug ("Manager: Set ringtone path %s to account", tone.c_str());
 
-	return tone_path;
-}
+    // retreive specified account id
+    Account *account = getAccount (id);
 
-void ManagerImpl::setRingtoneChoice (const std::string& tone) {
-	// we save the absolute path
-	setConfig(AUDIO, RING_CHOICE, tone);
-}
+    if (!account) {
+        _warn ("Manager: Warning: Not a valid account ID for ringtone choice");
+        return;
+    }
 
-std::string ManagerImpl::getRecordPath (void) {
-	return getConfigString(AUDIO, RECORD_PATH);
+    // we save the absolute path
+    account->setRingtonePath (tone);
 }
 
-void ManagerImpl::setRecordPath (const std::string& recPath) {
-	_debug ("ManagerImpl::setRecordPath(%s)! ", recPath.c_str());
-	setConfig(AUDIO, RECORD_PATH, recPath);
+std::string ManagerImpl::getRecordPath (void)
+{
+    return audioPreference.getRecordpath();
 }
 
-bool ManagerImpl::getMd5CredentialHashing (void) {
-	return getConfigBool(PREFERENCES, CONFIG_MD5HASH);
+void ManagerImpl::setRecordPath (const std::string& recPath)
+{
+    _debug ("Manager: Set record path %s", recPath.c_str());
+    audioPreference.setRecordpath (recPath);
 }
 
-int ManagerImpl::getDialpad (void) {
-	if (getConfigString(PREFERENCES, CONFIG_DIALPAD) == TRUE_STR) {
-		return 1;
-	} else {
-		return 0;
-	}
+bool ManagerImpl::getMd5CredentialHashing (void)
+{
+    return preferences.getMd5Hash();
 }
 
-void ManagerImpl::setDialpad (bool display) {
-	std::string set;
 
-	display ? set = TRUE_STR : set = FALSE_STR;
-	// If the value we received is different from the one saved in the config file, save the new value
-	// Else do nothing
 
-	if ((display && (getConfigString(PREFERENCES, CONFIG_DIALPAD) != TRUE_STR))
-			|| (!display && (getConfigString(PREFERENCES, CONFIG_DIALPAD)
-					!= FALSE_STR)))
-		setConfig(PREFERENCES, CONFIG_DIALPAD, set);
-}
+void ManagerImpl::setRecordingCall (const CallID& id)
+{
 
-int ManagerImpl::getVolumeControls (void) {
-	if (getConfigString(PREFERENCES, CONFIG_VOLUME) == TRUE_STR) {
-		return 1;
-	} else {
-		return 0;
-	}
-}
+    Recordable* rec = NULL;
 
-void ManagerImpl::setVolumeControls (bool display) {
-	std::string set;
+    if (!isConference (id)) {
+        _debug ("Manager: Set recording for call %s", id.c_str());
+        AccountID accountid = getAccountFromCall (id);
+        rec = (Recordable *) getAccountLink (accountid)->getCall (id);
+    } else {
+        _debug ("Manager: Ser recording for conference %s", id.c_str());
+        ConferenceMap::iterator it = _conferencemap.find (id);
+        rec = (Recordable *) it->second;
+    }
 
-	display ? set = TRUE_STR : set = FALSE_STR;
-	// If the value we received is different from the one saved in the config file, save the new value
-	// Else do nothing
+    if (rec)
+        rec->setRecording();
 
-	if ((display && (getConfigString(PREFERENCES, CONFIG_VOLUME) != TRUE_STR))
-			|| (!display && (getConfigString(PREFERENCES, CONFIG_VOLUME)
-					!= FALSE_STR)))
-		setConfig(PREFERENCES, CONFIG_VOLUME, set);
 }
 
-void ManagerImpl::setRecordingCall (const CallID& id) {
-	/*
-	 _debug ("ManagerImpl::setRecording()! ");
-	 AccountID accountid = getAccountFromCall (id);
+bool ManagerImpl::isRecording (const CallID& id)
+{
 
-	 getAccountLink (accountid)->setRecording (id);
-	 */
-	AccountID accountid = getAccountFromCall(id);
-	Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id);
+    AccountID accountid = getAccountFromCall (id);
+    Recordable* rec = (Recordable*) getAccountLink (accountid)->getCall (id);
 
-	rec->setRecording();
-}
+    bool ret = false;
 
-bool ManagerImpl::isRecording (const CallID& id) {
-	/*
-	 _debug ("ManagerImpl::isRecording()! ");
-	 AccountID accountid = getAccountFromCall (id);
+    if (rec)
+        ret = rec->isRecording();
 
-	 return getAccountLink (accountid)->isRecording (id);
-	 */
+    return ret;
+}
 
-	AccountID accountid = getAccountFromCall(id);
-	Recordable* rec = (Recordable*) getAccountLink(accountid)->getCall(id);
 
-	return rec->isRecording();
+void ManagerImpl::setHistoryLimit (const int& days)
+{
+    preferences.setHistoryLimit (days);
 }
 
-void ManagerImpl::startHidden (void) {
-	(getConfigString(PREFERENCES, CONFIG_START) == START_HIDDEN) ? setConfig(
-			PREFERENCES, CONFIG_START, FALSE_STR) : setConfig(PREFERENCES,
-			CONFIG_START, TRUE_STR);
+int ManagerImpl::getHistoryLimit (void)
+{
+    return preferences.getHistoryLimit();
 }
 
-int ManagerImpl::isStartHidden (void) {
-	return (getConfigBool(PREFERENCES, CONFIG_START) == true) ? 1 : 0;
+int32_t ManagerImpl::getMailNotify (void)
+{
+    return preferences.getNotifyMails();
 }
 
-void ManagerImpl::switchPopupMode (void) {
-	(getConfigString(PREFERENCES, CONFIG_POPUP) == WINDOW_POPUP) ? setConfig(
-			PREFERENCES, CONFIG_POPUP, FALSE_STR) : setConfig(PREFERENCES,
-			CONFIG_POPUP, TRUE_STR);
+void ManagerImpl::setMailNotify (void)
+{
+    preferences.getNotifyMails() ? preferences.setNotifyMails (true) : preferences.setNotifyMails (false);
 }
 
-void ManagerImpl::setHistoryLimit (const int& days) {
-	setConfig(PREFERENCES, CONFIG_HISTORY_LIMIT, days);
-}
+void ManagerImpl::setAudioManager (const int32_t& api)
+{
 
-int ManagerImpl::getHistoryLimit (void) {
-	return getConfigInt(PREFERENCES, CONFIG_HISTORY_LIMIT);
-}
+    int type;
 
-std::string ManagerImpl::getHistoryEnabled (void) {
-	return getConfigString(PREFERENCES, CONFIG_HISTORY_ENABLED);
-}
+    _debug ("Manager: Setting audio manager ");
 
-void ManagerImpl::setHistoryEnabled (void) {
-	(getConfigString(PREFERENCES, CONFIG_HISTORY_ENABLED) == TRUE_STR) ? setConfig(
-			PREFERENCES, CONFIG_HISTORY_ENABLED, FALSE_STR)
-			: setConfig(PREFERENCES, CONFIG_HISTORY_ENABLED, TRUE_STR);
-}
+    if (!_audiodriver)
+        return;
 
-int ManagerImpl::getSearchbar (void) {
-	return getConfigInt(PREFERENCES, CONFIG_SEARCHBAR);
-}
+    type = _audiodriver->getLayerType();
 
-void ManagerImpl::setSearchbar (void) {
-	(getConfigInt(PREFERENCES, CONFIG_SEARCHBAR) == 1) ? setConfig(PREFERENCES,
-			CONFIG_SEARCHBAR, FALSE_STR) : setConfig(PREFERENCES,
-			CONFIG_SEARCHBAR, TRUE_STR);
-}
+    if (type == api) {
+        _debug ("Manager: Audio manager chosen already in use. No changes made. ");
+        return;
+    }
 
-int ManagerImpl::popupMode (void) {
-	return (getConfigBool(PREFERENCES, CONFIG_POPUP) == true) ? 1 : 0;
-}
+    preferences.setAudioApi (api);
 
-int32_t ManagerImpl::getNotify (void) {
-	return (getConfigBool(PREFERENCES, CONFIG_NOTIFY) == true) ? 1 : 0;
-}
+    switchAudioManager();
+    return;
 
-void ManagerImpl::setNotify (void) {
-	(getConfigString(PREFERENCES, CONFIG_NOTIFY) == NOTIFY_ALL) ? setConfig(
-			PREFERENCES, CONFIG_NOTIFY, FALSE_STR) : setConfig(PREFERENCES,
-			CONFIG_NOTIFY, TRUE_STR);
 }
 
-int32_t ManagerImpl::getMailNotify (void) {
-	return getConfigInt(PREFERENCES, CONFIG_MAIL_NOTIFY);
+int32_t ManagerImpl::getAudioManager (void)
+{
+    return preferences.getAudioApi();
 }
 
-void ManagerImpl::setAudioManager (const int32_t& api) {
 
-	int type;
-	std::string alsaPlugin;
-
-	_debug ("Setting audio manager ");
+void ManagerImpl::notifyErrClient (const int32_t& errCode)
+{
+    if (_dbus) {
+        _debug ("Manager: NOTIFY ERR NUMBER %i" , errCode);
+        _dbus -> getConfigurationManager() -> errorAlert (errCode);
+    }
+}
 
-	if (!_audiodriver)
-		return;
+int ManagerImpl::getAudioDeviceIndex (const std::string name)
+{
+    AlsaLayer *alsalayer;
 
-	type = _audiodriver->getLayerType();
+    _debug ("Manager: Get audio device index");
 
-	if (type == api) {
-		_debug ("Audio manager chosen already in use. No changes made. ");
-		return;
-	}
+    alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
 
-	setConfig(PREFERENCES, CONFIG_AUDIO, api);
+    if (alsalayer)
+        return alsalayer -> soundCardGetIndex (name);
+    else
+        return 0;
+}
 
-	switchAudioManager();
-	return;
+std::string ManagerImpl::getCurrentAudioOutputPlugin (void)
+{
+    AlsaLayer *alsalayer;
 
-}
+    _debug ("Manager: Get alsa plugin");
 
-int32_t ManagerImpl::getAudioManager (void) {
-	return getConfigInt(PREFERENCES, CONFIG_AUDIO);
-}
+    alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
 
-void ManagerImpl::setMailNotify (void) {
-	(getConfigString(PREFERENCES, CONFIG_MAIL_NOTIFY) == NOTIFY_ALL) ? setConfig(
-			PREFERENCES, CONFIG_MAIL_NOTIFY, FALSE_STR)
-			: setConfig(PREFERENCES, CONFIG_MAIL_NOTIFY, TRUE_STR);
+    // if (alsalayer)
+    //    return alsalayer -> getAudioPlugin();
+    // else
+    return audioPreference.getPlugin();
 }
 
-void ManagerImpl::notifyErrClient (const int32_t& errCode) {
-	if (_dbus) {
-		_debug ("NOTIFY ERR NUMBER %i" , errCode);
-		_dbus -> getConfigurationManager() -> errorAlert(errCode);
-	}
-}
 
-int ManagerImpl::getAudioDeviceIndex (const std::string name) {
-	AlsaLayer *alsalayer;
+std::string ManagerImpl::getNoiseSuppressState (void)
+{
 
-	_debug ("Get audio device index");
+    // noise suppress disabled by default
+    std::string state;
 
-	alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
+    state = audioPreference.getNoiseReduce() ? "enabled" : "disabled";
 
-	if (alsalayer)
-		return alsalayer -> soundCardGetIndex(name);
-	else
-		return 0;
+    return state;
 }
 
-std::string ManagerImpl::getCurrentAudioOutputPlugin (void) {
-	AlsaLayer *alsalayer;
+void ManagerImpl::setNoiseSuppressState (std::string state)
+{
+    _debug ("Manager: Set noise suppress state: %s", state.c_str());
 
-	_debug ("Get alsa plugin");
+    bool isEnabled = state == "enabled" ? true : false;
 
-	alsalayer = dynamic_cast<AlsaLayer *> (getAudioDriver());
+    audioPreference.setNoiseReduce (isEnabled);
 
-	if (alsalayer)
-		return alsalayer -> getAudioPlugin();
-	else
-		return getConfigString(AUDIO, ALSA_PLUGIN);
+    if (_audiodriver) {
+        _audiodriver->setNoiseSuppressState (isEnabled);
+    }
 }
 
-int ManagerImpl::app_is_running (std::string process) {
-	std::ostringstream cmd;
+int ManagerImpl::app_is_running (std::string process)
+{
+    std::ostringstream cmd;
 
-	cmd << "ps -C " << process;
-	return system(cmd.str().c_str());
+    cmd << "ps -C " << process;
+    return system (cmd.str().c_str());
 }
 
 /**
  * Initialization: Main Thread
  */
-bool ManagerImpl::initAudioDriver (void) {
-
-	int error;
-
-	_debugInit ("AudioLayer Creation");
-
-	if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA) {
-		_audiodriver = new AlsaLayer(this);
-		_audiodriver->setMainBuffer(&_mainBuffer);
-	} else if (getConfigInt(PREFERENCES, CONFIG_AUDIO) == PULSEAUDIO) {
-		if (app_is_running("pulseaudio") == 0) {
-			_audiodriver = new PulseLayer(this);
-			_audiodriver->setMainBuffer(&_mainBuffer);
-		} else {
-			_audiodriver = new AlsaLayer(this);
-			setConfig(PREFERENCES, CONFIG_AUDIO, ALSA);
-			_audiodriver->setMainBuffer(&_mainBuffer);
-		}
-	} else
-		_debug ("Error - Audio API unknown");
+bool ManagerImpl::initAudioDriver (void)
+{
+
+    int error;
+
+    _debugInit ("AudioLayer Creation");
+
+    if (preferences.getAudioApi() == ALSA) {
+        _audiodriver = new AlsaLayer (this);
+        _audiodriver->setMainBuffer (&_mainBuffer);
+    } else if (preferences.getAudioApi() == PULSEAUDIO) {
+        if (app_is_running ("pulseaudio") == 0) {
+            _audiodriver = new PulseLayer (this);
+            _audiodriver->setMainBuffer (&_mainBuffer);
+        } else {
+            _audiodriver = new AlsaLayer (this);
+            preferences.setAudioApi (ALSA);
+            _audiodriver->setMainBuffer (&_mainBuffer);
+        }
+    } else
+        _debug ("Error - Audio API unknown");
 
-	if (_audiodriver == 0) {
-		_debug ("Init audio driver error");
-		return false;
-	} else {
-		error = getAudioDriver()->getErrorMessage();
+    if (_audiodriver == 0) {
+        _debug ("Init audio driver error");
+        return false;
+    } else {
+        error = getAudioDriver()->getErrorMessage();
 
-		if (error == -1) {
-			_debug ("Init audio driver: %i", error);
-			return false;
-		}
-	}
+        if (error == -1) {
+            _debug ("Init audio driver: %i", error);
+            return false;
+        }
+    }
 
-	return true;
+    return true;
 
 }
 
 /**
  * Initialization: Main Thread and gui
  */
-void ManagerImpl::selectAudioDriver (void) {
-	int layer, numCardIn, numCardOut, sampleRate, frameSize;
-	std::string alsaPlugin;
-	AlsaLayer *alsalayer;
+void ManagerImpl::selectAudioDriver (void)
+{
+    int layer, numCardIn, numCardOut, numCardRing, sampleRate, frameSize;
+    std::string alsaPlugin;
+    AlsaLayer *alsalayer;
 
-	layer = _audiodriver->getLayerType();
-	_debug ("Audio layer type: %i" , layer);
+    layer = _audiodriver->getLayerType();
+    _debug ("Audio layer type: %i" , layer);
 
-	/* Retrieve the global devices info from the user config */
-	alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN);
-	numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN);
-	numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT);
-	sampleRate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE);
+    /* Retrieve the global devices info from the user config */
+    alsaPlugin = audioPreference.getPlugin();
+    numCardIn = audioPreference.getCardin();
+    numCardOut = audioPreference.getCardout();
+    numCardRing = audioPreference.getCardring();
 
-	if (sampleRate <= 0 || sampleRate > 48000) {
-		sampleRate = 44100;
-	}
+    sampleRate = _mainBuffer.getInternalSamplingRate();
+    frameSize = audioPreference.getFramesize();
 
-	frameSize = getConfigInt(AUDIO, ALSA_FRAME_SIZE);
+    /* Only for the ALSA layer, we check the sound card information */
 
-	/* Only for the ALSA layer, we check the sound card information */
+    if (layer == ALSA) {
+        alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
 
-	if (layer == ALSA) {
-		alsalayer = dynamic_cast<AlsaLayer*> (getAudioDriver());
+        if (!alsalayer -> soundCardIndexExist (numCardIn, SFL_PCM_CAPTURE)) {
+            _debug (" Card with index %i doesn't exist or cannot capture. Switch to 0.", numCardIn);
+            numCardIn = ALSA_DFT_CARD_ID;
+            audioPreference.setCardin (ALSA_DFT_CARD_ID);
+        }
+
+        if (!alsalayer -> soundCardIndexExist (numCardOut, SFL_PCM_PLAYBACK)) {
+            _debug (" Card with index %i doesn't exist or cannot playback. Switch to 0.", numCardOut);
+            numCardOut = ALSA_DFT_CARD_ID;
+            audioPreference.setCardout (ALSA_DFT_CARD_ID);
+        }
 
-		if (!alsalayer -> soundCardIndexExist(numCardIn, SFL_PCM_CAPTURE)) {
-			_debug (" Card with index %i doesn't exist or cannot capture. Switch to 0.", numCardIn);
-			numCardIn = ALSA_DFT_CARD_ID;
-			setConfig(AUDIO, ALSA_CARD_ID_IN, ALSA_DFT_CARD_ID);
-		}
+        if (!alsalayer->soundCardIndexExist (numCardRing, SFL_PCM_RINGTONE)) {
+            _debug (" Card with index %i doesn't exist or cannot ringtone. Switch to 0.", numCardRing);
+            numCardRing = ALSA_DFT_CARD_ID;
+            audioPreference.setCardring (ALSA_DFT_CARD_ID);
+        }
+    }
 
-		if (!alsalayer -> soundCardIndexExist(numCardOut, SFL_PCM_PLAYBACK)) {
-			_debug (" Card with index %i doesn't exist or cannot playback . Switch to 0.", numCardOut);
-			numCardOut = ALSA_DFT_CARD_ID;
-			setConfig(AUDIO, ALSA_CARD_ID_OUT, ALSA_DFT_CARD_ID);
-		}
-	}
+    _audiodriver->setErrorMessage (-1);
 
-	_audiodriver->setErrorMessage(-1);
+    /* Open the audio devices */
+    _audiodriver->openDevice (numCardIn, numCardOut, numCardRing, sampleRate, frameSize,
+                              SFL_PCM_BOTH, alsaPlugin);
 
-	/* Open the audio devices */
-	_audiodriver->openDevice(numCardIn, numCardOut, sampleRate, frameSize,
-			SFL_PCM_BOTH, alsaPlugin);
-	/* Notify the error if there is one */
+    /* Notify the error if there is one */
 
-	if (_audiodriver -> getErrorMessage() != -1)
-		notifyErrClient(_audiodriver -> getErrorMessage());
+    if (_audiodriver -> getErrorMessage() != -1)
+        notifyErrClient (_audiodriver -> getErrorMessage());
 
 }
 
-void ManagerImpl::switchAudioManager (void) {
-	int type, samplerate, framesize, numCardIn, numCardOut;
-	std::string alsaPlugin;
+void ManagerImpl::switchAudioManager (void)
+{
+    int type, samplerate, framesize, numCardIn, numCardOut, numCardRing;
+    std::string alsaPlugin;
 
-	_debug ("Switching audio manager ");
+    _debug ("Manager: Switching audio manager ");
 
-	if (!_audiodriver)
-		return;
+    if (!_audiodriver)
+        return;
 
-	type = _audiodriver->getLayerType();
+    type = _audiodriver->getLayerType();
 
-	samplerate = getConfigInt(AUDIO, AUDIO_SAMPLE_RATE);
+    samplerate = _mainBuffer.getInternalSamplingRate();
+    framesize = audioPreference.getFramesize();
 
-	framesize = getConfigInt(AUDIO, ALSA_FRAME_SIZE);
+    _debug ("Manager: samplerate: %i, framesize %i", samplerate, framesize);
 
-	_debug ("samplerate: %i, framesize %i\n", samplerate, framesize);
+    alsaPlugin = audioPreference.getPlugin();
 
-	alsaPlugin = getConfigString(AUDIO, ALSA_PLUGIN);
+    numCardIn = audioPreference.getCardin();
+    numCardOut = audioPreference.getCardout();
+    numCardRing = audioPreference.getCardring();
 
-	numCardIn = getConfigInt(AUDIO, ALSA_CARD_ID_IN);
+    _debug ("Manager: Deleting current layer... ");
 
-	numCardOut = getConfigInt(AUDIO, ALSA_CARD_ID_OUT);
+    // ost::MutexLock lock (*getAudioLayerMutex());
+    getAudioLayerMutex()->enter();
 
-	_debug ("Deleting current layer... ");
+    // _audiodriver->closeLayer();
+    delete _audiodriver;
 
-	// ost::MutexLock lock (*getAudioLayerMutex());
-	getAudioLayerMutex()->enter();
+    _audiodriver = NULL;
 
-	// _audiodriver->closeLayer();
-	delete _audiodriver;
+    switch (type) {
 
-	_audiodriver = NULL;
+        case ALSA:
+            _debug ("Manager: Creating Pulseaudio layer...");
+            _audiodriver = new PulseLayer (this);
+            _audiodriver->setMainBuffer (&_mainBuffer);
+            break;
 
-	switch (type) {
+        case PULSEAUDIO:
+            _debug ("Manager: Creating ALSA layer...");
+            _audiodriver = new AlsaLayer (this);
+            _audiodriver->setMainBuffer (&_mainBuffer);
+            break;
 
-	case ALSA:
-		_debug ("Creating Pulseaudio layer...");
-		_audiodriver = new PulseLayer(this);
-		_audiodriver->setMainBuffer(&_mainBuffer);
-		break;
+        default:
+            _warn ("Manager: Error: audio layer unknown");
+            break;
+    }
+
+    _audiodriver->setErrorMessage (-1);
+
+    _audiodriver->openDevice (numCardIn, numCardOut, numCardRing, samplerate, framesize,
+                              SFL_PCM_BOTH, alsaPlugin);
+
+    if (_audiodriver -> getErrorMessage() != -1)
+        notifyErrClient (_audiodriver -> getErrorMessage());
+
+    _debug ("Manager: Current device: %i ", type);
+    _debug ("Manager: Has current call: %i ", hasCurrentCall());
+
+    if (hasCurrentCall())
+        _audiodriver->startStream();
+
+    // ost::MutexLock unlock (*getAudioLayerMutex());
+    getAudioLayerMutex()->leave();
+
+    // need to stop audio streams if there is currently no call
+    // if ( (type != PULSEAUDIO) && (!hasCurrentCall())) {
+    // _debug("There is currently a call!!");
+    // _audiodriver->stopStream();
+
+    // }
+}
 
-	case PULSEAUDIO:
-		_debug ("Creating ALSA layer...");
-		_audiodriver = new AlsaLayer(this);
-		_audiodriver->setMainBuffer(&_mainBuffer);
-		break;
+void ManagerImpl::audioSamplingRateChanged (void)
+{
 
-	default:
-		_debug ("Error: audio layer unknown");
-		break;
-	}
+    int type, samplerate, framesize, numCardIn, numCardOut, numCardRing;
+    std::string alsaPlugin;
 
-	_audiodriver->setErrorMessage(-1);
+    _debug ("Manager: Audio Sampling Rate");
 
-	_audiodriver->openDevice(numCardIn, numCardOut, samplerate, framesize,
-			SFL_PCM_BOTH, alsaPlugin);
+    if (!_audiodriver)
+        return;
 
-	if (_audiodriver -> getErrorMessage() != -1)
-		notifyErrClient(_audiodriver -> getErrorMessage());
+    type = _audiodriver->getLayerType();
 
-	_debug ("Current device: %i ", type);
+    samplerate = _mainBuffer.getInternalSamplingRate();
+    framesize = audioPreference.getFramesize();
 
-	_debug ("has current call: %i ", hasCurrentCall());
+    _debug ("Mnager: samplerate: %i, framesize %i", samplerate, framesize);
 
-	if (hasCurrentCall())
-		_audiodriver->startStream();
+    alsaPlugin = audioPreference.getPlugin();
+
+    numCardIn = audioPreference.getCardin();
+    numCardOut = audioPreference.getCardout();
+    numCardRing = audioPreference.getCardring();
+
+    _debug ("Manager: Deleting current layer... ");
+
+    // ost::MutexLock lock (*getAudioLayerMutex());
+    getAudioLayerMutex()->enter();
+
+    // _audiodriver->closeLayer();
+    delete _audiodriver;
+
+    _audiodriver = NULL;
+
+    switch (type) {
+
+        case PULSEAUDIO:
+            _debug ("Manager: Creating Pulseaudio layer...");
+            _audiodriver = new PulseLayer (this);
+            _audiodriver->setMainBuffer (&_mainBuffer);
+            break;
+
+        case ALSA:
+            _debug ("Manager: Creating ALSA layer...");
+            _audiodriver = new AlsaLayer (this);
+            _audiodriver->setMainBuffer (&_mainBuffer);
+            break;
+
+        default:
+            _warn ("Manager: Error: audio layer unknown");
+            break;
+    }
 
-	// ost::MutexLock unlock (*getAudioLayerMutex());
-	getAudioLayerMutex()->leave();
+    _audiodriver->setErrorMessage (-1);
 
-	// need to stop audio streams if there is currently no call
-	// if ( (type != PULSEAUDIO) && (!hasCurrentCall())) {
-	// _debug("There is currently a call!!");
-	// _audiodriver->stopStream();
+    _audiodriver->openDevice (numCardIn, numCardOut, numCardRing, samplerate, framesize,
+                              SFL_PCM_BOTH, alsaPlugin);
 
-	// }
+    if (_audiodriver -> getErrorMessage() != -1)
+        notifyErrClient (_audiodriver -> getErrorMessage());
+
+    _debug ("Manager: Current device: %i ", type);
+    _debug ("Manager: Has current call: %i ", hasCurrentCall());
+
+    if (_audiodriver) {
+        unsigned int sampleRate = _audiodriver->getSampleRate();
+
+        delete _telephoneTone;
+
+        _debugInit ("Manager: Load telephone tone");
+        std::string country = preferences.getZoneToneChoice();
+        _telephoneTone = new TelephoneTone (country, sampleRate);
+
+
+        delete _dtmfKey;
+
+        _debugInit ("Manager: Loading DTMF key");
+        _dtmfKey = new DTMF (sampleRate);
+    }
+
+    if (hasCurrentCall())
+        _audiodriver->startStream();
+
+    // ost::MutexLock unlock (*getAudioLayerMutex());
+    getAudioLayerMutex()->leave();
+
+    // need to stop audio streams if there is currently no call
+    // if ( (type != PULSEAUDIO) && (!hasCurrentCall())) {
+    // _debug("There is currently a call!!");
+    // _audiodriver->stopStream();
+
+    // }
 }
 
 /**
  * Init the volume for speakers/micro from 0 to 100 value
  * Initialization: Main Thread
  */
-void ManagerImpl::initVolume () {
-	_debugInit ("Initiate Volume");
-	setSpkrVolume(getConfigInt(AUDIO, VOLUME_SPKR));
-	setMicVolume(getConfigInt(AUDIO, VOLUME_MICRO));
+void ManagerImpl::initVolume ()
+{
+    _debugInit ("Initiate Volume");
+    setSpkrVolume (audioPreference.getVolumespkr());
+    setMicVolume (audioPreference.getVolumemic());
 }
 
-void ManagerImpl::setSpkrVolume (unsigned short spkr_vol) {
-	PulseLayer *pulselayer = NULL;
+void ManagerImpl::setSpkrVolume (unsigned short spkr_vol)
+{
+    PulseLayer *pulselayer = NULL;
 
-	/* Set the manager sound volume */
-	_spkr_volume = spkr_vol;
+    /* Set the manager sound volume */
+    _spkr_volume = spkr_vol;
 
-	/* Only for PulseAudio */
-	pulselayer = dynamic_cast<PulseLayer*> (getAudioDriver());
+    /* Only for PulseAudio */
+    pulselayer = dynamic_cast<PulseLayer*> (getAudioDriver());
 
-	if (pulselayer) {
-		if (pulselayer->getLayerType() == PULSEAUDIO) {
-			if (pulselayer)
-				pulselayer->setPlaybackVolume(spkr_vol);
-		}
-	}
+    if (pulselayer) {
+        if (pulselayer->getLayerType() == PULSEAUDIO) {
+            if (pulselayer)
+                pulselayer->setPlaybackVolume (spkr_vol);
+        }
+    }
 }
 
-void ManagerImpl::setMicVolume (unsigned short mic_vol) {
-	_mic_volume = mic_vol;
+void ManagerImpl::setMicVolume (unsigned short mic_vol)
+{
+    _mic_volume = mic_vol;
 }
 
-int ManagerImpl::getLocalIp2IpPort (void) {
-	// The SIP port used for default account (IP to IP) calls=
-	return getConfigInt(IP2IP_PROFILE, LOCAL_PORT);
+int ManagerImpl::getLocalIp2IpPort (void)
+{
+    // The SIP port used for default account (IP to IP) calls=
+    return preferences.getPortNum();
 
 }
 
@@ -2923,373 +3176,265 @@ int ManagerImpl::getLocalIp2IpPort (void) {
 /**
  * Main Thread
  */
-bool ManagerImpl::getCallStatus (const std::string& sequenceId UNUSED) {
-	if (!_dbus) {
-		return false;
-	}
-
-	ost::MutexLock m(_callAccountMapMutex);
-
-	CallAccountMap::iterator iter = _callAccountMap.begin();
-	TokenList tk;
-	std::string code;
-	std::string status;
-	std::string destination;
-	std::string number;
-
-	while (iter != _callAccountMap.end()) {
-		Call* call = getAccountLink(iter->second)->getCall(iter->first);
-		Call::ConnectionState state = call->getConnectionState();
-
-		if (state != Call::Connected) {
-			switch (state) {
-
-			case Call::Trying:
-				code = "110";
-				status = "Trying";
-				break;
-
-			case Call::Ringing:
-				code = "111";
-				status = "Ringing";
-				break;
-
-			case Call::Progressing:
-				code = "125";
-				status = "Progressing";
-				break;
-
-			case Call::Disconnected:
-				code = "125";
-				status = "Disconnected";
-				break;
-
-			default:
-				code = "";
-				status = "";
-			}
-		} else {
-			switch (call->getState()) {
-
-			case Call::Active:
-
-			case Call::Conferencing:
-				code = "112";
-				status = "Established";
-				break;
-
-			case Call::Hold:
-				code = "114";
-				status = "Held";
-				break;
-
-			case Call::Busy:
-				code = "113";
-				status = "Busy";
-				break;
-
-			case Call::Refused:
-				code = "125";
-				status = "Refused";
-				break;
-
-			case Call::Error:
-				code = "125";
-				status = "Error";
-				break;
-
-			case Call::Inactive:
-				code = "125";
-				status = "Inactive";
-				break;
-			}
-		}
-
-		// No Congestion
-		// No Wrong Number
-		// 116 <CSeq> <call-id> <acc> <destination> Busy
-		destination = call->getPeerName();
-
-		number = call->getPeerNumber();
-
-		if (number != "") {
-			destination.append(" <");
-			destination.append(number);
-			destination.append(">");
-		}
-
-		tk.push_back(iter->second);
-
-		tk.push_back(destination);
-		tk.push_back(status);
-		tk.clear();
-
-		iter++;
-	}
-
-	return true;
+bool ManagerImpl::getCallStatus (const std::string& sequenceId UNUSED)
+{
+    if (!_dbus) {
+        return false;
+    }
+
+    ost::MutexLock m (_callAccountMapMutex);
+
+    CallAccountMap::iterator iter = _callAccountMap.begin();
+    TokenList tk;
+    std::string code;
+    std::string status;
+    std::string destination;
+    std::string number;
+
+    while (iter != _callAccountMap.end()) {
+        Call* call = getAccountLink (iter->second)->getCall (iter->first);
+        Call::ConnectionState state = call->getConnectionState();
+
+        if (state != Call::Connected) {
+            switch (state) {
+
+                case Call::Trying:
+                    code = "110";
+                    status = "Trying";
+                    break;
+
+                case Call::Ringing:
+                    code = "111";
+                    status = "Ringing";
+                    break;
+
+                case Call::Progressing:
+                    code = "125";
+                    status = "Progressing";
+                    break;
+
+                case Call::Disconnected:
+                    code = "125";
+                    status = "Disconnected";
+                    break;
+
+                default:
+                    code = "";
+                    status = "";
+            }
+        } else {
+            switch (call->getState()) {
+
+                case Call::Active:
+
+                case Call::Conferencing:
+                    code = "112";
+                    status = "Established";
+                    break;
+
+                case Call::Hold:
+                    code = "114";
+                    status = "Held";
+                    break;
+
+                case Call::Busy:
+                    code = "113";
+                    status = "Busy";
+                    break;
+
+                case Call::Refused:
+                    code = "125";
+                    status = "Refused";
+                    break;
+
+                case Call::Error:
+                    code = "125";
+                    status = "Error";
+                    break;
+
+                case Call::Inactive:
+                    code = "125";
+                    status = "Inactive";
+                    break;
+            }
+        }
+
+        // No Congestion
+        // No Wrong Number
+        // 116 <CSeq> <call-id> <acc> <destination> Busy
+        destination = call->getPeerName();
+
+        number = call->getPeerNumber();
+
+        if (number != "") {
+            destination.append (" <");
+            destination.append (number);
+            destination.append (">");
+        }
+
+        tk.push_back (iter->second);
+
+        tk.push_back (destination);
+        tk.push_back (status);
+        tk.clear();
+
+        iter++;
+    }
+
+    return true;
 }
 
 //THREAD=Main
 bool ManagerImpl::getConfig (const std::string& section,
-		const std::string& name, TokenList& arg) {
-	return _config.getConfigTreeItemToken(section, name, arg);
+                             const std::string& name, TokenList& arg)
+{
+    return _config.getConfigTreeItemToken (section, name, arg);
 }
 
 //THREAD=Main
 // throw an Conf::ConfigTreeItemException if not found
 int ManagerImpl::getConfigInt (const std::string& section,
-		const std::string& name) {
-	try {
-		return _config.getConfigTreeItemIntValue(section, name);
-	} catch (Conf::ConfigTreeItemException& e) {
-		throw e;
-	}
+                               const std::string& name)
+{
+    try {
+        return _config.getConfigTreeItemIntValue (section, name);
+    } catch (Conf::ConfigTreeItemException& e) {
+        throw e;
+    }
 
-	return 0;
+    return 0;
 }
 
 bool ManagerImpl::getConfigBool (const std::string& section,
-		const std::string& name) {
-	try {
-		return (_config.getConfigTreeItemValue(section, name) == TRUE_STR) ? true
-				: false;
-	} catch (Conf::ConfigTreeItemException& e) {
-		throw e;
-	}
+                                 const std::string& name)
+{
+    try {
+        return (_config.getConfigTreeItemValue (section, name) == TRUE_STR) ? true
+               : false;
+    } catch (Conf::ConfigTreeItemException& e) {
+        throw e;
+    }
 
-	return false;
+    return false;
 }
 
 //THREAD=Main
 std::string ManagerImpl::getConfigString (const std::string& section,
-		const std::string& name) {
-	try {
-		return _config.getConfigTreeItemValue(section, name);
-	} catch (Conf::ConfigTreeItemException& e) {
-		throw e;
-	}
+        const std::string& name)
+{
+    try {
+        return _config.getConfigTreeItemValue (section, name);
+    } catch (Conf::ConfigTreeItemException& e) {
+        throw e;
+    }
 
-	return "";
+    return "";
 }
 
 //THREAD=Main
 bool ManagerImpl::setConfig (const std::string& section,
-		const std::string& name, const std::string& value) {
-        // _debug ("ManagerImpl::setConfig %s %s %s", section.c_str(), name.c_str(), value.c_str());
-	return _config.setConfigTreeItem(section, name, value);
+                             const std::string& name, const std::string& value)
+{
+
+    return _config.setConfigTreeItem (section, name, value);
 }
 
 //THREAD=Main
 bool ManagerImpl::setConfig (const std::string& section,
-		const std::string& name, int value) {
-	std::ostringstream valueStream;
-	valueStream << value;
-	return _config.setConfigTreeItem(section, name, valueStream.str());
+                             const std::string& name, int value)
+{
+    std::ostringstream valueStream;
+    valueStream << value;
+    return _config.setConfigTreeItem (section, name, valueStream.str());
 }
 
-void ManagerImpl::setAccountsOrder (const std::string& order) {
-	_debug ("Setcreate accounts order : %s", order.c_str());
-	// Set the new config
-	setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, order);
+void ManagerImpl::setAccountsOrder (const std::string& order)
+{
+    _debug ("Manager: Set accounts order : %s", order.c_str());
+    // Set the new config
+
+    preferences.setAccountOrder (order);
 }
 
-std::vector<std::string> ManagerImpl::getAccountList () {
+std::vector<std::string> ManagerImpl::getAccountList ()
+{
+
+    std::vector<std::string> v;
+    std::vector<std::string> account_order;
+    unsigned int i;
 
-	std::vector<std::string> v;
-	std::vector<std::string> account_order;
-	unsigned int i;
+    _debug ("Manager: Get account list");
 
-	account_order = loadAccountOrder();
-	AccountMap::iterator iter;
+    account_order = loadAccountOrder();
+    AccountMap::iterator iter;
 
-	// The IP2IP profile is always available, and first in the list
-	iter = _accountMap.find(IP2IP_PROFILE);
-	if (iter->second != NULL)
-		v.push_back(iter->first.data());
+    // The IP2IP profile is always available, and first in the list
+    iter = _accountMap.find (IP2IP_PROFILE);
 
-	// If no order has been set, load the default one
-	// ie according to the creation date.
+    if (iter->second != NULL) {
+        // _debug("PUSHING BACK %s", iter->first.c_str());
+        // v.push_back(iter->first.data());
+        v.push_back (iter->second->getAccountID());
+    } else {
+        _error ("Manager: could not find IP2IP profile in getAccount list");
+    }
 
-	if (account_order.size() == 0) {
-		iter = _accountMap.begin();
+    // If no order has been set, load the default one
+    // ie according to the creation date.
 
-		while (iter != _accountMap.end()) {
+    if (account_order.size() == 0) {
+        _debug ("Manager: account order is empty");
+        iter = _accountMap.begin();
 
-			if (iter->second != NULL && iter->first != IP2IP_PROFILE) {
-				//_debug("PUSHING BACK %s\n", iter->first.c_str());
-				v.push_back(iter->first.data());
-			}
+        while (iter != _accountMap.end()) {
 
-			iter++;
-		}
-	}
+            if (iter->second != NULL && iter->first != IP2IP_PROFILE) {
+                _debug ("PUSHING BACK %s", iter->first.c_str());
+                // v.push_back(iter->first.data());
+                v.push_back (iter->second->getAccountID());
+            }
 
-	// Otherelse, load the custom one
-	// ie according to the saved order
-	else {
+            iter++;
+        }
+    }
 
-		for (i = 0; i < account_order.size(); i++) {
-			// This account has not been loaded, so we ignore it
-			if ((iter = _accountMap.find(account_order[i]))
-					!= _accountMap.end()) {
-				// If the account is valid
-				if (iter->second != NULL && iter->first != IP2IP_PROFILE) {
-					v.push_back(iter->first.data());
-				}
-			}
-		}
-	}
+    // Otherelse, load the custom one
+    // ie according to the saved order
+    else {
+        _debug ("Manager: Load account list according to preferences");
+
+        for (i = 0; i < account_order.size(); i++) {
+            // This account has not been loaded, so we ignore it
+            if ( (iter = _accountMap.find (account_order[i]))
+                    != _accountMap.end()) {
+                // If the account is valid
+                if (iter->second != NULL && iter->first != IP2IP_PROFILE) {
+                    //_debug("PUSHING BACK %s", iter->first.c_str());
+                    // v.push_back(iter->first.data());
+                    v.push_back (iter->second->getAccountID());
+                }
+            }
+        }
+    }
 
-	return v;
+    return v;
 }
 
 std::map<std::string, std::string> ManagerImpl::getAccountDetails (
-		const AccountID& accountID) {
-	std::map<std::string, std::string> a;
-
-	Account * account = _accountMap[accountID];
-
-	if (account == NULL) {
-		_debug ("Cannot getAccountDetails on a non-existing accountID %s. Defaults will be used.", accountID.c_str());
-	}
-
-	a.insert(std::pair<std::string, std::string>(ACCOUNT_ID, accountID));
-
-	// The IP profile does not allow to set an alias
-	(accountID == IP2IP_PROFILE) ? a.insert(
-			std::pair<std::string, std::string>(CONFIG_ACCOUNT_ALIAS,
-					DIRECT_IP_CALL)) : a.insert(std::pair<std::string,
-			std::string>(CONFIG_ACCOUNT_ALIAS, getConfigString(accountID,
-			CONFIG_ACCOUNT_ALIAS)));
-
-	a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_ENABLE,
-			getConfigString(accountID, CONFIG_ACCOUNT_ENABLE)));
-	a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_RESOLVE_ONCE,
-			getConfigString(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE)));
-	a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_TYPE,
-			getConfigString(accountID, CONFIG_ACCOUNT_TYPE)));
-	a.insert(std::pair<std::string, std::string>(HOSTNAME, getConfigString(
-			accountID, HOSTNAME)));
-	a.insert(std::pair<std::string, std::string>(USERNAME, getConfigString(
-			accountID, USERNAME)));
-	a.insert(std::pair<std::string, std::string>(ROUTESET, getConfigString(
-			accountID, ROUTESET)));
-	a.insert(std::pair<std::string, std::string>(PASSWORD, getConfigString(
-			accountID, PASSWORD)));
-	a.insert(std::pair<std::string, std::string>(REALM, getConfigString(
-			accountID, REALM)));
-	a.insert(std::pair<std::string, std::string>(USERAGENT, getConfigString(
-			accountID, USERAGENT)));
-	a.insert(std::pair<std::string, std::string>(AUTHENTICATION_USERNAME,
-			getConfigString(accountID, AUTHENTICATION_USERNAME)));
-	a.insert(std::pair<std::string, std::string>(CONFIG_ACCOUNT_MAILBOX,
-			getConfigString(accountID, CONFIG_ACCOUNT_MAILBOX)));
-	a.insert(std::pair<std::string, std::string>(
-			CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getConfigString(accountID,
-					CONFIG_ACCOUNT_REGISTRATION_EXPIRE)));
-	a.insert(std::pair<std::string, std::string>(LOCAL_INTERFACE,
-			getConfigString(accountID, LOCAL_INTERFACE)));
-	a.insert(std::pair<std::string, std::string>(PUBLISHED_SAMEAS_LOCAL,
-			getConfigString(accountID, PUBLISHED_SAMEAS_LOCAL)));
-	a.insert(std::pair<std::string, std::string>(PUBLISHED_ADDRESS,
-			getConfigString(accountID, PUBLISHED_ADDRESS)));
-	a.insert(std::pair<std::string, std::string>(LOCAL_PORT, getConfigString(
-			accountID, LOCAL_PORT)));
-	a.insert(std::pair<std::string, std::string>(PUBLISHED_PORT,
-			getConfigString(accountID, PUBLISHED_PORT)));
-	a.insert(std::pair<std::string, std::string>(DISPLAY_NAME, getConfigString(
-			accountID, DISPLAY_NAME)));
-	a.insert(std::pair<std::string, std::string>(STUN_ENABLE, getConfigString(
-			accountID, STUN_ENABLE)));
-	a.insert(std::pair<std::string, std::string>(STUN_SERVER, getConfigString(
-			accountID, STUN_SERVER)));
-	a.insert(std::pair<std::string, std::string>(ACCOUNT_DTMF_TYPE, getConfigString(
-				accountID, ACCOUNT_DTMF_TYPE)));
-
-	RegistrationState state = Unregistered;
-	std::string registrationStateCode;
-	std::string registrationStateDescription;
-
-	if (account != NULL) {
-		if (accountID == IP2IP_PROFILE) {
-			registrationStateCode = EMPTY_FIELD;
-			registrationStateDescription = "Direct IP call";
-		} else {
-			state = account->getRegistrationState();
-			int code = account->getRegistrationStateDetailed().first;
-			std::stringstream out;
-			out << code;
-			registrationStateCode = out.str();
-			registrationStateDescription
-					= account->getRegistrationStateDetailed().second;
-		}
-	}
-
-	(accountID == IP2IP_PROFILE) ? a.insert(
-			std::pair<std::string, std::string>(REGISTRATION_STATUS, "READY"))
-			: a.insert(std::pair<std::string, std::string>(REGISTRATION_STATUS,
-					mapStateNumberToString(state)));
-
-	a.insert(std::pair<std::string, std::string>(REGISTRATION_STATE_CODE,
-			registrationStateCode));
-	a.insert(std::pair<std::string, std::string>(
-			REGISTRATION_STATE_DESCRIPTION, registrationStateDescription));
-	a.insert(std::pair<std::string, std::string>(SRTP_KEY_EXCHANGE,
-			getConfigString(accountID, SRTP_KEY_EXCHANGE)));
-	a.insert(std::pair<std::string, std::string>(SRTP_ENABLE, getConfigString(
-			accountID, SRTP_ENABLE)));
-	a.insert(std::pair<std::string, std::string>(SRTP_RTP_FALLBACK,
-			getConfigString(accountID, SRTP_RTP_FALLBACK)));
-	a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS,
-			getConfigString(accountID, ZRTP_DISPLAY_SAS)));
-	a.insert(std::pair<std::string, std::string>(ZRTP_DISPLAY_SAS_ONCE,
-			getConfigString(accountID, ZRTP_DISPLAY_SAS_ONCE)));
-	a.insert(std::pair<std::string, std::string>(ZRTP_HELLO_HASH,
-			getConfigString(accountID, ZRTP_HELLO_HASH)));
-	a.insert(std::pair<std::string, std::string>(ZRTP_NOT_SUPP_WARNING,
-			getConfigString(accountID, ZRTP_NOT_SUPP_WARNING)));
-
-	// TLS listener is unique and parameters are modified through IP2IP_PROFILE
-	a.insert(std::pair<std::string, std::string>(TLS_LISTENER_PORT,
-			Manager::instance().getConfigString(IP2IP_PROFILE,
-					TLS_LISTENER_PORT)));
-	a.insert(std::pair<std::string, std::string>(TLS_ENABLE,
-			Manager::instance().getConfigString(accountID, TLS_ENABLE)));
-	a.insert(std::pair<std::string, std::string>(TLS_CA_LIST_FILE,
-			Manager::instance().getConfigString(accountID, TLS_CA_LIST_FILE)));
-	a.insert(
-			std::pair<std::string, std::string>(TLS_CERTIFICATE_FILE,
-					Manager::instance().getConfigString(accountID,
-							TLS_CERTIFICATE_FILE)));
-	a.insert(
-			std::pair<std::string, std::string>(TLS_PRIVATE_KEY_FILE,
-					Manager::instance().getConfigString(accountID,
-							TLS_PRIVATE_KEY_FILE)));
-	a.insert(std::pair<std::string, std::string>(TLS_PASSWORD,
-			Manager::instance().getConfigString(accountID, TLS_PASSWORD)));
-	a.insert(std::pair<std::string, std::string>(TLS_METHOD,
-			Manager::instance().getConfigString(accountID, TLS_METHOD)));
-	a.insert(std::pair<std::string, std::string>(TLS_CIPHERS,
-			Manager::instance().getConfigString(accountID, TLS_CIPHERS)));
-	a.insert(std::pair<std::string, std::string>(TLS_SERVER_NAME,
-			Manager::instance().getConfigString(accountID, TLS_SERVER_NAME)));
-	a.insert(std::pair<std::string, std::string>(TLS_VERIFY_SERVER,
-			Manager::instance().getConfigString(accountID, TLS_VERIFY_SERVER)));
-	a.insert(std::pair<std::string, std::string>(TLS_VERIFY_CLIENT,
-			Manager::instance().getConfigString(accountID, TLS_VERIFY_CLIENT)));
-	a.insert(std::pair<std::string, std::string>(
-			TLS_REQUIRE_CLIENT_CERTIFICATE,
-			Manager::instance().getConfigString(accountID,
-					TLS_REQUIRE_CLIENT_CERTIFICATE)));
-	a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_SEC,
-			Manager::instance().getConfigString(accountID,
-					TLS_NEGOTIATION_TIMEOUT_SEC)));
-	a.insert(std::pair<std::string, std::string>(TLS_NEGOTIATION_TIMEOUT_MSEC,
-			Manager::instance().getConfigString(accountID,
-					TLS_NEGOTIATION_TIMEOUT_MSEC)));
-
-	return a;
+    const AccountID& accountID)
+{
+
+    _debug ("Manager: get account details %s", accountID.c_str());
+
+    Account * account;
+
+    if (! (account = _accountMap[accountID])) {
+        _debug ("Manager: Get account details on a non-existing accountID %s. Returning default", accountID.c_str());
+        // return a default map
+        return defaultAccount.getAccountDetails();
+    } else
+        return account->getAccountDetails();
+
 }
 
 /* Transform digest to string.
@@ -3300,948 +3445,818 @@ std::map<std::string, std::string> ManagerImpl::getAccountDetails (
  * NOTE: THE OUTPUT STRING IS NOT NULL TERMINATED!
  */
 
-void ManagerImpl::digest2str (const unsigned char digest[], char *output) {
-	int i;
+void ManagerImpl::digest2str (const unsigned char digest[], char *output)
+{
+    int i;
 
-	for (i = 0; i < 16; ++i) {
-		pj_val_to_hex_digit(digest[i], output);
-		output += 2;
-	}
+    for (i = 0; i < 16; ++i) {
+        pj_val_to_hex_digit (digest[i], output);
+        output += 2;
+    }
 }
 
 std::string ManagerImpl::computeMd5HashFromCredential (
-		const std::string& username, const std::string& password,
-		const std::string& realm) {
-	pj_md5_context pms;
-	unsigned char digest[16];
-	char ha1[PJSIP_MD5STRLEN];
+    const std::string& username, const std::string& password,
+    const std::string& realm)
+{
+    pj_md5_context pms;
+    unsigned char digest[16];
+    char ha1[PJSIP_MD5STRLEN];
 
-	pj_str_t usernamePjFormat = pj_str(strdup(username.c_str()));
-	pj_str_t passwordPjFormat = pj_str(strdup(password.c_str()));
-	pj_str_t realmPjFormat = pj_str(strdup(realm.c_str()));
+    pj_str_t usernamePjFormat = pj_str (strdup (username.c_str()));
+    pj_str_t passwordPjFormat = pj_str (strdup (password.c_str()));
+    pj_str_t realmPjFormat = pj_str (strdup (realm.c_str()));
 
-	/* Compute md5 hash = MD5(username ":" realm ":" password) */
-	pj_md5_init(&pms);
-	MD5_APPEND (&pms, usernamePjFormat.ptr, usernamePjFormat.slen);
-	MD5_APPEND (&pms, ":", 1);
-	MD5_APPEND (&pms, realmPjFormat.ptr, realmPjFormat.slen);
-	MD5_APPEND (&pms, ":", 1);
-	MD5_APPEND (&pms, passwordPjFormat.ptr, passwordPjFormat.slen);
-	pj_md5_final(&pms, digest);
+    /* Compute md5 hash = MD5(username ":" realm ":" password) */
+    pj_md5_init (&pms);
+    MD5_APPEND (&pms, usernamePjFormat.ptr, usernamePjFormat.slen);
+    MD5_APPEND (&pms, ":", 1);
+    MD5_APPEND (&pms, realmPjFormat.ptr, realmPjFormat.slen);
+    MD5_APPEND (&pms, ":", 1);
+    MD5_APPEND (&pms, passwordPjFormat.ptr, passwordPjFormat.slen);
+    pj_md5_final (&pms, digest);
 
-	digest2str(digest, ha1);
+    digest2str (digest, ha1);
 
-	char ha1_null_terminated[PJSIP_MD5STRLEN + 1];
-	memcpy(ha1_null_terminated, ha1, sizeof(char) * PJSIP_MD5STRLEN);
-	ha1_null_terminated[PJSIP_MD5STRLEN] = '\0';
+    char ha1_null_terminated[PJSIP_MD5STRLEN + 1];
+    memcpy (ha1_null_terminated, ha1, sizeof (char) * PJSIP_MD5STRLEN);
+    ha1_null_terminated[PJSIP_MD5STRLEN] = '\0';
 
-	std::string hashedDigest = ha1_null_terminated;
-	return hashedDigest;
+    std::string hashedDigest = ha1_null_terminated;
+    return hashedDigest;
 }
 
-void ManagerImpl::setCredential (const std::string& accountID,
-		const int32_t& index, const std::map<std::string, std::string>& details) {
-	std::map<std::string, std::string>::iterator it;
-	std::map<std::string, std::string> credentialInformation = details;
+void ManagerImpl::setCredential (const std::string& accountID UNUSED,
+                                 const int32_t& index UNUSED, const std::map<std::string, std::string>& details UNUSED)
+{
 
-	std::string credentialIndex;
-	std::stringstream streamOut;
-	streamOut << index;
-	credentialIndex = streamOut.str();
+    _debug ("Manager: set credential");
+}
 
-	std::string section = "Credential" + std::string(":") + accountID
-			+ std::string(":") + credentialIndex;
+// method to reduce the if/else mess.
+// Even better, switch to XML !
 
-	_debug ("Setting credential in section %s", section.c_str());
+void ManagerImpl::setAccountDetails (const std::string& accountID,
+                                     const std::map<std::string, std::string>& details)
+{
 
-	it = credentialInformation.find(USERNAME);
-	std::string username;
+    _debug ("Manager: Set account details %s", accountID.c_str());
 
-	if (it == credentialInformation.end()) {
-		username = EMPTY_FIELD;
-	} else {
-		username = it->second;
-	}
+    Account* account;
 
-	Manager::instance().setConfig(section, USERNAME, username);
+    if (! (account = getAccount (accountID))) {
+        _warn ("Manager: Cannot setAccountDetails on a non-existing accountID %s.", accountID.c_str());
+        return;
+    }
 
-	it = credentialInformation.find(REALM);
-	std::string realm;
+    account->setAccountDetails (details);
 
-	if (it == credentialInformation.end()) {
-		realm = EMPTY_FIELD;
-	} else {
-		realm = it->second;
-	}
+    saveConfig();
 
-	Manager::instance().setConfig(section, REALM, realm);
+    if (account->isEnabled())
+        account->registerVoIPLink();
+    else
+        account->unregisterVoIPLink();
 
-	it = credentialInformation.find(PASSWORD);
-	std::string password;
+    // Update account details to the client side
+    if (_dbus)
+        _dbus->getConfigurationManager()->accountsChanged();
 
-	if (it == credentialInformation.end()) {
-		password = EMPTY_FIELD;
-	} else {
-		password = it->second;
-	}
+}
 
-	if (getMd5CredentialHashing()) {
-		// TODO: Fix this.
-		// This is an extremly weak test in order to check
-		// if the password is a hashed value. This is done
-		// because deleteCredential() is called before this
-		// method. Therefore, we cannot check if the value
-		// is different from the one previously stored in
-		// the configuration file. This is to avoid to
-		// re-hash a hashed password.
+std::string ManagerImpl::addAccount (
+    const std::map<std::string, std::string>& details)
+{
 
-		if (password.length() != 32) {
-			password = computeMd5HashFromCredential(username, password, realm);
-		}
-	}
+    /** @todo Deal with both the _accountMap and the Configuration */
+    std::string accountType, account_list;
+    Account* newAccount;
+    std::stringstream accountID;
+    AccountID newAccountID;
 
-	Manager::instance().setConfig(section, PASSWORD, password);
-}
+    accountID << "Account:" << time (NULL);
+    newAccountID = accountID.str();
 
-//TODO: tidy this up. Make a macro or inline
-// method to reduce the if/else mess.
-// Even better, switch to XML !
+    // Get the type
+    accountType = (*details.find (CONFIG_ACCOUNT_TYPE)).second;
 
-void ManagerImpl::setAccountDetails (const std::string& accountID,
-		const std::map<std::string, std::string>& details) {
-
-    std::map<std::string, std::string> map_cpy;
-    std::map<std::string, std::string>::iterator iter;
-
-    // Work on a copy
-    map_cpy = details;
-
-    // Get the account type
-    std::string accountType;
-    find_in_map(CONFIG_ACCOUNT_TYPE, accountType)
-    
-    std::string alias;
-    std::string type;
-    std::string hostname;
-    std::string username;
-    std::string password;
-    std::string mailbox;
-    std::string accountEnable;
-
-
-    // Account setting common to SIP and IAX
-    find_in_map(CONFIG_ACCOUNT_ALIAS, alias)
-    find_in_map(CONFIG_ACCOUNT_TYPE, type)
-    find_in_map(HOSTNAME, hostname)
-    find_in_map(USERNAME, username)
-    find_in_map(PASSWORD, password)
-    find_in_map(CONFIG_ACCOUNT_MAILBOX, mailbox);
-    find_in_map(CONFIG_ACCOUNT_ENABLE, accountEnable);
-
-    setConfig(accountID, CONFIG_ACCOUNT_ALIAS, alias);
-    setConfig(accountID, CONFIG_ACCOUNT_TYPE, type);
-    setConfig(accountID, HOSTNAME, hostname);
-    setConfig(accountID, USERNAME, username);
-    setConfig(accountID, PASSWORD, password);
-    setConfig(accountID, CONFIG_ACCOUNT_MAILBOX, mailbox);
-    setConfig(accountID, CONFIG_ACCOUNT_ENABLE, accountEnable);
-	       
-    // SIP specific account settings
-    if(accountType == "SIP") {
-
-        std::string ua_name;
-        std::string realm;
-        std::string routeset;
-	std::string authenticationName;
-
-        std::string resolveOnce;
-	std::string registrationExpire;
-
-	std::string displayName;
-	std::string localInterface;
-	std::string publishedSameasLocal;
-	std::string localAddress;
-	std::string publishedAddress;
-	std::string localPort;
-	std::string publishedPort;
-	std::string stunEnable;
-	std::string stunServer;
-	std::string dtmfType;
-	std::string srtpEnable;
-	std::string srtpRtpFallback;
-	std::string zrtpDisplaySas;
-	std::string zrtpDisplaySasOnce;
-	std::string zrtpNotSuppWarning;
-	std::string zrtpHelloHash;
-	std::string srtpKeyExchange;
-
-	std::string tlsListenerPort;
-	std::string tlsEnable;
-	std::string tlsCaListFile;
-	std::string tlsCertificateFile;
-	std::string tlsPrivateKeyFile;
-	std::string tlsPassword;
-	std::string tlsMethod;
-	std::string tlsCiphers;
-	std::string tlsServerName;
-	std::string tlsVerifyServer;
-	std::string tlsVerifyClient;
-	std::string tlsRequireClientCertificate;
-	std::string tlsNegotiationTimeoutSec;
-	std::string tlsNegotiationTimeoutMsec;
-
-	// general sip settings
-	find_in_map(DISPLAY_NAME, displayName)
-	find_in_map(ROUTESET, routeset)
-	find_in_map(LOCAL_INTERFACE, localInterface)
-	find_in_map(PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal)
-	find_in_map(PUBLISHED_ADDRESS, publishedAddress)
-	find_in_map(LOCAL_PORT, localPort)
-	find_in_map(PUBLISHED_PORT, publishedPort)
-	find_in_map(STUN_ENABLE, stunEnable)
-	find_in_map(STUN_SERVER, stunServer)
-	find_in_map(ACCOUNT_DTMF_TYPE, dtmfType)
-	find_in_map(CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce)
-	find_in_map(CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire)
-
-	setConfig(accountID, DISPLAY_NAME, displayName);
-	setConfig(accountID, ROUTESET, routeset);
-	setConfig(accountID, LOCAL_INTERFACE, localInterface);
-	setConfig(accountID, PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal);
-	setConfig(accountID, PUBLISHED_ADDRESS, publishedAddress);
-	setConfig(accountID, LOCAL_PORT, localPort);
-	setConfig(accountID, PUBLISHED_PORT, publishedPort);
-	setConfig(accountID, STUN_ENABLE, stunEnable);
-	setConfig(accountID, STUN_SERVER, stunServer);
-	setConfig(accountID, ACCOUNT_DTMF_TYPE, dtmfType);
-	setConfig(accountID, CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce);
-        setConfig(accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire);
-
-	// sip credential
-	find_in_map(REALM, realm)
-	find_in_map(AUTHENTICATION_USERNAME, authenticationName)
-	find_in_map(USERAGENT, ua_name)
-
-	setConfig(accountID, REALM, realm);
-	setConfig(accountID, USERAGENT, ua_name);
-	setConfig(accountID, AUTHENTICATION_USERNAME, authenticationName);
-
-        // srtp settings
-	find_in_map(SRTP_ENABLE, srtpEnable)
-	find_in_map(SRTP_RTP_FALLBACK, srtpRtpFallback)
-	find_in_map(ZRTP_DISPLAY_SAS, zrtpDisplaySas)
-	find_in_map(ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce)
-	find_in_map(ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning)
-	find_in_map(ZRTP_HELLO_HASH, zrtpHelloHash)
-	find_in_map(SRTP_KEY_EXCHANGE, srtpKeyExchange)
-
-	setConfig(accountID, SRTP_ENABLE, srtpEnable);
-	setConfig(accountID, SRTP_RTP_FALLBACK, srtpRtpFallback);
-	setConfig(accountID, ZRTP_DISPLAY_SAS, zrtpDisplaySas);
-	setConfig(accountID, ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce);
-	setConfig(accountID, ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning);
-	setConfig(accountID, ZRTP_HELLO_HASH, zrtpHelloHash);
-	setConfig(accountID, SRTP_KEY_EXCHANGE, srtpKeyExchange);
-	
-	// TLS settings
-	// The TLS listener is unique and globally defined through IP2IP_PROFILE
-	if(accountID == IP2IP_PROFILE) {
-	    find_in_map(TLS_LISTENER_PORT, tlsListenerPort)
-        }
-	find_in_map(TLS_ENABLE, tlsEnable)
-	find_in_map(TLS_CA_LIST_FILE, tlsCaListFile)
-	find_in_map(TLS_CERTIFICATE_FILE, tlsCertificateFile)
-	find_in_map(TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile)
-	find_in_map(TLS_PASSWORD, tlsPassword)
-	find_in_map(TLS_METHOD, tlsMethod)
-	find_in_map(TLS_CIPHERS, tlsCiphers)
-	find_in_map(TLS_SERVER_NAME, tlsServerName)
-	find_in_map(TLS_VERIFY_SERVER, tlsVerifyServer)
-	find_in_map(TLS_VERIFY_CLIENT, tlsVerifyClient)
-	find_in_map(TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate)
-	find_in_map(TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec)
-	find_in_map(TLS_NEGOTIATION_TIMEOUT_MSEC, tlsNegotiationTimeoutMsec)
-
-
-	// The TLS listener is unique and globally defined through IP2IP_PROFILE
-	if (accountID == IP2IP_PROFILE){
-	    setConfig(accountID, TLS_LISTENER_PORT, tlsListenerPort);
-	}
-	setConfig(accountID, TLS_ENABLE, tlsEnable);
-	setConfig(accountID, TLS_CA_LIST_FILE, tlsCaListFile);
-	setConfig(accountID, TLS_CERTIFICATE_FILE, tlsCertificateFile);
-	setConfig(accountID, TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile);
-	setConfig(accountID, TLS_PASSWORD, tlsPassword);
-	setConfig(accountID, TLS_METHOD, tlsMethod);
-	setConfig(accountID, TLS_CIPHERS, tlsCiphers);
-	setConfig(accountID, TLS_SERVER_NAME, tlsServerName);
-	setConfig(accountID, TLS_VERIFY_SERVER, tlsVerifyServer);
-	setConfig(accountID, TLS_VERIFY_CLIENT, tlsVerifyClient);
-	setConfig(accountID, TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate);
-	setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec);
-	setConfig(accountID, TLS_NEGOTIATION_TIMEOUT_MSEC,tlsNegotiationTimeoutMsec);
-
-	if (!getMd5CredentialHashing()) {
-	  setConfig(accountID, PASSWORD, password);
-	} else {
-	  // Make sure not to re-hash the password field if
-	  // it is already saved as a MD5 Hash.
-	  // TODO: This test is weak. Fix this.
-	  if ((password.compare(getConfigString(accountID, PASSWORD)) != 0)) {
-	    _debug ("Password sent and password from config are different. Re-hashing");
-	    std::string hash;
-
-	    if (authenticationName.empty()) {
-	      hash = computeMd5HashFromCredential(username, password, realm);
-	    } else {
-	      hash = computeMd5HashFromCredential(authenticationName,
-						  password, realm);
-	    }
-	    
-	    setConfig(accountID, PASSWORD, hash);
-	  }
-	}
+    _debug ("Manager: Adding account %s", newAccountID.c_str());
 
+    /** @todo Verify the uniqueness, in case a program adds accounts, two in a row. */
+
+    if (accountType == "SIP") {
+        newAccount = AccountCreator::createAccount (AccountCreator::SIP_ACCOUNT,
+                     newAccountID);
+        newAccount->setVoIPLink();
+    } else if (accountType == "IAX") {
+        newAccount = AccountCreator::createAccount (AccountCreator::IAX_ACCOUNT,
+                     newAccountID);
+    } else {
+        _error ("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str());
+        return "";
     }
 
-    saveConfig();
-    
-    Account * acc = NULL;
-    acc = getAccount(accountID);
-    
-    if (acc != NULL) {
-        acc->loadConfig();
-		
-	if (acc->isEnabled()) {
-	  acc->registerVoIPLink();
-	} else {
-	  acc->unregisterVoIPLink();
-	}
+    _accountMap[newAccountID] = newAccount;
+
+    newAccount->setAccountDetails (details);
+
+    // Add the newly created account in the account order list
+    account_list = preferences.getAccountOrder();
+
+    if (account_list != "") {
+        newAccountID += "/";
+        // Prepend the new account
+        account_list.insert (0, newAccountID);
+
+        preferences.setAccountOrder (account_list);
     } else {
-      _debug ("ManagerImpl::setAccountDetails: account is NULL");
+        newAccountID += "/";
+        account_list = newAccountID;
+        preferences.setAccountOrder (account_list);
     }
-    
-    // Update account details to the client side
+
+    _debug ("AccountMap: %s", account_list.c_str());
+
+    newAccount->setVoIPLink();
+
+    newAccount->registerVoIPLink();
+
+    saveConfig();
+
     if (_dbus)
         _dbus->getConfigurationManager()->accountsChanged();
 
+    return accountID.str();
 }
 
-std::string ManagerImpl::addAccount (
-		const std::map<std::string, std::string>& details) {
+void ManagerImpl::deleteAllCredential (const AccountID& accountID)
+{
 
-	/** @todo Deal with both the _accountMap and the Configuration */
-	std::string accountType, account_list;
-	Account* newAccount;
-	std::stringstream accountID;
-	AccountID newAccountID;
+    _debug ("Manager: delete all credential");
 
-	accountID << "Account:" << time(NULL);
-	newAccountID = accountID.str();
+    Account *account = getAccount (accountID);
 
-	// Get the type
-	accountType = (*details.find(CONFIG_ACCOUNT_TYPE)).second;
+    if (!account)
+        return;
 
-	_debug ("%s", newAccountID.c_str());
+    if (account->getType() != "SIP")
+        return;
 
-	/** @todo Verify the uniqueness, in case a program adds accounts, two in a row. */
+    SIPAccount *sipaccount = (SIPAccount *) account;
 
-	if (accountType == "SIP") {
-		newAccount = AccountCreator::createAccount(AccountCreator::SIP_ACCOUNT,
-				newAccountID);
-		newAccount->setVoIPLink();
-	} else if (accountType == "IAX") {
-		newAccount = AccountCreator::createAccount(AccountCreator::IAX_ACCOUNT,
-				newAccountID);
-	} else {
-		_debug ("Unknown %s param when calling addAccount(): %s", CONFIG_ACCOUNT_TYPE, accountType.c_str());
-		return "";
-	}
+    if (accountID.empty() == false) {
+        sipaccount->setCredentialCount (0);
+    }
+}
 
-	_accountMap[newAccountID] = newAccount;
+void ManagerImpl::removeAccount (const AccountID& accountID)
+{
+    // Get it down and dying
+    Account* remAccount = NULL;
+    remAccount = getAccount (accountID);
 
-	setAccountDetails(accountID.str(), details);
+    if (remAccount != NULL) {
+        remAccount->unregisterVoIPLink();
+        _accountMap.erase (accountID);
+        // http://projects.savoirfairelinux.net/issues/show/2355
+        // delete remAccount;
+    }
 
-	// Add the newly created account in the account order list
-	account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER);
+    _config.removeSection (accountID);
+
+    saveConfig();
 
-	if (account_list != "") {
-		newAccountID += "/";
-		// Prepend the new account
-		account_list.insert(0, newAccountID);
-		setConfig(PREFERENCES, CONFIG_ACCOUNTS_ORDER, account_list);
-	}
+    _debug ("REMOVE ACCOUNT");
 
-	saveConfig();
+    if (_dbus)
+        _dbus->getConfigurationManager()->accountsChanged();
 
-	if (_dbus)
-		_dbus->getConfigurationManager()->accountsChanged();
+}
 
-	return accountID.str();
+// ACCOUNT handling
+bool ManagerImpl::associateCallToAccount (const CallID& callID,
+        const AccountID& accountID)
+{
+    if (getAccountFromCall (callID) == AccountNULL) { // nothing with the same ID
+        if (accountExists (accountID)) { // account id exist in AccountMap
+            ost::MutexLock m (_callAccountMapMutex);
+            _callAccountMap[callID] = accountID;
+            _debug ("Associate Call %s with Account %s", callID.data(), accountID.data());
+            return true;
+        } else {
+            return false;
+        }
+    } else {
+        return false;
+    }
 }
 
-void ManagerImpl::deleteAllCredential (const AccountID& accountID) {
-	int numberOfCredential = getConfigInt(accountID, CONFIG_CREDENTIAL_NUMBER);
+AccountID ManagerImpl::getAccountFromCall (const CallID& callID)
+{
+    ost::MutexLock m (_callAccountMapMutex);
+    CallAccountMap::iterator iter = _callAccountMap.find (callID);
 
-	int i;
+    if (iter == _callAccountMap.end()) {
+        return AccountNULL;
+    } else {
+        return iter->second;
+    }
+}
 
-	for (i = 0; i < numberOfCredential; i++) {
-		std::string credentialIndex;
-		std::stringstream streamOut;
-		streamOut << i;
-		credentialIndex = streamOut.str();
-		std::string section = "Credential" + std::string(":") + accountID
-				+ std::string(":") + credentialIndex;
+bool ManagerImpl::removeCallAccount (const CallID& callID)
+{
+    ost::MutexLock m (_callAccountMapMutex);
 
-		_config.removeSection(section);
-	}
+    if (_callAccountMap.erase (callID)) {
+        return true;
+    }
 
-	if (accountID.empty() == false) {
-		setConfig(accountID, CONFIG_CREDENTIAL_NUMBER, 0);
-	}
+    return false;
 }
 
-void ManagerImpl::removeAccount (const AccountID& accountID) {
-	// Get it down and dying
-	Account* remAccount = NULL;
-	remAccount = getAccount(accountID);
+CallID ManagerImpl::getNewCallID ()
+{
+    std::ostringstream random_id ("s");
+    random_id << (unsigned) rand();
 
-	if (remAccount != NULL) {
-		remAccount->unregisterVoIPLink();
-		_accountMap.erase(accountID);
-		// http://projects.savoirfairelinux.net/issues/show/2355
-		// delete remAccount;
-	}
+    // when it's not found, it return ""
+    // generate, something like s10000s20000s4394040
 
-	_config.removeSection(accountID);
+    while (getAccountFromCall (random_id.str()) != AccountNULL) {
+        random_id.clear();
+        random_id << "s";
+        random_id << (unsigned) rand();
+    }
 
-	saveConfig();
+    return random_id.str();
+}
 
-	_debug ("REMOVE ACCOUNT");
+std::vector<std::string> ManagerImpl::loadAccountOrder (void)
+{
 
-	if (_dbus)
-		_dbus->getConfigurationManager()->accountsChanged();
+    std::string account_list;
+    std::vector<std::string> account_vect;
 
-}
+    account_list = preferences.getAccountOrder();
 
-// ACCOUNT handling
-bool ManagerImpl::associateCallToAccount (const CallID& callID,
-		const AccountID& accountID) {
-	if (getAccountFromCall(callID) == AccountNULL) { // nothing with the same ID
-		if (accountExists(accountID)) { // account id exist in AccountMap
-			ost::MutexLock m(_callAccountMapMutex);
-			_callAccountMap[callID] = accountID;
-			_debug ("Associate Call %s with Account %s", callID.data(), accountID.data());
-			return true;
-		} else {
-			return false;
-		}
-	} else {
-		return false;
-	}
+    _debug ("Manager: Load sccount order %s", account_list.c_str());
+
+    return unserialize (account_list);
 }
 
-AccountID ManagerImpl::getAccountFromCall (const CallID& callID) {
-	ost::MutexLock m(_callAccountMapMutex);
-	CallAccountMap::iterator iter = _callAccountMap.find(callID);
+short ManagerImpl::buildConfiguration ()
+{
 
-	if (iter == _callAccountMap.end()) {
-		return AccountNULL;
-	} else {
-		return iter->second;
-	}
-}
+    _debug ("Manager: Loading account map");
+
+    loadIptoipProfile();
 
-bool ManagerImpl::removeCallAccount (const CallID& callID) {
-	ost::MutexLock m(_callAccountMapMutex);
+    int nbAccount = loadAccountMap();
 
-	if (_callAccountMap.erase(callID)) {
-		return true;
-	}
-	return false;
+    return nbAccount;
 }
 
-CallID ManagerImpl::getNewCallID () {
-	std::ostringstream random_id("s");
-	random_id << (unsigned) rand();
+void ManagerImpl::loadIptoipProfile()
+{
 
-	// when it's not found, it return ""
-	// generate, something like s10000s20000s4394040
+    _debug ("Manager: Create default \"account\" (used as default UDP transport)");
 
-	while (getAccountFromCall(random_id.str()) != AccountNULL) {
-		random_id.clear();
-		random_id << "s";
-		random_id << (unsigned) rand();
-	}
+    // build a default IP2IP account with default parameters
+    _directIpAccount = AccountCreator::createAccount (AccountCreator::SIP_DIRECT_IP_ACCOUNT, "");
+    _accountMap[IP2IP_PROFILE] = _directIpAccount;
 
-	return random_id.str();
-}
+    if (_directIpAccount == NULL) {
+        _error ("Manager: Failed to create default \"account\"");
+        return;
+    }
+
+    // If configuration file parsed, load saved preferences
+    if (_setupLoaded) {
+
+        _debug ("Manager: Loading IP2IP profile preferences from config");
+
+        Conf::SequenceNode *seq = parser->getAccountSequence();
+
+        Conf::Sequence::iterator iterIP2IP = seq->getSequence()->begin();
+        Conf::Key accID ("id");
+
+        // Iterate over every account maps
+        while (iterIP2IP != seq->getSequence()->end()) {
+
+            Conf::MappingNode *map = (Conf::MappingNode *) (*iterIP2IP);
+
+            // Get the account id
+            Conf::ScalarNode * val = (Conf::ScalarNode *) (map->getValue (accID));
+            Conf::Value accountid = val->getValue();
+
+            // if ID is IP2IP, unserialize
+            if (accountid == "IP2IP") {
 
-std::vector<std::string> ManagerImpl::loadAccountOrder (void) {
+                try {
+                    _directIpAccount->unserialize (map);
+                } catch (SipAccountException &e) {
+                    _error ("Manager: %s", e.what());
+                }
 
-	std::string account_list;
-	std::vector<std::string> account_vect;
+                break;
+            }
+
+            iterIP2IP++;
+        }
+    }
+
+    // Force IP2IP settings to be loaded to be loaded
+    // No registration in the sense of the REGISTER method is performed.
+    _directIpAccount->registerVoIPLink();
+
+    // SIPVoIPlink is used as a singleton, it is the first call to instance here
+    // The SIP library initialization is done in the SIPVoIPLink constructor
+    // We need the IP2IP settings to be loaded at this time as they are used
+    // for default sip transport
+
+    // _directIpAccount->setVoIPLink(SIPVoIPLink::instance (""));
+    _directIpAccount->setVoIPLink();
 
-	account_list = getConfigString(PREFERENCES, CONFIG_ACCOUNTS_ORDER);
-	return unserialize(account_list);
 }
 
-short ManagerImpl::loadAccountMap () {
+short ManagerImpl::loadAccountMap()
+{
+
+    _debug ("Manager: Load account map");
+
+    // Conf::YamlParser *parser;
+    int nbAccount = 0;
+
+    if (!_setupLoaded)
+        return 0;
+
+    // build preferences
+    preferences.unserialize ( (Conf::MappingNode *) (parser->getPreferenceSequence()));
+    voipPreferences.unserialize ( (Conf::MappingNode *) (parser->getVoipPreferenceSequence()));
+    addressbookPreference.unserialize ( (Conf::MappingNode *) (parser->getAddressbookSequence()));
+    hookPreference.unserialize ( (Conf::MappingNode *) (parser->getHookSequence()));
+    audioPreference.unserialize ( (Conf::MappingNode *) (parser->getAudioSequence()));
+    shortcutPreferences.unserialize ( (Conf::MappingNode *) (parser->getShortcutSequence()));
 
-	_debug ("Loading account map");
+    Conf::SequenceNode *seq = parser->getAccountSequence();
 
-	short nbAccount = 0;
-	TokenList sections = _config.getSections();
-	std::string accountType;
-	Account *tmpAccount = 0;
-	std::vector<std::string> account_order;
+    // Each element in sequence is a new account to create
+    Conf::Sequence::iterator iterSeq = seq->getSequence()->begin();
 
-	TokenList::iterator iter = sections.begin();
+    Conf::Key accTypeKey ("type");
+    Conf::Key accID ("id");
+    Conf::Key alias ("alias");
 
-	// Those calls that are placed to an uri that cannot be
-	// associated to an account are using that special account.
-	// An account, that is not account, in the sense of
-	// registration. This is useful since the Account object
-	// provides a handful of method that simplifies URI creation
-	// and loading of various settings.
-	_directIpAccount = AccountCreator::createAccount(
-			AccountCreator::SIP_DIRECT_IP_ACCOUNT, "");
+    while (iterSeq != seq->getSequence()->end()) {
 
-	_debug ("Create default \"account\" (used as default UDP transport)");
-	if (_directIpAccount == NULL) {
+        // Pointer to the account and account preferences map
+        Account *tmpAccount = NULL;
+        Conf::MappingNode *map = (Conf::MappingNode *) (*iterSeq);
 
-		_debug ("Failed to create default \"account\"");
-	} else {
+        // Scalar node from yaml configuration
+        Conf::ScalarNode * val = NULL;
 
-		_accountMap[IP2IP_PROFILE] = _directIpAccount;
+        // Search for account types (IAX/IP2IP)
+        val = (Conf::ScalarNode *) (map->getValue (accTypeKey));
+        Conf::Value accountType;
 
-		// Force IP2IP settings to be loaded to be loaded
-		// No registration in the sense of the REGISTER method is performed.
-		_directIpAccount->registerVoIPLink();
+        if (val)
+            accountType = val->getValue();
+        else
+            accountType = "SIP"; // Assume type is SIP if not specified
 
-		// SIPVoIPlink is used as a singleton, it is the first call to instance here
-		// The SIP library initialization is done in the SIPVoIPLink constructor
-		// We need the IP2IP settings to be loaded at this time as they are used
-		// for default sip transport
+        // search for account id
+        val = NULL;
+        val = (Conf::ScalarNode *) (map->getValue (accID));
+        Conf::Value accountid;
 
-		// _directIpAccount->setVoIPLink(SIPVoIPLink::instance (""));
-		_directIpAccount->setVoIPLink();
+        if (val)
+            accountid = val->getValue();
 
-	}
+        // search for alias (to get rid of the "ghost" account)
+        val = NULL;
+        val = (Conf::ScalarNode *) (map->getValue (alias));
+        Conf::Value accountAlias;
 
-	// initialize other accounts
-	while (iter != sections.end()) {
-		// Check if it starts with "Account:" (SIP and IAX pour le moment)
-		if ((int) (iter->find("Account:")) != 0) {
-			iter++;
-			continue;
-		}
+        if (val)
+            accountAlias = val->getValue();
 
-		accountType = getConfigString(*iter, CONFIG_ACCOUNT_TYPE);
+        // do not insert in account map if id or alias is empty
+        if (accountid.empty() || accountAlias.empty()) {
+            iterSeq++;
+            continue;
+        }
+
+        // Create a default account for specific type
+        if (accountType == "SIP" && accountid != "IP2IP") {
+            _debug ("Manager: Create SIP account: %s", accountid.c_str());
+            tmpAccount = AccountCreator::createAccount (AccountCreator::SIP_ACCOUNT, accountid);
+        } else if (accountType == "IAX" && accountid != "IP2IP") {
+            _debug ("Manager: Create IAX account: %s", accountid.c_str());
+            tmpAccount = AccountCreator::createAccount (AccountCreator::IAX_ACCOUNT, accountid);
+        }
+
+        // Fill account with configuration preferences
+        if (tmpAccount != NULL) {
+
+            try {
 
-		if (accountType == "SIP") {
-			tmpAccount = AccountCreator::createAccount(
-					AccountCreator::SIP_ACCOUNT, *iter);
-		}
+                tmpAccount->unserialize (map);
+            } catch (SipAccountException &e) {
+                _error ("Manager: %s", e.what());
+            }
 
-		else if (accountType == "IAX") {
-			tmpAccount = AccountCreator::createAccount(
-					AccountCreator::IAX_ACCOUNT, *iter);
-		}
+            _accountMap[accountid] = tmpAccount;
+            _debug ("Manager: Loading account %s (size %d)", accountid.c_str(), _accountMap.size());
 
-		else {
-			_error ("Unknown %s param in config file (%s)", CONFIG_ACCOUNT_TYPE, accountType.c_str());
-		}
+            tmpAccount->setVoIPLink();
+            nbAccount++;
+        }
 
-		if (tmpAccount != NULL) {
-			_debug ("Loading account %s ", iter->c_str());
-			_accountMap[iter->c_str()] = tmpAccount;
-			// tmpAccount->setVoIPLink(SIPVoIPLink::instance (""));
-			tmpAccount->setVoIPLink();
-			nbAccount++;
-		}
+        iterSeq++;
+    }
 
-		iter++;
-	}
+    try {
+        delete parser;
+    } catch (Conf::YamlParserException &e) {
+        _error ("Manager: %s", e.what());
+    }
 
-	_debug ("nb account loaded %i \n", nbAccount);
+    parser = NULL;
+
+    return nbAccount;
 
-	return nbAccount;
 }
 
-void ManagerImpl::unloadAccountMap () {
+void ManagerImpl::unloadAccountMap ()
+{
+    AccountMap::iterator iter = _accountMap.begin();
+
+    while (iter != _accountMap.end()) {
 
-	AccountMap::iterator iter = _accountMap.begin();
+        _debug ("Manager: Unloading account %s", iter->first.c_str());
 
-	while (iter != _accountMap.end()) {
+        delete iter->second;
+        iter->second = NULL;
 
-		_debug ("Unloading account %s\n", iter->first.c_str());
+        iter++;
+    }
 
-		delete iter->second;
-		iter->second = 0;
+    _debug ("Manager: Clear account map");
+    _accountMap.clear();
+    _debug ("Manager: Unload account map");
 
-		iter++;
-	}
 
-	_accountMap.clear();
 }
 
-bool ManagerImpl::accountExists (const AccountID& accountID) {
-	AccountMap::iterator iter = _accountMap.find(accountID);
+bool ManagerImpl::accountExists (const AccountID& accountID)
+{
+    AccountMap::iterator iter = _accountMap.find (accountID);
 
-	if (iter == _accountMap.end()) {
-		return false;
-	}
+    if (iter == _accountMap.end()) {
+        return false;
+    }
 
-	return true;
+    return true;
 }
 
 Account*
-ManagerImpl::getAccount (const AccountID& accountID) {
-	// In our definition,
-	// this is the "direct ip calls account"
-	if (accountID == AccountNULL) {
-		_debug ("Returns the direct IP account");
-		return _directIpAccount;
-	}
+ManagerImpl::getAccount (const AccountID& accountID)
+{
+    // In our definition,
+    // this is the "direct ip calls account"
+    if (accountID == AccountNULL) {
+        _debug ("Returns the direct IP account");
+        return _directIpAccount;
+    }
 
-	AccountMap::iterator iter = _accountMap.find(accountID);
+    AccountMap::iterator iter = _accountMap.find (accountID);
 
-	if (iter == _accountMap.end()) {
-		return NULL;
-	}
+    if (iter == _accountMap.end()) {
+        return NULL;
+    }
 
-	return iter->second;
+    return iter->second;
 }
 
 AccountID ManagerImpl::getAccountIdFromNameAndServer (
-		const std::string& userName, const std::string& server) {
-
-	AccountMap::iterator iter;
-	SIPAccount *account;
-
-	_info ("Manager : username = %s , server = %s", userName.c_str(), server.c_str());
-	// Try to find the account id from username and server name by full match
-
-	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-		account = dynamic_cast<SIPAccount *> (iter->second);
-
-		if (account != NULL) {
-			if (account->fullMatch(userName, server)) {
-				_debug ("Manager: Matching account id in request is a fullmatch %s@%s", userName.c_str(), server.c_str());
-				return iter->first;
-			}
-		}
-	}
-
-	// We failed! Then only match the hostname
-	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-		account = dynamic_cast<SIPAccount *> (iter->second);
-
-		if (account != NULL) {
-			if (account->hostnameMatch(server)) {
-				_debug ("Manager: Matching account id in request with hostname %s", server.c_str());
-				return iter->first;
-			}
-		}
-	}
-
-	// We failed! Then only match the username
-	for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
-		account = dynamic_cast<SIPAccount *> (iter->second);
-
-		if (account != NULL) {
-			if (account->userMatch(userName)) {
-				_debug ("Manager: Matching account id in request with username %s", userName.c_str());
-				return iter->first;
-			}
-		}
-	}
-
-	 _debug ("Manager: Username %s or server %s doesn't match any account, using IP2IP", userName.c_str(), server.c_str());
-
-	// Failed again! return AccountNULL
-	return AccountNULL;
-}
-
-std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () {
-
-	std::map<std::string, int32_t> settings;
-
-	settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_ENABLE",
-			getConfigInt(ADDRESSBOOK, ADDRESSBOOK_ENABLE)));
-	settings.insert(std::pair<std::string, int32_t>("ADDRESSBOOK_MAX_RESULTS",
-			getConfigInt(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS)));
-	settings.insert(std::pair<std::string, int32_t>(
-			"ADDRESSBOOK_DISPLAY_CONTACT_PHOTO", getConfigInt(ADDRESSBOOK,
-					ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)));
-	settings.insert(std::pair<std::string, int32_t>(
-			"ADDRESSBOOK_DISPLAY_PHONE_BUSINESS", getConfigInt(ADDRESSBOOK,
-					ADDRESSBOOK_DISPLAY_PHONE_BUSINESS)));
-	settings.insert(std::pair<std::string, int32_t>(
-			"ADDRESSBOOK_DISPLAY_PHONE_HOME", getConfigInt(ADDRESSBOOK,
-					ADDRESSBOOK_DISPLAY_PHONE_HOME)));
-	settings.insert(std::pair<std::string, int32_t>(
-			"ADDRESSBOOK_DISPLAY_PHONE_MOBILE", getConfigInt(ADDRESSBOOK,
-					ADDRESSBOOK_DISPLAY_PHONE_MOBILE)));
-
-	return settings;
+    const std::string& userName, const std::string& server)
+{
+
+    AccountMap::iterator iter;
+    SIPAccount *account;
+
+    _info ("Manager : username = %s , server = %s", userName.c_str(), server.c_str());
+    // Try to find the account id from username and server name by full match
+
+    for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
+        account = dynamic_cast<SIPAccount *> (iter->second);
+
+        if (account != NULL) {
+            if (account->fullMatch (userName, server)) {
+                _debug ("Manager: Matching account id in request is a fullmatch %s@%s", userName.c_str(), server.c_str());
+                return iter->first;
+            }
+        }
+    }
+
+    // We failed! Then only match the hostname
+    for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
+        account = dynamic_cast<SIPAccount *> (iter->second);
+
+        if (account != NULL) {
+            if (account->hostnameMatch (server)) {
+                _debug ("Manager: Matching account id in request with hostname %s", server.c_str());
+                return iter->first;
+            }
+        }
+    }
+
+    // We failed! Then only match the username
+    for (iter = _accountMap.begin(); iter != _accountMap.end(); ++iter) {
+        account = dynamic_cast<SIPAccount *> (iter->second);
+
+        if (account != NULL) {
+            if (account->userMatch (userName)) {
+                _debug ("Manager: Matching account id in request with username %s", userName.c_str());
+                return iter->first;
+            }
+        }
+    }
+
+    _debug ("Manager: Username %s or server %s doesn't match any account, using IP2IP", userName.c_str(), server.c_str());
+
+    // Failed again! return AccountNULL
+    return AccountNULL;
+}
+
+std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings ()
+{
+
+    std::map<std::string, int32_t> settings;
+
+    settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_ENABLE", addressbookPreference.getEnabled() ? 1 : 0));
+    settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_MAX_RESULTS", addressbookPreference.getMaxResults()));
+    settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO", addressbookPreference.getPhoto() ? 1 : 0));
+    settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS", addressbookPreference.getBusiness() ? 1 : 0));
+    settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_PHONE_HOME", addressbookPreference.getHome() ? 1 : 0));
+    settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_PHONE_MOBILE", addressbookPreference.getMobile() ? 1 : 0));
+
+    return settings;
 }
 
 void ManagerImpl::setAddressbookSettings (
-		const std::map<std::string, int32_t>& settings) {
+    const std::map<std::string, int32_t>& settings)
+{
 
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_ENABLE, (*settings.find(
-			"ADDRESSBOOK_ENABLE")).second);
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS, (*settings.find(
-			"ADDRESSBOOK_MAX_RESULTS")).second);
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, (*settings.find(
-			"ADDRESSBOOK_DISPLAY_CONTACT_PHOTO")).second);
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, (*settings.find(
-			"ADDRESSBOOK_DISPLAY_PHONE_BUSINESS")).second);
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_HOME, (*settings.find(
-			"ADDRESSBOOK_DISPLAY_PHONE_HOME")).second);
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_MOBILE, (*settings.find(
-			"ADDRESSBOOK_DISPLAY_PHONE_MOBILE")).second);
 
-	// Write it to the configuration file
-	saveConfig();
+    addressbookPreference.setEnabled ( (settings.find ("ADDRESSBOOK_ENABLE")->second == 1) ? true : false);
+    addressbookPreference.setMaxResults (settings.find ("ADDRESSBOOK_MAX_RESULTS")->second);
+    addressbookPreference.setPhoto ( (settings.find ("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO")->second == 1) ? true : false);
+    addressbookPreference.setBusiness ( (settings.find ("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS")->second == 1) ? true : false);
+    addressbookPreference.setHone ( (settings.find ("ADDRESSBOOK_DISPLAY_PHONE_HOME")->second == 1) ? true : false);
+    addressbookPreference.setMobile ( (settings.find ("ADDRESSBOOK_DISPLAY_PHONE_MOBILE")->second == 1) ? true : false);
+
+    // Write it to the configuration file
+    saveConfig();
 }
 
-void ManagerImpl::setAddressbookList (const std::vector<std::string>& list) {
+void ManagerImpl::setAddressbookList (const std::vector<std::string>& list)
+{
+
+    std::string s = serialize (list);
+    addressbookPreference.setList (s);
 
-	std::string s = serialize(list);
-	setConfig(ADDRESSBOOK, ADDRESSBOOK_LIST, s);
 }
 
-std::vector<std::string> ManagerImpl::getAddressbookList (void) {
+std::vector<std::string> ManagerImpl::getAddressbookList (void)
+{
 
-	std::string s = getConfigString(ADDRESSBOOK, ADDRESSBOOK_LIST);
-	return unserialize(s);
+    std::string s = addressbookPreference.getList();
+    return unserialize (s);
 }
 
-std::map<std::string, std::string> ManagerImpl::getHookSettings () {
+std::map<std::string, std::string> ManagerImpl::getHookSettings ()
+{
 
-	std::map<std::string, std::string> settings;
+    std::map<std::string, std::string> settings;
 
-	settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_FIELD",
-			getConfigString(HOOKS, URLHOOK_SIP_FIELD)));
-	settings.insert(std::pair<std::string, std::string>("URLHOOK_COMMAND",
-			getConfigString(HOOKS, URLHOOK_COMMAND)));
-	settings.insert(std::pair<std::string, std::string>("URLHOOK_SIP_ENABLED",
-			getConfigString(HOOKS, URLHOOK_SIP_ENABLED)));
-	settings.insert(std::pair<std::string, std::string>("URLHOOK_IAX2_ENABLED",
-			getConfigString(HOOKS, URLHOOK_IAX2_ENABLED)));
-	settings.insert(std::pair<std::string, std::string>(
-			"PHONE_NUMBER_HOOK_ENABLED", getConfigString(HOOKS,
-					PHONE_NUMBER_HOOK_ENABLED)));
-	settings.insert(std::pair<std::string, std::string>(
-			"PHONE_NUMBER_HOOK_ADD_PREFIX", getConfigString(HOOKS,
-					PHONE_NUMBER_HOOK_ADD_PREFIX)));
 
-	return settings;
+    settings.insert (std::pair<std::string, std::string> ("URLHOOK_IAX2_ENABLED", hookPreference.getIax2Enabled() ? "true" : "false"));
+    settings.insert (std::pair<std::string, std::string> ("PHONE_NUMBER_HOOK_ADD_PREFIX", hookPreference.getNumberAddPrefix()));
+    settings.insert (std::pair<std::string, std::string> ("PHONE_NUMBER_HOOK_ENABLED", hookPreference.getNumberEnabled() ? "true" : "false"));
+    settings.insert (std::pair<std::string, std::string> ("URLHOOK_SIP_ENABLED", hookPreference.getSipEnabled() ? "true" : "false"));
+    settings.insert (std::pair<std::string, std::string> ("URLHOOK_COMMAND", hookPreference.getUrlCommand()));
+    settings.insert (std::pair<std::string, std::string> ("URLHOOK_SIP_FIELD", hookPreference.getUrlSipField()));
+
+    return settings;
 }
 
-void ManagerImpl::setHookSettings (
-		const std::map<std::string, std::string>& settings) {
+void ManagerImpl::setHookSettings (const std::map<std::string, std::string>& settings)
+{
 
-	setConfig(HOOKS, URLHOOK_SIP_FIELD,
-			(*settings.find("URLHOOK_SIP_FIELD")).second);
-	setConfig(HOOKS, URLHOOK_COMMAND,
-			(*settings.find("URLHOOK_COMMAND")).second);
-	setConfig(HOOKS, URLHOOK_SIP_ENABLED,
-			(*settings.find("URLHOOK_SIP_ENABLED")).second);
-	setConfig(HOOKS, URLHOOK_IAX2_ENABLED, (*settings.find(
-			"URLHOOK_IAX2_ENABLED")).second);
-	setConfig(HOOKS, PHONE_NUMBER_HOOK_ENABLED, (*settings.find(
-			"PHONE_NUMBER_HOOK_ENABLED")).second);
-	setConfig(HOOKS, PHONE_NUMBER_HOOK_ADD_PREFIX, (*settings.find(
-			"PHONE_NUMBER_HOOK_ADD_PREFIX")).second);
+    hookPreference.setIax2Enabled ( (settings.find ("URLHOOK_IAX2_ENABLED")->second == "true") ? true : false);
+    hookPreference.setNumberAddPrefix (settings.find ("PHONE_NUMBER_HOOK_ADD_PREFIX")->second);
+    hookPreference.setNumberEnabled ( (settings.find ("PHONE_NUMBER_HOOK_ENABLED")->second == "true") ? true : false);
+    hookPreference.setSipEnabled ( (settings.find ("URLHOOK_SIP_ENABLED")->second == "true") ? true : false);
+    hookPreference.setUrlCommand (settings.find ("URLHOOK_COMMAND")->second);
+    hookPreference.setUrlSipField (settings.find ("URLHOOK_SIP_FIELD")->second);
 
-	// Write it to the configuration file
-	saveConfig();
+    // Write it to the configuration file
+    saveConfig();
 }
 
 void ManagerImpl::check_call_configuration (const CallID& id,
-		const std::string &to, Call::CallConfiguration *callConfig) {
-	Call::CallConfiguration config;
+        const std::string &to, Call::CallConfiguration *callConfig)
+{
+    Call::CallConfiguration config;
 
-	if (to.find(SIP_SCHEME) == 0 || to.find(SIPS_SCHEME) == 0) {
-		_debug ("Manager: Sip scheme detected (sip: or sips:), sending IP2IP Call");
-		config = Call::IPtoIP;
-	} else {
-		config = Call::Classic;
-	}
+    if (to.find (SIP_SCHEME) == 0 || to.find (SIPS_SCHEME) == 0) {
+        _debug ("Manager: Sip scheme detected (sip: or sips:), sending IP2IP Call");
+        config = Call::IPtoIP;
+    } else {
+        config = Call::Classic;
+    }
 
-	associateConfigToCall(id, config);
+    associateConfigToCall (id, config);
 
-	*callConfig = config;
+    *callConfig = config;
 }
 
 bool ManagerImpl::associateConfigToCall (const CallID& callID,
-		Call::CallConfiguration config) {
+        Call::CallConfiguration config)
+{
 
-	if (getConfigFromCall(callID) == CallConfigNULL) { // nothing with the same ID
-		_callConfigMap[callID] = config;
-		_debug ("Manager: Associate call %s with config %i", callID.c_str(), config);
-		return true;
-	} else {
-		return false;
-	}
+    if (getConfigFromCall (callID) == CallConfigNULL) { // nothing with the same ID
+        _callConfigMap[callID] = config;
+        _debug ("Manager: Associate call %s with config %i", callID.c_str(), config);
+        return true;
+    } else {
+        return false;
+    }
 }
 
-Call::CallConfiguration ManagerImpl::getConfigFromCall (const CallID& callID) {
+Call::CallConfiguration ManagerImpl::getConfigFromCall (const CallID& callID)
+{
 
-	CallConfigMap::iterator iter = _callConfigMap.find(callID);
+    CallConfigMap::iterator iter = _callConfigMap.find (callID);
 
-	if (iter == _callConfigMap.end()) {
-		return (Call::CallConfiguration) CallConfigNULL;
-	} else {
-		return iter->second;
-	}
+    if (iter == _callConfigMap.end()) {
+        return (Call::CallConfiguration) CallConfigNULL;
+    } else {
+        return iter->second;
+    }
 }
 
-bool ManagerImpl::removeCallConfig (const CallID& callID) {
+bool ManagerImpl::removeCallConfig (const CallID& callID)
+{
 
-	if (_callConfigMap.erase(callID)) {
-		return true;
-	}
+    if (_callConfigMap.erase (callID)) {
+        return true;
+    }
 
-	return false;
+    return false;
 }
 
-std::map<std::string, std::string> ManagerImpl::getCallDetails (const CallID& callID) {
+std::map<std::string, std::string> ManagerImpl::getCallDetails (const CallID& callID)
+{
 
-	std::map<std::string, std::string> call_details;
-	AccountID accountid;
-	Account *account;
-	VoIPLink *link;
-	Call *call = NULL;
-	std::stringstream type;
+    std::map<std::string, std::string> call_details;
+    AccountID accountid;
+    Account *account;
+    VoIPLink *link;
+    Call *call = NULL;
+    std::stringstream type;
 
-	// We need here to retrieve the call information attached to the call ID
-	// To achieve that, we need to get the voip link attached to the call
-	// But to achieve that, we need to get the account the call was made with
+    // We need here to retrieve the call information attached to the call ID
+    // To achieve that, we need to get the voip link attached to the call
+    // But to achieve that, we need to get the account the call was made with
 
-	// So first we fetch the account
-	accountid = getAccountFromCall(callID);
+    // So first we fetch the account
+    accountid = getAccountFromCall (callID);
 
-	// Then the VoIP link this account is linked with (IAX2 or SIP)
-	if ((account = getAccount(accountid)) != 0) {
-		link = account->getVoIPLink();
+    // Then the VoIP link this account is linked with (IAX2 or SIP)
+    if ( (account = getAccount (accountid)) != 0) {
+        link = account->getVoIPLink();
 
-		if (link) {
-			call = link->getCall(callID);
-		}
-	}
+        if (link) {
+            call = link->getCall (callID);
+        }
+    }
 
-	if (call) {
-		type << call->getCallType();
-		call_details.insert(std::pair<std::string, std::string>("ACCOUNTID", accountid));
-		call_details.insert(std::pair<std::string, std::string>("PEER_NUMBER", call->getPeerNumber()));
-		call_details.insert(std::pair<std::string, std::string>("PEER_NAME", call->getPeerName()));
-		call_details.insert(std::pair<std::string, std::string>("DISPLAY_NAME", call->getDisplayName()));
-		call_details.insert(std::pair<std::string, std::string>("CALL_STATE", call->getStateStr()));
-		call_details.insert(std::pair<std::string, std::string>("CALL_TYPE", type.str()));
-	} else {
-		_error ("Manager: Error: getCallDetails()");
-		call_details.insert(std::pair<std::string, std::string>("ACCOUNTID", AccountNULL));
-		call_details.insert(std::pair<std::string, std::string>("PEER_NUMBER", "Unknown"));
-		call_details.insert(std::pair<std::string, std::string>("PEER_NAME", "Unknown"));
-		call_details.insert(std::pair<std::string, std::string>("CALL_STATE", "UNKNOWN"));
-		call_details.insert(std::pair<std::string, std::string>("CALL_TYPE", "0"));
-	}
+    if (call) {
+        type << call->getCallType();
+        call_details.insert (std::pair<std::string, std::string> ("ACCOUNTID", accountid));
+        call_details.insert (std::pair<std::string, std::string> ("PEER_NUMBER", call->getPeerNumber()));
+        call_details.insert (std::pair<std::string, std::string> ("PEER_NAME", call->getPeerName()));
+        call_details.insert (std::pair<std::string, std::string> ("DISPLAY_NAME", call->getDisplayName()));
+        call_details.insert (std::pair<std::string, std::string> ("CALL_STATE", call->getStateStr()));
+        call_details.insert (std::pair<std::string, std::string> ("CALL_TYPE", type.str()));
+    } else {
+        _error ("Manager: Error: getCallDetails()");
+        call_details.insert (std::pair<std::string, std::string> ("ACCOUNTID", AccountNULL));
+        call_details.insert (std::pair<std::string, std::string> ("PEER_NUMBER", "Unknown"));
+        call_details.insert (std::pair<std::string, std::string> ("PEER_NAME", "Unknown"));
+        call_details.insert (std::pair<std::string, std::string> ("CALL_STATE", "UNKNOWN"));
+        call_details.insert (std::pair<std::string, std::string> ("CALL_TYPE", "0"));
+    }
 
-	return call_details;
+    return call_details;
 }
 
-std::map<std::string, std::string> ManagerImpl::send_history_to_client (void) {
-	return _history->get_history_serialized();
+std::map<std::string, std::string> ManagerImpl::send_history_to_client (void)
+{
+    return _history->get_history_serialized();
 }
 
 void ManagerImpl::receive_history_from_client (std::map<std::string,
-		std::string> history) {
-	_history->set_serialized_history(history, Manager::instance().getConfigInt(
-			PREFERENCES, CONFIG_HISTORY_LIMIT));
-	_history->save_history();
+        std::string> history)
+{
+
+    _history->set_serialized_history (history, preferences.getHistoryLimit());;
+    _history->save_history();
 }
 
-std::vector<std::string> ManagerImpl::getCallList (void) {
-	std::vector<std::string> v;
+std::vector<std::string> ManagerImpl::getCallList (void)
+{
+    std::vector<std::string> v;
 
-	CallAccountMap::iterator iter = _callAccountMap.begin();
+    CallAccountMap::iterator iter = _callAccountMap.begin();
 
-	while (iter != _callAccountMap.end()) {
-		v.push_back(iter->first.data());
-		iter++;
-	}
+    while (iter != _callAccountMap.end()) {
+        v.push_back (iter->first.data());
+        iter++;
+    }
 
-	return v;
+    return v;
 }
 
 std::map<std::string, std::string> ManagerImpl::getConferenceDetails (
-		const ConfID& confID) {
+    const ConfID& confID)
+{
 
-	std::map<std::string, std::string> conf_details;
-	ConferenceMap::iterator iter_conf;
+    std::map<std::string, std::string> conf_details;
+    ConferenceMap::iterator iter_conf;
 
-	iter_conf = _conferencemap.find(confID);
+    iter_conf = _conferencemap.find (confID);
 
-	Conference* conf = NULL;
+    Conference* conf = NULL;
 
-	if (iter_conf != _conferencemap.end()) {
+    if (iter_conf != _conferencemap.end()) {
 
-		conf = iter_conf->second;
-		conf_details.insert(std::pair<std::string, std::string>("CONFID",
-				confID));
-		conf_details.insert(std::pair<std::string, std::string>("CONF_STATE",
-				conf->getStateStr()));
-	}
+        conf = iter_conf->second;
+        conf_details.insert (std::pair<std::string, std::string> ("CONFID",
+                             confID));
+        conf_details.insert (std::pair<std::string, std::string> ("CONF_STATE",
+                             conf->getStateStr()));
+    }
 
-	return conf_details;
+    return conf_details;
 }
 
-std::vector<std::string> ManagerImpl::getConferenceList (void) {
-	_debug ("ManagerImpl::getConferenceList");
-	std::vector<std::string> v;
+std::vector<std::string> ManagerImpl::getConferenceList (void)
+{
+    _debug ("ManagerImpl::getConferenceList");
+    std::vector<std::string> v;
 
-	ConferenceMap::iterator iter = _conferencemap.begin();
+    ConferenceMap::iterator iter = _conferencemap.begin();
 
-	while (iter != _conferencemap.end()) {
-		v.push_back(iter->first);
-		iter++;
-	}
+    while (iter != _conferencemap.end()) {
+        v.push_back (iter->first);
+        iter++;
+    }
 
-	return v;
+    return v;
 }
 
 std::vector<std::string> ManagerImpl::getParticipantList (
-		const std::string& confID) {
+    const std::string& confID)
+{
 
-        _debug ("ManagerImpl: Get participant list %s", confID.c_str());
-	std::vector<std::string> v;
+    _debug ("ManagerImpl: Get participant list %s", confID.c_str());
+    std::vector<std::string> v;
 
-	ConferenceMap::iterator iter_conf = _conferencemap.find(confID);
-	Conference *conf = NULL;
+    ConferenceMap::iterator iter_conf = _conferencemap.find (confID);
+    Conference *conf = NULL;
 
-	if (iter_conf != _conferencemap.end())
-		conf = iter_conf->second;
+    if (iter_conf != _conferencemap.end())
+        conf = iter_conf->second;
 
-	if (conf != NULL) {
-		ParticipantSet participants = conf->getParticipantList();
-		ParticipantSet::iterator iter_participant = participants.begin();
+    if (conf != NULL) {
+        ParticipantSet participants = conf->getParticipantList();
+        ParticipantSet::iterator iter_participant = participants.begin();
 
-		while (iter_participant != participants.end()) {
+        while (iter_participant != participants.end()) {
 
-			v.push_back(*iter_participant);
+            v.push_back (*iter_participant);
 
-			iter_participant++;
-		}
-	}
-	else {
-	  _warn("Manager: Warning: Did not found conference %s", confID.c_str());
-	}
+            iter_participant++;
+        }
+    } else {
+        _warn ("Manager: Warning: Did not found conference %s", confID.c_str());
+    }
 
-	return v;
+    return v;
 }
 
+
diff --git a/sflphone-common/src/managerimpl.h b/sflphone-common/src/managerimpl.h
index 35e236c4fd4a18648bc3bd7f954257f120a9ce76..3c8be5e9eec5d50ddf3a640a3100618e12e74dce 100644
--- a/sflphone-common/src/managerimpl.h
+++ b/sflphone-common/src/managerimpl.h
@@ -4,6 +4,7 @@
  *  Author: Laurielle Lea <laurielle.lea@savoirfairelinux.com>
  *  Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
  *  Author: Guillaume Carmel-Archambault <guillaume.carmel-archambault@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
@@ -50,11 +51,16 @@
 #include "numbercleaner.h"
 
 #include "audio/sound/tonelist.h"  // for Tone::TONEID declaration
-#include "audio/sound/audiofile.h" // AudioFile class contained by value here 
+#include "audio/sound/audiofile.h"
 #include "audio/sound/dtmf.h" // DTMF class contained by value here
 #include "audio/codecs/codecDescriptor.h" // CodecDescriptor class contained by value here
 
 #include "audio/mainbuffer.h"
+#include "yamlemitter.h"
+#include "yamlparser.h"
+#include "preferences.h"
+
+#include "im/InstantMessaging.h"
 
 class AudioLayer;
 class GuiFramework;
@@ -84,15 +90,14 @@ typedef std::set<CallID> CallIDSet;
 /** To send multiple string */
 typedef std::list<std::string> TokenList;
 
-/** To store conference objects by call ids 
+/** To store conference objects by call ids
     used to retreive the conference according to a call */
 typedef std::map<CallID, Conference*> ConferenceCallMap;
 
 /** To store conference objects by conference ids */
 typedef std::map<CallID, Conference*> ConferenceMap;
 
-static CallID default_conf = "conf"; 
-
+static CallID default_conf = "conf";
 
 static char * mapStateToChar[] = {
     (char*) "UNREGISTERED",
@@ -102,1243 +107,1333 @@ static char * mapStateToChar[] = {
     (char*) "ERRORAUTH",
     (char*) "ERRORNETWORK",
     (char*) "ERRORHOST",
-    (char*) "ERROREXISTSTUN",    
-    (char*) "ERRORCONFSTUN"    
+    (char*) "ERROREXISTSTUN",
+    (char*) "ERRORCONFSTUN"
 };
 
 /** Manager (controller) of sflphone daemon */
-class ManagerImpl {
-  public:
-    ManagerImpl (void);
-    ~ManagerImpl (void);
-
-    /**
-     * Initialisation of thread (sound) and map.
-     * Init a new VoIPLink, audio codec and audio driver
-     */
-    void init (void);
-
-    /**
-     * Terminate all thread (sound, link) and unload AccountMap
-     */
-    void terminate (void);
-
-    /**
-     * Set user interface manager.
-     * @param man The DBUS interface implementation
-     */
-    void setDBusManager (DBusManagerImpl* man) { _dbus = man; }
-
-    /**
-     * Accessor to audiodriver.
-     * it's multi-thread and use mutex internally
-     * @return AudioLayer*  The audio layer object
-     */
-    AudioLayer* getAudioDriver(void) const { return _audiodriver; }
-
-    /**
-     * Get a descriptor map of codec available
-     * @return CodecDescriptor  The internal codec map
-     */
-    CodecDescriptor& getCodecDescriptorMap(void) {return _codecDescriptorMap;}
-
-    /**
-     * Functions which occur with a user's action
-     * Place a new call
-     * @param accountId	The account to make tha call with
-     * @param id  The call identifier
-     * @param to  The recipient of the call
-     * @return bool true on success
-     *		  false otherwise
-     */
-    bool outgoingCall(const AccountID& accountId, const CallID& id, const std::string& to);
-
-    /**
-     * Functions which occur with a user's action
-     * Answer the call
-     * @param id  The call identifier
-     */
-    bool answerCall(const CallID& id);
-
-    /**
-     * Functions which occur with a user's action
-     * Hangup the call
-     * @param id  The call identifier
-     */
-    bool hangupCall(const CallID& id);
-
-
-    /**
-     * Functions which occur with a user's action
-     * Hangup the conference (hangup every participants)
-     * @param id  The call identifier
-     */
-    bool hangupConference(const ConfID& id);
-
-    /**
-     * Functions which occur with a user's action
-     * Cancel the call
-     * @param id  The call identifier
-     */
-    bool cancelCall(const CallID& id);
-
-    /**
-     * Functions which occur with a user's action
-     * Put the call on hold
-     * @param id  The call identifier
-     */
-    bool onHoldCall(const CallID& id);
-
-    /**
-     * Functions which occur with a user's action
-     * Put the call off hold
-     * @param id  The call identifier
-     */
-    bool offHoldCall(const CallID& id);
-
-    /**
-     * Functions which occur with a user's action
-     * Transfer the call
-     * @param id  The call identifier
-     * @param to  The recipient of the transfer
-     */
-    bool transferCall(const CallID& id, const std::string& to);
-
-    /**
-     * Notify the client the transfer is successful
-     */
-    void transferSucceded();
-
-    /**
-     * Notify the client that the transfer failed
-     */
-    void transferFailed();
-
-    /**
-     * Functions which occur with a user's action
-     * Refuse the call
-     * @param id  The call identifier
-     */
-    bool refuseCall(const CallID& id);
-
-    /**
-     * Create a new conference given two participant
-     * @param the first participant ID
-     * @param the second participant ID
-     */ 
-    Conference* createConference(const CallID& id1, const CallID& id2);
-
-    /**
-     * Delete this conference
-     * @param the conference ID
-     */ 
-    void removeConference(const CallID& conference_id);
-
-    /**
-     * Return the conference id for which this call is attached
-     * @ param the call id
-     */
-    Conference* getConferenceFromCallID(const CallID& call_id);
-
-    /**
-     * Hold every participant to a conference
-     * @param the conference id
-     */
-    void holdConference(const CallID& conferece_id);
-
-    /**
-     * Unhold all conference participants 
-     * @param the conference id
-     */
-    void unHoldConference(const CallID& conference_id);
-
-    /**
-     * Test if this id is a conference (usefull to test current call)
-     * @param the call id
-     */
-    bool isConference(const CallID& call_id);
-
-    /**
-     * Test if a call id particips to this conference
-     * @param the call id
-     */
-    bool participToConference(const CallID& call_id);
-
-    /**
-     * Add a participant to a conference
-     * @param the call id
-     * @param the conference id
-     */
-    void addParticipant(const CallID& call_id, const CallID& conference_id);
-
-    /**
-     * Bind the main participant to a conference (mainly called on a double click action)
-     * @param the conference id
-     */
-    void addMainParticipant(const CallID& conference_id);
-
-    /**
-     * Join two participants to create a conference
-     * @param the fist call id
-     * @param the second call id
-     */
-    void joinParticipant(const CallID& call_id1, const CallID& call_id2);
-
-    /**
-     * Detach a participant from a conference, put the call on hold, do not hangup it
-     * @param call id
-     * @param the current call id
-     */
-    void detachParticipant(const CallID& call_id, const CallID& current_call_id);
-
-    /**
-     * Remove the conference participant from a conference
-     * @param call id
-     */
-    void removeParticipant(const CallID& call_id);
-    
-    /**
-     * Process remaining participant given a conference and the current call id.
-     * Mainly called when a participant is detached or hagned up
-     * @param current call id
-     * @param conference pointer
-     */
-    void processRemainingParticipant(CallID current_call_id, Conference *conf);
-
-    /**
-     * Join two conference together into one unique conference
-     */
-    void joinConference(const CallID& conf_id1, const CallID& conf_id2);
-
-    void addStream(const CallID& call_id);
-
-    void removeStream(const CallID& call_id);
-
-    /**
-     * Save config to file
-     * @return true on success
-     *	    false otherwise
-     */
-    bool saveConfig (void);
-
-    /**
-     * Send registration to all enabled accounts
-     * @return 0 on registration success
-     *          1 otherelse
-     */
-    int initRegisterAccounts();
-
-    /**
-     * @return true if we tried to register once
-     */
-    bool _hasTriedToRegister;
-
-    /**
-     * Handle choice of the DTMF-send-way
-     * @param   id: callid of the line.
-     * @param   code: pressed key.
-     */
-    bool sendDtmf(const CallID& id, char code);
-
-    /**
-     * Play the dtmf-associated sound
-     * @param code  The pressed key
-     */
-    bool playDtmf (char code);
-
-    /**
-     * Play a ringtone
-     * @return bool True on success
-     *	      false otherwise
-     */
-    bool playTone ();
-
-    /**
-     * Play a special ringtone ( BUSY ) if there's at least one message on the voice mail
-     * @return bool True on success
-     *	      false otherwise
-     */
-    bool playToneWithMessage ();
-
-    /**
-     * Acts on the audio streams and audio files
-     */
-    void stopTone (void);
-
-    /**
-     * When receiving a new incoming call, add it to the callaccount map
-     * and notify user
-     * @param call A call pointer
-     * @param accountId an account id
-     * @return bool True if the call was added correctly
-     */
-    bool incomingCall(Call* call, const AccountID& accountId);
-
-    /**
-     * Notify the user that the recipient of the call has answered and the put the
-     * call in Current state
-     * @param id  The call identifier
-     */
-    void peerAnsweredCall(const CallID& id);
-
-    /**
-     * Rings back because the outgoing call is ringing and the put the
-     * call in Ringing state
-     * @param id  The call identifier
-     */
-    void peerRingingCall(const CallID& id);
-
-    /**
-     * Put the call in Hungup state, remove the call from the list
-     * @param id  The call identifier
-     */
-    void peerHungupCall(const CallID& id);
-
-    /**
-     * Notify the client with an incoming message
-     * @param accountId	The account identifier
-     * @param message The content of the message
-     */
-    void incomingMessage(const AccountID& accountId, const std::string& message);
-
-    /**
-     * Notify the client he has voice mails
-     * @param accountId	  The account identifier
-     * @param nb_msg The number of messages
-     */
-    void startVoiceMessageNotification(const AccountID& accountId, int nb_msg);
-
-    /**
-     * Notify the client through DBus that registration state has been updated
-     */
-    void connectionStatusNotification(void);
-
-    /**
-     * ConfigurationManager - Send registration request
-     * @param accountId The account to register/unregister
-     * @param enable The flag for the type of registration
-     *		 0 for unregistration request
-     *		 1 for registration request
-     */
-    void sendRegister( const ::std::string& accountId , const int32_t& enable);
-
-    bool getCallStatus(const std::string& sequenceId);
-
-    /**
-     * Get account list
-     * @return std::vector<std::string> A list of accoundIDs
-     */
-    std::vector< std::string >  getAccountList();
-
-    /**
-     * Set the account order in the config file
-     */
-    void setAccountsOrder (const std::string& order);
-
-    /**
-     * Load the accounts order set by the user from the sflphonedrc config file
-     * @return std::vector<std::string> A vector containing the account ID's
-     */
-    std::vector<std::string> loadAccountOrder ();
-
-    /**
-     * Retrieve details about a given account
-     * @param accountID	  The account identifier
-     * @return std::map< std::string, std::string > The account details
-     */
-    std::map< std::string, std::string > getAccountDetails(const AccountID& accountID);
-
-    /**
-     * Retrieve details about a given call
-     * @param callID	  The account identifier
-     * @return std::map< std::string, std::string > The call details
-     */
-    std::map< std::string, std::string > getCallDetails(const CallID& callID);
-
-    /**
-     * Get call list
-     * @return std::vector<std::string> A list of call IDs
-     */
-    std::vector< std::string >  getCallList (void);
-
-    /**
-     * Retrieve details about a given call
-     * @param callID	  The account identifier
-     * @return std::map< std::string, std::string > The call details
-     */
-    std::map< std::string, std::string > getConferenceDetails(const CallID& callID);
-
-    /**
-     * Get call list
-     * @return std::vector<std::string> A list of call IDs
-     */
-    std::vector< std::string >  getConferenceList (void);
-
-
-    /**
-     * Get a list of participant to a conference
-     * @return std::vector<std::string> A list of call IDs
-     */
-    std::vector< std::string >  getParticipantList (const std::string& confID);
-
-    /**
-     * Save the details of an existing account, given the account ID
-     * This will load the configuration map with the given data.
-     * It will also register/unregister links where the 'Enabled' switched.
-     * @param accountID	  The account identifier
-     * @param details	  The account parameters
-     */
-    void setAccountDetails( const ::std::string& accountID,
-	const std::map< ::std::string, ::std::string >& details );
-
-    /**
-     * Add a new account, and give it a new account ID automatically
-     * @param details The new account parameters
-     * @return The account Id given to the new account
-     */
-    std::string addAccount(const std::map< ::std::string, ::std::string >& details);
-
-    /**
-     * Delete an existing account, unregister VoIPLink associated, and
-     * purge from configuration.
-     * @param accountID	The account unique ID
-     */
-    void removeAccount(const AccountID& accountID);
-
-
-    /**
-     * Deletes all credentials defined for an account
-     * @param accountID The account unique ID
-     */
-    void deleteAllCredential(const AccountID& accountID);
-    
-    /**
-     * Get current codec name
-     * @param call id
-     * @return std::string The codec name
-     */
-    std::string getCurrentCodecName(const CallID& id);
-
-    /**
-     * Set input audio plugin
-     * @param audioPlugin The audio plugin
-     */
-    void setInputAudioPlugin(const std::string& audioPlugin);
-
-    /**
-     * Set output audio plugin
-     * @param audioPlugin The audio plugin
-     */
-    void setOutputAudioPlugin(const std::string& audioPlugin);
-
-    /**
-     * Get list of supported audio output device
-     * @return std::vector<std::string> A list of the audio devices supporting playback
-     */
-    std::vector<std::string> getAudioOutputDeviceList(void);
-
-    /**
-     * Set audio output device
-     * @param index The index of the soundcard
-     */
-    void setAudioOutputDevice(const int index);
-
-    /**
-     * Get list of supported audio input device
-     * @return std::vector<std::string> A list of the audio devices supporting capture
-     */
-    std::vector<std::string> getAudioInputDeviceList(void);
-
-    /**
-     * Set audio input device
-     * @param index The index of the soundcard
-     */
-    void setAudioInputDevice(const int index);
-
-    /**
-     * Get string array representing integer indexes of output and input device
-     * @return std::vector<std::string> A list of the current audio devices
-     */
-    std::vector<std::string> getCurrentAudioDevicesIndex();
-
-    /**
-     * Get index of an audio device
-     * @param name The string description of an audio device
-     * @return int  His index
-     */
-    int getAudioDeviceIndex( const std::string name );
-
-    /*
-     * Get current alsa plugin
-     * @return std::string  The Alsa plugin
-     */
-    std::string getCurrentAudioOutputPlugin( void );
-
-    /**
-     * Convert a list of payload in a special format, readable by the server.
-     * Required format: payloads separated with one slash.
-     * @return std::string The serializabled string
-     */
-    std::string serialize(std::vector<std::string> v);
-
-    std::vector<std::string> unserialize(std::string v);
-
-    /**
-     * Tells if IAX2 support is enabled
-     * @return int 1 if IAX2 is enabled
-     *	       0 otherwise
-     */
-    int isIax2Enabled( void );
-
-    /**
-     * Ringtone option.
-     * If ringtone is enabled, ringtone on incoming call use custom choice. If not, only standart tone.
-     * @return int	1 if enabled
-     *	        0 otherwise
-     */
-    int isRingtoneEnabled( void );
-
-    /**
-     * Set the ringtone option
-     * Inverse current value
-     */
-    void ringtoneEnabled( void );
-
-    /**
-     * Get the ringtone
-     * @return gchar* The file name selected as a ringtone
-     */
-    std::string getRingtoneChoice( void );
-
-    /**
-     * Set a ringtone
-     * @param tone The file name of the ringtone
-     */
-    void setRingtoneChoice( const std::string& );
-
-    /**
-     * Get the recording path from configuration tree
-     * @return the string correspoding to the path
-     */
-    std::string getRecordPath( void );
-
-    /**
-     * Set the recoding path in the configuration tree
-     * @param a string reresenting the path
-     */
-    void setRecordPath( const std::string& recPath);
-
-    /** 
-     * Set a credential for a given account. If it 
-     * does not exist yet, it will be created.
-     */
-    void setCredential (const std::string& accountID, const int32_t& index, const std::map< std::string, std::string >& details);
-
-    /**
-     * Retreive the value set in the configuration file.
-     * @return True if credentials hashing is enabled.
-     */
-    bool getMd5CredentialHashing(void);
-    
-    /**
-     * Tells if the user wants to display the dialpad or not
-     * @return int 1 if dialpad has to be displayed
-     *	       0 otherwise
-     */
-    int getDialpad( void );
-
-    /**
-     * Set the dialpad visible or not
-     */
-    void setDialpad (bool display);
-
-    /**
-     * Tells if the user wants to display the volume controls or not
-     * @return int 1 if the controls have to be displayed
-     *	       0 otherwise
-     */
-    int getVolumeControls( void );
-
-    /**
-     * Set the volume controls ( mic and speaker ) visible or not
-     */
-    void setVolumeControls (bool display);
-
-    /**
-     * Set recording on / off
-     * Start recording
-     * @param id  The call identifier
-     */
-    void setRecordingCall(const CallID& id);
-
-    /**
-     * Return true if the call is currently recorded
-     */
-    bool isRecording(const CallID& id);
-
-    /**
-     * Set the maximum number of days to keep in the history
-     * @param calls The number of days
-     */
-    void setHistoryLimit (const int& days);
-
-    /**
-     * Get the maximum number of days to keep in the history
-     * @return double The number of days 
-     */
-    int getHistoryLimit (void);
-
-    void setHistoryEnabled (void);
-
-	std::string getHistoryEnabled (void);
-
-
-    /**
-     * Configure the start-up option
-     * @return int	1 if SFLphone should start in the system tray
-     *	        0 otherwise
-     */
-    int isStartHidden( void );
-
-    /**
-     * Configure the start-up option
-     * At startup, SFLphone can be displayed or start hidden in the system tray
-     */
-    void startHidden( void );
-
-    /**
-     * Configure the popup behaviour
-     * @return int	1 if it should popup on incoming calls
-     *		0 if it should never popups
-     */
-    int popupMode( void );
-
-    /**
-     * Configure the popup behaviour
-     * When SFLphone is in the system tray, you can configure when it popups
-     * Never or only on incoming calls
-     */
-    void switchPopupMode( void );
-
-    /**
-     * Determine whether or not the search bar (history) should be displayed
-     */
-    int getSearchbar( void );
-
-    /**
-     * Configure the search bar behaviour
-     */
-    void setSearchbar( void );
-
-    /**
-     * Set the desktop notification level
-     */
-    void setNotify( void );
-
-    /**
-     * Get the desktop notification level
-     * @return int The notification level
-     */
-    int32_t getNotify( void );
-
-    /**
-     * Set the desktop mail notification level
-     */
-    void setMailNotify( void );
-
-
-    /**
-     * Addressbook configuration
-     */
-    std::map<std::string, int32_t> getAddressbookSettings (void);
-
-    /**
-     * Addressbook configuration
-     */
-    void setAddressbookSettings (const std::map<std::string, int32_t>& settings);
-
-    /**
-     * Addressbook list
-     */
-    void setAddressbookList(const std::vector<  std::string >& list);
-
-    /**
-     * Addressbook list
-     */
-    std::vector <std::string> getAddressbookList( void );
-
-    /**
-     * Hook configuration
-     */
-    std::map<std::string, std::string> getHookSettings (void);
-
-    /**
-     * Hook configuration
-     */
-     void setHookSettings (const std::map<std::string, std::string>& settings);
-
-
-    /**
-     * Get the audio manager
-     * @return int The audio manager
-     *		    0 ALSA
-     *		    1 PULSEAUDIO
-     */
-    int32_t getAudioManager( void );
-
-    /**
-     * Set the audio manager
-     */
-    void setAudioManager( const int32_t& api );
-
-    void switchAudioManager( void );
-
-    /**
-     * Get the desktop mail notification level
-     * @return int The mail notification level
-     */
-    int32_t getMailNotify( void );
-
-    /**
-     * Retrieve the formatted list of codecs payload in the user config file and
-     * load in the active list of codecs
-     * @return std::vector<std::string>	  The vector containing the active codecs
-     */
-    std::vector<std::string> retrieveActiveCodecs( void );
-
-    /**
-     * Get the list of the active codecs
-     * @return std::vector< ::std::string >  The list of active codecs
-     */
-    std::vector< ::std::string > getActiveCodecList( void );
-
-    /*
-     * Notify the client that an error occured
-     * @param errCode The error code. Could be: ALSA_CAPTURE_ERROR
-     *					       ALSA_PLAYBACK_ERROR
-     */
-    void notifyErrClient( const int32_t& errCode );
-
-    /**
-     * Retrieve in the configuration tree the value of a parameter in a specific section
-     * @param section	The section to look in
-     * @param name	The name of the parameter you want to get
-     * @param arg	Undocumented
-     * @return bool	true on success
-     *			false otherwise
-     */
-    bool getConfig(const std::string& section, const std::string& name, TokenList& arg);
-
-    /**
-     * Change a specific value in the configuration tree.
-     * This value will then be saved in the user config file sflphonedrc
-     * @param section	The section name
-     * @param name	The parameter name
-     * @param value	The new string value
-     * @return bool	true on success
-     *		      false otherwise
-     */
-    bool setConfig(const std::string& section, const std::string& name, const std::string& value);
-
-    /**
-     * Change a specific value in the configuration tree.
-     * This value will then be saved in the user config file sflphonedrc
-     * @param section	The section name
-     * @param name	The parameter name
-     * @param value	The new int value
-     * @return bool	true on success
-     *		      false otherwise
-     */
-    bool setConfig(const std::string& section, const std::string& name, int value);
-    
-    inline std::string mapStateNumberToString(RegistrationState state) {
-        std::string stringRepresentation;
-        if (state > NumberOfState) {
-            stringRepresentation = "ERROR";
+class ManagerImpl
+{
+    public:
+        ManagerImpl (void);
+        ~ManagerImpl (void);
+
+
+        /**
+         * General preferences configuration
+         */
+        Preferences preferences;
+
+        /**
+         * Voip related preferences
+         */
+        VoipPreference voipPreferences;
+
+        /**
+         * Addressbook related preferences
+         */
+        AddressbookPreference addressbookPreference;
+
+        /**
+         * Hook preferences
+         */
+        HookPreference hookPreference;
+
+        /**
+         * Audio preferences
+         */
+        AudioPreference audioPreference;
+
+        /**
+         * Shortcut preferences
+         */
+        ShortcutPreferences shortcutPreferences;
+
+        /**
+         * Method to build preferences from configuration
+         */
+        short buildConfiguration();
+
+        /**
+         * Initialisation of thread (sound) and map.
+         * Init a new VoIPLink, audio codec and audio driver
+         */
+        void init (void);
+
+        /**
+         * Terminate all thread (sound, link) and unload AccountMap
+         */
+        void terminate (void);
+
+        /**
+         * Set user interface manager.
+         * @param man The DBUS interface implementation
+         */
+        void setDBusManager (DBusManagerImpl* man) {
+            _dbus = man;
+        }
+
+        /**
+         * Accessor to audiodriver.
+         * it's multi-thread and use mutex internally
+         * @return AudioLayer*  The audio layer object
+         */
+        AudioLayer* getAudioDriver (void) const {
+            return _audiodriver;
+        }
+
+        /**
+         * Get a descriptor map of codec available
+         * @return CodecDescriptor  The internal codec map
+         */
+        CodecDescriptor& getCodecDescriptorMap (void) {
+            return _codecDescriptorMap;
+        }
+
+        /**
+         * Functions which occur with a user's action
+         * Place a new call
+         * @param accountId	The account to make tha call with
+         * @param id  The call identifier
+         * @param to  The recipient of the call
+         * @return bool true on success
+         *		  false otherwise
+         */
+        bool outgoingCall (const AccountID& accountId, const CallID& id, const std::string& to);
+
+        /**
+         * Functions which occur with a user's action
+         * Answer the call
+         * @param id  The call identifier
+         */
+        bool answerCall (const CallID& id);
+
+        /**
+         * Functions which occur with a user's action
+         * Hangup the call
+         * @param id  The call identifier
+         */
+        bool hangupCall (const CallID& id);
+
+
+        /**
+         * Functions which occur with a user's action
+         * Hangup the conference (hangup every participants)
+         * @param id  The call identifier
+         */
+        bool hangupConference (const ConfID& id);
+
+        /**
+         * Functions which occur with a user's action
+         * Cancel the call
+         * @param id  The call identifier
+         */
+        bool cancelCall (const CallID& id);
+
+        /**
+         * Functions which occur with a user's action
+         * Put the call on hold
+         * @param id  The call identifier
+         */
+        bool onHoldCall (const CallID& id);
+
+        /**
+         * Functions which occur with a user's action
+         * Put the call off hold
+         * @param id  The call identifier
+         */
+        bool offHoldCall (const CallID& id);
+
+        /**
+         * Functions which occur with a user's action
+         * Transfer the call
+         * @param id  The call identifier
+         * @param to  The recipient of the transfer
+         */
+        bool transferCall (const CallID& id, const std::string& to);
+
+        /**
+         * Notify the client the transfer is successful
+         */
+        void transferSucceded();
+
+        /**
+         * Notify the client that the transfer failed
+         */
+        void transferFailed();
+
+        /**
+         * Functions which occur with a user's action
+         * Refuse the call
+         * @param id  The call identifier
+         */
+        bool refuseCall (const CallID& id);
+
+        /**
+         * Create a new conference given two participant
+         * @param the first participant ID
+         * @param the second participant ID
+         */
+        Conference* createConference (const CallID& id1, const CallID& id2);
+
+        /**
+         * Delete this conference
+         * @param the conference ID
+         */
+        void removeConference (const CallID& conference_id);
+
+        /**
+         * Return the conference id for which this call is attached
+         * @ param the call id
+         */
+        Conference* getConferenceFromCallID (const CallID& call_id);
+
+        /**
+         * Hold every participant to a conference
+         * @param the conference id
+         */
+        void holdConference (const CallID& conferece_id);
+
+        /**
+         * Unhold all conference participants
+         * @param the conference id
+         */
+        void unHoldConference (const CallID& conference_id);
+
+        /**
+         * Test if this id is a conference (usefull to test current call)
+         * @param the call id
+         */
+        bool isConference (const CallID& call_id);
+
+        /**
+         * Test if a call id particips to this conference
+         * @param the call id
+         */
+        bool participToConference (const CallID& call_id);
+
+        /**
+         * Add a participant to a conference
+         * @param the call id
+         * @param the conference id
+         */
+        void addParticipant (const CallID& call_id, const CallID& conference_id);
+
+        /**
+         * Bind the main participant to a conference (mainly called on a double click action)
+         * @param the conference id
+         */
+        void addMainParticipant (const CallID& conference_id);
+
+        /**
+         * Join two participants to create a conference
+         * @param the fist call id
+         * @param the second call id
+         */
+        void joinParticipant (const CallID& call_id1, const CallID& call_id2);
+
+        /**
+         * Detach a participant from a conference, put the call on hold, do not hangup it
+         * @param call id
+         * @param the current call id
+         */
+        void detachParticipant (const CallID& call_id, const CallID& current_call_id);
+
+        /**
+         * Remove the conference participant from a conference
+         * @param call id
+         */
+        void removeParticipant (const CallID& call_id);
+
+        /**
+         * Process remaining participant given a conference and the current call id.
+         * Mainly called when a participant is detached or hagned up
+         * @param current call id
+         * @param conference pointer
+         */
+        void processRemainingParticipant (CallID current_call_id, Conference *conf);
+
+        /**
+         * Join two conference together into one unique conference
+         */
+        void joinConference (const CallID& conf_id1, const CallID& conf_id2);
+
+        void addStream (const CallID& call_id);
+
+        void removeStream (const CallID& call_id);
+
+        /**
+         * Save config to file
+         * @return true on success
+         *	    false otherwise
+         */
+        bool saveConfig (void);
+
+        /**
+         * Send registration to all enabled accounts
+         * @return 0 on registration success
+         *          1 otherelse
+         */
+        int initRegisterAccounts();
+
+        /**
+         * @return true if we tried to register once
+         */
+        bool _hasTriedToRegister;
+
+        /**
+         * Handle choice of the DTMF-send-way
+         * @param   id: callid of the line.
+         * @param   code: pressed key.
+         */
+        bool sendDtmf (const CallID& id, char code);
+
+        /**
+         * Play the dtmf-associated sound
+         * @param code  The pressed key
+         */
+        bool playDtmf (char code);
+
+        /**
+         * Play a ringtone
+         * @return bool True on success
+         *	      false otherwise
+         */
+        bool playTone ();
+
+        /**
+         * Play a special ringtone ( BUSY ) if there's at least one message on the voice mail
+         * @return bool True on success
+         *	      false otherwise
+         */
+        bool playToneWithMessage ();
+
+        /**
+         * Acts on the audio streams and audio files
+         */
+        void stopTone (void);
+
+        /**
+         * When receiving a new incoming call, add it to the callaccount map
+         * and notify user
+         * @param call A call pointer
+         * @param accountId an account id
+         * @return bool True if the call was added correctly
+         */
+        bool incomingCall (Call* call, const AccountID& accountId);
+
+        /**
+         * Notify the user that the recipient of the call has answered and the put the
+         * call in Current state
+         * @param id  The call identifier
+         */
+        void peerAnsweredCall (const CallID& id);
+
+        /**
+         * Rings back because the outgoing call is ringing and the put the
+         * call in Ringing state
+         * @param id  The call identifier
+         */
+        void peerRingingCall (const CallID& id);
+
+        /**
+         * Put the call in Hungup state, remove the call from the list
+         * @param id  The call identifier
+         */
+        void peerHungupCall (const CallID& id);
+
+        /**
+         * Notify the client with an incoming message
+         * @param accountId	The account identifier
+         * @param message The content of the message
+         */
+        void incomingMessage (const CallID& callID, const std::string& from, const std::string& message);
+
+
+        /**
+         * Send a new text message to the call, if participate to a conference, send to all participant.
+         * @param callID	The call to send the message
+         * @param message	The content of the message
+        * @param from	        The sender of this message (could be another participant of a conference)
+         */
+        bool sendTextMessage (const CallID& callID, const std::string& message, const std::string& from);
+
+        /**
+         * Notify the client he has voice mails
+         * @param accountId	  The account identifier
+         * @param nb_msg The number of messages
+         */
+        void startVoiceMessageNotification (const AccountID& accountId, int nb_msg);
+
+        /**
+         * Notify the client through DBus that registration state has been updated
+         */
+        void connectionStatusNotification (void);
+
+        /**
+         * ConfigurationManager - Send registration request
+         * @param accountId The account to register/unregister
+         * @param enable The flag for the type of registration
+         *		 0 for unregistration request
+         *		 1 for registration request
+         */
+        void sendRegister (const ::std::string& accountId , const int32_t& enable);
+
+        bool getCallStatus (const std::string& sequenceId);
+
+        /**
+         * Get account list
+         * @return std::vector<std::string> A list of accoundIDs
+         */
+        std::vector< std::string >  getAccountList();
+
+        /**
+         * Set the account order in the config file
+         */
+        void setAccountsOrder (const std::string& order);
+
+        /**
+         * Load the accounts order set by the user from the sflphonedrc config file
+         * @return std::vector<std::string> A vector containing the account ID's
+         */
+        std::vector<std::string> loadAccountOrder ();
+
+        /**
+         * Retrieve details about a given account
+         * @param accountID	  The account identifier
+         * @return std::map< std::string, std::string > The account details
+         */
+        std::map< std::string, std::string > getAccountDetails (const AccountID& accountID);
+
+        /**
+         * Retrieve details about a given call
+         * @param callID	  The account identifier
+         * @return std::map< std::string, std::string > The call details
+         */
+        std::map< std::string, std::string > getCallDetails (const CallID& callID);
+
+        /**
+         * Get call list
+         * @return std::vector<std::string> A list of call IDs
+         */
+        std::vector< std::string >  getCallList (void);
+
+        /**
+         * Retrieve details about a given call
+         * @param callID	  The account identifier
+         * @return std::map< std::string, std::string > The call details
+         */
+        std::map< std::string, std::string > getConferenceDetails (const CallID& callID);
+
+        /**
+         * Get call list
+         * @return std::vector<std::string> A list of call IDs
+         */
+        std::vector< std::string >  getConferenceList (void);
+
+
+        /**
+         * Get a list of participant to a conference
+         * @return std::vector<std::string> A list of call IDs
+         */
+        std::vector< std::string >  getParticipantList (const std::string& confID);
+
+        /**
+         * Save the details of an existing account, given the account ID
+         * This will load the configuration map with the given data.
+         * It will also register/unregister links where the 'Enabled' switched.
+         * @param accountID	  The account identifier
+         * @param details	  The account parameters
+         */
+        void setAccountDetails (const ::std::string& accountID,
+                                const std::map< ::std::string, ::std::string >& details);
+
+        /**
+         * Add a new account, and give it a new account ID automatically
+         * @param details The new account parameters
+         * @return The account Id given to the new account
+         */
+        std::string addAccount (const std::map< ::std::string, ::std::string >& details);
+
+        /**
+         * Delete an existing account, unregister VoIPLink associated, and
+         * purge from configuration.
+         * @param accountID	The account unique ID
+         */
+        void removeAccount (const AccountID& accountID);
+
+
+        /**
+         * Deletes all credentials defined for an account
+         * @param accountID The account unique ID
+         */
+        void deleteAllCredential (const AccountID& accountID);
+
+        /**
+         * Get current codec name
+         * @param call id
+         * @return std::string The codec name
+         */
+        std::string getCurrentCodecName (const CallID& id);
+
+        /**
+         * Set input audio plugin
+         * @param audioPlugin The audio plugin
+         */
+        void setAudioPlugin (const std::string& audioPlugin);
+
+        /**
+             * Set audio device
+             * @param index The index of the soundcard
+             * @param the type of stream, either SFL_PCM_PLAYBACK, SFL_PCM_CAPTURE, SFL_PCM_RINGTONE
+             */
+        void setAudioDevice (const int index, const int streamType);
+
+        /**
+         * Get list of supported audio output device
+         * @return std::vector<std::string> A list of the audio devices supporting playback
+         */
+        std::vector<std::string> getAudioOutputDeviceList (void);
+
+        /**
+         * Get list of supported audio input device
+         * @return std::vector<std::string> A list of the audio devices supporting capture
+         */
+        std::vector<std::string> getAudioInputDeviceList (void);
+
+        /**
+         * Get string array representing integer indexes of output, input, and ringtone device
+         * @return std::vector<std::string> A list of the current audio devices
+         */
+        std::vector<std::string> getCurrentAudioDevicesIndex();
+
+        /**
+         * Get index of an audio device
+         * @param name The string description of an audio device
+         * @return int  His index
+         */
+        int getAudioDeviceIndex (const std::string name);
+
+        /**
+         * Get current alsa plugin
+         * @return std::string  The Alsa plugin
+         */
+        std::string getCurrentAudioOutputPlugin (void);
+
+        /**
+         * Get the noise reduction engin state from
+         * the current audio layer.
+         */
+        std::string getNoiseSuppressState (void);
+
+        /**
+         * Set the noise reduction engin state in the current
+         * audio layer.
+         */
+        void setNoiseSuppressState (std::string state);
+
+        /**
+         * Convert a list of payload in a special format, readable by the server.
+         * Required format: payloads separated with one slash.
+         * @return std::string The serializabled string
+         */
+        std::string serialize (std::vector<std::string> v);
+
+        std::vector<std::string> unserialize (std::string v);
+
+        /**
+         * Tells if IAX2 support is enabled
+         * @return int 1 if IAX2 is enabled
+         *	       0 otherwise
+         */
+        int isIax2Enabled (void);
+
+        /**
+         * Ringtone option.
+         * If ringtone is enabled, ringtone on incoming call use custom choice. If not, only standart tone.
+         * @return int	1 if enabled
+         *	        0 otherwise
+         */
+        int isRingtoneEnabled (const AccountID& id);
+
+        /**
+         * Set the ringtone option
+         * Inverse current value
+         */
+        void ringtoneEnabled (const AccountID& id);
+
+        /**
+         * Get the ringtone
+         * @return gchar* The file name selected as a ringtone
+         */
+        std::string getRingtoneChoice (const AccountID& id);
+
+        /**
+         * Set a ringtone
+         * @param tone The file name of the ringtone
+         */
+        void setRingtoneChoice (const std::string&, const AccountID& id);
+
+        /**
+         * Get the recording path from configuration tree
+         * @return the string correspoding to the path
+         */
+        std::string getRecordPath (void);
+
+        /**
+         * Set the recoding path in the configuration tree
+         * @param a string reresenting the path
+         */
+        void setRecordPath (const std::string& recPath);
+
+        /**
+         * Set a credential for a given account. If it
+         * does not exist yet, it will be created.
+         */
+        void setCredential (const std::string& accountID, const int32_t& index, const std::map< std::string, std::string >& details);
+
+        /**
+         * Retreive the value set in the configuration file.
+         * @return True if credentials hashing is enabled.
+         */
+        bool getMd5CredentialHashing (void);
+
+        /**
+         * Tells if the user wants to display the dialpad or not
+         * @return int 1 if dialpad has to be displayed
+         *	       0 otherwise
+         */
+        // int getDialpad( void );
+
+        /**
+         * Set the dialpad visible or not
+         */
+        // void setDialpad (bool display);
+
+        /**
+         * Tells if the user wants to display the volume controls or not
+         * @return int 1 if the controls have to be displayed
+         *	       0 otherwise
+         */
+        // int getVolumeControls( void );
+
+        /**
+         * Set the volume controls ( mic and speaker ) visible or not
+         */
+        // void setVolumeControls (bool display);
+
+        /**
+         * Set recording on / off
+         * Start recording
+         * @param id  The call identifier
+         */
+        void setRecordingCall (const CallID& id);
+
+        /**
+         * Return true if the call is currently recorded
+         */
+        bool isRecording (const CallID& id);
+
+        /**
+         * Set the maximum number of days to keep in the history
+         * @param calls The number of days
+         */
+        void setHistoryLimit (const int& days);
+
+        /**
+         * Get the maximum number of days to keep in the history
+         * @return double The number of days
+         */
+        int getHistoryLimit (void);
+
+        // void setHistoryEnabled (void);
+
+        // std::string getHistoryEnabled (void);
+
+
+        /**
+         * Configure the start-up option
+         * @return int	1 if SFLphone should start in the system tray
+         *	        0 otherwise
+         */
+        int isStartHidden (void);
+
+        /**
+         * Configure the start-up option
+         * At startup, SFLphone can be displayed or start hidden in the system tray
+         */
+        void startHidden (void);
+
+        /**
+         * Configure the popup behaviour
+         * @return int	1 if it should popup on incoming calls
+         *		0 if it should never popups
+         */
+        // int popupMode( void );
+
+        /**
+         * Configure the popup behaviour
+         * When SFLphone is in the system tray, you can configure when it popups
+         * Never or only on incoming calls
+         */
+        // void switchPopupMode( void );
+
+        /**
+         * Determine whether or not the search bar (history) should be displayed
+         */
+        // int getSearchbar( void );
+
+        /**
+         * Configure the search bar behaviour
+         */
+        // void setSearchbar( void );
+
+        /**
+         * Set the desktop notification level
+         */
+        // void setNotify( void );
+
+        /**
+         * Get the desktop notification level
+         * @return int The notification level
+         */
+        // int32_t getNotify( void );
+
+        /**
+         * Set the desktop mail notification level
+         */
+        void setMailNotify (void);
+
+
+        /**
+         * Addressbook configuration
+         */
+        std::map<std::string, int32_t> getAddressbookSettings (void);
+
+        /**
+         * Addressbook configuration
+         */
+        void setAddressbookSettings (const std::map<std::string, int32_t>& settings);
+
+        /**
+         * Addressbook list
+         */
+        void setAddressbookList (const std::vector<  std::string >& list);
+
+        /**
+         * Addressbook list
+         */
+        std::vector <std::string> getAddressbookList (void);
+
+        /**
+         * Hook configuration
+         */
+        std::map<std::string, std::string> getHookSettings (void);
+
+        /**
+         * Hook configuration
+         */
+        void setHookSettings (const std::map<std::string, std::string>& settings);
+
+
+        /**
+         * Get the audio manager
+         * @return int The audio manager
+         *		    0 ALSA
+         *		    1 PULSEAUDIO
+         */
+        int32_t getAudioManager (void);
+
+        /**
+         * Set the audio manager
+         */
+        void setAudioManager (const int32_t& api);
+
+        void switchAudioManager (void);
+
+        void audioSamplingRateChanged (void);
+
+        /**
+         * Get the desktop mail notification level
+         * @return int The mail notification level
+         */
+        int32_t getMailNotify (void);
+
+        /**
+         * Retrieve the formatted list of codecs payload in the user config file and
+         * load in the active list of codecs
+         * @return std::vector<std::string>	  The vector containing the active codecs
+         */
+        std::vector<std::string> retrieveActiveCodecs (void);
+
+        /**
+         * Get the list of the active codecs
+         * @return std::vector< ::std::string >  The list of active codecs
+         */
+        std::vector< ::std::string > getActiveCodecList (void);
+
+        /*
+         * Notify the client that an error occured
+         * @param errCode The error code. Could be: ALSA_CAPTURE_ERROR
+         *					       ALSA_PLAYBACK_ERROR
+         */
+        void notifyErrClient (const int32_t& errCode);
+
+        /**
+         * Retrieve in the configuration tree the value of a parameter in a specific section
+         * @param section	The section to look in
+         * @param name	The name of the parameter you want to get
+         * @param arg	Undocumented
+         * @return bool	true on success
+         *			false otherwise
+         */
+        bool getConfig (const std::string& section, const std::string& name, TokenList& arg);
+
+        /**
+         * Change a specific value in the configuration tree.
+         * This value will then be saved in the user config file sflphonedrc
+         * @param section	The section name
+         * @param name	The parameter name
+         * @param value	The new string value
+         * @return bool	true on success
+         *		      false otherwise
+         */
+        bool setConfig (const std::string& section, const std::string& name, const std::string& value);
+
+        /**
+         * Change a specific value in the configuration tree.
+         * This value will then be saved in the user config file sflphonedrc
+         * @param section	The section name
+         * @param name	The parameter name
+         * @param value	The new int value
+         * @return bool	true on success
+         *		      false otherwise
+         */
+        bool setConfig (const std::string& section, const std::string& name, int value);
+
+        inline std::string mapStateNumberToString (RegistrationState state) {
+            std::string stringRepresentation;
+
+            if (state > NumberOfState) {
+                stringRepresentation = "ERROR";
+                return stringRepresentation;
+            }
+
+            stringRepresentation = mapStateToChar[state];
             return stringRepresentation;
         }
-        
-        stringRepresentation = mapStateToChar[state];
-        return stringRepresentation;
-    }
-    
-    /**
-     * Get a int from the configuration tree
-     * Throw an Conf::ConfigTreeItemException if not found
-     * @param section The section name to look in
-     * @param name    The parameter name
-     * @return int    The int value
-     */
-     
-    int getConfigInt(const std::string& section, const std::string& name);
- 
-  /**
-     * Get a bool from the configuration tree
-     * Throw an Conf::ConfigTreeItemException if not found
-     * @param section The section name to look in
-     * @param name    The parameter name
-     * @return bool    The bool value
-     */
-     
-    bool getConfigBool(const std::string& section, const std::string& name);
-            
-    /**
-     * Get a string from the configuration tree
-     * Throw an Conf::ConfigTreeItemException if not found
-     * @param section The section name to look in
-     * @param name    The parameter name
-     * @return sdt::string    The string value
-     */
-    std::string getConfigString(const std::string& section, const std::string& name);
-
-    /**
-     * Retrieve the soundcards index in the user config file and try to open audio devices
-     * with a specific alsa plugin.
-     * Set the audio layer sample rate
-     */
-    void selectAudioDriver(void);
-
-    /**
-     * Handle audio sounds heard by a caller while they wait for their
-     * connection to a called party to be completed.
-     */
-    void ringback ();
-
-    /**
-     * Handle played music when an incoming call occurs
-     */
-    void ringtone ();
-
-    /**
-     * Handle played music when a congestion occurs
-     */
-    void congestion ();
-
-    /**
-     * Handle played sound when a call can not be conpleted because of a busy recipient
-     */
-    void callBusy(const CallID& id);
-
-    /**
-     * Handle played sound when a failure occurs
-     */
-    void callFailure(const CallID& id);
-
-    /**
-     * Retrieve the current telephone tone
-     * @return AudioLoop*   The audio tone or 0 if no tone (init before calling this function)
-     */
-    AudioLoop* getTelephoneTone();
-
-    /**
-     * Retrieve the current telephone file
-     * @return AudioLoop* The audio file or 0 if the wav is stopped
-     */
-    AudioLoop* getTelephoneFile();
-
-    /**
-     * @return true is there is one or many incoming call waiting
-     * new call, not anwsered or refused
-     */
-    bool incomingCallWaiting(void);
-
-    /**
-     * Notification of incoming call when you are already busy
-     */
-    void notificationIncomingCall(void);
-
-    /*
-     * Inline functions to manage speaker volume control
-     * Read by main thread and AudioLayer thread
-     * Write by main thread only
-     * @return unsigned short	The volume value
-     */
-    unsigned short getSpkrVolume(void) { return _spkr_volume; }
-
-    /*
-     * Inline functions to manage speaker volume control
-     * Read by main thread and AudioLayer thread
-     * Write by main thread only
-     * @param spkr_vol	The volume value
-     */
-    void setSpkrVolume(unsigned short spkr_vol);
-
-    /*
-     * Inline functions to manage mic volume control
-     * Read by main thread and AudioLayer thread
-     * Write by main thread only
-     * @return unsigned short	The volume value
-     */
-    unsigned short getMicVolume(void) {  return _mic_volume;  }
-
-    /*
-     * Inline functions to manage mic volume control
-     * Read by main thread and AudioLayer thread
-     * Write by main thread only
-     * @param mic_vol	The volume value
-     */
-    void setMicVolume(unsigned short mic_vol);
-
-    /**
-     * Init default values for the different fields in the config file.
-     * Fills the local _config (Conf::ConfigTree) with the default contents.
-     * Called in main.cpp, just before Manager::init().
-     */
-    void initConfigFile ( bool load_user_value=true, std::string alternate="");
-
-    /**
-     * Tell if the setup was already loaded
-     * @return bool True if yes
-     *		  false otherwise
-     */
-    bool hasLoadedSetup() { return _setupLoaded; }
-
-    /**
-     * Return a new random callid that is not present in the list
-     * @return CallID A brand new callid
-     */
-    CallID getNewCallID();
-
-    /**
-     * Get the current call id
-     * @return CallID	The call id or ""
-     */
-    const CallID& getCurrentCallId();
-
-    /**
-     * Check if a call is the current one
-     * @param callId the new callid
-     * @return bool   True if the id is the current call
-     */
-    bool isCurrentCall(const CallID& callId);
-
-
-    /**
-     * Send registration to all enabled accounts
-     * @return 0 on registration success
-     *          1 otherelse
-     */
-    int registerAccounts();
-
-    /**
-     * Restart PJSIP
-     * @param void
-     * @return void
-     */
-    void restartPJSIP( );
-
-    void unregisterCurSIPAccounts (void);
-
-    void registerCurSIPAccounts (void);
-
-    /*
-     * Initialize audiodriver
-     */
-    bool initAudioDriver(void);
-
-    ost::Mutex* getAudioLayerMutex() { return &_audiolayer_mutex; }
-    
-  private:
-    /* Transform digest to string.
-    * output must be at least PJSIP_MD5STRLEN+1 bytes.
-    * Helper function taken from sip_auth_client.c in 
-    * pjproject-1.0.3.
-    *
-    * NOTE: THE OUTPUT STRING IS NOT NULL TERMINATED!
-    */
-    void digest2str(const unsigned char digest[], char *output);
-
-    /** 
-     * Helper function that creates an MD5 Hash from the credential
-     * information provided as parameters. The hash is computed as
-     * MD5(username ":" realm ":" password).
-     * 
-     */
-    std::string computeMd5HashFromCredential(const std::string& username, const std::string& password, const std::string& realm);
-
-    /**
-     * Check if a process is running with the system command
-     *
-     * @return 0 on success
-     *          1 otherelse
-     */
-    int app_is_running(std::string process);
-
-    /**
-     * Create .PROGNAME directory in home user and create
-     * configuration tree from the settings file if this file exists.
-     *
-     * @return	0 if creating file failed
-     *			1 if config-file exists
-     *			2 if file doesn't exist yet.
-     */
-    int createSettingsPath (void);
-
-    /*
-     * Initialize audiocodec with config setting
-     */
-    void initAudioCodec(void);
-
-    
-    /*
-     * Initialize zeroconf module and scanning
-     */
-    void initZeroconf(void);
-
-    /*
-     * Init the volume for speakers/micro from 0 to 100 value
-     */
-    void initVolume();
-
-    /**
-     * Switch of current call id
-     * @param id The new callid
-     */
-    void switchCall(const CallID& id);
-
-    /*
-     * Play one tone
-     * @return false if the driver is uninitialize
-     */
-    bool playATone(Tone::TONEID toneId);
-
-    /** The configuration tree. It contains accounts parameters, general user settings ,audio settings, ... */
-    Conf::ConfigTree _config;
-
-    /** Current Call ID */
-    CallID _currentCallId2;
-
-    /** Protected current call access */
-    ost::Mutex _currentCallMutex;
-
-    /** Vector of CodecDescriptor */
-    CodecDescriptor* _codecBuilder;
-
-    /** Audio layer */
-    AudioLayer* _audiodriver;
-
-    // Main thread
-
-    DTMF* _dtmfKey;
-
-    // map of codec (for configlist request)
-    CodecDescriptor _codecDescriptorMap;
-
-    /////////////////////
-    // Protected by Mutex
-    /////////////////////
-    ost::Mutex _toneMutex;
-    TelephoneTone* _telephoneTone;
-    AudioFile _audiofile;
-
-    // To handle volume control
-    short _spkr_volume;
-    short _mic_volume;
-    // End of sound variable
-
-
-    // Multithread variable (protected by _mutex)
-    //
-    /** Mutex to protect access to code section */
-    ost::Mutex _mutex;
-
-    ost::Mutex _audiolayer_mutex;
-
-    // Multithread variable (non protected)
-    DBusManagerImpl * _dbus;
-
-    /** Waiting Call Vectors */
-    CallIDSet _waitingCall;
-
-    /** Protect waiting call list, access by many voip/audio threads */
-    ost::Mutex _waitingCallMutex;
-
-    /** Number of waiting call, synchronize with waitingcall callidvector */
-    unsigned int _nbIncomingWaitingCall;
-
-    /**
-     * Add incoming callid to the waiting list
-     * @param id CallID to add
-     */
-    void addWaitingCall(const CallID& id);
-
-    /**
-     * Remove incoming callid to the waiting list
-     * @param id CallID to remove
-     */
-    void removeWaitingCall(const CallID& id);
-
-    /**
-     * Tell if a call is waiting and should be remove
-     * @param id CallID to test
-     * @return bool True if the call is waiting
-     */
-    bool isWaitingCall(const CallID& id);
-
-    /**
-     * Path of the ConfigFile
-     */
-    std::string 	_path;
-    int _exist;
-    int _setupLoaded;
+
+        /**
+         * Get a int from the configuration tree
+         * Throw an Conf::ConfigTreeItemException if not found
+         * @param section The section name to look in
+         * @param name    The parameter name
+         * @return int    The int value
+         */
+
+        int getConfigInt (const std::string& section, const std::string& name);
+
+        /**
+           * Get a bool from the configuration tree
+           * Throw an Conf::ConfigTreeItemException if not found
+           * @param section The section name to look in
+           * @param name    The parameter name
+           * @return bool    The bool value
+           */
+
+        bool getConfigBool (const std::string& section, const std::string& name);
+
+        /**
+         * Get a string from the configuration tree
+         * Throw an Conf::ConfigTreeItemException if not found
+         * @param section The section name to look in
+         * @param name    The parameter name
+         * @return sdt::string    The string value
+         */
+        std::string getConfigString (const std::string& section, const std::string& name);
+
+        /**
+         * Retrieve the soundcards index in the user config file and try to open audio devices
+         * with a specific alsa plugin.
+         * Set the audio layer sample rate
+         */
+        void selectAudioDriver (void);
+
+        /**
+         * Handle audio sounds heard by a caller while they wait for their
+         * connection to a called party to be completed.
+         */
+        void ringback ();
+
+        /**
+         * Handle played music when an incoming call occurs
+         */
+        void ringtone (const AccountID& accountID);
+
+        /**
+         * Handle played music when a congestion occurs
+         */
+        void congestion ();
+
+        /**
+         * Handle played sound when a call can not be conpleted because of a busy recipient
+         */
+        void callBusy (const CallID& id);
+
+        /**
+         * Handle played sound when a failure occurs
+         */
+        void callFailure (const CallID& id);
+
+        /**
+         * Retrieve the current telephone tone
+         * @return AudioLoop*   The audio tone or 0 if no tone (init before calling this function)
+         */
+        AudioLoop* getTelephoneTone();
+
+        /**
+         * Retrieve the current telephone file
+         * @return AudioLoop* The audio file or 0 if the wav is stopped
+         */
+        AudioLoop* getTelephoneFile();
+
+        /**
+         * @return true is there is one or many incoming call waiting
+         * new call, not anwsered or refused
+         */
+        bool incomingCallWaiting (void);
+
+        /**
+         * Notification of incoming call when you are already busy
+         */
+        void notificationIncomingCall (void);
+
+        /*
+         * Inline functions to manage speaker volume control
+         * Read by main thread and AudioLayer thread
+         * Write by main thread only
+         * @return unsigned short	The volume value
+         */
+        unsigned short getSpkrVolume (void) {
+            return _spkr_volume;
+        }
+
+        /*
+         * Inline functions to manage speaker volume control
+         * Read by main thread and AudioLayer thread
+         * Write by main thread only
+         * @param spkr_vol	The volume value
+         */
+        void setSpkrVolume (unsigned short spkr_vol);
+
+        /*
+         * Inline functions to manage mic volume control
+         * Read by main thread and AudioLayer thread
+         * Write by main thread only
+         * @return unsigned short	The volume value
+         */
+        unsigned short getMicVolume (void) {
+            return _mic_volume;
+        }
+
+        /*
+         * Inline functions to manage mic volume control
+         * Read by main thread and AudioLayer thread
+         * Write by main thread only
+         * @param mic_vol	The volume value
+         */
+        void setMicVolume (unsigned short mic_vol);
+
+        /**
+         * Init default values for the different fields in the config file.
+         * Fills the local _config (Conf::ConfigTree) with the default contents.
+         * Called in main.cpp, just before Manager::init().
+         */
+        void initConfigFile (bool load_user_value=true, std::string alternate="");
+
+        /**
+         * Tell if the setup was already loaded
+         * @return bool True if yes
+         *		  false otherwise
+         */
+        bool hasLoadedSetup() {
+            return _setupLoaded;
+        }
+
+        /**
+         * Return a new random callid that is not present in the list
+         * @return CallID A brand new callid
+         */
+        CallID getNewCallID();
+
+        /**
+         * Get the current call id
+         * @return CallID	The call id or ""
+         */
+        const CallID& getCurrentCallId();
+
+        /**
+         * Check if a call is the current one
+         * @param callId the new callid
+         * @return bool   True if the id is the current call
+         */
+        bool isCurrentCall (const CallID& callId);
+
+
+        /**
+         * Send registration to all enabled accounts
+         * @return 0 on registration success
+         *          1 otherelse
+         */
+        int registerAccounts();
+
+        /**
+         * Restart PJSIP
+         * @param void
+         * @return void
+         */
+        void restartPJSIP();
+
+        void unregisterCurSIPAccounts (void);
+
+        void registerCurSIPAccounts (void);
+
+        /*
+         * Initialize audiodriver
+         */
+        bool initAudioDriver (void);
+
+        ost::Mutex* getAudioLayerMutex() {
+            return &_audiolayer_mutex;
+        }
+
+        /**
+         * Helper function that creates an MD5 Hash from the credential
+         * information provided as parameters. The hash is computed as
+         * MD5(username ":" realm ":" password).
+         *
+         */
+        std::string computeMd5HashFromCredential (const std::string& username, const std::string& password, const std::string& realm);
+
+    private:
+        /* Transform digest to string.
+        * output must be at least PJSIP_MD5STRLEN+1 bytes.
+        * Helper function taken from sip_auth_client.c in
+        * pjproject-1.0.3.
+        *
+        * NOTE: THE OUTPUT STRING IS NOT NULL TERMINATED!
+        */
+        void digest2str (const unsigned char digest[], char *output);
+
+        /**
+         * Check if a process is running with the system command
+         *
+         * @return 0 on success
+         *          1 otherelse
+         */
+        int app_is_running (std::string process);
+
+        /**
+         * Create .PROGNAME directory in home user and create
+         * configuration tree from the settings file if this file exists.
+         *
+         * @return	0 if creating file failed
+         *			1 if config-file exists
+         *			2 if file doesn't exist yet.
+         */
+        int createSettingsPath (void);
+
+        /*
+         * Initialize audiocodec with config setting
+         */
+        void initAudioCodec (void);
+
+
+        /*
+         * Initialize zeroconf module and scanning
+         */
+        void initZeroconf (void);
+
+        /*
+         * Init the volume for speakers/micro from 0 to 100 value
+         */
+        void initVolume();
+
+        /**
+         * Switch of current call id
+         * @param id The new callid
+         */
+        void switchCall (const CallID& id);
+
+        /*
+         * Play one tone
+         * @return false if the driver is uninitialize
+         */
+        bool playATone (Tone::TONEID toneId);
+
+        /** The configuration tree. It contains accounts parameters, general user settings ,audio settings, ... */
+        Conf::ConfigTree _config;
+
+        /** Current Call ID */
+        CallID _currentCallId2;
+
+        /** Protected current call access */
+        ost::Mutex _currentCallMutex;
+
+        /** Vector of CodecDescriptor */
+        CodecDescriptor* _codecBuilder;
+
+        /** Audio layer */
+        AudioLayer* _audiodriver;
+
+        // Main thread
+
+        DTMF* _dtmfKey;
+
+        // map of codec (for configlist request)
+        CodecDescriptor _codecDescriptorMap;
+
+        /////////////////////
+        // Protected by Mutex
+        /////////////////////
+        ost::Mutex _toneMutex;
+        TelephoneTone* _telephoneTone;
+        AudioFile *_audiofile;
+
+        // To handle volume control
+        short _spkr_volume;
+        short _mic_volume;
+        // End of sound variable
+
+
+        // Multithread variable (protected by _mutex)
+        //
+        /** Mutex to protect access to code section */
+        ost::Mutex _mutex;
+
+        ost::Mutex _audiolayer_mutex;
+
+        // Multithread variable (non protected)
+        DBusManagerImpl * _dbus;
+
+        /** Waiting Call Vectors */
+        CallIDSet _waitingCall;
+
+        /** Protect waiting call list, access by many voip/audio threads */
+        ost::Mutex _waitingCallMutex;
+
+        /** Number of waiting call, synchronize with waitingcall callidvector */
+        unsigned int _nbIncomingWaitingCall;
+
+        /**
+         * Add incoming callid to the waiting list
+         * @param id CallID to add
+         */
+        void addWaitingCall (const CallID& id);
+
+        /**
+         * Remove incoming callid to the waiting list
+         * @param id CallID to remove
+         */
+        void removeWaitingCall (const CallID& id);
+
+        /**
+         * Tell if a call is waiting and should be remove
+         * @param id CallID to test
+         * @return bool True if the call is waiting
+         */
+        bool isWaitingCall (const CallID& id);
+
+        /**
+         * Path of the ConfigFile
+         */
+        std::string 	_path;
+        int _exist;
+        int _setupLoaded;
 
 #ifdef USE_ZEROCONF
-    // DNSService contain every zeroconf services
-    //  configuration detected on the network
-    DNSService *_DNSService;
+        // DNSService contain every zeroconf services
+        //  configuration detected on the network
+        DNSService *_DNSService;
 #endif
 
-    /** Map to associate a CallID to the good account */
-    CallAccountMap _callAccountMap;
-
-    /** Mutex to lock the call account map (main thread + voiplink thread) */
-    ost::Mutex _callAccountMapMutex;
-
-    CallConfigMap _callConfigMap;
-
-    bool associateConfigToCall (const CallID& callID, Call::CallConfiguration config);
-
-    Call::CallConfiguration getConfigFromCall(const CallID& callID);
-
-    bool removeCallConfig(const CallID& callID);
-
-    /** Associate a new CallID to a AccountID
-     * Protected by mutex
-     * @param callID the new CallID not in the list yet
-     * @param accountID the known accountID present in accountMap
-     * @return bool True if the new association is create
-     */
-    bool associateCallToAccount(const CallID& callID, const AccountID& accountID);
-
-    /** Remove a CallID/AccountID association
-     * Protected by mutex
-     * @param callID the CallID to remove
-     * @return bool True if association is removed
-     */
-    bool removeCallAccount(const CallID& callID);
+        /** Map to associate a CallID to the good account */
+        CallAccountMap _callAccountMap;
+
+        /** Mutex to lock the call account map (main thread + voiplink thread) */
+        ost::Mutex _callAccountMapMutex;
+
+        CallConfigMap _callConfigMap;
+
+        bool associateConfigToCall (const CallID& callID, Call::CallConfiguration config);
+
+        Call::CallConfiguration getConfigFromCall (const CallID& callID);
+
+        bool removeCallConfig (const CallID& callID);
+
+        /** Associate a new CallID to a AccountID
+         * Protected by mutex
+         * @param callID the new CallID not in the list yet
+         * @param accountID the known accountID present in accountMap
+         * @return bool True if the new association is create
+         */
+        bool associateCallToAccount (const CallID& callID, const AccountID& accountID);
 
-    /**
-     *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */
-    AccountMap _accountMap;
-    
-    Account * _directIpAccount;
+        /** Remove a CallID/AccountID association
+         * Protected by mutex
+         * @param callID the CallID to remove
+         * @return bool True if association is removed
+         */
+        bool removeCallAccount (const CallID& callID);
 
-    /**
-     * Load the account from configuration
-     * @return short Number of account
-     */
-    short loadAccountMap();
+        /**
+         *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */
+        AccountMap _accountMap;
 
+        Account * _directIpAccount;
 
-    /**
-     * Unload the account (delete them)
-     */
-    void unloadAccountMap();
+        void loadIptoipProfile();
 
+        /**
+         * Load the account from configuration
+         * @return short Number of account
+         */
+        short loadAccountMap();
 
-    /**
-     * Instance of the MainBuffer for the whole application
-     *
-     * In order to send signal to other parts of the application, one must pass through the mainbuffer.
-     * Audio instances must be registered into the MainBuffer and bound together via the ManagerImpl.
-     *
-     */ 
-     MainBuffer _mainBuffer;
+        /**
+         * Unload the account (delete them)
+         */
+        void unloadAccountMap();
 
-    
-   public:
 
-    /**
-     * Tell if there is a current call processed
-     * @return bool True if there is a current call
-     */
-    bool hasCurrentCall();
-   
-    /**
-     * Return the current DBusManagerImpl
-     * @return A pointer to the DBusManagerImpl instance
-     */
-    DBusManagerImpl * getDbusManager() { return _dbus; }
-    
-     /**
-     * Tell if an account exists
-     * @param accountID account ID check
-     * @return bool True if the account exists
-     *		  false otherwise
-     */
-    bool accountExists(const AccountID& accountID);
+        /**
+         * Instance of the MainBuffer for the whole application
+         *
+         * In order to send signal to other parts of the application, one must pass through the mainbuffer.
+         * Audio instances must be registered into the MainBuffer and bound together via the ManagerImpl.
+         *
+         */
+        MainBuffer _mainBuffer;
 
-    std::map<std::string, std::string> send_history_to_client (void); 
 
-    void receive_history_from_client (std::map<std::string, std::string> history);
-    /**
-     * Get an account pointer
-     * @param accountID account ID to get
-     * @return Account*	 The account pointer or 0
-     */
-    Account* getAccount(const AccountID& accountID);
+        /**
+         * Instant messaging module, resposible to initiate, format, parse,
+         * send, and receive instant messages.
+         */
+        sfl::InstantMessaging *_imModule;
 
-    /** Return the AccountID from a CallID
-     * Protected by mutex
-     * @param callID the CallID in the list
-     * @return AccountID  The accountID associated or "" if the callID is not found
-     */
-    AccountID getAccountFromCall(const CallID& callID);
 
-    /**
-     * Get the voip link from the account pointer
-     * @param accountID	  Account ID to get
-     * @return VoIPLink*   The voip link from the account pointer or 0
-     */
-    VoIPLink* getAccountLink(const AccountID& accountID=AccountNULL);
-
-    VoIPLink* getSIPAccountLink (void);
+    public:
 
-    AccountID getAccountIdFromNameAndServer(const std::string& userName, const std::string& server);
-
-    int getLocalIp2IpPort();
-
-    std::string getStunServer (void);
-    void setStunServer (const std::string &server);
-
-    int isStunEnabled (void);
-    void enableStun (void);
-
-    // Map 
-    ConferenceCallMap _conferencecall;
-
-    // 
-    ConferenceMap _conferencemap;
-
-
-
-private:
-
-    // Copy Constructor
-    ManagerImpl(const ManagerImpl& rh);
-
-    // Assignment Operator
-    ManagerImpl& operator=( const ManagerImpl& rh);
-
-    NumberCleaner *_cleaner;
+        /**
+         * Return a pointer to the  instance of the mainbuffer
+         */
+        MainBuffer *getMainBuffer (void) {
+            return &_mainBuffer;
+        }
+
+        /**
+         * Return a pointer to the instance of InstantMessaging
+         */
+        sfl::InstantMessaging *getInstantMessageModule (void) {
+            return _imModule;
+        }
+
+
+        /**
+         * Tell if there is a current call processed
+         * @return bool True if there is a current call
+         */
+        bool hasCurrentCall();
+
+        /**
+         * Return the current DBusManagerImpl
+         * @return A pointer to the DBusManagerImpl instance
+         */
+        DBusManagerImpl * getDbusManager() {
+            return _dbus;
+        }
+
+        /**
+        * Tell if an account exists
+        * @param accountID account ID check
+        * @return bool True if the account exists
+        *		  false otherwise
+        */
+        bool accountExists (const AccountID& accountID);
+
+        std::map<std::string, std::string> send_history_to_client (void);
+
+        void receive_history_from_client (std::map<std::string, std::string> history);
+        /**
+         * Get an account pointer
+         * @param accountID account ID to get
+         * @return Account*	 The account pointer or 0
+         */
+        Account* getAccount (const AccountID& accountID);
+
+        /** Return the AccountID from a CallID
+         * Protected by mutex
+         * @param callID the CallID in the list
+         * @return AccountID  The accountID associated or "" if the callID is not found
+         */
+        AccountID getAccountFromCall (const CallID& callID);
+
+        /**
+         * Get the voip link from the account pointer
+         * @param accountID	  Account ID to get
+         * @return VoIPLink*   The voip link from the account pointer or 0
+         */
+        VoIPLink* getAccountLink (const AccountID& accountID=AccountNULL);
+
+        VoIPLink* getSIPAccountLink (void);
 
-    /**
-      * To handle the persistent history
-      */
-    HistoryManager * _history;
+        AccountID getAccountIdFromNameAndServer (const std::string& userName, const std::string& server);
 
-    /**
-     * Check if the call is a classic call or a direct IP-to-IP call
-     */
-    void check_call_configuration (const CallID& id, const std::string& to, Call::CallConfiguration *callConfig);
+        int getLocalIp2IpPort();
+
+        std::string getStunServer (void);
+        void setStunServer (const std::string &server);
+
+        int isStunEnabled (void);
+        void enableStun (void);
+
+        // Map containing reference between conferences and calls
+        ConferenceCallMap _conferencecall;
+
+        // Map containing conference pointers
+        ConferenceMap _conferencemap;
+
+    private:
+
+        // Copy Constructor
+        ManagerImpl (const ManagerImpl& rh);
+
+        // Assignment Operator
+        ManagerImpl& operator= (const ManagerImpl& rh);
+
+        NumberCleaner *_cleaner;
+
+        /**
+          * To handle the persistent history
+          */
+        HistoryManager * _history;
+
+        /**
+         * Check if the call is a classic call or a direct IP-to-IP call
+         */
+        void check_call_configuration (const CallID& id, const std::string& to, Call::CallConfiguration *callConfig);
+
+        Conf::YamlParser *parser;
+        Conf::YamlEmitter *emitter;
 
 #ifdef TEST
-    bool testCallAccountMap();
-    bool testAccountMap();
+        bool testCallAccountMap();
+        bool testAccountMap();
 #endif
-
-    friend class ConfigurationTest;
-    friend class HistoryTest;
+        friend class SIPTest;
+        friend class ConfigurationTest;
+        friend class HistoryTest;
 };
 
 #endif // __MANAGER_H__
diff --git a/sflphone-common/src/managerimpl_registration.cpp b/sflphone-common/src/managerimpl_registration.cpp
index 552b2eb4568b25771a766a8c9950b38a4e03b3e8..5f9be9bfca93b4f7eb547299b6c4060872ade2e7 100644
--- a/sflphone-common/src/managerimpl_registration.cpp
+++ b/sflphone-common/src/managerimpl_registration.cpp
@@ -58,7 +58,7 @@ ManagerImpl::registerAccounts()
     bool flag = true;
     AccountMap::iterator iter;
 
-    _debugInit ("Initiate VoIP Links Registration");
+    _debugInit ("Manager: Initiate VoIP Links Registration");
     iter = _accountMap.begin();
 
     /* Loop on the account map previously loaded */
@@ -68,8 +68,8 @@ ManagerImpl::registerAccounts()
 
             if (iter->second->isEnabled()) {
 
-		_debug("Register account %s", iter->first.c_str());
-		
+                _debug ("Register account %s", iter->first.c_str());
+
                 status = iter->second->registerVoIPLink();
 
                 if (status != SUCCESS) {
@@ -98,7 +98,7 @@ ManagerImpl::initRegisterAccounts()
     bool flag = true;
     AccountMap::iterator iter;
 
-    _debugInit ("Initiate VoIP Links Registration");
+    _debugInit ("Manager: Initiate VoIP Links Registration");
     iter = _accountMap.begin();
 
     /* Loop on the account map previously loaded */
@@ -248,13 +248,16 @@ ManagerImpl::sendRegister (const std::string& accountID , const int32_t& enable)
 {
 
     // Update the active field
-    setConfig (accountID, CONFIG_ACCOUNT_ENABLE, (enable == 1) ? TRUE_STR:FALSE_STR);
-
     Account* acc = getAccount (accountID);
+
+    if (enable == 1)
+        acc->setEnabled (true);
+    else
+        acc->setEnabled (false);
+
     acc->loadConfig();
 
     // Test on the freshly updated value
-
     if (acc->isEnabled()) {
         // Verify we aren't already registered, then register
         _debug ("Send register for account %s\n" , accountID.c_str());
diff --git a/sflphone-common/src/numbercleaner.h b/sflphone-common/src/numbercleaner.h
index a45192e258841175031339e77fba1b5c43ae0cee..6a4c2198d9de9b5440f270fd31d192557e439a6b 100644
--- a/sflphone-common/src/numbercleaner.h
+++ b/sflphone-common/src/numbercleaner.h
@@ -35,7 +35,8 @@
 #include "logger.h"
 #include <string>
 
-class NumberCleaner {
+class NumberCleaner
+{
 
     public:
         NumberCleaner (void);
@@ -43,16 +44,20 @@ class NumberCleaner {
 
         std::string clean (std::string to_clean);
 
-        inline void set_phone_number_prefix (std::string prefix) {  
-	  _debug("Number: Set phone number prefix %s", _prefix.c_str()); _prefix = prefix; }
+        inline void set_phone_number_prefix (std::string prefix) {
+            _debug ("Number: Set phone number prefix %s", _prefix.c_str());
+            _prefix = prefix;
+        }
 
-        inline std::string get_phone_number_prefix (void) { return _prefix; }
+        inline std::string get_phone_number_prefix (void) {
+            return _prefix;
+        }
 
     private:
 
         std::string _prefix;
 
-        void strip_char(std::string to_strip, std::string *num);
+        void strip_char (std::string to_strip, std::string *num);
 
 };
 
diff --git a/sflphone-common/src/observer.h b/sflphone-common/src/observer.h
index 5e778800598a1cbce1815a2ae544589171a0ba7a..ec3f8243841338747d34e55253a41a91a93c5b7e 100644
--- a/sflphone-common/src/observer.h
+++ b/sflphone-common/src/observer.h
@@ -36,26 +36,29 @@
 /**
  * Observer design pattern interface
  */
-namespace Pattern {
+namespace Pattern
+{
 
 /**
  * Observer interface
  */
-class Observer {
-public:
-  virtual ~Observer() {};
-  virtual void update() = 0;
+class Observer
+{
+    public:
+        virtual ~Observer() {};
+        virtual void update() = 0;
 };
 
-class Subject {
-public:
-  virtual ~Subject() {};
-  void attach(Observer& observer);
-  void detach(Observer& observer);
-  void notify();
+class Subject
+{
+    public:
+        virtual ~Subject() {};
+        void attach (Observer& observer);
+        void detach (Observer& observer);
+        void notify();
 
-private:
-  std::list<Observer*> _observers;
+    private:
+        std::list<Observer*> _observers;
 };
 
 } // end namespace
diff --git a/sflphone-common/src/plug-in/Makefile.am b/sflphone-common/src/plug-in/Makefile.am
index 35ea21e0390c242d1686bf722077cee6c60e9428..ec8d43800601c3b98c3b7a708b84bedacbfefbb9 100644
--- a/sflphone-common/src/plug-in/Makefile.am
+++ b/sflphone-common/src/plug-in/Makefile.am
@@ -1,6 +1,6 @@
 include ../../globals.mak
 
-SUBDIRS=audiorecorder test
+SUBDIRS=test
 
 noinst_LTLIBRARIES = libplugin.la
 
diff --git a/sflphone-common/src/plug-in/audiorecorder/Makefile.am b/sflphone-common/src/plug-in/audiorecorder/Makefile.am
deleted file mode 100644
index 2a37f147295de545974f83dbf48e097a5a0d53dc..0000000000000000000000000000000000000000
--- a/sflphone-common/src/plug-in/audiorecorder/Makefile.am
+++ /dev/null
@@ -1,6 +0,0 @@
-include $(top_srcdir)/globals.mak
-
-noinst_LTLIBRARIES = libaudiorecorder.la
-
-libaudiorecorder_la_SOURCES = \
-		audiorecord.cpp
\ No newline at end of file
diff --git a/sflphone-common/src/plug-in/audiorecorder/audiorecord.h b/sflphone-common/src/plug-in/audiorecorder/audiorecord.h
deleted file mode 100644
index de58f9535e86aa7efe31ad1ac98bcd876d01d781..0000000000000000000000000000000000000000
--- a/sflphone-common/src/plug-in/audiorecorder/audiorecord.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
- *  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 _AUDIO_RECORD_H
-#define _AUDIO_RECORD_H
-
-#include <iostream>
-#include <string.h>
-#include <stdlib.h>
-#include <sstream>
-
-#include "plug-in/plugin.h"
-// #include "audiodsp.h"
-
-// class AudioDSP;
-
-using namespace std;
-
-typedef std::string CallID;
-
-class AudioRecord
-{
-
-public:
-
-  AudioRecord();
-
-  ~AudioRecord();
-  
-  void setSndSamplingRate(int smplRate);
-
-  void setRecordingOption(FILE_TYPE type, SOUND_FORMAT format, int sndSmplRate, std::string path);
-
-  void initFileName( std::string peerNumber );
-
-  /** 
-   * Check if no otehr file is opened, then create a new one
-   * @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)
-   */
-  void openFile();
-
-  /**
-   * Close the opend recording file. If wave: cout the number of byte
-   */
-  void closeFile();
-
-  /**
-   * Check if a file is already opened
-   */
-  bool isOpenFile();
-
-  /** 
-   * Check if a file already exist
-   */
-  bool isFileExist();
-
-  /**
-   * Check recording state 
-   */ 
-  bool isRecording();
-
-  /**
-   * Set recording flag
-   */
-  bool setRecording();
-
-  /**
-   * Stop recording flag
-   */
-  void stopRecording();
-
-
-  /**
-   * Record a chunk of data in an internal buffer
-   * @param buffer  The data chunk to be recorded
-   * @param nSamples Number of samples (number of bytes) to be recorded 
-   */
-  void recSpkrData(SFLDataFormat* buffer, int nSamples);
-
-  /**
-   * Record a chunk of data in an internal buffer
-   * @param buffer  The data chunk to be recorded
-   * @param nSamples Number of samples (number of bytes) to be recorded 
-   */
-  void recMicData(SFLDataFormat* buffer, int nSamples);
-
-  /**
-   * Record a chunk of data in an openend file
-   * @param buffer  The data chunk to be recorded
-   * @param nSamples Number of samples (number of bytes) to be recorded 
-   */
-  void recData(SFLDataFormat* buffer, int nSamples);
-
-  /**
-   * Record a chunk of data in an openend file, Mix two differnet buffer
-   * @param buffer_1  The first data chunk to be recorded
-   * @param buffer_2  The second data chunk to be recorded
-   * @param nSamples_1 Number of samples (number of bytes) of buffer_1
-   * @param nSamples_2 Number of samples (number of bytes) of buffer_2
-   */
-  void recData(SFLDataFormat* buffer_1, SFLDataFormat* buffer_2, int nSamples_1, int nSamples_2);
-
-
-protected:
-
-  /**
-   * Create name file according to current date
-   */
-  void createFilename();
-  
-  /**
-   * Set the header for raw files
-   */
-  bool setRawFile();
-
-  /**
-   * Set the header for wave files
-   */
-  bool setWavFile();
-
-  /**
-   * Open an existing raw file, used when the call is set on hold    
-   */
-  bool openExistingRawFile();
-
-  /**
-   * Open an existing wav file, used when the call is set on hold
-   */
-  bool openExistingWavFile();
-
-  /**
-   * Compute the number of byte recorded and close the file
-   */
-  void closeWavFile();
-
-
-  /**
-   * Pointer to the recorded file
-   */
-  FILE *fp;                      //file pointer
-
-  /**
-   * File format (RAW / WAVE)
-   */
-  FILE_TYPE fileType_;
-
-  /**
-   * Sound format (SINT16/SINT32)
-   */
-  SOUND_FORMAT sndFormat_;
-
-  /**
-   * Number of channels
-   */
-  int channels_;
-
-  /**
-   * Number of byte recorded
-   */
-  unsigned long byteCounter_;
-
-  /**
-   * Sampling rate
-   */
-  int sndSmplRate_;
-  
-  /**
-   * number of samples recorded for mic buffer
-   */
-  int nbSamplesMic_;
-
-  /**
-   * number of samples recorded for speaker buffer
-   */
-  int nbSamplesSpk_;
-
-  /**
-   * Maximum number of samples
-   */
-  int nbSamplesMax_;
-
-  /**
-   * Recording flage
-   */
-  bool recordingEnabled_;
-
-  /**
-   * Buffer used for mixing two channels
-   */
-  SFLDataFormat* mixBuffer_;
-
-  /**
-   * Buffer used to copy mic info
-   */
-  SFLDataFormat* micBuffer_;
-  
-  /**
-   * Buffer used to copy spkr info
-   */
-  SFLDataFormat* spkBuffer_;
-  
-  /**
-   * Filename for this recording
-   */
-  char fileName_[8192];
-
-  /**
-   * Path for this recording
-   */
-  std::string savePath_;
- 
-};
-
-#endif // _AUDIO_RECORD_H
diff --git a/sflphone-common/src/plug-in/librarymanager.h b/sflphone-common/src/plug-in/librarymanager.h
index 2e94cd5681c3c8dcf7124703ec795ed275eb36e2..eba2ffd2858c267184083e23fc175a314b94acb3 100644
--- a/sflphone-common/src/plug-in/librarymanager.h
+++ b/sflphone-common/src/plug-in/librarymanager.h
@@ -32,11 +32,12 @@
 #define LIBRARY_MANAGER_H
 
 #include "dlfcn.h"
-#include <stdexcept> 
+#include <stdexcept>
 
 #include "global.h"
 
-class LibraryManager {
+class LibraryManager
+{
 
     public:
         typedef void* LibraryHandle;
@@ -57,19 +58,22 @@ class LibraryManager {
         LibraryHandle _handlePtr;
 };
 
-class LibraryManagerException : public std::runtime_error {
+class LibraryManagerException : public std::runtime_error
+{
 
     public:
 
         typedef enum Reason {
             loadingFailed = 0,
             symbolNotFound
-        }Reason;
+        } Reason;
 
         LibraryManagerException (const std::string &libraryName, const std::string &details, Reason reason);
         ~LibraryManagerException (void) throw() {}
 
-        inline Reason getReason (void) { return _reason; } 
+        inline Reason getReason (void) {
+            return _reason;
+        }
 
         const char* what () const throw();
 
diff --git a/sflphone-common/src/plug-in/plugin.h b/sflphone-common/src/plug-in/plugin.h
index 95a9adcb89027954c968a81b75e1b8b88974c368..f3c2afdc9d55e18690977bb99787f88d2d2e583f 100644
--- a/sflphone-common/src/plug-in/plugin.h
+++ b/sflphone-common/src/plug-in/plugin.h
@@ -32,25 +32,28 @@
 #ifndef PLUGIN_H
 #define PLUGIN_H
 
-#include "global.h" 
+#include "global.h"
 
-#include "pluginmanager.h" 
+#include "pluginmanager.h"
 
 /*
  * @file plugin.h
- * @brief Define a plugin object 
+ * @brief Define a plugin object
  */
 
-class Plugin {
+class Plugin
+{
 
     public:
-        Plugin( const std::string &name ){
+        Plugin (const std::string &name) {
             _name = name;
         }
 
         virtual ~Plugin()  {}
 
-        inline std::string getPluginName (void) { return _name; }
+        inline std::string getPluginName (void) {
+            return _name;
+        }
 
         /**
          * Return the minimal core version required so that the plugin could work
@@ -59,7 +62,7 @@ class Plugin {
         virtual int initFunc (PluginInfo **info) = 0;
 
     private:
-        Plugin &operator =(const Plugin &plugin);
+        Plugin &operator = (const Plugin &plugin);
 
         std::string _name;
 };
diff --git a/sflphone-common/src/plug-in/pluginmanager.h b/sflphone-common/src/plug-in/pluginmanager.h
index a60ee02b3ba86fcb889f1d252ddf709a9437d606..8d322b0b488f6efaee144e3820b6d661a5a690bb 100644
--- a/sflphone-common/src/plug-in/pluginmanager.h
+++ b/sflphone-common/src/plug-in/pluginmanager.h
@@ -39,9 +39,9 @@
 #include "librarymanager.h"
 #include "global.h"
 
-#include <map> 
-#include <string> 
-#include <vector> 
+#include <map>
+#include <string>
+#include <vector>
 
 class Plugin;
 
@@ -55,7 +55,8 @@ typedef struct PluginInfo {
 
 #include "plugin.h"
 
-class PluginManager {
+class PluginManager
+{
     public:
         /**
          * Destructor
@@ -86,20 +87,20 @@ class PluginManager {
         bool isPluginLoaded (const std::string &name);
 
         int registerPlugin (Plugin *plugin, LibraryManager *library);
-        
+
         int unregisterPlugin (PluginInfo *plugin);
 
-        int deletePlugin (PluginInfo *plugin); 
+        int deletePlugin (PluginInfo *plugin);
 
         /**
-         * Load a unix dynamic/shared library 
+         * Load a unix dynamic/shared library
          * @param filename  The path to the dynamic/shared library
          * @return LibraryManager*    A pointer on the library
          */
         LibraryManager* loadDynamicLibrary (const std::string &filename);
 
         /**
-         * Unload a unix dynamic/shared library 
+         * Unload a unix dynamic/shared library
          * @param LibraryManager*  The pointer on the loaded library
          */
         int unloadDynamicLibrary (LibraryManager* libraryPtr);
diff --git a/sflphone-common/src/preferences.cpp b/sflphone-common/src/preferences.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..7eba0cd3cf8ecf78296ff13c38d68162f263786e
--- /dev/null
+++ b/sflphone-common/src/preferences.cpp
@@ -0,0 +1,828 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "preferences.h"
+#include <sstream>
+#include "global.h"
+#include "user_cfg.h"
+
+Preferences::Preferences() :  _accountOrder ("")
+        , _audioApi (1) // 1 is pulseaudio, 0 alsa
+        , _historyLimit (30)
+        , _historyMaxCalls (20)
+        , _notifyMails (false)
+        , _zoneToneChoice (DFT_ZONE) // DFT_ZONE
+        , _registrationExpire (180)
+        , _portNum (5060)
+        , _searchBarDisplay (true)
+        , _zeroConfenable (false)
+        , _md5Hash (false)
+{
+
+}
+
+Preferences::~Preferences() {}
+
+
+void Preferences::serialize (Conf::YamlEmitter *emiter)
+{
+
+    _debug ("Preference: Serialize configuration");
+
+    Conf::MappingNode preferencemap (NULL);
+
+    Conf::ScalarNode order (_accountOrder);
+    // std::stringstream audiostr;
+    // audiostr << _audioApi;
+    Conf::ScalarNode audioapi (_audioApi == 1 ? "pulseaudio" : "alsa");
+    std::stringstream histlimitstr;
+    histlimitstr << _historyLimit;
+    Conf::ScalarNode historyLimit (histlimitstr.str());
+    std::stringstream histmaxstr;
+    histmaxstr << _historyMaxCalls;
+    Conf::ScalarNode historyMaxCalls (histmaxstr.str());
+    Conf::ScalarNode notifyMails (_notifyMails ? "true" : "false");
+    Conf::ScalarNode zoneToneChoice (_zoneToneChoice);
+    std::stringstream expirestr;
+    expirestr << _registrationExpire;
+    Conf::ScalarNode registrationExpire (expirestr.str());
+    std::stringstream portstr;
+    portstr << _portNum;
+    Conf::ScalarNode portNum (portstr.str());
+    Conf::ScalarNode searchBarDisplay (_searchBarDisplay ? "true" : "false");
+    Conf::ScalarNode zeroConfenable (_zeroConfenable ? "true" : "false");
+    Conf::ScalarNode md5Hash (_md5Hash ? "true" : "false");
+
+    preferencemap.setKeyValue (orderKey, &order);
+    preferencemap.setKeyValue (audioApiKey, &audioapi);
+    preferencemap.setKeyValue (historyLimitKey, &historyLimit);
+    preferencemap.setKeyValue (historyMaxCallsKey, &historyMaxCalls);
+    preferencemap.setKeyValue (notifyMailsKey, &notifyMails);
+    preferencemap.setKeyValue (zoneToneChoiceKey, &zoneToneChoice);
+    preferencemap.setKeyValue (registrationExpireKey, &registrationExpire);
+    preferencemap.setKeyValue (portNumKey, &portNum);
+    preferencemap.setKeyValue (searchBarDisplayKey, &searchBarDisplay);
+    preferencemap.setKeyValue (zeroConfenableKey, &zeroConfenable);
+    preferencemap.setKeyValue (md5HashKey, &md5Hash);
+
+    emiter->serializePreference (&preferencemap);
+}
+
+void Preferences::unserialize (Conf::MappingNode *map)
+{
+
+    _debug ("Preference: Unserialize configuration");
+
+    Conf::ScalarNode *val;
+
+    if (!map) {
+        _debug ("Preference: Did not find general preferences");
+        return;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (orderKey));
+
+    if (val) {
+        _accountOrder = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (audioApiKey));
+
+    if (val) {
+        // 1 is pulseaudio, 0 is alsa
+        _audioApi = (val->getValue().compare ("pulseaudio") == 0) ? 1 : 0;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (historyLimitKey));
+
+    if (val) {
+        _historyLimit = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (historyMaxCallsKey));
+
+    if (val) {
+        _historyMaxCalls = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (notifyMailsKey));
+
+    if (val) {
+        _notifyMails = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (zoneToneChoiceKey));
+
+    if (val) {
+        _zoneToneChoice = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (registrationExpireKey));
+
+    if (val) {
+        _registrationExpire = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (portNumKey));
+
+    if (val) {
+        _portNum = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (searchBarDisplayKey));
+
+    if (val && !val->getValue().empty()) {
+        _searchBarDisplay = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (zeroConfenableKey));
+
+    if (val && !val->getValue().empty()) {
+        _zeroConfenable = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (md5HashKey));
+
+    if (val && !val->getValue().empty()) {
+        _md5Hash = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+
+
+}
+
+
+VoipPreference::VoipPreference() :  _playDtmf (true)
+        , _playTones (true)
+        , _pulseLength (atoi (DFT_PULSE_LENGTH_STR)) // DFT_PULSE_LENGTH_STR
+        , _symmetricRtp (true)
+        , _zidFile (ZRTP_ZIDFILE) // ZRTP_ZID_FILENAME
+{
+
+}
+
+VoipPreference::~VoipPreference() {}
+
+
+void VoipPreference::serialize (Conf::YamlEmitter *emitter)
+{
+    _debug ("VoipPreference: Serialize configuration");
+
+    Conf::MappingNode preferencemap (NULL);
+
+    Conf::ScalarNode playDtmf (_playDtmf ? "true" : "false");
+    Conf::ScalarNode playTones (_playTones ? "true" : "false");
+    std::stringstream pulselengthstr;
+    pulselengthstr << _pulseLength;
+    Conf::ScalarNode pulseLength (pulselengthstr.str());
+    Conf::ScalarNode symmetricRtp (_symmetricRtp ? "true" : "false");
+    Conf::ScalarNode zidFile (_zidFile.c_str());
+
+    preferencemap.setKeyValue (playDtmfKey, &playDtmf);
+    preferencemap.setKeyValue (playTonesKey, &playTones);
+    preferencemap.setKeyValue (pulseLengthKey, &pulseLength);
+    preferencemap.setKeyValue (symmetricRtpKey, &symmetricRtp);
+    preferencemap.setKeyValue (zidFileKey, &zidFile);
+
+    emitter->serializeVoipPreference (&preferencemap);
+}
+
+void VoipPreference::unserialize (Conf::MappingNode *map)
+{
+
+    _debug ("VoipPreference: Unserialize configuration");
+
+    Conf::ScalarNode *val = NULL;
+
+    if (!map) {
+        _debug ("VoipPreference: Did not find voip preference");
+        return;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (playDtmfKey));
+
+    if (val && !val->getValue().empty()) {
+        _playDtmf = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (playTonesKey));
+
+    if (val && !val->getValue().empty()) {
+        _playTones = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (pulseLengthKey));
+
+    if (val) {
+        _pulseLength = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (symmetricRtpKey));
+
+    if (val && !val->getValue().empty()) {
+        _symmetricRtp = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (zidFileKey));
+
+    if (val) {
+        _zidFile = val->getValue().c_str();
+        val = NULL;
+    }
+
+}
+
+
+
+AddressbookPreference::AddressbookPreference() : _photo (true)
+        , _enabled (true)
+        , _list ("")
+        , _maxResults (25)
+        , _business (true)
+        , _home (true)
+        , _mobile (true)
+{
+
+}
+
+AddressbookPreference::~AddressbookPreference() {}
+
+void AddressbookPreference::serialize (Conf::YamlEmitter *emitter)
+{
+    _debug ("Addressbook: Serialize configuration");
+
+    Conf::MappingNode preferencemap (NULL);
+
+    Conf::ScalarNode photo (_photo ? "true" : "false");
+    Conf::ScalarNode enabled (_enabled ? "true" : "false");
+    Conf::ScalarNode list (_list);
+    std::stringstream maxresultstr;
+    maxresultstr << _maxResults;
+    Conf::ScalarNode maxResults (maxresultstr.str());
+    Conf::ScalarNode business (_business ? "true" : "false");
+    Conf::ScalarNode home (_home ? "true" : "false");
+    Conf::ScalarNode mobile (_mobile ? "true" : "false");
+
+    preferencemap.setKeyValue (photoKey, &photo);
+    preferencemap.setKeyValue (enabledKey, &enabled);
+    preferencemap.setKeyValue (listKey, &list);
+    preferencemap.setKeyValue (maxResultsKey, &maxResults);
+    preferencemap.setKeyValue (businessKey, &business);
+    preferencemap.setKeyValue (homeKey, &home);
+    preferencemap.setKeyValue (mobileKey, &mobile);
+
+    emitter->serializeAddressbookPreference (&preferencemap);
+
+}
+
+void AddressbookPreference::unserialize (Conf::MappingNode *map)
+{
+    _debug ("Addressbook: Unserialize configuration");
+
+    Conf::ScalarNode *val = NULL;
+
+    if (!map) {
+        _debug ("Addressbook: Did not find addressbook preferences");
+        return;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (photoKey));
+
+    if (val && ! (val->getValue().empty())) {
+        _photo = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (enabledKey));
+
+    if (val && !val->getValue().empty()) {
+        _enabled = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (listKey));
+
+    if (val) {
+        _list = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (maxResultsKey));
+
+    if (val) {
+        _maxResults = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (businessKey));
+
+    if (val && !val->getValue().empty()) {
+        _business = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (homeKey));
+
+    if (val && !val->getValue().empty()) {
+        _home = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (mobileKey));
+
+    if (val && !val->getValue().empty()) {
+        _mobile = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+}
+
+
+HookPreference::HookPreference() : _iax2Enabled (false)
+        , _numberAddPrefix ("")
+        , _numberEnabled (false)
+        , _sipEnabled (false)
+        , _urlCommand ("x-www-browser")
+        , _urlSipField ("X-sflphone-url")
+{
+
+}
+
+HookPreference::~HookPreference() {}
+
+void HookPreference::serialize (Conf::YamlEmitter *emitter)
+{
+    _debug ("Hook: Serialize configuration");
+
+    Conf::MappingNode preferencemap (NULL);
+
+    Conf::ScalarNode iax2Enabled (_iax2Enabled ? "true" : "false");
+    Conf::ScalarNode numberAddPrefix (_numberAddPrefix);
+    Conf::ScalarNode numberEnabled (_numberEnabled ? "true" : "false");
+    Conf::ScalarNode sipEnabled (_sipEnabled ? "true" : "false");
+    Conf::ScalarNode urlCommand (_urlCommand);
+    Conf::ScalarNode urlSipField (_urlSipField);
+
+    preferencemap.setKeyValue (iax2EnabledKey, &iax2Enabled);
+    preferencemap.setKeyValue (numberAddPrefixKey, &numberAddPrefix);
+    preferencemap.setKeyValue (numberEnabledKey, &numberEnabled);
+    preferencemap.setKeyValue (sipEnabledKey, &sipEnabled);
+    preferencemap.setKeyValue (urlCommandKey, &urlCommand);
+    preferencemap.setKeyValue (urlSipFieldKey, &urlSipField);
+
+    emitter->serializeHooksPreference (&preferencemap);
+}
+
+void HookPreference::unserialize (Conf::MappingNode *map)
+{
+    Conf::ScalarNode *val = NULL;
+
+    _debug ("Hook: Unserialize preference");
+
+    if (!map) {
+        _debug ("Hook: Did not find hook preference");
+        return;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (iax2EnabledKey));
+
+    if (val) {
+        _iax2Enabled = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (numberAddPrefixKey));
+
+    if (val) {
+        _numberAddPrefix = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (numberEnabledKey));
+
+    if (val) {
+        _numberEnabled = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (sipEnabledKey));
+
+    if (val) {
+        _sipEnabled = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (urlCommandKey));
+
+    if (val) {
+        _urlCommand = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (urlSipFieldKey));
+
+    if (val) {
+        _urlSipField = val->getValue();
+        val = NULL;
+    }
+
+
+}
+
+
+
+AudioPreference::AudioPreference() : _cardin (atoi (ALSA_DFT_CARD)) // ALSA_DFT_CARD
+        , _cardout (atoi (ALSA_DFT_CARD)) // ALSA_DFT_CARD
+        , _cardring (atoi (ALSA_DFT_CARD)) // ALSA_DFT_CARD
+        , _framesize (atoi (DFT_FRAME_SIZE)) // DFT_FRAME_SIZE
+        , _plugin ("default") // PCM_DEFAULT
+        , _smplrate (44100) // DFT_SAMPLE_RATE
+        , _devicePlayback ("")
+        , _deviceRecord ("")
+        , _deviceRingtone ("")
+        , _recordpath ("") // DFT_RECORD_PATH
+        , _volumemic (atoi (DFT_VOL_SPKR_STR)) // DFT_VOL_SPKR_STR
+        , _volumespkr (atoi (DFT_VOL_MICRO_STR)) // DFT_VOL_MICRO_STR
+        , _noisereduce (true)
+{
+
+}
+
+AudioPreference::~AudioPreference() {}
+
+void AudioPreference::serialize (Conf::YamlEmitter *emitter)
+{
+    _debug ("AudioPreference: Serialize configuration");
+
+    Conf::MappingNode preferencemap (NULL);
+    Conf::MappingNode alsapreferencemap (NULL);
+    Conf::MappingNode pulsepreferencemap (NULL);
+
+    // alsa preference
+    std::stringstream instr;
+    instr << _cardin;
+    Conf::ScalarNode cardin (instr.str()); // 0
+    std::stringstream outstr;
+    outstr << _cardout;
+    Conf::ScalarNode cardout (outstr.str()); // 0
+    std::stringstream ringstr;
+    ringstr << _cardring;
+    Conf::ScalarNode cardring (ringstr.str());// 0
+    std::stringstream framestr;
+    framestr << _framesize;
+    Conf::ScalarNode framesize (framestr.str()); // 20
+    Conf::ScalarNode plugin (_plugin); // default
+    std::stringstream ratestr;
+    ratestr << _smplrate;
+    Conf::ScalarNode smplrate (ratestr.str());// 44100
+
+    //pulseaudio preference
+    Conf::ScalarNode devicePlayback (_devicePlayback);//:
+    Conf::ScalarNode deviceRecord (_deviceRecord); //:
+    Conf::ScalarNode deviceRingtone (_deviceRingtone); //:
+
+    // general preference
+    Conf::ScalarNode recordpath (_recordpath); //: /home/msavard/Bureau
+    std::stringstream micstr;
+    micstr << _volumemic;
+    Conf::ScalarNode volumemic (micstr.str()); //:  100
+    std::stringstream spkrstr;
+    spkrstr << _volumespkr;
+    Conf::ScalarNode volumespkr (spkrstr.str()); //: 100
+    Conf::ScalarNode noise (_noisereduce ? "true":"false");
+    preferencemap.setKeyValue (recordpathKey, &recordpath);
+    preferencemap.setKeyValue (volumemicKey, &volumemic);
+    preferencemap.setKeyValue (volumespkrKey, &volumespkr);
+
+    preferencemap.setKeyValue (alsamapKey, &alsapreferencemap);
+    alsapreferencemap.setKeyValue (cardinKey, &cardin);
+    alsapreferencemap.setKeyValue (cardoutKey, &cardout);
+    alsapreferencemap.setKeyValue (cardringKey, &cardring);
+    alsapreferencemap.setKeyValue (framesizeKey, &framesize);
+    alsapreferencemap.setKeyValue (pluginKey, &plugin);
+    alsapreferencemap.setKeyValue (smplrateKey, &smplrate);
+
+    preferencemap.setKeyValue (pulsemapKey, &pulsepreferencemap);
+    pulsepreferencemap.setKeyValue (devicePlaybackKey, &devicePlayback);
+    pulsepreferencemap.setKeyValue (deviceRecordKey, &deviceRecord);
+    pulsepreferencemap.setKeyValue (deviceRingtoneKey, &deviceRingtone);
+
+    preferencemap.setKeyValue (noiseReduceKey, &noise);
+
+    emitter->serializeAudioPreference (&preferencemap);
+
+}
+
+void AudioPreference::unserialize (Conf::MappingNode *map)
+{
+    _debug ("AudioPreference: Unserialize configuration");
+
+    if (!map) {
+        _debug ("AudioPreference: Did not find audio preferences");
+        return;
+    }
+
+    Conf::MappingNode *alsamap = NULL;
+    Conf::MappingNode *pulsemap = NULL;
+
+    Conf::ScalarNode *val = NULL;
+
+
+    val = (Conf::ScalarNode *) (map->getValue (recordpathKey));
+
+    if (val) {
+        _recordpath = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (volumemicKey));
+
+    if (val) {
+        _volumemic = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (volumespkrKey));
+
+    if (val) {
+        _volumespkr = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (noiseReduceKey));
+
+    if (val) {
+        _noisereduce = (val->getValue() == "true");
+        val = NULL;
+    }
+
+    alsamap = (Conf::MappingNode *) (map->getValue ("alsa"));
+
+    // did found alsa
+    if (alsamap) {
+
+        val = (Conf::ScalarNode *) (alsamap->getValue (cardinKey));
+
+        if (val) {
+            _cardin = atoi (val->getValue().data());
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (alsamap->getValue (cardoutKey));
+
+        if (val) {
+            _cardout = atoi (val->getValue().data());
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (alsamap->getValue (cardringKey));
+
+        if (val) {
+            _cardring = atoi (val->getValue().data());
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (alsamap->getValue (framesizeKey));
+
+        if (val) {
+            _framesize = atoi (val->getValue().data());
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (alsamap->getValue (smplrateKey));
+
+        if (val) {
+            _smplrate = atoi (val->getValue().data());
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (alsamap->getValue (pluginKey));
+
+        if (val) {
+            _plugin = val->getValue();
+            val = NULL;
+        }
+
+    }
+
+
+    pulsemap = (Conf::MappingNode *) (map->getValue ("pulse"));
+
+
+    if (pulsemap) {
+
+        val = (Conf::ScalarNode *) (pulsemap->getValue (devicePlaybackKey));
+
+        if (val) {
+            _devicePlayback = val->getValue();
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (pulsemap->getValue (deviceRecordKey));
+
+        if (val) {
+            _deviceRecord = val->getValue();
+            val = NULL;
+        }
+
+        val = (Conf::ScalarNode *) (pulsemap->getValue (deviceRingtoneKey));
+
+        if (val) {
+            _deviceRingtone = val->getValue();
+            val = NULL;
+        }
+
+    }
+
+}
+
+
+
+ShortcutPreferences::ShortcutPreferences() : _hangup ("")
+        , _pickup ("")
+        , _popup ("")
+        , _toggleHold ("")
+        , _togglePickupHangup ("")
+{
+
+}
+
+ShortcutPreferences::~ShortcutPreferences() {}
+
+
+std::map<std::string, std::string> ShortcutPreferences::getShortcuts()
+{
+
+    std::map<std::string, std::string> shortcutsMap;
+
+    shortcutsMap.insert (std::pair<std::string, std::string> (hangupShortKey, _hangup));
+    shortcutsMap.insert (std::pair<std::string, std::string> (pickupShortKey, _pickup));
+    shortcutsMap.insert (std::pair<std::string, std::string> (popupShortKey, _popup));
+    shortcutsMap.insert (std::pair<std::string, std::string> (toggleHoldShortKey, _toggleHold));
+    shortcutsMap.insert (std::pair<std::string, std::string> (togglePickupHangupShortKey, _togglePickupHangup));
+
+    return shortcutsMap;
+}
+
+
+void ShortcutPreferences::setShortcuts (std::map<std::string, std::string> map_cpy)
+{
+    // std::map<std::string, int> map_cpy = shortcut;
+    std::map<std::string, std::string>::iterator it;
+
+    _debug ("ShortcutPreferences: Set shortcuts");
+
+
+    it = map_cpy.find (hangupShortKey);
+
+    if (it != map_cpy.end()) {
+        _hangup = it->second;
+    }
+
+    it = map_cpy.find (pickupShortKey);
+
+    if (it != map_cpy.end()) {
+        _pickup = it->second;
+    }
+
+    it = map_cpy.find (popupShortKey);
+
+    if (it != map_cpy.end()) {
+        _popup = it->second;
+    }
+
+    it = map_cpy.find (toggleHoldShortKey);
+
+    if (it != map_cpy.end()) {
+        _toggleHold = it->second;
+    }
+
+    it = map_cpy.find (togglePickupHangupShortKey);
+
+    if (it != map_cpy.end()) {
+        _togglePickupHangup = it->second;
+    }
+
+    /*
+    for (int i = 0; i < (int)shortcutsKeys.size(); i++) {
+      std::string key = shortcutsKeys.at(i);
+      it = map_cpy.find(key);
+      if (it != shortcutsMap.end()) {
+        Manager::instance().setConfig("Shortcuts", key, it->second);
+      }
+    }
+    */
+}
+
+
+void ShortcutPreferences::serialize (Conf::YamlEmitter *emitter)
+{
+
+    _debug ("ShortcutPreference: Serialize configuration");
+
+    Conf::MappingNode preferencemap (NULL);
+
+    Conf::ScalarNode hangup (_hangup);
+    Conf::ScalarNode pickup (_pickup);
+    Conf::ScalarNode popup (_popup);
+    Conf::ScalarNode toggleHold (_toggleHold);
+    Conf::ScalarNode togglePickupHangup (_togglePickupHangup);
+
+    preferencemap.setKeyValue (hangupShortKey, &hangup);
+    preferencemap.setKeyValue (pickupShortKey, &pickup);
+    preferencemap.setKeyValue (popupShortKey, &popup);
+    preferencemap.setKeyValue (toggleHoldShortKey, &toggleHold);
+    preferencemap.setKeyValue (togglePickupHangupShortKey, &togglePickupHangup);
+
+    emitter->serializeShortcutPreference (&preferencemap);
+}
+
+void ShortcutPreferences::unserialize (Conf::MappingNode *map)
+{
+    _debug ("ShortcutPreference: Unserialize shortcut");
+
+    if (!map) {
+        _debug ("ShortcutPreference: Could not find shortcut preferences");
+        return;
+    }
+
+    Conf::ScalarNode *val = NULL;
+
+    val = (Conf::ScalarNode *) (map->getValue (hangupShortKey));
+
+    if (val) {
+        _hangup = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (pickupShortKey));
+
+    if (val) {
+        _pickup = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (popupShortKey));
+
+    if (val) {
+        _popup = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (toggleHoldShortKey));
+
+    if (val) {
+        _toggleHold = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (togglePickupHangupShortKey));
+
+    if (val) {
+        _togglePickupHangup = val->getValue();
+        val = NULL;
+    }
+
+}
diff --git a/sflphone-common/src/preferences.h b/sflphone-common/src/preferences.h
new file mode 100644
index 0000000000000000000000000000000000000000..7a5c78cb5ff4c28e659f15da43612cb1bcfea4c7
--- /dev/null
+++ b/sflphone-common/src/preferences.h
@@ -0,0 +1,601 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 __PREFERENCE_H__
+#define __PREFERENCE_H__
+
+#include "config/serializable.h"
+
+// general preferences
+const Conf::Key orderKey ("order");                         // :	1234/2345/
+const Conf::Key audioApiKey ("audioApi");                   // :	0
+const Conf::Key historyLimitKey ("historyLimit");           // :	30
+const Conf::Key historyMaxCallsKey ("historyMaxCalls");     // :	20
+const Conf::Key notifyMailsKey ("notifyMails");             // :	false
+const Conf::Key zoneToneChoiceKey ("zoneToneChoice");       // :	North America
+const Conf::Key registrationExpireKey ("registrationExpire");// :	180
+const Conf::Key portNumKey ("portNum");                     // :	5060
+const Conf::Key searchBarDisplayKey ("searchBarDisplay");   // :	true
+const Conf::Key zeroConfenableKey ("zeroConfenable");       // :	false
+const Conf::Key md5HashKey ("md5Hash");                     // :	false
+
+// voip preferences
+const Conf::Key playDtmfKey ("playDtmf"); // true                    true
+const Conf::Key playTonesKey ("playTones"); // true
+const Conf::Key pulseLengthKey ("pulseLength"); //=250
+const Conf::Key symmetricRtpKey ("symmetric");// =true
+const Conf::Key zidFileKey ("zidFile");// =sfl.zid
+
+// addressbook preferences
+const Conf::Key photoKey ("photo");//		false
+const Conf::Key enabledKey ("enabled");//		true
+const Conf::Key listKey ("list");//		1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/
+const Conf::Key maxResultsKey ("maxResults");//		25
+const Conf::Key businessKey ("business");//		true
+const Conf::Key homeKey ("home");//		false
+const Conf::Key mobileKey ("mobile");//		false
+
+// hooks preferences
+const Conf::Key iax2EnabledKey ("iax2Enabled");// :		false
+const Conf::Key numberAddPrefixKey ("numberAddPrefix");//:	false
+const Conf::Key numberEnabledKey ("numberEnabled"); //:	false
+const Conf::Key sipEnabledKey ("sipEnabled"); //:		false
+const Conf::Key urlCommandKey ("urlCommand"); //:		x-www-browser
+const Conf::Key urlSipFieldKey ("urlSipField"); //:		X-sflphone-url
+
+// audio preferences
+const Conf::Key alsamapKey ("alsa");
+const Conf::Key pulsemapKey ("pulse");
+const Conf::Key cardinKey ("cardIn");// : 0
+const Conf::Key cardoutKey ("cardOut");// 0
+const Conf::Key cardringKey ("cardRing");// : 0
+const Conf::Key framesizeKey ("frameSize");// : 20
+const Conf::Key pluginKey ("plugin"); //: default
+const Conf::Key smplrateKey ("smplRate");//: 44100
+const Conf::Key devicePlaybackKey ("devicePlayback");//:
+const Conf::Key deviceRecordKey ("deviceRecord");// :
+const Conf::Key deviceRingtoneKey ("deviceRingtone");// :
+const Conf::Key recordpathKey ("recordPath");//: /home/msavard/Bureau
+const Conf::Key volumemicKey ("volumeMic");//:  100
+const Conf::Key volumespkrKey ("volumeSpkr");//: 100
+const Conf::Key noiseReduceKey ("noiseReduce");
+
+// shortcut preferences
+const Conf::Key hangupShortKey ("hangUp");
+const Conf::Key pickupShortKey ("pickUp");
+const Conf::Key popupShortKey ("popupWindow");
+const Conf::Key toggleHoldShortKey ("toggleHold");
+const Conf::Key togglePickupHangupShortKey ("togglePickupHangup");
+
+
+class Preferences : public Serializable
+{
+
+    public:
+
+        Preferences();
+
+        ~Preferences();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+
+        std::string getAccountOrder (void) {
+            return _accountOrder;
+        }
+        void setAccountOrder (std::string ord) {
+            _accountOrder = ord;
+        }
+
+        int getAudioApi (void) {
+            return _audioApi;
+        }
+        void setAudioApi (int api) {
+            _audioApi = api;
+        }
+
+        int getHistoryLimit (void) {
+            return _historyLimit;
+        }
+        void setHistoryLimit (int lim) {
+            _historyLimit = lim;
+        }
+
+        int getHistoryMaxCalls (void) {
+            return _historyMaxCalls;
+        }
+        void setHistoryMaxCalls (int max) {
+            _historyMaxCalls = max;
+        }
+
+        bool getNotifyMails (void) {
+            return _notifyMails;
+        }
+        void setNotifyMails (bool mails) {
+            _notifyMails = mails;
+        }
+
+        std::string getZoneToneChoice (void) {
+            return _zoneToneChoice;
+        }
+        void setZoneToneChoice (std::string str) {
+            _zoneToneChoice = str;
+        }
+
+        int getRegistrationExpire (void) {
+            return _registrationExpire;
+        }
+        void setRegistrationExpire (int exp) {
+            _registrationExpire = exp;
+        }
+
+        int getPortNum (void) {
+            return _portNum;
+        }
+        void setPortNum (int port) {
+            _portNum = port;
+        }
+
+        bool getSearchBarDisplay (void) {
+            return _searchBarDisplay;
+        }
+        void setSearchBarDisplay (bool search) {
+            _searchBarDisplay = search;
+        }
+
+        bool getZeroConfenable (void) {
+            return _zeroConfenable;
+        }
+        void setZeroConfenable (bool enable) {
+            _zeroConfenable = enable;
+        }
+
+        bool getMd5Hash (void) {
+            return _md5Hash;
+        }
+        void setMd5Hash (bool md5) {
+            _md5Hash = md5;
+        }
+
+    private:
+
+        // account order
+        std::string _accountOrder;
+
+        int _audioApi;
+        int _historyLimit;
+        int _historyMaxCalls;
+        bool _notifyMails;
+        std::string _zoneToneChoice;
+        int _registrationExpire;
+        int _portNum;
+        bool _searchBarDisplay;
+        bool _zeroConfenable;
+        bool _md5Hash;
+
+};
+
+
+class VoipPreference : public Serializable
+{
+
+    public:
+
+        VoipPreference();
+
+        ~VoipPreference();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        bool getPlayDtmf (void) {
+            return _playDtmf;
+        }
+        void setPlayDtmf (bool dtmf) {
+            _playDtmf = dtmf;
+        }
+
+        bool getPlayTones (void) {
+            return _playTones;
+        }
+        void setPlayTones (bool tone) {
+            _playTones = tone;
+        }
+
+        int getPulseLength (void) {
+            return _pulseLength;
+        }
+        void setPulseLength (int length) {
+            _pulseLength = length;
+        }
+
+        bool getSymmetricRtp (void) {
+            return _symmetricRtp;
+        }
+        void setSymmetricRtp (bool sym) {
+            _symmetricRtp = sym;
+        }
+
+        std::string getZidFile (void) {
+            return _zidFile;
+        }
+        void setZidFile (std::string file) {
+            _zidFile = file;
+        }
+
+    private:
+
+        bool _playDtmf;
+        bool _playTones;
+        int _pulseLength;
+        bool _symmetricRtp;
+        std::string _zidFile;
+
+};
+
+class AddressbookPreference : public Serializable
+{
+
+    public:
+
+        AddressbookPreference();
+
+        ~AddressbookPreference();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        bool getPhoto (void) {
+            return _photo;
+        }
+        void setPhoto (bool p) {
+            _photo = p;
+        }
+
+        bool getEnabled (void) {
+            return _enabled;
+        }
+        void setEnabled (bool e) {
+            _enabled = e;
+        }
+
+        std::string getList (void) {
+            return _list;
+        }
+        void setList (std::string l) {
+            _list = l;
+        }
+
+        int getMaxResults (void) {
+            return _maxResults;
+        }
+        void setMaxResults (int r) {
+            _maxResults = r;
+        }
+
+        bool getBusiness (void) {
+            return _business;
+        }
+        void setBusiness (bool b) {
+            _business = b;
+        }
+
+        bool getHome (void) {
+            return _home;
+        }
+        void setHone (bool h) {
+            _home = h;
+        }
+
+        bool getMobile (void) {
+            return _mobile;
+        }
+        void setMobile (bool m) {
+            _mobile = m;
+        }
+
+    private:
+
+        bool _photo;
+        bool _enabled;
+        std::string _list;
+        int _maxResults;
+        bool _business;
+        bool _home;
+        bool _mobile;
+
+};
+
+
+class HookPreference : public Serializable
+{
+
+    public:
+
+        HookPreference();
+
+        ~HookPreference();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        bool getIax2Enabled (void) {
+            return _iax2Enabled;
+        }
+        void setIax2Enabled (bool i) {
+            _iax2Enabled = i;
+        }
+
+        std::string getNumberAddPrefix (void) {
+            return _numberAddPrefix;
+        }
+        void setNumberAddPrefix (std::string n) {
+            _numberAddPrefix = n;
+        }
+
+        bool getNumberEnabled (void) {
+            return _numberEnabled;
+        }
+        void setNumberEnabled (bool n) {
+            _numberEnabled = n;
+        }
+
+        bool getSipEnabled (void) {
+            return _sipEnabled;
+        }
+        void setSipEnabled (bool s) {
+            _sipEnabled = s;
+        }
+
+        std::string getUrlCommand (void) {
+            return _urlCommand;
+        }
+        void setUrlCommand (std::string u) {
+            _urlCommand = u;
+        }
+
+        std::string getUrlSipField (void) {
+            return _urlSipField;
+        }
+        void setUrlSipField (std::string u) {
+            _urlSipField = u;
+        }
+
+    private:
+
+        bool _iax2Enabled;// :		false
+        std::string _numberAddPrefix;//:	false
+        bool _numberEnabled; //:	false
+        bool _sipEnabled; //:		false
+        std::string _urlCommand; //:		x-www-browser
+        std::string _urlSipField; //:		X-sflphone-url
+
+};
+
+
+class AudioPreference : public Serializable
+{
+
+    public:
+
+        AudioPreference();
+
+        ~AudioPreference();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        // alsa preference
+        int getCardin (void) {
+            return _cardin;
+        }
+        void setCardin (int c) {
+            _cardin = c;
+        }
+
+        int getCardout (void) {
+            return _cardout;
+        }
+        void setCardout (int c) {
+            _cardout = c;
+        }
+
+        int getCardring (void) {
+            return _cardring;
+        }
+        void setCardring (int c) {
+            _cardring = c;
+        }
+
+        int getFramesize (void) {
+            return _framesize;
+        }
+        void setFramesize (int f) {
+            _framesize = f;
+        }
+
+        std::string getPlugin (void) {
+            return _plugin;
+        }
+        void setPlugin (std::string p) {
+            _plugin = p;
+        }
+
+        int getSmplrate (void) {
+            return _smplrate;
+        }
+        void setSmplrate (int r) {
+            _smplrate = r;
+        }
+
+        //pulseaudio preference
+        std::string getDevicePlayback (void) {
+            return _devicePlayback;
+        }
+        void setDevicePlayback (std::string p) {
+            _devicePlayback = p;
+        }
+
+        std::string getDeviceRecord (void) {
+            return _deviceRecord;
+        }
+        void setDeviceRecord (std::string r) {
+            _deviceRecord = r;
+        }
+
+        std::string getDeviceRingtone (void) {
+            return _deviceRingtone;
+        }
+        void setDeviceRingtone (std::string r) {
+            _deviceRingtone = r;
+        }
+
+        // general preference
+        std::string getRecordpath (void) {
+            return _recordpath;
+        }
+        void setRecordpath (std::string r) {
+            _recordpath = r;
+        }
+
+        int getVolumemic (void) {
+            return _volumemic;
+        }
+        void setVolumemic (int m) {
+            _volumemic = m;
+        }
+
+        int getVolumespkr (void) {
+            return _volumespkr;
+        }
+        void setVolumespkr (int s) {
+            _volumespkr = s;
+        }
+
+        bool getNoiseReduce (void) {
+            return _noisereduce;
+        }
+
+        void setNoiseReduce (bool noise) {
+            _noisereduce = noise;
+        }
+
+    private:
+
+        // alsa preference
+        int _cardin; // 0
+        int _cardout; // 0
+        int _cardring;// 0
+        int _framesize; // 20
+        std::string _plugin; // default
+        int _smplrate;// 44100
+
+        //pulseaudio preference
+        std::string _devicePlayback;//:
+        std::string _deviceRecord; //:
+        std::string _deviceRingtone; //:
+
+        // general preference
+        std::string _recordpath; //: /home/msavard/Bureau
+        int _volumemic; //:  100
+        int _volumespkr; //: 100
+
+        bool _noisereduce;
+};
+
+
+class ShortcutPreferences : public Serializable
+{
+
+    public:
+
+        ShortcutPreferences();
+
+        ~ShortcutPreferences();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        void setShortcuts (std::map<std::string, std::string> shortcut);
+        std::map<std::string, std::string> getShortcuts (void);
+
+        std::string getHangup (void) {
+            return _hangup;
+        }
+        void setHangup (std::string hangup) {
+            _hangup = hangup;
+        }
+
+        std::string getPickup (void) {
+            return _pickup;
+        }
+        void setPickup (std::string pickup) {
+            _pickup = pickup;
+        }
+
+        std::string getPopup (void) {
+            return _popup;
+        }
+        void setPopup (std::string popup) {
+            _popup = popup;
+        }
+
+        std::string getToggleHold (void) {
+            return _toggleHold;
+        }
+        void setToggleHold (std::string hold) {
+            _toggleHold = hold;
+        }
+
+        std::string getTogglePickupHangup (void) {
+            return _togglePickupHangup;
+        }
+        void setTogglePickupHangup (std::string toggle) {
+            _togglePickupHangup = toggle;
+        }
+
+    private:
+
+        std::string _hangup;
+        std::string _pickup;
+        std::string _popup;
+        std::string _toggleHold;
+        std::string _togglePickupHangup;
+
+};
+
+#endif
diff --git a/sflphone-common/src/sip/Makefile.am b/sflphone-common/src/sip/Makefile.am
index 8cb4829edc3797aa8e107d2a2b8af0cdf87393ec..c20fea5c288d339dded2e64d178dfd2ad5896e68 100644
--- a/sflphone-common/src/sip/Makefile.am
+++ b/sflphone-common/src/sip/Makefile.am
@@ -11,7 +11,6 @@ libsiplink_la_SOURCES = \
 		sipcall.cpp \
 		sipvoiplink.cpp
 
-
 noinst_HEADERS = \
 		Pattern.h \
 		SdesNegotiator.h \
@@ -22,4 +21,4 @@ noinst_HEADERS = \
 		sipvoiplink.h
 
 libsiplink_la_CXXFLAGS = \
-		@PCRE_LIBS@
\ No newline at end of file
+		@PCRE_LIBS@
diff --git a/sflphone-common/src/sip/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp
index 89e3efb48a884e740383ff294370797ef6a2502a..0923bb09e64ed502075d4f7255b18813633be41d 100644
--- a/sflphone-common/src/sip/Pattern.cpp
+++ b/sflphone-common/src/sip/Pattern.cpp
@@ -36,7 +36,7 @@ namespace sfl
 
 Pattern::Pattern (const std::string& pattern, const std::string& options) :
         _pattern (pattern),
-	_re (NULL),
+        _re (NULL),
         _ovector (NULL),
         _ovectorSize (0),
         _count (0),
@@ -194,8 +194,8 @@ std::string Pattern::group (const std::string& groupName)
         switch (rc) {
 
             case PCRE_ERROR_NOSUBSTRING:
-	        
-		break;
+
+                break;
 
             case PCRE_ERROR_NOMEMORY:
                 throw match_error ("Memory exhausted.");
@@ -207,14 +207,13 @@ std::string Pattern::group (const std::string& groupName)
 
     std::string matchedStr;
 
-    if(stringPtr) {
+    if (stringPtr) {
 
-	matchedStr = stringPtr;
-	pcre_free_substring (stringPtr);
-    }
-    else {
+        matchedStr = stringPtr;
+        pcre_free_substring (stringPtr);
+    } else {
 
-         matchedStr = "";
+        matchedStr = "";
     }
 
     return matchedStr;
@@ -229,7 +228,7 @@ void Pattern::start (const std::string& groupName) const
 
 size_t Pattern::start (unsigned int groupNumber) const
 {
-  if (groupNumber <= (unsigned int)_count) {
+    if (groupNumber <= (unsigned int) _count) {
         return _ovector[ (groupNumber + 1) * 2];
     } else {
         throw std::out_of_range ("Invalid group reference.");
@@ -249,7 +248,7 @@ void Pattern::end (const std::string& groupName) const
 
 size_t Pattern::end (unsigned int groupNumber) const
 {
-  if (groupNumber <= (unsigned int)_count) {
+    if (groupNumber <= (unsigned int) _count) {
         return _ovector[ ( (groupNumber + 1) * 2) + 1 ] - 1;
     } else {
         throw std::out_of_range ("Invalid group reference.");
@@ -280,7 +279,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error)
                  _ovector,
                  _ovectorSize);
 
-  
+
 
     // Matching failed.
     if (rc < 0) {
@@ -304,7 +303,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error)
 
     // Matching succeeded. Keep the number of substrings for
     // subsequent calls to group().
-      _count = rc;
+    _count = rc;
 
     return true;
 }
@@ -320,8 +319,8 @@ std::vector<std::string> Pattern::split (void)
         tokenStart = start();
         substringSplitted.push_back (_subject.substr (tokenEnd + 1,
                                      tokenStart - tokenEnd - 1));
-	// printf("split: %s\n", _subject.substr (tokenEnd + 1,
-	// 					 tokenStart - tokenEnd - 1).c_str());
+        // printf("split: %s\n", _subject.substr (tokenEnd + 1,
+        // 					 tokenStart - tokenEnd - 1).c_str());
         tokenEnd = end();
     }
 
diff --git a/sflphone-common/src/sip/Pattern.h b/sflphone-common/src/sip/Pattern.h
index a929c655218825eecc3a9f22634731d6712c6cbe..8d515a64589bf8a0a0bf6cb413d1800275736fab 100644
--- a/sflphone-common/src/sip/Pattern.h
+++ b/sflphone-common/src/sip/Pattern.h
@@ -10,7 +10,7 @@
  *  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.
@@ -34,314 +34,318 @@
 #include <vector>
 #include <pcre.h>
 
-namespace sfl  {
-
-    /** 
-     * Exception object that is thrown when
-     * an error occured while compiling the
-     * regular expression.
-     */
-    class compile_error : public std::invalid_argument 
-    {
-        public:     
-        explicit compile_error(const std::string& error) :  
-        std::invalid_argument(error) {}
-    };
-    
-    /** 
-     * Exception object that is thrown when
-     * an error occured while mathing a
-     * pattern to an expression.
-     */
-    class match_error : public std::invalid_argument      
-    {
-        public:     
-        match_error(const std::string& error) :
-        std::invalid_argument(error) {}
-    };
-	
-	 /**
-     * This class implements in its way
-     * some of the libpcre library.
-     */
-    
-    class Pattern {
-    
-        public:
-        
+namespace sfl
+{
+
+/**
+ * Exception object that is thrown when
+ * an error occured while compiling the
+ * regular expression.
+ */
+class compile_error : public std::invalid_argument
+{
+    public:
+        explicit compile_error (const std::string& error) :
+                std::invalid_argument (error) {}
+};
+
+/**
+ * Exception object that is thrown when
+ * an error occured while mathing a
+ * pattern to an expression.
+ */
+class match_error : public std::invalid_argument
+{
+    public:
+        match_error (const std::string& error) :
+                std::invalid_argument (error) {}
+};
+
+/**
+* This class implements in its way
+* some of the libpcre library.
+*/
+
+class Pattern
+{
+
+    public:
+
+        /**
+        * Constructor for a regular expression
+        * pattern evaluator/matcher.
+        *
+        * @param pattern
+        *      The regular expression to
+        *      be used for this instance.
+        */
+
+        Pattern (const std::string& pattern,
+                 const std::string& options = "");
+
+        /**
+         * Destructor. Pcre pattern gets freed
+         * here.
+         */
+        ~Pattern();
+
+        /**
+         * Assignment operator overloading.
+         * Set the regular expression
+         * to be used on subject strings
+         * and compile the regular expression
+         * from that string.
+         *
+         * @param pattern The new pattern
+         */
+        void operator= (const std::string& pattern) {
+            _pattern = pattern;
+            compile();
+        }
+
+        void operator= (const char * pattern) {
+            _pattern = pattern;
+            compile();
+        }
+
+        /**
+         * Compile the regular expression
+         * from the pattern that was set for
+         * this object.
+         */
+        void compile (void);
+
+        /**
+         * Get the currently set regular expression
+         * that is used on subject strings
+         *
+         * @return The currently set pattern
+         */
+        inline std::string getPattern (void) {
+            return _pattern;
+        }
+
+        /**
+         * << operator overload. Sets the the subject
+         * for latter use on the >> operator.
+         *
+         * @param subject
+         *      The expression to be evaluated
+         *      by the pattern.
+         *
+         */
+        void operator<< (const std::string& subject) {
+            _subject = subject;
+        }
+
+        /**
+         * Get the start position of the overall match.
+         *
+         * @return the start position of the overall match.
+         */
+        size_t start (void) const;
+
+        /**
+         * Get the start position of the specified match.
+         *
+         * @param groupNumber The capturing group number.
+         *
+         * @return the start position of the specified match.
+         */
+        size_t start (unsigned int groupNumber) const;
+
+        /**
+         * Get the start position of the specified match.
+         *
+         * @param groupName The capturing group name.
+         */
+        void start (const std::string& groupName) const;
+
+        /**
+         * Get the end position of the overall match.
+         *
+         * @return the end position of the overall match.
+         */
+        size_t end (void) const;
+
+        /**
+         * Get the end position of the specified match.
+         *
+         * @param groupNumber The capturing group number.
+         *
+         * @return the end position of the specified match.
+         */
+        size_t end (unsigned int groupNumber) const;
+
+        /**
+         * Get the end position of the specified match.
+         *
+         * @param groupName The capturing group name.
+         *
+         * @return the end position of the specified match.
+         */
+        void end (const std::string& groupName) const;
+
+        /**
+         * Get the number of capturing groups in the
+         * compiled regex.
+         *
+         * @return The number of capture groups.
+         *
+         * @pre The regular expression should have been
+         * 	    compiled prior to the execution of this method.
+         */
+        unsigned int getCaptureGroupCount (void);
+
+        /**
+         * Get the substring matched in a capturing
+         * group (named or unnamed).
+         *
+         * This methods only performs a basic lookup
+         * inside its internal substring table. Thus,
+         * matches() should have been called prior to
+         * this method in order to obtain the desired
+         * output.
+         *
+         * @param groupName The name of the group
+         *
+         * @return the substring matched by the
+         *         regular expression designated
+         *         the group name.
+         */
+        std::string group (const std::string& groupName);
+
+        /**
+         * Get the substring matched in a named group.
+         *
+         * This methods only performs a basic lookup
+         * inside its internal substring table. Thus,
+         * matches() should have been called prior to
+         * this method in order to obtain the desired
+         * output.
+         *
+         * @param groupNumber The number of the group.
+         *
+         * @return the substring matched by the
+         *         regular expression designated
+         *         the group number.
+         */
+        std::string group (int groupNumber);
+
+        /**
+         * Similar to python's MatchObject.groups. Get all
+         * the substrings matched by the capture groups defined
+         * in the pattern. The complete (implicit) capture group
+         * is not returned : ie only groups from 1 up to the number
+         * of groups in the pattern are returned.
+         *
+         * @return A vector of stings that were matched by some
+         * 		   capturing group in the pattern.
+         *
+         * @pre The regular expression should have been
+         * 	    compiled prior to the execution of this method.
+         */
+        std::vector<std::string> groups (void);
+
+        /**
+         * Try to match the compiled pattern with a
+         * subject.
+         *
+         * @param subject Subject to be matched
+         * 		          by the pattern.
+         *
+         * @return true If the subject matches the pattern,
+         *         false otherwise.
+         *
+         * @pre The regular expression should have been
+         * 	    compiled prior to the execution of this method.
+         *
+         * @post The internal substring table will be updated
+         *       with the new matches. Therefore, subsequent
+         * 		 calls to group may return different results.
+         */
+        bool matches (const std::string& subject) throw (match_error);
+
+        /**
+         * Try to match the compiled pattern with the implicit
+         * subject.
+         *
+         * @return true If the subject matches the pattern,
+         *         false otherwise.
+         *
+         * @pre The regular expression should have been
+         * 	    compiled prior to the execution of this method.
+         *
+         * @post The internal substring table will be updated
+         *       with the new matches. Therefore, subsequent
+         * 		 calls to group may return different results.
+         */
+        bool matches (void) throw (match_error);
+
+        /**
+         *  Split the subject into a list of substrings.
+         *
+         * @return A vector of substrings.
+         *
+         * @pre The regular expression should have been
+         * 	    compiled prior to the execution of this method.
+         *
+         * @post The internal subject won't be affected by this
+         * 	     by this operation. In other words: subject_before =
+         * 		 subject_after.
+         */
+        std::vector<std::string> split (void); // throw(match_error);
+
+    private:
+        /**
+         * The regular expression that represents that pattern.
+         */
+        std::string _pattern;
+
+        /**
+         * The optional subject string.
+         */
+        std::string _subject;
+
+        /**
+         * PCRE struct that
+         * contains the compiled regular
+         * expression
+               */
+        pcre * _re;
+
+        /**
+         * The internal output vector used by PCRE.
+         */
+        int * _ovector;
+
+        /**
+         * The size of the _ovector
+         */
+        int _ovectorSize;
+
+        /**
+         * Current offset in the _ovector;
+         */
+
+        int _offset[2];
+
+        /**
+         * The number of substrings matched after calling
+         * pcre_exec.
+         */
+        int _count;
+
+        /**
+         * PCRE options for this pattern.
+         */
+        int _options;
+
         /**
-	 * Constructor for a regular expression
-	 * pattern evaluator/matcher. 
-	 *
-	 * @param pattern 
-	 *      The regular expression to 
-	 *      be used for this instance.
-	 */
-             
-         Pattern(const std::string& pattern, 
-		 const std::string& options = "");
-            
-	 /**
-	  * Destructor. Pcre pattern gets freed
-	  * here.
-	  */
-	 ~Pattern();
-            
-	 /**
-	  * Assignment operator overloading.
-	  * Set the regular expression 
-	  * to be used on subject strings
-	  * and compile the regular expression 
-	  * from that string. 
-	  * 
-	  * @param pattern The new pattern
-	  */
-	 void operator=(const std::string& pattern) {
-	     _pattern = pattern; 
-	     compile();            
-	 }
-            
-	 void operator=(const char * pattern) {
-	     _pattern = pattern; 
-	     compile();            
-	 }            
-              
-	 /**
-	  * Compile the regular expression
-	  * from the pattern that was set for 
-	  * this object.
-	  */
-	 void compile(void);
-             
-	 /**
-	  * Get the currently set regular expression 
-	  * that is used on subject strings
-	  * 
-	  * @return The currently set pattern
-	  */ 
-	 inline std::string getPattern(void) { return _pattern; }
-             
-	 /**
-	  * << operator overload. Sets the the subject
-	  * for latter use on the >> operator. 
-	  * 
-	  * @param subject 
-	  *      The expression to be evaluated
-	  *      by the pattern.
-	  *
-	  */
-	 void operator<<(const std::string& subject) {
-	     _subject = subject;
-	 }
-			
-	 /**
-	  * Get the start position of the overall match.
-	  * 
-	  * @return the start position of the overall match.  
-	  */
-	 size_t start(void) const;
-			
-	 /**
-	  * Get the start position of the specified match.
-	  * 
-	  * @param groupNumber The capturing group number.
-	  * 
-	  * @return the start position of the specified match.  
-	  */
-	 size_t start(unsigned int groupNumber) const;
-			
-	 /**
-	  * Get the start position of the specified match.
-	  * 
-	  * @param groupName The capturing group name.
-	  */
-	 void start(const std::string& groupName) const;
-			
-	 /**
-	  * Get the end position of the overall match.
-	  * 
-	  * @return the end position of the overall match.  
-	  */			
-	 size_t end(void) const;
-			
-	 /**
-	  * Get the end position of the specified match.
-	  * 
-	  * @param groupNumber The capturing group number.
-	  * 
-	  * @return the end position of the specified match.  
-	  */			
-	 size_t end(unsigned int groupNumber) const;
-			
-	 /**
-	  * Get the end position of the specified match.
-	  * 
-	  * @param groupName The capturing group name.
-	  * 
-	  * @return the end position of the specified match.  
-	  */			
-	 void end(const std::string& groupName) const;
-			
-	 /**
-	  * Get the number of capturing groups in the 
-	  * compiled regex. 
-	  * 
-	  * @return The number of capture groups.
-	  * 
-	  * @pre The regular expression should have been 
-	  * 	    compiled prior to the execution of this method.
-	  */
-	 unsigned int getCaptureGroupCount(void);
-			
-	 /**
-	  * Get the substring matched in a capturing 
-	  * group (named or unnamed).
-	  *  
-	  * This methods only performs a basic lookup
-	  * inside its internal substring table. Thus,
-	  * matches() should have been called prior to 
-	  * this method in order to obtain the desired 
-	  * output. 
-	  *
-	  * @param groupName The name of the group  
-	  * 
-	  * @return the substring matched by the 
-	  *         regular expression designated
-	  *         the group name.
-	  */
-	 std::string group(const std::string& groupName);
-         
-	 /**
-	  * Get the substring matched in a named group.
-	  * 
-	  * This methods only performs a basic lookup
-	  * inside its internal substring table. Thus,
-	  * matches() should have been called prior to 
-	  * this method in order to obtain the desired 
-	  * output. 
-	  * 
-	  * @param groupNumber The number of the group. 
-	  * 
-	  * @return the substring matched by the 
-	  *         regular expression designated
-	  *         the group number.
-	  */
-	 std::string group(int groupNumber);
-	 
-	 /**
-	  * Similar to python's MatchObject.groups. Get all 
-	  * the substrings matched by the capture groups defined
-	  * in the pattern. The complete (implicit) capture group
-	  * is not returned : ie only groups from 1 up to the number
-	  * of groups in the pattern are returned.
-	  * 
-	  * @return A vector of stings that were matched by some
-	  * 		   capturing group in the pattern.
-	  * 
-	  * @pre The regular expression should have been 
-	  * 	    compiled prior to the execution of this method.
-	  */
-	 std::vector<std::string> groups(void);
-	 
-	 /**
-	  * Try to match the compiled pattern with a 
-	  * subject. 
-	  * 
-	  * @param subject Subject to be matched
-	  * 		          by the pattern. 
-	  * 
-	  * @return true If the subject matches the pattern, 
-	  *         false otherwise. 
-	  * 
-	  * @pre The regular expression should have been 
-	  * 	    compiled prior to the execution of this method.
-	  * 
-	  * @post The internal substring table will be updated
-	  *       with the new matches. Therefore, subsequent
-	  * 		 calls to group may return different results.
-	  */
-	 bool matches(const std::string& subject) throw(match_error);
-	 
-	 /**
-	  * Try to match the compiled pattern with the implicit 
-	  * subject. 
-	  * 
-	  * @return true If the subject matches the pattern, 
-	  *         false otherwise. 
-	  * 
-	  * @pre The regular expression should have been 
-	  * 	    compiled prior to the execution of this method.
-	  * 
-	  * @post The internal substring table will be updated
-	  *       with the new matches. Therefore, subsequent
-	  * 		 calls to group may return different results.
-	  */
-	 bool matches(void) throw(match_error); 	
-	 
-	 /**
-	  *  Split the subject into a list of substrings.
-	  * 
-	  * @return A vector of substrings. 
-	  * 
-	  * @pre The regular expression should have been 
-	  * 	    compiled prior to the execution of this method.
-	  * 
-	  * @post The internal subject won't be affected by this 
-	  * 	     by this operation. In other words: subject_before =
-	  * 		 subject_after.
-	  */
-	 std::vector<std::string> split(void); // throw(match_error);		
-
-    private:  
-	 /**
-	  * The regular expression that represents that pattern.
-	  */
-	 std::string _pattern;
-	 
-	 /** 
-	  * The optional subject string.
-	  */
-	 std::string _subject;
-	 
-	 /**
-	  * PCRE struct that
-	  * contains the compiled regular
-	  * expression
-            */
-	 pcre * _re;
-	 
-	 /**
-	  * The internal output vector used by PCRE. 
-	  */
-	 int * _ovector;
-	 
-	 /**
-	  * The size of the _ovector
-	  */
-	 int _ovectorSize;
-			
-	 /**
-	  * Current offset in the _ovector;
-	  */
-	 
-	 int _offset[2];
-	 
-	 /**
-	  * The number of substrings matched after calling
-	  * pcre_exec.
-	  */ 
-	 int _count;
-	 
-	 /**
-	  * PCRE options for this pattern.
-	  */
-	 int _options;
-	 
-	 /**
-	  * String representation of the options.
-	  */
-	 std::string _optionsDescription;
-    };
+         * String representation of the options.
+         */
+        std::string _optionsDescription;
+};
 }
 
 
diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp
index 5396755b6be1b948629e6cf6e63111f9756c828e..430bf80f059f934382cfc0f197523daf99c1052a 100644
--- a/sflphone-common/src/sip/SdesNegotiator.cpp
+++ b/sflphone-common/src/sip/SdesNegotiator.cpp
@@ -65,7 +65,7 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
 
     try {
 
-        // used to match white space (which are used as separator) 
+        // used to match white space (which are used as separator)
         generalSyntaxPattern = new Pattern ("[\x20\x09]+", "g");
 
         tagPattern = new Pattern ("^a=crypto:(?P<tag>[0-9]{1,9})");
@@ -76,12 +76,12 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
             "F8_128_HMAC_SHA1_80|" \
             "[A-Za-z0-9_]+)"); // srtp-crypto-suite-ext
 
-	keyParamsPattern = new Pattern (
-	    "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-	    "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)"	 \
-	    "(\\|2\\^(?P<lifetime>[0-9]+)\\|"		 \
-	    "(?P<mkiValue>[0-9]+)\\:"			 \
-	    "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+        keyParamsPattern = new Pattern (
+            "(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+            "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)"	 \
+            "(\\|2\\^(?P<lifetime>[0-9]+)\\|"		 \
+            "(?P<mkiValue>[0-9]+)\\:"			 \
+            "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
 
         sessionParamPattern = new Pattern (
             "(?P<sessionParam>(kdr\\=[0-9]{1,2}|" \
@@ -96,23 +96,23 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
     } catch (compile_error& exception) {
         throw parse_error ("A compile exception occured on a pattern.");
     }
-      
+
 
     // Take each line from the vector
     // and parse its content
 
-    
+
     std::vector<std::string>::iterator iter;
     std::vector<CryptoAttribute *> cryptoAttributeVector;
-	
+
     for (iter = _remoteAttribute.begin(); iter != _remoteAttribute.end(); iter++) {
 
         // Split the line into its component
         // that we will analyze further down.
         std::vector<std::string> sdesLine;
-	
-	*generalSyntaxPattern << (*iter);
-        
+
+        *generalSyntaxPattern << (*iter);
+
         try {
             sdesLine = generalSyntaxPattern->split();
 
@@ -122,54 +122,55 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
         } catch (match_error& exception) {
             throw parse_error ("Error while analyzing the SDES line.");
         }
-	
+
 
         // Check if the attribute starts with a=crypto
         // and get the tag for this line
         *tagPattern << sdesLine.at (0);
-				
-	std::string tag; 
-	if (tagPattern->matches()) {
-	try {
-	    // std::cout << "Parsing the tag field";
-	    tag = tagPattern->group ("tag");
-	    // std::cout << ": " << tag << std::endl;
-	} catch (match_error& exception) {
-	    throw parse_error ("Error while parsing the tag field");
-	}
-	} else {
-	    return cryptoAttributeVector;
-	}
+
+        std::string tag;
+
+        if (tagPattern->matches()) {
+            try {
+                // std::cout << "Parsing the tag field";
+                tag = tagPattern->group ("tag");
+                // std::cout << ": " << tag << std::endl;
+            } catch (match_error& exception) {
+                throw parse_error ("Error while parsing the tag field");
+            }
+        } else {
+            return cryptoAttributeVector;
+        }
 
         // Check if the crypto suite is valid and retreive
         // its value.
         *cryptoSuitePattern << sdesLine.at (1);
 
-	std::string cryptoSuite;
-		
-	if (cryptoSuitePattern->matches()) {
-	    try {
-	        // std::cout << "Parsing the crypto suite field";
-	        cryptoSuite = cryptoSuitePattern->group ("cryptoSuite");
-		// std::cout << ": " << cryptoSuite << std::endl;
-	    } catch (match_error& exception) {
-	        throw parse_error ("Error while parsing the crypto-suite field");
-	    }
-	} else {
-	    return cryptoAttributeVector;
-	}
-	
+        std::string cryptoSuite;
+
+        if (cryptoSuitePattern->matches()) {
+            try {
+                // std::cout << "Parsing the crypto suite field";
+                cryptoSuite = cryptoSuitePattern->group ("cryptoSuite");
+                // std::cout << ": " << cryptoSuite << std::endl;
+            } catch (match_error& exception) {
+                throw parse_error ("Error while parsing the crypto-suite field");
+            }
+        } else {
+            return cryptoAttributeVector;
+        }
+
         // Parse one or more key-params field.
         *keyParamsPattern << sdesLine.at (2);
 
-	std::string srtpKeyInfo;
-	std::string srtpKeyMethod;
-	std::string lifetime;
-	std::string mkiLength;
-	std::string mkiValue;
-	
+        std::string srtpKeyInfo;
+        std::string srtpKeyMethod;
+        std::string lifetime;
+        std::string mkiLength;
+        std::string mkiValue;
+
         try {
-            while(keyParamsPattern->matches()) {
+            while (keyParamsPattern->matches()) {
                 srtpKeyMethod = keyParamsPattern->group ("srtpKeyMethod");
                 srtpKeyInfo = keyParamsPattern->group ("srtpKeyInfo");
                 lifetime = keyParamsPattern->group ("lifetime");
@@ -197,11 +198,11 @@ std::vector<CryptoAttribute *> SdesNegotiator::parse (void)
         		}
         	}
         } */
-		
-	// Add the new CryptoAttribute to the vector
-	
-	CryptoAttribute * cryptoAttribute = new CryptoAttribute(tag, cryptoSuite, srtpKeyMethod, srtpKeyInfo, lifetime, mkiValue, mkiLength);
-	cryptoAttributeVector.push_back(cryptoAttribute);
+
+        // Add the new CryptoAttribute to the vector
+
+        CryptoAttribute * cryptoAttribute = new CryptoAttribute (tag, cryptoSuite, srtpKeyMethod, srtpKeyInfo, lifetime, mkiValue, mkiLength);
+        cryptoAttributeVector.push_back (cryptoAttribute);
     }
 
     return cryptoAttributeVector;
@@ -218,48 +219,48 @@ bool SdesNegotiator::negotiate (void)
     bool negotiationSuccess = false;
 
     try {
-		
+
         while (!negotiationSuccess && (iter_offer != cryptoAttributeVector.end())) {
 
-	    /*
-	    std::cout << "Negotiate tag: " + (*iter_offer)->getTag() << std::endl;
-	    std::cout << "Crypto Suite: " + (*iter_offer)->getCryptoSuite() << std::endl;
-	    std::cout << "SRTP Key Method: " + (*iter_offer)->getSrtpKeyMethod() << std::endl;
-	    std::cout << "SRTP Key Info: " + (*iter_offer)->getSrtpKeyInfo() << std::endl;
-	    std::cout << "Lifetime: " + (*iter_offer)->getLifetime() << std::endl;
-	    std::cout << "MKI Value: " + (*iter_offer)->getMkiValue() << std::endl;			
-	    std::cout << "MKI Length: " + (*iter_offer)->getMkiLength() << std::endl;			
-	    */
+            /*
+            std::cout << "Negotiate tag: " + (*iter_offer)->getTag() << std::endl;
+            std::cout << "Crypto Suite: " + (*iter_offer)->getCryptoSuite() << std::endl;
+            std::cout << "SRTP Key Method: " + (*iter_offer)->getSrtpKeyMethod() << std::endl;
+            std::cout << "SRTP Key Info: " + (*iter_offer)->getSrtpKeyInfo() << std::endl;
+            std::cout << "Lifetime: " + (*iter_offer)->getLifetime() << std::endl;
+            std::cout << "MKI Value: " + (*iter_offer)->getMkiValue() << std::endl;
+            std::cout << "MKI Length: " + (*iter_offer)->getMkiLength() << std::endl;
+            */
 
-	    iter_local = _localCapabilities.begin();
+            iter_local = _localCapabilities.begin();
 
-	    while(!negotiationSuccess && (iter_local != _localCapabilities.end())) {  
+            while (!negotiationSuccess && (iter_local != _localCapabilities.end())) {
 
-	        if((*iter_offer)->getCryptoSuite().compare((*iter_local).name)){
+                if ( (*iter_offer)->getCryptoSuite().compare ( (*iter_local).name)) {
 
-		    negotiationSuccess = true;
+                    negotiationSuccess = true;
 
-		    _cryptoSuite = (*iter_offer)->getCryptoSuite();
-		    _srtpKeyMethod = (*iter_offer)->getSrtpKeyMethod();
-		    _srtpKeyInfo = (*iter_offer)->getSrtpKeyInfo();
-		    _lifetime = (*iter_offer)->getLifetime();
-		    _mkiValue = (*iter_offer)->getMkiValue();
-		    _mkiLength = (*iter_offer)->getMkiLength();
-		}
+                    _cryptoSuite = (*iter_offer)->getCryptoSuite();
+                    _srtpKeyMethod = (*iter_offer)->getSrtpKeyMethod();
+                    _srtpKeyInfo = (*iter_offer)->getSrtpKeyInfo();
+                    _lifetime = (*iter_offer)->getLifetime();
+                    _mkiValue = (*iter_offer)->getMkiValue();
+                    _mkiLength = (*iter_offer)->getMkiLength();
+                }
 
-		iter_local++;
-	    }
+                iter_local++;
+            }
+
+            delete (*iter_offer);
+
+            iter_offer++;
+        }
 
-	    delete (*iter_offer);
-	    
-	    iter_offer++;
-	}
-	
     } catch (parse_error& exception) {
         return false;
     } catch (match_error& exception) {
         return false;
     }
-	
+
     return negotiationSuccess;
 }
diff --git a/sflphone-common/src/sip/SdesNegotiator.h b/sflphone-common/src/sip/SdesNegotiator.h
index b57b46a16354e2582cdd60f32e23f9298414f676..1f11324be039ad70e9485d4c2487c74741af5c6a 100644
--- a/sflphone-common/src/sip/SdesNegotiator.h
+++ b/sflphone-common/src/sip/SdesNegotiator.h
@@ -11,7 +11,7 @@
  *  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.
@@ -31,189 +31,218 @@
 #define __SFL_SDES_NEGOTIATOR_H__
 
 #include <stdexcept>
-#include <string> 
+#include <string>
 #include <vector>
 
-namespace sfl {
-
-    /** 
-     * General exception object that is thrown when
-     * an error occured with a regular expression
-     * operation.
-     */
-    class parse_error : public std::invalid_argument 
-    {
-        public:     
-        explicit parse_error(const std::string& error) :  
-        std::invalid_argument(error) {}
-    };
-    
-    enum CipherMode {
-        AESCounterMode,
-        AESF8Mode
-    };
-    
-    enum MACMode {
-        HMACSHA1
-    };
-    
-    enum KeyMethod {
-        Inline
-        // url, maybe at some point
-    };
-    
-    struct CryptoSuiteDefinition {
-        char * name;
-        int masterKeyLength;
-        int masterSaltLength;
-        int srtpLifetime;
-        int srtcpLifetime;
-        CipherMode cipher;
-        int encryptionKeyLength;
-        MACMode mac;
-        int srtpAuthTagLength;
-        int srtcpAuthTagLength;
-        int srtpAuthKeyLength;
-        int srtcpAuthKeyLen;
-    };
-    
-    /** 
-    * List of accepted Crypto-Suites
-    * as defined in RFC4568 (6.2)
-    */
-    const CryptoSuiteDefinition CryptoSuites[3] = { 
-          {(char*)"AES_CM_128_HMAC_SHA1_80", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 80, 80, 160, 160 },
-          {(char*)"AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 },
-          {(char*)"F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 } };   
-        
-
-    class CryptoAttribute {
-	
+namespace sfl
+{
+
+/**
+ * General exception object that is thrown when
+ * an error occured with a regular expression
+ * operation.
+ */
+class parse_error : public std::invalid_argument
+{
     public:
-    CryptoAttribute(std::string tag, 
-		    std::string cryptoSuite, 
-		    std::string srtpKeyMethod, 
-		    std::string srtpKeyInfo, 
-		    std::string lifetime, 
-		    std::string mkiValue, 
-		    std::string mkiLength) :
-                      tag(tag),
-		      cryptoSuite(cryptoSuite),
-		      srtpKeyMethod(srtpKeyMethod),
-		      srtpKeyInfo(srtpKeyInfo),
-		      lifetime(lifetime),
-		      mkiValue(mkiValue),
-		      mkiLength(mkiLength) {};
-		    
-			
-		      inline std::string getTag() { return tag; };
-		      inline std::string getCryptoSuite() { return cryptoSuite; };
-		      inline std::string getSrtpKeyMethod() { return srtpKeyMethod; };
-		      inline std::string getSrtpKeyInfo() { return srtpKeyInfo; };
-		      inline std::string getLifetime() { return lifetime; };
-		      inline std::string getMkiValue() { return mkiValue; };
-		      inline std::string getMkiLength() { return mkiLength; };
-
-		private:
-		      std::string tag;
-		      std::string cryptoSuite;
-		      std::string srtpKeyMethod;
-		      std::string srtpKeyInfo;
-		      std::string lifetime;
-		      std::string mkiValue;
-		      std::string mkiLength;
-    };         
-
-    class SdesNegotiator 
-    {
+        explicit parse_error (const std::string& error) :
+                std::invalid_argument (error) {}
+};
+
+enum CipherMode {
+    AESCounterMode,
+    AESF8Mode
+};
+
+enum MACMode {
+    HMACSHA1
+};
+
+enum KeyMethod {
+    Inline
+    // url, maybe at some point
+};
+
+struct CryptoSuiteDefinition {
+    char * name;
+    int masterKeyLength;
+    int masterSaltLength;
+    int srtpLifetime;
+    int srtcpLifetime;
+    CipherMode cipher;
+    int encryptionKeyLength;
+    MACMode mac;
+    int srtpAuthTagLength;
+    int srtcpAuthTagLength;
+    int srtpAuthKeyLength;
+    int srtcpAuthKeyLen;
+};
+
+/**
+* List of accepted Crypto-Suites
+* as defined in RFC4568 (6.2)
+*/
+const CryptoSuiteDefinition CryptoSuites[3] = {
+    { (char*) "AES_CM_128_HMAC_SHA1_80", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 80, 80, 160, 160 },
+    { (char*) "AES_CM_128_HMAC_SHA1_32", 128, 112, 48, 31, AESCounterMode, 128, HMACSHA1, 32, 80, 160, 160 },
+    { (char*) "F8_128_HMAC_SHA1_80", 128, 112, 48, 31, AESF8Mode, 128, HMACSHA1, 80, 80, 160, 160 }
+};
+
+
+class CryptoAttribute
+{
+
+    public:
+        CryptoAttribute (std::string tag,
+                         std::string cryptoSuite,
+                         std::string srtpKeyMethod,
+                         std::string srtpKeyInfo,
+                         std::string lifetime,
+                         std::string mkiValue,
+                         std::string mkiLength) :
+                tag (tag),
+                cryptoSuite (cryptoSuite),
+                srtpKeyMethod (srtpKeyMethod),
+                srtpKeyInfo (srtpKeyInfo),
+                lifetime (lifetime),
+                mkiValue (mkiValue),
+                mkiLength (mkiLength) {};
+
+
+        inline std::string getTag() {
+            return tag;
+        };
+        inline std::string getCryptoSuite() {
+            return cryptoSuite;
+        };
+        inline std::string getSrtpKeyMethod() {
+            return srtpKeyMethod;
+        };
+        inline std::string getSrtpKeyInfo() {
+            return srtpKeyInfo;
+        };
+        inline std::string getLifetime() {
+            return lifetime;
+        };
+        inline std::string getMkiValue() {
+            return mkiValue;
+        };
+        inline std::string getMkiLength() {
+            return mkiLength;
+        };
+
+    private:
+        std::string tag;
+        std::string cryptoSuite;
+        std::string srtpKeyMethod;
+        std::string srtpKeyInfo;
+        std::string lifetime;
+        std::string mkiValue;
+        std::string mkiLength;
+};
+
+class SdesNegotiator
+{
         /**
          * Constructor for an SDES crypto attributes
-         * negotiator. 
+         * negotiator.
          *
-         * @param attribute 
-         *       A vector of crypto attributes as defined in 
+         * @param attribute
+         *       A vector of crypto attributes as defined in
          *       RFC4568. This string will be parsed
          *       and a crypto context will be created
-         *       from it. 
+         *       from it.
+         */
+
+    public:
+        SdesNegotiator (const std::vector<CryptoSuiteDefinition>& localCapabilites, const std::vector<std::string>& remoteAttribute);
+        ~SdesNegotiator() { };
+
+        bool negotiate (void);
+
+        /**
+         * Return crypto suite after negotiation
+         */
+        std::string getCryptoSuite (void) {
+            return _cryptoSuite;
+        }
+
+        /**
+         * Return key method after negotiation (most likely inline:)
+         */
+        std::string getKeyMethod (void) {
+            return _srtpKeyMethod;
+        }
+
+        /**
+         * Return crypto suite after negotiation
+         */
+        std::string getKeyInfo (void) {
+            return _srtpKeyInfo;
+        }
+
+        /**
+         * Return key lifetime after negotiation
+         */
+        std::string getLifeTime (void) {
+            return _lifetime;
+        }
+
+        /**
+         * Return mki value after negotiation
+         */
+        std::string getMkiValue (void) {
+            return _mkiValue;
+        }
+
+        /**
+         * Return mki length after negotiation
+         */
+        std::string getMkiLength (void) {
+            return _mkiLength;
+        }
+
+    private:
+        /**
+         * A vector list containing the remote attributes.
+         * Multiple crypto lines can be sent, and the
+         * prefered method is then chosen from that list.
+         */
+        std::vector<std::string> _remoteAttribute;
+
+        std::vector<CryptoSuiteDefinition> _localCapabilities;
+
+        /**
+         * Selected crypto suite after negotiation
+         */
+        std::string _cryptoSuite;
+
+        /**
+         * Selected key method after negotiation (most likely inline:)
+         */
+        std::string _srtpKeyMethod;
+
+        /**
+         * Selected crypto suite after negotiation
+         */
+        std::string _srtpKeyInfo;
+
+        /**
+         * Selected key lifetime after negotiation
          */
-         
-        public:
-            SdesNegotiator(const std::vector<CryptoSuiteDefinition>& localCapabilites, const std::vector<std::string>& remoteAttribute);
-            ~SdesNegotiator() { };
-            
-            bool negotiate(void);
-
-	    /**
-	     * Return crypto suite after negotiation
-	     */
-	    std::string getCryptoSuite(void) { return _cryptoSuite; }
-
-	    /**
-	     * Return key method after negotiation (most likely inline:)
-	     */
-	    std::string getKeyMethod(void) { return _srtpKeyMethod; }
-	    
-	    /**
-	     * Return crypto suite after negotiation
-	     */
-	    std::string getKeyInfo(void) { return _srtpKeyInfo; }
-	    
-	    /**
-	     * Return key lifetime after negotiation
-	     */
-	    std::string getLifeTime(void) { return _lifetime; }
-	    
-	    /**
-	     * Return mki value after negotiation
-	     */
-	    std::string getMkiValue(void) { return _mkiValue; }
-	    
-	    /**
-	     * Return mki length after negotiation
-	     */
-	    std::string getMkiLength(void) { return _mkiLength; }
-
-        private:
-            /**
-             * A vector list containing the remote attributes.
-             * Multiple crypto lines can be sent, and the
-             * prefered method is then chosen from that list.
-             */
-            std::vector<std::string> _remoteAttribute;
-
-            std::vector<CryptoSuiteDefinition> _localCapabilities;
-
-	    /**
-	     * Selected crypto suite after negotiation
-	     */
-	    std::string _cryptoSuite;
-	    
-	    /**
-	     * Selected key method after negotiation (most likely inline:)
-	     */
-	    std::string _srtpKeyMethod;
-	    
-	    /**
-	     * Selected crypto suite after negotiation
-	     */
-	    std::string _srtpKeyInfo;
-	    
-	    /**
-	     * Selected key lifetime after negotiation
-	     */
-	    std::string _lifetime;
-	    
-	    /**
-	     * Selected mki value after negotiation
-	     */
-	    std::string _mkiValue;
-	    
-	    /**
-	     * Selected mki length after negotiation
-	     */
-	    std::string _mkiLength;
-	    
-	    std::vector<CryptoAttribute *> parse(void);
-    };
+        std::string _lifetime;
+
+        /**
+         * Selected mki value after negotiation
+         */
+        std::string _mkiValue;
+
+        /**
+         * Selected mki length after negotiation
+         */
+        std::string _mkiLength;
+
+        std::vector<CryptoAttribute *> parse (void);
+};
 }
 #endif
diff --git a/sflphone-common/src/sip/sdp.cpp b/sflphone-common/src/sip/sdp.cpp
index d98386916c9f50af296138a35eb7b8d7e0b150a7..61809766d1fdac611f6f45f4a6b1f19ad3bd9c39 100644
--- a/sflphone-common/src/sip/sdp.cpp
+++ b/sflphone-common/src/sip/sdp.cpp
@@ -63,11 +63,12 @@ Sdp::Sdp (pj_pool_t *pool)
 
 Sdp::~Sdp()
 {
-  // clean_session_media();
-  // clean_local_media_capabilities();
+    // clean_session_media();
+    // clean_local_media_capabilities();
 }
 
-void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med) {
+void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
+{
 
     pjmedia_sdp_media* med;
     pjmedia_sdp_rtpmap rtpmap;
@@ -85,11 +86,10 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
     med->desc.port = media->get_port();
 
     // in case of sdes, media are tagged as "RTP/SAVP", RTP/AVP elsewhere
-    if(_srtp_crypto.empty()) {
-      
+    if (_srtp_crypto.empty()) {
+
         pj_strdup (_pool, &med->desc.transport, &STR_RTP_AVP);
-    }
-    else {
+    } else {
 
         pj_strdup (_pool, &med->desc.transport, &STR_RTP_SAVP);
     }
@@ -114,11 +114,10 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
         rtpmap.enc_name = pj_str ( (char*) codec->getCodecName().c_str());
 
         // G722 require G722/8000 media description even if it is 16000 codec
-        if(codec->getPayload () == 9) {
-        	  rtpmap.clock_rate = 8000;
-        }
-        else {
-        	rtpmap.clock_rate = codec->getClockRate();
+        if (codec->getPayload () == 9) {
+            rtpmap.clock_rate = 8000;
+        } else {
+            rtpmap.clock_rate = codec->getClockRate();
         }
 
         // Add the channel number only if different from 1
@@ -152,11 +151,12 @@ void Sdp::set_media_descriptor_line (sdpMedia *media, pjmedia_sdp_media** p_med)
     *p_med = med;
 }
 
-int Sdp::create_local_offer (CodecOrder selectedCodecs) {
+int Sdp::create_local_offer (CodecOrder selectedCodecs)
+{
 
     pj_status_t status;
 
-    _info("SDP: Create local offer");
+    _info ("SDP: Create local offer");
 
     // Build local media capabilities
     set_local_media_capabilities (selectedCodecs);
@@ -175,8 +175,8 @@ int Sdp::create_local_offer (CodecOrder selectedCodecs) {
     sdp_add_timing();
     sdp_add_media_description();
 
-    if(!_srtp_crypto.empty()) {
-        sdp_add_sdes_attribute(_srtp_crypto);
+    if (!_srtp_crypto.empty()) {
+        sdp_add_sdes_attribute (_srtp_crypto);
     }
 
     //toString ();
@@ -190,12 +190,13 @@ int Sdp::create_local_offer (CodecOrder selectedCodecs) {
     return PJ_SUCCESS;
 }
 
-int Sdp::create_initial_offer (CodecOrder selectedCodecs) {
+int Sdp::create_initial_offer (CodecOrder selectedCodecs)
+{
 
     pj_status_t status;
     pjmedia_sdp_neg_state state;
 
-    _info("SDP: Create initial offer");
+    _info ("SDP: Create initial offer");
     // Build the SDP session descriptor
     status = create_local_offer (selectedCodecs);
 
@@ -219,16 +220,17 @@ int Sdp::create_initial_offer (CodecOrder selectedCodecs) {
     return PJ_SUCCESS;
 }
 
-int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder selectedCodecs) {
+int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder selectedCodecs)
+{
 
     // Create the SDP negociator instance by calling
     // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional )
 
     pj_status_t status;
 
-	if (!remote) {
-		return !PJ_SUCCESS;
-	}
+    if (!remote) {
+        return !PJ_SUCCESS;
+    }
 
     // Create the SDP negociator instance by calling
     // pjmedia_sdp_neg_create_w_remote_offer with the remote offer, and by providing the local offer ( optional )
@@ -237,7 +239,7 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder select
     status = create_local_offer (selectedCodecs);
 
     if (status != PJ_SUCCESS) {
-    	_error ("SDP: Error: Failed to create initial offer");
+        _error ("SDP: Error: Failed to create initial offer");
         return status;
     }
 
@@ -245,14 +247,15 @@ int Sdp::receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder select
     this->set_media_transport_info_from_remote_sdp (remote);
 
     status = pjmedia_sdp_neg_create_w_remote_offer (_pool,
-    get_local_sdp_session(), remote, &_negociator);
+             get_local_sdp_session(), remote, &_negociator);
 
     PJ_ASSERT_RETURN (status == PJ_SUCCESS, 1);
 
     return PJ_SUCCESS;
 }
 
-pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata) {
+pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
+{
 
     static const pj_str_t str_application = { (char*) "application", 11 };
     static const pj_str_t str_sdp = { (char*) "sdp", 3 };
@@ -315,12 +318,14 @@ pj_status_t Sdp::check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata)
     return status;
 }
 
-void Sdp::sdp_add_protocol (void) {
+void Sdp::sdp_add_protocol (void)
+{
 
     this->_local_offer->origin.version = 0;
 }
 
-void Sdp::sdp_add_origin (void) {
+void Sdp::sdp_add_origin (void)
+{
 
     pj_time_val tv;
     pj_gettimeofday (&tv);
@@ -336,13 +341,15 @@ void Sdp::sdp_add_origin (void) {
     this->_local_offer->origin.addr = pj_str ( (char*) _ip_addr.c_str());
 }
 
-void Sdp::sdp_add_session_name (void) {
+void Sdp::sdp_add_session_name (void)
+{
 
     this->_local_offer->name = STR_SDP_NAME;
 }
 
 
-void Sdp::sdp_add_connection_info (void) {
+void Sdp::sdp_add_connection_info (void)
+{
 
     this->_local_offer->conn->net_type = _local_offer->origin.net_type;
     this->_local_offer->conn->addr_type = _local_offer->origin.addr_type;
@@ -350,7 +357,8 @@ void Sdp::sdp_add_connection_info (void) {
 }
 
 
-void Sdp::sdp_add_timing (void) {
+void Sdp::sdp_add_timing (void)
+{
 
     // RFC 3264: An offer/answer model session description protocol
     // As the session is created and destroyed through an external signaling mean (SIP), the line
@@ -359,7 +367,8 @@ void Sdp::sdp_add_timing (void) {
     this->_local_offer->time.start = this->_local_offer->time.stop = 0;
 }
 
-void Sdp::sdp_add_attributes() {
+void Sdp::sdp_add_attributes()
+{
 
     pjmedia_sdp_attr *a;
     this->_local_offer->attr_count = 1;
@@ -392,37 +401,37 @@ void Sdp::sdp_add_sdes_attribute (std::vector<std::string>& crypto)
 
     std::vector<std::string>::iterator iter = crypto.begin();
 
-    while(iter != crypto.end()) {
+    while (iter != crypto.end()) {
 
         // the attribute to add to sdp
-        pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc(_pool, sizeof(pjmedia_sdp_attr));
+        pjmedia_sdp_attr *attribute = (pjmedia_sdp_attr*) pj_pool_zalloc (_pool, sizeof (pjmedia_sdp_attr));
 
-	attribute->name = pj_strdup3(_pool, "crypto");
+        attribute->name = pj_strdup3 (_pool, "crypto");
 
-	// _debug("crypto from sdp: %s", crypto.c_str());
+        // _debug("crypto from sdp: %s", crypto.c_str());
 
-    
-	int len = pj_ansi_snprintf(tempbuf, sizeof(tempbuf),
-				   "%.*s",(int)(*iter).size(), (*iter).c_str());
- 
-	attribute->value.slen = len;
-	attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1);
-	pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1);
 
-	// get number of media for this SDP
-	int media_count = _local_offer->media_count;
+        int len = pj_ansi_snprintf (tempbuf, sizeof (tempbuf),
+                                    "%.*s", (int) (*iter).size(), (*iter).c_str());
 
-	// add crypto attribute to media
-	for(int i = 0; i < media_count; i++) {
+        attribute->value.slen = len;
+        attribute->value.ptr = (char*) pj_pool_alloc (_pool, attribute->value.slen+1);
+        pj_memcpy (attribute->value.ptr, tempbuf, attribute->value.slen+1);
 
-	    if(pjmedia_sdp_media_add_attr(_local_offer->media[i], attribute) != PJ_SUCCESS) {
-	      // if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){
-	        throw sdpException();
-	    }
-	}
+        // get number of media for this SDP
+        int media_count = _local_offer->media_count;
 
+        // add crypto attribute to media
+        for (int i = 0; i < media_count; i++) {
+
+            if (pjmedia_sdp_media_add_attr (_local_offer->media[i], attribute) != PJ_SUCCESS) {
+                // if(pjmedia_sdp_attr_add(&(_local_offer->attr_count), _local_offer->attr, attribute) != PJ_SUCCESS){
+                throw sdpException();
+            }
+        }
 
-	iter++;
+
+        iter++;
     }
 }
 
@@ -472,39 +481,41 @@ std::string Sdp::media_to_string (void)
 
 void Sdp::clean_session_media()
 {
-	_info("SDP: Clean session media");
+    _info ("SDP: Clean session media");
+
+    if (_session_media.size() > 0) {
 
-	if(_session_media.size() > 0) {
+        std::vector<sdpMedia *>::iterator iter = _session_media.begin();
+        sdpMedia *media;
 
-		std::vector<sdpMedia *>::iterator iter = _session_media.begin();
-	    sdpMedia *media;
+        while (iter != _session_media.end()) {
+            media = *iter;
+            delete media;
+            iter++;
+        }
 
-		while(iter != _session_media.end()) {
-			media = *iter;
-			delete media;
-			iter++;
-		}
-		_session_media.clear();
-	}
+        _session_media.clear();
+    }
 }
 
 
 void Sdp::clean_local_media_capabilities()
 {
-	_info("SDP: Clean local media capabilities");
+    _info ("SDP: Clean local media capabilities");
 
-	if(_local_media_cap.size() > 0) {
+    if (_local_media_cap.size() > 0) {
 
-		std::vector<sdpMedia *>::iterator iter = _local_media_cap.begin();
-			sdpMedia *media;
+        std::vector<sdpMedia *>::iterator iter = _local_media_cap.begin();
+        sdpMedia *media;
 
-			while(iter != _local_media_cap.end()) {
-				media = *iter;
-				delete media;
-				iter++;
-			}
-			_local_media_cap.clear();
-	}
+        while (iter != _local_media_cap.end()) {
+            media = *iter;
+            delete media;
+            iter++;
+        }
+
+        _local_media_cap.clear();
+    }
 }
 
 void Sdp::set_negotiated_sdp (const pjmedia_sdp_session *sdp)
@@ -584,16 +595,15 @@ AudioCodec* Sdp::get_session_media (void)
 
 pj_status_t Sdp::start_negociation()
 {
-	pj_status_t status;
+    pj_status_t status;
 
-	if (_negociator) {
-		status = pjmedia_sdp_neg_negotiate(_pool, _negociator, 0);
-	}
-	else {
-		status = !PJ_SUCCESS;
-	}
+    if (_negociator) {
+        status = pjmedia_sdp_neg_negotiate (_pool, _negociator, 0);
+    } else {
+        status = !PJ_SUCCESS;
+    }
 
-	return status;
+    return status;
 }
 
 void Sdp::toString (void)
@@ -633,7 +643,8 @@ void Sdp::toString (void)
     _debug ("LOCAL SDP: \n%s", sdp.str().c_str());
 }
 
-void Sdp::set_local_media_capabilities (CodecOrder selectedCodecs) {
+void Sdp::set_local_media_capabilities (CodecOrder selectedCodecs)
+{
 
     unsigned int i;
     sdpMedia *audio;
@@ -652,16 +663,18 @@ void Sdp::set_local_media_capabilities (CodecOrder selectedCodecs) {
     /* We retrieve the codecs selected by the user */
     codecs_list = Manager::instance().getCodecDescriptorMap().getCodecsMap();
 
+    if (selectedCodecs.size() == 0)
+        _warn ("SDP: No selected codec while building local SDP offer");
+
     for (i=0; i<selectedCodecs.size(); i++) {
         iter=codecs_list.find (selectedCodecs[i]);
 
         if (iter!=codecs_list.end()) {
             audio->add_codec (iter->second);
+        } else {
+            _warn ("SDP: Couldn't find audio codec");
         }
-		else {
-			_warn ("SDP: Couldn't find audio codec");
-		}
-	}
+    }
 
     _local_media_cap.push_back (audio);
 }
@@ -712,8 +725,8 @@ void Sdp::set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *r
 
     _info ("SDP: Fetching media from sdp");
 
-    if(!remote_sdp)
-    	return;
+    if (!remote_sdp)
+        return;
 
     pjmedia_sdp_media *r_media;
 
@@ -734,8 +747,8 @@ void Sdp::get_remote_sdp_media_from_offer (const pjmedia_sdp_session* remote_sdp
 {
     int count, i;
 
-    if(!remote_sdp)
-    	return;
+    if (!remote_sdp)
+        return;
 
     count = remote_sdp->media_count;
     *r_media =  NULL;
@@ -764,31 +777,31 @@ void Sdp::get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sd
     // iterate over all media
     for (i = 0; i < media_count; ++i) {
 
-	// get media
-	media = remote_sdp->media[i];
+        // get media
+        media = remote_sdp->media[i];
 
-	// get number of attribute for this memdia
-	attr_count = media->attr_count;
+        // get number of attribute for this memdia
+        attr_count = media->attr_count;
 
-	// iterate over all attribute for this media
-        for(j = 0; j < attr_count; j++) {
+        // iterate over all attribute for this media
+        for (j = 0; j < attr_count; j++) {
 
-	    attribute = media->attr[j];
+            attribute = media->attr[j];
 
-	    // test if this attribute is a crypto
-	    if (pj_stricmp2 (&attribute->name, "crypto") == 0) {
+            // test if this attribute is a crypto
+            if (pj_stricmp2 (&attribute->name, "crypto") == 0) {
 
-		std::string attr(attribute->value.ptr, attribute->value.slen);
+                std::string attr (attribute->value.ptr, attribute->value.slen);
 
-		// @TODO our parser require the "a=crypto:" to be present
-		std::string full_attr = "a=crypto:";
-		full_attr += attr;
+                // @TODO our parser require the "a=crypto:" to be present
+                std::string full_attr = "a=crypto:";
+                full_attr += attr;
 
-		crypto_offer.push_back(full_attr);
-	    }
+                crypto_offer.push_back (full_attr);
+            }
 
-	}
+        }
     }
-    
+
 }
 
diff --git a/sflphone-common/src/sip/sdp.h b/sflphone-common/src/sip/sdp.h
index 07c1ecfce7a51a309ffbf693c39b194e6777f084..19336befd5f881ee6a7466ea48d2490ca01aa377 100644
--- a/sflphone-common/src/sip/sdp.h
+++ b/sflphone-common/src/sip/sdp.h
@@ -49,52 +49,60 @@
 
 class sdpException: public std::exception
 {
-  virtual const char* what() const throw()
-  {
-    return "An sdpException Occured";
-  }
+        virtual const char* what() const throw() {
+            return "An sdpException Occured";
+        }
 };
 
 typedef std::vector<std::string> CryptoOffer;
 
-class Sdp {
+class Sdp
+{
 
     public:
-        
+
         /*
          * Class Constructor.
          *
          * @param ip_addr
          */
-        Sdp(pj_pool_t *pool);
+        Sdp (pj_pool_t *pool);
 
         /* Class destructor */
         ~Sdp();
 
         /*
-         * Read accessor. Get the list of the local media capabilities. 
+         * Read accessor. Get the list of the local media capabilities.
          *
          * @return std::vector<sdpMedia*>   the vector containing the different media
          */
-        std::vector<sdpMedia*> get_local_media_cap( void ) { return _local_media_cap; }
+        std::vector<sdpMedia*> get_local_media_cap (void) {
+            return _local_media_cap;
+        }
 
-         /*
-         *  Read accessor. Get the sdp session information
-         *
-         *  @return pjmedia_sdp_session   The structure that describes a SDP session
-         */
-        pjmedia_sdp_session* get_local_sdp_session( void ) { return _local_offer; }
+        /*
+        *  Read accessor. Get the sdp session information
+        *
+        *  @return pjmedia_sdp_session   The structure that describes a SDP session
+        */
+        pjmedia_sdp_session* get_local_sdp_session (void) {
+            return _local_offer;
+        }
 
         /*
          * Write accessor. Set the local IP address that will be used in the sdp session
          */
-        void set_ip_address( std::string ip_addr ) { _ip_addr = ip_addr; }
+        void set_ip_address (std::string ip_addr) {
+            _ip_addr = ip_addr;
+        }
 
         /*
          * Read accessor. Get the local IP address
          */
-        std::string get_ip_address( void ) { return _ip_addr; }
-        
+        std::string get_ip_address (void) {
+            return _ip_addr;
+        }
+
         /*
          * Build the local SDP offer
          */
@@ -107,34 +115,39 @@ class Sdp {
          * @param media The media to add to SDP
          * @param med   The structure to receive the media section
          */
-        void set_media_descriptor_line( sdpMedia* media, pjmedia_sdp_media** p_med );
+        void set_media_descriptor_line (sdpMedia* media, pjmedia_sdp_media** p_med);
 
         /* Set the zrtp hash that was previously calculated from the hello message in the zrtp layer.
          * This hash value is unique at the media level. Therefore, if video support is added, one would
          * have to set the correct zrtp-hash value in the corresponding media section.
          * @param hash The hello hash of a rtp session. (Only audio at the moment)
          */
-        inline void set_zrtp_hash(const std::string& hash) { _zrtp_hello_hash = hash; _debug("Zrtp hash set with %s\n", hash.c_str()); }
+        inline void set_zrtp_hash (const std::string& hash) {
+            _zrtp_hello_hash = hash;
+            _debug ("Zrtp hash set with %s\n", hash.c_str());
+        }
+
+        /* Set the srtp _master_key
+             * @param mk The Master Key of a srtp session.
+             */
+        inline void set_srtp_crypto (const std::vector<std::string> lc) {
+            _srtp_crypto = lc;
+        }
 
-	/* Set the srtp _master_key
-         * @param mk The Master Key of a srtp session.
-         */
-        inline void set_srtp_crypto(const std::vector<std::string> lc) { _srtp_crypto = lc; }
-        
         /*
          * On building an invite outside a dialog, build the local offer and create the
          * SDP negociator instance with it.
          */
         int create_initial_offer (CodecOrder selectedCodecs);
 
-         /*
-         * On receiving an invite outside a dialog, build the local offer and create the
-         * SDP negociator instance with the remote offer.
-         *
-         * @param remote    The remote offer
-         */
+        /*
+        * On receiving an invite outside a dialog, build the local offer and create the
+        * SDP negociator instance with the remote offer.
+        *
+        * @param remote    The remote offer
+        */
         int receiving_initial_offer (pjmedia_sdp_session* remote, CodecOrder selectedCodecs);
-        
+
         /*
          * On receiving a message, check if it contains SDP and negotiate. Should be used for
          * SDP answer and offer but currently is only used for answer.
@@ -143,53 +156,53 @@ class Sdp {
          * @param inv       The  the invitation
          * @param rdata     The remote data
          */
-        
-        pj_status_t check_sdp_answer(pjsip_inv_session *inv, pjsip_rx_data *rdata);
-        
+
+        pj_status_t check_sdp_answer (pjsip_inv_session *inv, pjsip_rx_data *rdata);
+
         /**
          * Remove all media in the session media vector.
          */
-        void clean_session_media(void);
+        void clean_session_media (void);
 
         /**
          * Remove all media in local media capability vector
          */
-		void clean_local_media_capabilities(void);
+        void clean_local_media_capabilities (void);
 
         /*
          * Return a string description of the media added to the session,
          * ie the local media capabilities
          */
-        std::string media_to_string( void );
+        std::string media_to_string (void);
 
         /*
          * Return the codec of the first media after negociation
          */
-        AudioCodec* get_session_media( void );
+        AudioCodec* get_session_media (void);
 
         /*
          * read accessor. Return the negociated offer
          *
          * @return pjmedia_sdp_session  The negociated offer
          */
-        pjmedia_sdp_session* get_negociated_offer( void ){
+        pjmedia_sdp_session* get_negociated_offer (void) {
             return _negociated_offer;
         }
 
-         /*
-         * Start the sdp negociation.
-         *
-         * @return pj_status_t  0 on success
-         *                      1 otherwise
-         */
-        pj_status_t start_negociation( void );
+        /*
+        * Start the sdp negociation.
+        *
+        * @return pj_status_t  0 on success
+        *                      1 otherwise
+        */
+        pj_status_t start_negociation (void);
 
-         /*
-         * Retrieve the negociated sdp offer from the sip payload.
-         *
-         * @param sdp   the negociated offer
-         */
-        void set_negotiated_sdp ( const pjmedia_sdp_session *sdp );
+        /*
+        * Retrieve the negociated sdp offer from the sip payload.
+        *
+        * @param sdp   the negociated offer
+        */
+        void set_negotiated_sdp (const pjmedia_sdp_session *sdp);
 
         /*
          * Attribute the specified port to every medias provided
@@ -200,39 +213,53 @@ class Sdp {
          */
         void attribute_port_to_all_media (int port);
 
-        void  set_local_extern_audio_port(int port){ _local_extern_audio_port = port; }
+        void  set_local_extern_audio_port (int port) {
+            _local_extern_audio_port = port;
+        }
 
-        int  get_local_extern_audio_port (void){ return _local_extern_audio_port; }
+        int  get_local_extern_audio_port (void) {
+            return _local_extern_audio_port;
+        }
 
         void toString (void);
 
-        /** 
+        /**
          * Set remote's IP addr. [not protected]
          * @param ip  The remote IP address
          */
-        void set_remote_ip(const std::string& ip) { _remote_ip_addr = ip; }
-        
-        /** 
+        void set_remote_ip (const std::string& ip) {
+            _remote_ip_addr = ip;
+        }
+
+        /**
          * Return IP of destination [mutex protected]
          * @return const std:string	The remote IP address
          */
-        const std::string& get_remote_ip() { return _remote_ip_addr; }
+        const std::string& get_remote_ip() {
+            return _remote_ip_addr;
+        }
 
-        /** 
+        /**
          * Set remote's audio port. [not protected]
          * @param port  The remote audio port
          */
-        void set_remote_audio_port(unsigned int port) { _remote_audio_port = port; }
+        void set_remote_audio_port (unsigned int port) {
+            _remote_audio_port = port;
+        }
 
-        /** 
-         * Return audio port at destination [mutex protected] 
+        /**
+         * Return audio port at destination [mutex protected]
          * @return unsigned int The remote audio port
          */
-        unsigned int get_remote_audio_port() { return _remote_audio_port; }
+        unsigned int get_remote_audio_port() {
+            return _remote_audio_port;
+        }
 
         void set_media_transport_info_from_remote_sdp (const pjmedia_sdp_session *remote_sdp);
 
-        std::vector<sdpMedia*> get_session_media_list (void) { return _session_media; }
+        std::vector<sdpMedia*> get_session_media_list (void) {
+            return _session_media;
+        }
 
         void get_remote_sdp_crypto_from_offer (const pjmedia_sdp_session* remote_sdp, CryptoOffer& crypto_offer);
 
@@ -251,13 +278,13 @@ class Sdp {
 
         /** Remote's IP address */
         std::string  _remote_ip_addr;
-        
+
         /** Local SDP */
         pjmedia_sdp_session *_local_offer;
 
         /* The negociated SDP offer */
         // Explanation: each endpoint's offer is negociated, and a new sdp offer results from this
-        // negociation, with the compatible media from each part 
+        // negociation, with the compatible media from each part
         pjmedia_sdp_session *_negociated_offer;
 
         // The pool to allocate memory
@@ -273,9 +300,9 @@ class Sdp {
 
         /** "a=crypto" sdes local attributes obtained from AudioSrtpSession */
         std::vector<std::string> _srtp_crypto;
-        
-        Sdp(const Sdp&); //No Copy Constructor
-        Sdp& operator=(const Sdp&); //No Assignment Operator
+
+        Sdp (const Sdp&); //No Copy Constructor
+        Sdp& operator= (const Sdp&); //No Assignment Operator
 
         void set_local_media_capabilities (CodecOrder selectedCodecs);
 
@@ -284,70 +311,70 @@ class Sdp {
          *  Gives the originator of the session.
          *  Serves as a globally unique identifier for this version of this session description.
          */
-        void sdp_add_origin( void );
+        void sdp_add_origin (void);
 
         /*
          *  Mandatory field: Protocol version ("v=")
          *  Add the protocol version in the SDP session description
          */
-        void sdp_add_protocol( void );
+        void sdp_add_protocol (void);
 
         /*
          *  Optional field: Connection data ("c=")
          *  Contains connection data.
          */
-        void sdp_add_connection_info( void );
-        
+        void sdp_add_connection_info (void);
+
         /*
          *  Mandatory field: Session name ("s=")
          *  Add a textual session name.
          */
-        void sdp_add_session_name( void );
+        void sdp_add_session_name (void);
 
         /*
          *  Optional field: Session information ("s=")
          *  Provides textual information about the session.
          */
-        void sdp_add_session_info( void ){}
+        void sdp_add_session_info (void) {}
 
         /*
          *  Optional field: Uri ("u=")
          *  Add a pointer to additional information about the session.
          */
-        void sdp_add_uri( void ) {}
+        void sdp_add_uri (void) {}
 
         /*
          *  Optional fields: Email address and phone number ("e=" and "p=")
          *  Add contact information for the person responsible for the conference.
          */
-        void sdp_add_email( void ) {}
+        void sdp_add_email (void) {}
 
         /*
          *  Optional field: Bandwidth ("b=")
          *  Denotes the proposed bandwidth to be used by the session or the media .
          */
-        void sdp_add_bandwidth( void ) {}
+        void sdp_add_bandwidth (void) {}
 
         /*
          *  Mandatory field: Timing ("t=")
          *  Specify the start and the stop time for a session.
          */
-        void sdp_add_timing( void );
+        void sdp_add_timing (void);
 
         /*
          * Optional field: Time zones ("z=")
          */
-        void sdp_add_time_zone( void ) {}
+        void sdp_add_time_zone (void) {}
 
         /*
          * Optional field: Encryption keys ("k=")
          */
-        void sdp_add_encryption_key( void ) {}
+        void sdp_add_encryption_key (void) {}
 
         /*
          * Optional field: Attributes ("a=")
          */
-        void sdp_add_attributes( );
+        void sdp_add_attributes();
 
         /*
          * Mandatory field: Media descriptions ("m=")
@@ -357,30 +384,30 @@ class Sdp {
         std::string convert_int_to_string (int value);
 
         void set_remote_ip_from_sdp (const pjmedia_sdp_session *r_sdp);
-        
+
         void set_remote_audio_port_from_sdp (pjmedia_sdp_media *r_media);
 
         void get_remote_sdp_media_from_offer (const pjmedia_sdp_session* r_sdp, pjmedia_sdp_media** r_media);
 
-	
+
         /*
          * Adds a sdes attribute to the given media section.
          *
-         * @param media The media to add the srtp attribute to 
+         * @param media The media to add the srtp attribute to
          */
-        void sdp_add_sdes_attribute(std::vector<std::string>& crypto);
+        void sdp_add_sdes_attribute (std::vector<std::string>& crypto);
 
-        /* 
-         * Adds a zrtp-hash  attribute to 
+        /*
+         * Adds a zrtp-hash  attribute to
          * the given media section. The hello hash is
          * available only after is has been computed
-         * in the AudioZrtpSession constructor. 
+         * in the AudioZrtpSession constructor.
          *
-         * @param media The media to add the zrtp-hash attribute to 
+         * @param media The media to add the zrtp-hash attribute to
          * @param hash  The hash to which the attribute should be set to
-         */ 
-        void sdp_add_zrtp_attribute(pjmedia_sdp_media* media, std::string hash);
-              
+         */
+        void sdp_add_zrtp_attribute (pjmedia_sdp_media* media, std::string hash);
+
 };
 
 
diff --git a/sflphone-common/src/sip/sdpmedia.cpp b/sflphone-common/src/sip/sdpmedia.cpp
index 95955a51db652bc9ebd92c553589e7d82a563a77..3b7c7c39f1fb7d87df70450a6b47c5241cde370f 100644
--- a/sflphone-common/src/sip/sdpmedia.cpp
+++ b/sflphone-common/src/sip/sdpmedia.cpp
@@ -85,7 +85,7 @@ sdpMedia::sdpMedia (std::string type, int port, std::string dir)
 
 sdpMedia::~sdpMedia()
 {
-	clear_codec_list();
+    clear_codec_list();
 }
 
 
diff --git a/sflphone-common/src/sip/sdpmedia.h b/sflphone-common/src/sip/sdpmedia.h
index 96d47e326b424ebb1c75c9298342aec9559b8187..54a9a27d1d2b3d4cb459d670a938c5cbae36551a 100644
--- a/sflphone-common/src/sip/sdpmedia.h
+++ b/sflphone-common/src/sip/sdpmedia.h
@@ -83,19 +83,23 @@ typedef enum mediaType mediaType;
 class sdpMedia
 {
     public:
-        sdpMedia( int type );
-        sdpMedia( std::string type, int port, std::string dir = DEFAULT_STREAM_DIRECTION);
+        sdpMedia (int type);
+        sdpMedia (std::string type, int port, std::string dir = DEFAULT_STREAM_DIRECTION);
         ~sdpMedia();
 
         /*
          * Read accessor. Return the list of codecs
          */
-        std::vector<AudioCodec*> get_media_codec_list() { return _codec_list; }
+        std::vector<AudioCodec*> get_media_codec_list() {
+            return _codec_list;
+        }
 
         /*
          * Read accessor. Return the type of media
          */
-        mediaType get_media_type() { return _media_type; }
+        mediaType get_media_type() {
+            return _media_type;
+        }
 
         /*
          * Read accessor. Return the type of media
@@ -105,59 +109,69 @@ class sdpMedia
         /*
          * Set the media type
          */
-        void set_media_type( int type ) { _media_type = (mediaType)type; }
+        void set_media_type (int type) {
+            _media_type = (mediaType) type;
+        }
 
         /*
          * Read accessor. Return the transport port
          */
-        int get_port() { return _port; }
+        int get_port() {
+            return _port;
+        }
 
         /*
          * Write accessor. Set the transport port
          */
-        void set_port( int port ) { _port = port; }
+        void set_port (int port) {
+            _port = port;
+        }
 
         /*
          * Add a codec in the current media codecs vector
          *
          * @param payload     The payload type
          */
-        void add_codec( AudioCodec *codec );
+        void add_codec (AudioCodec *codec);
 
         /*
          * Remove a codec from the current media codecs vector
          *
          * @param codec_name    The codec encoding name
          */
-        void remove_codec( std::string codec_name );
+        void remove_codec (std::string codec_name);
 
         /*
          * Remove all the codecs from the list
          */
-        void clear_codec_list( void );
+        void clear_codec_list (void);
 
         /*
          * Return a string description of the current media
-         */ 
-        std::string to_string( void );
+         */
+        std::string to_string (void);
 
         /*
          * Set the stream direction of the current media
          * ie: sendrecv, sendonly,...
          */
-        void set_stream_direction( int direction ) { _stream_type = (streamDirection)direction; }
+        void set_stream_direction (int direction) {
+            _stream_type = (streamDirection) direction;
+        }
 
         /*
          * Get the stream direction of the current media
          * ie: sendrecv, sendonly,...
          */
-        streamDirection get_stream_direction( void ) { return _stream_type; }
+        streamDirection get_stream_direction (void) {
+            return _stream_type;
+        }
 
         /*
          * Get the stream direction string description of the current media
          * ie: sendrecv, sendonly,...
          */
-        std::string get_stream_direction_str( void );
+        std::string get_stream_direction_str (void);
 
     private:
         /* The type of media */
diff --git a/sflphone-common/src/sip/sipaccount.cpp b/sflphone-common/src/sip/sipaccount.cpp
index 97318b47928130283ed86f44dcd0dd056f1edbc8..a928edbce4c97e3818c2767b9b8e6c4941d99358 100644
--- a/sflphone-common/src/sip/sipaccount.cpp
+++ b/sflphone-common/src/sip/sipaccount.cpp
@@ -34,31 +34,103 @@
 #include "manager.h"
 #include "user_cfg.h"
 #include <pwd.h>
+#include <sstream>
+
+Credentials::Credentials() : credentialCount (0) {}
+
+Credentials::~Credentials() {}
+
+void Credentials::setNewCredential (std::string username, std::string password, std::string realm)
+{
+    credentialArray[credentialCount].username = username;
+    credentialArray[credentialCount].password = password;
+    credentialArray[credentialCount].realm = realm;
+
+}
+
+CredentialItem *Credentials::getCredential (int index)
+{
+    if ( (index >= 0) && (index < credentialCount))
+        return & (credentialArray[index]);
+    else
+        return NULL;
+}
+
+void Credentials::serialize (Conf::YamlEmitter *emitter UNUSED)
+{
+
+}
+
+void Credentials::unserialize (Conf::MappingNode *map)
+{
+
+    Conf::ScalarNode *val = NULL;
+
+    _debug ("SipAccount: Unserialize credentials");
+
+    val = (Conf::ScalarNode *) (map->getValue (credentialCountKey));
+
+    if (val) {
+        credentialCount = atoi (val->getValue().data());
+        val = NULL;
+    }
+}
+
+
 
 SIPAccount::SIPAccount (const AccountID& accountID)
-        : Account (accountID, "sip")
-	, _routeSet("")
+        : Account (accountID, "SIP")
+        , _routeSet ("")
         , _regc (NULL)
         , _bRegister (false)
         , _registrationExpire ("")
+        , _interface ("default")
         , _publishedSameasLocal (true)
         , _publishedIpAddress ("")
         , _localPort (atoi (DEFAULT_SIP_PORT))
         , _publishedPort (atoi (DEFAULT_SIP_PORT))
-	, _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT))
+        , _serviceRoute ("")
+        , _tlsListenerPort (atoi (DEFAULT_SIP_TLS_PORT))
         , _transportType (PJSIP_TRANSPORT_UNSPECIFIED)
         , _transport (NULL)
         , _resolveOnce (false)
-        , _credentialCount (0)
         , _cred (NULL)
         , _realm (DEFAULT_REALM)
         , _authenticationUsername ("")
         , _tlsSetting (NULL)
-	, _dtmfType(OVERRTP)
-        , _displayName ("")
+        , _dtmfType (SIPINFO)
+        , _tlsEnable ("false")
+        , _tlsPortStr (DEFAULT_SIP_TLS_PORT)
+        , _tlsCaListFile ("")
+        , _tlsCertificateFile ("")
+        , _tlsPrivateKeyFile ("")
+        , _tlsPassword ("")
+        , _tlsMethod ("TLSv1")
+        , _tlsCiphers ("")
+        , _tlsServerName ("")
+        , _tlsVerifyServer (true)
+        , _tlsVerifyClient (true)
+        , _tlsRequireClientCertificate (true)
+        , _tlsNegotiationTimeoutSec ("2")
+        , _tlsNegotiationTimeoutMsec ("0")
+        , _stunServer (DFT_STUN_SERVER)
+        , _stunEnabled (false)
+        , _srtpEnabled (false)
+        , _srtpKeyExchange ("sdes")
+        , _srtpFallback (false)
+        , _zrtpDisplaySas (true)
+        , _zrtpDisplaySasOnce (false)
+        , _zrtpHelloHash (true)
+        , _zrtpNotSuppWarning (true)
 {
-    
-    // IP2IP settings must be loaded before singleton instanciation, cannot call it here... 
+
+    _debug ("Sip account constructor called");
+
+    _stunServerName.ptr = NULL;
+    _stunServerName.slen = 0;
+    _stunPort = 0;
+
+    // IP2IP settings must be loaded before singleton instanciation, cannot call it here...
 
     // _link = SIPVoIPLink::instance ("");
 
@@ -70,7 +142,8 @@ SIPAccount::SIPAccount (const AccountID& accountID)
 SIPAccount::~SIPAccount()
 {
     /* One SIP account less connected to the sip voiplink */
-    dynamic_cast<SIPVoIPLink*> (_link)->decrementClients();
+    if (_accountID != "default")
+        dynamic_cast<SIPVoIPLink*> (_link)->decrementClients();
 
     /* Delete accounts-related information */
     _regc = NULL;
@@ -78,9 +151,782 @@ SIPAccount::~SIPAccount()
     free (_tlsSetting);
 }
 
+void SIPAccount::serialize (Conf::YamlEmitter *emitter)
+{
+
+    _debug ("SipAccount: serialize %s", _accountID.c_str());
+
+
+    Conf::MappingNode accountmap (NULL);
+    Conf::MappingNode credentialmap (NULL);
+    Conf::MappingNode srtpmap (NULL);
+    Conf::MappingNode zrtpmap (NULL);
+    Conf::MappingNode tlsmap (NULL);
+
+    Conf::ScalarNode id (Account::_accountID);
+    Conf::ScalarNode username (Account::_username);
+    Conf::ScalarNode password (Account::_password);
+    Conf::ScalarNode alias (Account::_alias);
+    Conf::ScalarNode hostname (Account::_hostname);
+    Conf::ScalarNode enable (_enabled ? "true" : "false");
+    Conf::ScalarNode type (Account::_type);
+    Conf::ScalarNode expire (_registrationExpire);
+    Conf::ScalarNode interface (_interface);
+    std::stringstream portstr;
+    portstr << _localPort;
+    Conf::ScalarNode port (portstr.str());
+    Conf::ScalarNode serviceRoute (_serviceRoute);
+
+    Conf::ScalarNode mailbox ("97");
+    Conf::ScalarNode publishAddr (_publishedIpAddress);
+    std::stringstream publicportstr;
+    publicportstr << _publishedPort;
+    Conf::ScalarNode publishPort (publicportstr.str());
+    Conf::ScalarNode sameasLocal (_publishedSameasLocal ? "true" : "false");
+    Conf::ScalarNode resolveOnce (_resolveOnce ? "true" : "false");
+    Conf::ScalarNode codecs (_codecStr);
+    Conf::ScalarNode ringtonePath (_ringtonePath);
+    Conf::ScalarNode ringtoneEnabled (_ringtoneEnabled ? "true" : "false");
+    Conf::ScalarNode stunServer (_stunServer);
+    Conf::ScalarNode stunEnabled (_stunEnabled ? "true" : "false");
+    Conf::ScalarNode displayName (_displayName);
+    Conf::ScalarNode dtmfType (_dtmfType==OVERRTP ? "overrtp" : "sipinfo");
+
+    std::stringstream countstr;
+    countstr << 0;
+    Conf::ScalarNode count (countstr.str());
+
+    Conf::ScalarNode srtpenabled (_srtpEnabled ? "true" : "false");
+    Conf::ScalarNode keyExchange (_srtpKeyExchange);
+    Conf::ScalarNode rtpFallback (_srtpFallback ? "true" : "false");
+
+    Conf::ScalarNode displaySas (_zrtpDisplaySas ? "true" : "false");
+    Conf::ScalarNode displaySasOnce (_zrtpDisplaySasOnce ? "true" : "false");
+    Conf::ScalarNode helloHashEnabled (_zrtpHelloHash ? "true" : "false");
+    Conf::ScalarNode notSuppWarning (_zrtpNotSuppWarning ? "true" : "false");
+
+    Conf::ScalarNode tlsport (_tlsPortStr);
+    Conf::ScalarNode certificate (_tlsCertificateFile);
+    Conf::ScalarNode calist (_tlsCaListFile);
+    Conf::ScalarNode ciphers (_tlsCiphers);
+    Conf::ScalarNode tlsenabled (_tlsEnable);
+    Conf::ScalarNode tlsmethod (_tlsMethod);
+    Conf::ScalarNode timeout (_tlsNegotiationTimeoutSec);
+    Conf::ScalarNode tlspassword (_tlsPassword);
+    Conf::ScalarNode privatekey (_tlsPrivateKeyFile);
+    Conf::ScalarNode requirecertif (_tlsRequireClientCertificate ? "true" : "false");
+    Conf::ScalarNode server (_tlsServerName);
+    Conf::ScalarNode verifyclient (_tlsVerifyServer ? "true" : "false");
+    Conf::ScalarNode verifyserver (_tlsVerifyClient ? "true" : "false");
+
+    accountmap.setKeyValue (aliasKey, &alias);
+    accountmap.setKeyValue (typeKey, &type);
+    accountmap.setKeyValue (idKey, &id);
+    accountmap.setKeyValue (usernameKey, &username);
+    accountmap.setKeyValue (passwordKey, &password);
+    accountmap.setKeyValue (hostnameKey, &hostname);
+    accountmap.setKeyValue (accountEnableKey, &enable);
+    accountmap.setKeyValue (mailboxKey, &mailbox);
+    accountmap.setKeyValue (expireKey, &expire);
+    accountmap.setKeyValue (interfaceKey, &interface);
+    accountmap.setKeyValue (portKey, &port);
+    accountmap.setKeyValue (stunServerKey, &stunServer);
+    accountmap.setKeyValue (stunEnabledKey, &stunEnabled);
+    accountmap.setKeyValue (publishAddrKey, &publishAddr);
+    accountmap.setKeyValue (publishPortKey, &publishPort);
+    accountmap.setKeyValue (sameasLocalKey, &sameasLocal);
+    accountmap.setKeyValue (resolveOnceKey, &resolveOnce);
+    accountmap.setKeyValue (serviceRouteKey, &serviceRoute);
+    accountmap.setKeyValue (dtmfTypeKey, &dtmfType);
+    accountmap.setKeyValue (displayNameKey, &displayName);
+    accountmap.setKeyValue (codecsKey, &codecs);
+    accountmap.setKeyValue (ringtonePathKey, &ringtonePath);
+    accountmap.setKeyValue (ringtoneEnabledKey, &ringtoneEnabled);
+
+    accountmap.setKeyValue (srtpKey, &srtpmap);
+    srtpmap.setKeyValue (srtpEnableKey, &srtpenabled);
+    srtpmap.setKeyValue (keyExchangeKey, &keyExchange);
+    srtpmap.setKeyValue (rtpFallbackKey, &rtpFallback);
+
+    accountmap.setKeyValue (zrtpKey, &zrtpmap);
+    zrtpmap.setKeyValue (displaySasKey, &displaySas);
+    zrtpmap.setKeyValue (displaySasOnceKey, &displaySasOnce);
+    zrtpmap.setKeyValue (helloHashEnabledKey, &helloHashEnabled);
+    zrtpmap.setKeyValue (notSuppWarningKey, &notSuppWarning);
+
+    accountmap.setKeyValue (credKey, &credentialmap);
+    credentialmap.setKeyValue (credentialCountKey, &count);
+
+    accountmap.setKeyValue (tlsKey, &tlsmap);
+    tlsmap.setKeyValue (tlsPortKey, &tlsport);
+    tlsmap.setKeyValue (certificateKey, &certificate);
+    tlsmap.setKeyValue (calistKey, &calist);
+    tlsmap.setKeyValue (ciphersKey, &ciphers);
+    tlsmap.setKeyValue (tlsEnableKey, &tlsenabled);
+    tlsmap.setKeyValue (methodKey, &tlsmethod);
+    tlsmap.setKeyValue (timeoutKey, &timeout);
+    tlsmap.setKeyValue (tlsPasswordKey, &tlspassword);
+    tlsmap.setKeyValue (privateKeyKey, &privatekey);
+    tlsmap.setKeyValue (requireCertifKey, &requirecertif);
+    tlsmap.setKeyValue (serverKey, &server);
+    tlsmap.setKeyValue (verifyClientKey, &verifyclient);
+    tlsmap.setKeyValue (verifyServerKey, &verifyserver);
+
+    try {
+        emitter->serializeAccount (&accountmap);
+    } catch (Conf::YamlEmitterException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
+}
+
+
+void SIPAccount::unserialize (Conf::MappingNode *map)
+{
+    Conf::ScalarNode *val;
+    Conf::MappingNode *srtpMap;
+    Conf::MappingNode *tlsMap;
+    Conf::MappingNode *zrtpMap;
+    Conf::MappingNode *credMap;
+
+    _debug ("SipAccount: Unserialize %s", _accountID.c_str());
+
+    val = (Conf::ScalarNode *) (map->getValue (aliasKey));
+
+    if (val) {
+        _alias = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (typeKey));
+
+    if (val) {
+        _type = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (idKey));
+
+    if (val) {
+        _accountID = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (usernameKey));
+
+    if (val) {
+        _username = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (passwordKey));
+
+    if (val) {
+        _password = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (hostnameKey));
+
+    if (val) {
+        _hostname = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (accountEnableKey));
+
+    if (val) {
+        _enabled = (val->getValue() == "false") ? false : true;
+        val = NULL;
+    }
+
+    //  val = (Conf::ScalarNode *)(map->getValue(mailboxKey));
+
+    val = (Conf::ScalarNode *) (map->getValue (codecsKey));
+
+    if (val) {
+        _codecStr = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (ringtonePathKey));
+
+    if (val) {
+        _ringtonePath = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (ringtoneEnabledKey));
+
+    if (val) {
+        _ringtoneEnabled = (val->getValue() == "true") ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (expireKey));
+
+    if (val) {
+        _registrationExpire = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (interfaceKey));
+
+    if (val) {
+        _interface = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (portKey));
+
+    if (val) {
+        _localPort = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    // val = (Conf::ScalarNode *)(map->getValue(mailboxKey));
+    val = (Conf::ScalarNode *) (map->getValue (publishAddrKey));
+
+    if (val) {
+        _publishedIpAddress = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (publishPortKey));
+
+    if (val) {
+        _publishedPort = atoi (val->getValue().data());
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (sameasLocalKey));
+
+    if (val) {
+        _publishedSameasLocal = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (resolveOnceKey));
+
+    if (val) {
+        _resolveOnce = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (dtmfTypeKey));
+
+    if (val) {
+        _dtmfType = (val->getValue() == "overrtp") ? OVERRTP : SIPINFO;
+        val = NULL;
+    }
+
+    // _dtmfType = atoi(val->getValue();
+    val = (Conf::ScalarNode *) (map->getValue (serviceRouteKey));
+
+    if (val) {
+        _serviceRoute = val->getValue();
+        val = NULL;
+    }
+
+    // stun enabled
+    val = (Conf::ScalarNode *) (map->getValue (stunEnabledKey));
+
+    if (val) {
+        _stunEnabled = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (map->getValue (stunServerKey));
+
+    if (val) {
+        _stunServer = val->getValue();
+        val = NULL;
+    }
+
+    // Init stun server name with default server name
+    _stunServerName = pj_str ( (char*) _stunServer.data());
+
+    credMap = (Conf::MappingNode *) (map->getValue (credKey));
+
+    if (credMap)
+        credentials.unserialize (credMap);
+
+    val = (Conf::ScalarNode *) (map->getValue (displayNameKey));
+
+    if (val) {
+        _displayName = val->getValue();
+        val = NULL;
+    }
+
+    // get srtp submap
+    srtpMap = (Conf::MappingNode *) (map->getValue (srtpKey));
+
+    if (!srtpMap)
+        throw SipAccountException (" did not found srtp map");
+
+    val = (Conf::ScalarNode *) (srtpMap->getValue (srtpEnableKey));
+
+    if (val) {
+        _srtpEnabled = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (srtpMap->getValue (keyExchangeKey));
+
+    if (val) {
+        _srtpKeyExchange = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (srtpMap->getValue (rtpFallbackKey));
+
+    if (val) {
+        _srtpFallback = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    // get zrtp submap
+    zrtpMap = (Conf::MappingNode *) (map->getValue (zrtpKey));
+
+    if (!zrtpMap)
+        throw SipAccountException (" did not found zrtp map");
+
+    val = (Conf::ScalarNode *) (zrtpMap->getValue (displaySasKey));
+
+    if (val) {
+        _zrtpDisplaySas = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (zrtpMap->getValue (displaySasOnceKey));
+
+    if (val) {
+        _zrtpDisplaySasOnce = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (zrtpMap->getValue (helloHashEnabledKey));
+
+    if (val) {
+        _zrtpHelloHash = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (zrtpMap->getValue (notSuppWarningKey));
+
+    if (val) {
+        _zrtpNotSuppWarning = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    // get tls submap
+    tlsMap = (Conf::MappingNode *) (map->getValue (tlsKey));
+
+    if (!tlsMap)
+        throw SipAccountException (" did not found tls map");
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (tlsEnableKey));
+
+    if (val) {
+        _tlsEnable = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (tlsPortKey));
+
+    if (val) {
+        _tlsPortStr = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (certificateKey));
+
+    if (val) {
+        _tlsCertificateFile = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (calistKey));
+
+    if (val) {
+        _tlsCaListFile = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (ciphersKey));
+
+    if (val) {
+        _tlsCiphers = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (methodKey));
+
+    if (val) {
+        _tlsMethod = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (timeoutKey));
+
+    if (val) _tlsNegotiationTimeoutSec = val->getValue();
+
+    if (val) {
+        _tlsNegotiationTimeoutMsec = val->getValue();
+        val=NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (tlsPasswordKey));
+
+    if (val) {
+        _tlsPassword = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (privateKeyKey));
+
+    if (val) {
+        _tlsPrivateKeyFile = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (requireCertifKey));
+
+    if (val) {
+        _tlsRequireClientCertificate = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (serverKey));
+
+    if (val) {
+        _tlsServerName = val->getValue();
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (verifyClientKey));
+
+    if (val) {
+        _tlsVerifyServer = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    val = (Conf::ScalarNode *) (tlsMap->getValue (verifyServerKey));
+
+    if (val) {
+        _tlsVerifyClient = (val->getValue().compare ("true") == 0) ? true : false;
+        val = NULL;
+    }
+
+    Account::loadAudioCodecs();
+
+}
+
+
+void SIPAccount::setAccountDetails (const std::map<std::string, std::string>& details)
+{
+
+    std::map<std::string, std::string> map_cpy;
+    std::map<std::string, std::string>::iterator iter;
+
+    _debug ("SipAccount: set account details %s", _accountID.c_str());
+
+    // Work on a copy
+    map_cpy = details;
+
+    std::string alias;
+    std::string type;
+    std::string hostname;
+    std::string username;
+    std::string password;
+    std::string mailbox;
+    std::string accountEnable;
+    std::string ringtonePath;
+    std::string ringtoneEnabled;
+
+    // Account setting common to SIP and IAX
+    find_in_map (CONFIG_ACCOUNT_ALIAS, alias)
+    find_in_map (CONFIG_ACCOUNT_TYPE, type)
+    find_in_map (HOSTNAME, hostname)
+    find_in_map (USERNAME, username)
+    find_in_map (PASSWORD, password)
+    find_in_map (CONFIG_ACCOUNT_MAILBOX, mailbox);
+    find_in_map (CONFIG_ACCOUNT_ENABLE, accountEnable);
+    find_in_map (CONFIG_RINGTONE_PATH, ringtonePath);
+    find_in_map (CONFIG_RINGTONE_ENABLED, ringtoneEnabled);
+
+    setAlias (alias);
+    setType (type);
+    setUsername (username);
+    setHostname (hostname);
+    setPassword (password);
+    setEnabled ( (accountEnable == "true"));
+    setRingtonePath (ringtonePath);
+    setRingtoneEnabled ( (ringtoneEnabled == "true"));
+
+    // SIP specific account settings
+    if (getType() == "SIP") {
+
+        std::string ua_name;
+        std::string realm;
+        std::string routeset;
+        std::string authenticationName;
+
+        std::string resolveOnce;
+        std::string registrationExpire;
+
+        std::string displayName;
+        std::string localInterface;
+        std::string publishedSameasLocal;
+        std::string localAddress;
+        std::string publishedAddress;
+        std::string localPort;
+        std::string publishedPort;
+        std::string stunEnable;
+        std::string stunServer;
+        std::string dtmfType;
+        std::string srtpEnable;
+        std::string srtpRtpFallback;
+        std::string zrtpDisplaySas;
+        std::string zrtpDisplaySasOnce;
+        std::string zrtpNotSuppWarning;
+        std::string zrtpHelloHash;
+        std::string srtpKeyExchange;
+
+        std::string tlsListenerPort;
+        std::string tlsEnable;
+        std::string tlsCaListFile;
+        std::string tlsCertificateFile;
+        std::string tlsPrivateKeyFile;
+        std::string tlsPassword;
+        std::string tlsMethod;
+        std::string tlsCiphers;
+        std::string tlsServerName;
+        std::string tlsVerifyServer;
+        std::string tlsVerifyClient;
+        std::string tlsRequireClientCertificate;
+        std::string tlsNegotiationTimeoutSec;
+        std::string tlsNegotiationTimeoutMsec;
+
+        // general sip settings
+        find_in_map (DISPLAY_NAME, displayName)
+        find_in_map (ROUTESET, routeset)
+        find_in_map (LOCAL_INTERFACE, localInterface)
+        find_in_map (PUBLISHED_SAMEAS_LOCAL, publishedSameasLocal)
+        find_in_map (PUBLISHED_ADDRESS, publishedAddress)
+        find_in_map (LOCAL_PORT, localPort)
+        find_in_map (PUBLISHED_PORT, publishedPort)
+        find_in_map (STUN_ENABLE, stunEnable)
+        find_in_map (STUN_SERVER, stunServer)
+        find_in_map (ACCOUNT_DTMF_TYPE, dtmfType)
+        find_in_map (CONFIG_ACCOUNT_RESOLVE_ONCE, resolveOnce)
+        find_in_map (CONFIG_ACCOUNT_REGISTRATION_EXPIRE, registrationExpire)
+
+        setDisplayName (displayName);
+        setServiceRoute (routeset);
+        setLocalInterface (localInterface);
+        setPublishedSameasLocal ( (publishedSameasLocal.compare ("true") == 0) ? true : false);
+        setPublishedAddress (publishedAddress);
+        setLocalPort (atoi (localPort.data()));
+        setPublishedPort (atoi (publishedPort.data()));
+        setStunServer (stunServer);
+        setStunEnabled ( (stunEnable == "true"));
+        setDtmfType ( (dtmfType == "overrtp") ? OVERRTP : SIPINFO);
+
+        setResolveOnce ( (resolveOnce.compare ("true") ==0) ? true : false);
+        setRegistrationExpire (registrationExpire);
+
+        // sip credential
+        find_in_map (REALM, realm)
+        find_in_map (AUTHENTICATION_USERNAME, authenticationName)
+        find_in_map (USERAGENT, ua_name)
+
+        setUseragent (ua_name);
+
+        // srtp settings
+        find_in_map (SRTP_ENABLE, srtpEnable)
+        find_in_map (SRTP_RTP_FALLBACK, srtpRtpFallback)
+        find_in_map (ZRTP_DISPLAY_SAS, zrtpDisplaySas)
+        find_in_map (ZRTP_DISPLAY_SAS_ONCE, zrtpDisplaySasOnce)
+        find_in_map (ZRTP_NOT_SUPP_WARNING, zrtpNotSuppWarning)
+        find_in_map (ZRTP_HELLO_HASH, zrtpHelloHash)
+        find_in_map (SRTP_KEY_EXCHANGE, srtpKeyExchange)
+
+        setSrtpEnable ( (srtpEnable.compare ("true") == 0) ? true : false);
+        setSrtpFallback ( (srtpRtpFallback.compare ("true") == 0) ? true : false);
+        setZrtpDisplaySas ( (zrtpDisplaySas.compare ("true") == 0) ? true : false);
+        setZrtpDiaplaySasOnce ( (zrtpDisplaySasOnce.compare ("true") == 0) ? true : false);
+        setZrtpNotSuppWarning ( (zrtpNotSuppWarning.compare ("true") == 0) ? true : false);
+        setZrtpHelloHash ( (zrtpHelloHash.compare ("true") == 0) ? true : false);
+        // sipaccount->setSrtpKeyExchange((srtpKeyExchange.compare("true") == 0) ? true : false);
+        setSrtpKeyExchange (srtpKeyExchange);
+
+        // TLS settings
+        // The TLS listener is unique and globally defined through IP2IP_PROFILE
+        if (_accountID == IP2IP_PROFILE) {
+            find_in_map (TLS_LISTENER_PORT, tlsListenerPort)
+        }
+
+        find_in_map (TLS_ENABLE, tlsEnable)
+        find_in_map (TLS_CA_LIST_FILE, tlsCaListFile)
+        find_in_map (TLS_CERTIFICATE_FILE, tlsCertificateFile)
+        find_in_map (TLS_PRIVATE_KEY_FILE, tlsPrivateKeyFile)
+        find_in_map (TLS_PASSWORD, tlsPassword)
+        find_in_map (TLS_METHOD, tlsMethod)
+        find_in_map (TLS_CIPHERS, tlsCiphers)
+        find_in_map (TLS_SERVER_NAME, tlsServerName)
+        find_in_map (TLS_VERIFY_SERVER, tlsVerifyServer)
+        find_in_map (TLS_VERIFY_CLIENT, tlsVerifyClient)
+        find_in_map (TLS_REQUIRE_CLIENT_CERTIFICATE, tlsRequireClientCertificate)
+        find_in_map (TLS_NEGOTIATION_TIMEOUT_SEC, tlsNegotiationTimeoutSec)
+        find_in_map (TLS_NEGOTIATION_TIMEOUT_MSEC, tlsNegotiationTimeoutMsec)
+
+        if (_accountID == IP2IP_PROFILE) {
+            setTlsListenerPort (atoi (tlsListenerPort.data()));
+        }
+
+        setTlsEnable (tlsEnable);
+        setTlsCaListFile (tlsCaListFile);
+        setTlsCertificateFile (tlsCertificateFile);
+        setTlsPrivateKeyFile (tlsPrivateKeyFile);
+        setTlsPassword (tlsPassword);
+        setTlsMethod (tlsMethod);
+        setTlsCiphers (tlsCiphers);
+        setTlsServerName (tlsServerName);
+        setTlsVerifyServer (tlsVerifyServer.compare ("true") ? true : false);
+        setTlsVerifyClient (tlsVerifyServer.compare ("true") ? true : false);
+        setTlsRequireClientCertificate (tlsRequireClientCertificate.compare ("true") ? true : false);
+        setTlsNegotiationTimeoutSec (tlsNegotiationTimeoutSec);
+        setTlsNegotiationTimeoutMsec (tlsNegotiationTimeoutMsec);
+
+        if (!Manager::instance().preferences.getMd5Hash()) {
+            setPassword (password);
+        } else {
+            // Make sure not to re-hash the password field if
+            // it is already saved as a MD5 Hash.
+            // TODO: This test is weak. Fix this.
+            if ( (password.compare (getPassword()) != 0)) {
+                _debug ("SipAccount: Password sent and password from config are different. Re-hashing");
+                std::string hash;
+
+                if (authenticationName.empty()) {
+                    hash = Manager::instance().computeMd5HashFromCredential (username, password, realm);
+                } else {
+                    hash = Manager::instance().computeMd5HashFromCredential (authenticationName, password, realm);
+                }
+
+                setPassword (hash);
+            }
+        }
+    }
+}
+
+std::map<std::string, std::string> SIPAccount::getAccountDetails()
+{
+    _debug ("SipAccount: get account details %s", _accountID.c_str());
+
+    std::map<std::string, std::string> a;
+
+    a.insert (std::pair<std::string, std::string> (ACCOUNT_ID, _accountID));
+    // The IP profile does not allow to set an alias
+    (_accountID == IP2IP_PROFILE) ?
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ALIAS, IP2IP_PROFILE)) :
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ALIAS, getAlias()));
+
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_ENABLE, isEnabled() ? "true" : "false"));
+    a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_TYPE, getType()));
+    a.insert (std::pair<std::string, std::string> (HOSTNAME, getHostname()));
+    a.insert (std::pair<std::string, std::string> (USERNAME, getUsername()));
+    a.insert (std::pair<std::string, std::string> (PASSWORD, getPassword()));
+
+    a.insert (std::pair<std::string, std::string> (CONFIG_RINGTONE_PATH, getRingtonePath()));
+    a.insert (std::pair<std::string, std::string> (CONFIG_RINGTONE_ENABLED, getRingtoneEnabled() ? "true" : "false"));
+
+    RegistrationState state = Unregistered;
+    std::string registrationStateCode;
+    std::string registrationStateDescription;
+
+
+    if (_accountID == IP2IP_PROFILE) {
+        registrationStateCode = EMPTY_FIELD;
+        registrationStateDescription = "Direct IP call";
+    } else {
+        state = getRegistrationState();
+        int code = getRegistrationStateDetailed().first;
+        std::stringstream out;
+        out << code;
+        registrationStateCode = out.str();
+        registrationStateDescription = getRegistrationStateDetailed().second;
+    }
+
+
+    (_accountID == IP2IP_PROFILE) ?
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATUS, "READY")) :
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATUS, Manager::instance().mapStateNumberToString (state)));
+
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATE_CODE, registrationStateCode));
+    a.insert (std::pair<std::string, std::string> (REGISTRATION_STATE_DESCRIPTION, registrationStateDescription));
+
+
+    // Add sip specific details
+    if (getType() == "SIP") {
+
+        a.insert (std::pair<std::string, std::string> (ROUTESET, getServiceRoute()));
+        a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_RESOLVE_ONCE, isResolveOnce() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (REALM, _realm));
+        a.insert (std::pair<std::string, std::string> (USERAGENT, getUseragent()));
+
+        a.insert (std::pair<std::string, std::string> (CONFIG_ACCOUNT_REGISTRATION_EXPIRE, getRegistrationExpire()));
+        a.insert (std::pair<std::string, std::string> (LOCAL_INTERFACE, getLocalInterface()));
+        a.insert (std::pair<std::string, std::string> (PUBLISHED_SAMEAS_LOCAL, getPublishedSameasLocal() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (PUBLISHED_ADDRESS, getPublishedAddress()));
+
+        std::stringstream localport;
+        localport << getLocalPort();
+        a.insert (std::pair<std::string, std::string> (LOCAL_PORT, localport.str()));
+        std::stringstream publishedport;
+        publishedport << getPublishedPort();
+        a.insert (std::pair<std::string, std::string> (PUBLISHED_PORT, publishedport.str()));
+        a.insert (std::pair<std::string, std::string> (STUN_ENABLE, isStunEnabled() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (STUN_SERVER, getStunServer()));
+        a.insert (std::pair<std::string, std::string> (ACCOUNT_DTMF_TYPE, (getDtmfType() == OVERRTP) ? "overrtp" : "sipinfo"));
+
+        a.insert (std::pair<std::string, std::string> (SRTP_KEY_EXCHANGE, getSrtpKeyExchange()));
+        a.insert (std::pair<std::string, std::string> (SRTP_ENABLE, getSrtpEnable() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (SRTP_RTP_FALLBACK, getSrtpFallback() ? "true" : "false"));
+
+        a.insert (std::pair<std::string, std::string> (ZRTP_DISPLAY_SAS, getZrtpDisplaySas() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (ZRTP_DISPLAY_SAS_ONCE, getZrtpDiaplaySasOnce() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (ZRTP_HELLO_HASH, getZrtpHelloHash() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (ZRTP_NOT_SUPP_WARNING, getZrtpNotSuppWarning() ? "true" : "false"));
+
+        // TLS listener is unique and parameters are modified through IP2IP_PROFILE
+        std::stringstream tlslistenerport;
+        tlslistenerport << getTlsListenerPort();
+        a.insert (std::pair<std::string, std::string> (TLS_LISTENER_PORT, tlslistenerport.str()));
+        a.insert (std::pair<std::string, std::string> (TLS_ENABLE, getTlsEnable()));
+        a.insert (std::pair<std::string, std::string> (TLS_CA_LIST_FILE, getTlsCaListFile()));
+        a.insert (std::pair<std::string, std::string> (TLS_CERTIFICATE_FILE, getTlsCertificateFile()));
+        a.insert (std::pair<std::string, std::string> (TLS_PRIVATE_KEY_FILE, getTlsPrivateKeyFile()));
+        a.insert (std::pair<std::string, std::string> (TLS_PASSWORD, getTlsPassword()));
+        a.insert (std::pair<std::string, std::string> (TLS_METHOD, getTlsMethod()));
+        a.insert (std::pair<std::string, std::string> (TLS_CIPHERS, getTlsCiphers()));
+        a.insert (std::pair<std::string, std::string> (TLS_SERVER_NAME, getTlsServerName()));
+        a.insert (std::pair<std::string, std::string> (TLS_VERIFY_SERVER, getTlsVerifyServer() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (TLS_VERIFY_CLIENT, getTlsVerifyClient() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (TLS_REQUIRE_CLIENT_CERTIFICATE, getTlsRequireClientCertificate() ? "true" : "false"));
+        a.insert (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_SEC, getTlsNegotiationTimeoutSec()));
+        a.insert (std::pair<std::string, std::string> (TLS_NEGOTIATION_TIMEOUT_MSEC, getTlsNegotiationTimeoutMsec()));
+
+    }
+
+    return a;
+
+}
+
 
 // void SIPAccount::setVoIPLink(VoIPLink *link) {
-void SIPAccount::setVoIPLink() {
+void SIPAccount::setVoIPLink()
+{
 
     _link = SIPVoIPLink::instance ("");
     dynamic_cast<SIPVoIPLink*> (_link)->incrementClients();
@@ -90,31 +936,28 @@ void SIPAccount::setVoIPLink() {
 
 int SIPAccount::initCredential (void)
 {
-    int credentialCount = 0;
-    credentialCount = Manager::instance().getConfigInt (_accountID, CONFIG_CREDENTIAL_NUMBER);
-    credentialCount += 1;
+    _debug ("SipAccount: Init credential");
 
     bool md5HashingEnabled = false;
     int dataType = 0;
-    md5HashingEnabled = Manager::instance().getConfigBool (PREFERENCES, CONFIG_MD5HASH);
+    md5HashingEnabled = Manager::instance().preferences.getMd5Hash();
     std::string digest;
 
     // Create the credential array
-    pjsip_cred_info * cred_info = (pjsip_cred_info *) malloc (sizeof (pjsip_cred_info) * (credentialCount));
+    pjsip_cred_info * cred_info = (pjsip_cred_info *) malloc (sizeof (pjsip_cred_info) * (getCredentialCount()));
 
     if (cred_info == NULL) {
         _error ("SipAccount: Error: Failed to set cred_info for account %s", _accountID.c_str());
         return !SUCCESS;
     }
 
-    pj_bzero (cred_info, sizeof (pjsip_cred_info) *credentialCount);
+    pj_bzero (cred_info, sizeof (pjsip_cred_info) * getCredentialCount());
 
     // Use authentication username if provided
-    if (!_authenticationUsername.empty()) {
+    if (!_authenticationUsername.empty())
         cred_info[0].username = pj_str (strdup (_authenticationUsername.c_str()));
-    } else {
+    else
         cred_info[0].username = pj_str (strdup (_username.c_str()));
-    }
 
     // Set password
     cred_info[0].data =  pj_str (strdup (_password.c_str()));
@@ -134,23 +977,18 @@ int SIPAccount::initCredential (void)
 
     // Set the datatype
     cred_info[0].data_type = dataType;
-    
+
     // Set the secheme
     cred_info[0].scheme = pj_str ( (char*) "digest");
 
     int i;
 
-    for (i = 1; i < credentialCount; i++) {
-        std::string credentialIndex;
-        std::stringstream streamOut;
-        streamOut << i - 1;
-        credentialIndex = streamOut.str();
-
-        std::string section = std::string ("Credential") + std::string (":") + _accountID + std::string (":") + credentialIndex;
+    // Default credential already initialized, use credentials.getCredentialCount()
+    for (i = 0; i < credentials.getCredentialCount(); i++) {
 
-        std::string username = Manager::instance().getConfigString (section, USERNAME);
-        std::string password = Manager::instance().getConfigString (section, PASSWORD);
-        std::string realm = Manager::instance().getConfigString (section, REALM);
+        std::string username = _username;
+        std::string password = _password;
+        std::string realm = _realm;
 
         cred_info[i].username = pj_str (strdup (username.c_str()));
         cred_info[i].data = pj_str (strdup (password.c_str()));
@@ -174,8 +1012,6 @@ int SIPAccount::initCredential (void)
         _debug ("Setting credential %d realm = %s passwd = %s username = %s data_type = %d", i, realm.c_str(), password.c_str(), username.c_str(), cred_info[i].data_type);
     }
 
-    _credentialCount = credentialCount;
-
     _cred = cred_info;
 
     return SUCCESS;
@@ -184,10 +1020,10 @@ int SIPAccount::initCredential (void)
 
 int SIPAccount::registerVoIPLink()
 {
-    _debug ("Register account %s", getAccountID().c_str());
+    _debug ("Account: Register account %s", getAccountID().c_str());
 
     // Init general settings
-    loadConfig();
+    // loadConfig();
 
     if (_hostname.length() >= PJ_MAX_HOSTNAME) {
         return !SUCCESS;
@@ -197,19 +1033,19 @@ int SIPAccount::registerVoIPLink()
     initCredential();
 
     // Init TLS settings if the user wants to use TLS
-    bool tlsEnabled = Manager::instance().getConfigBool (_accountID, TLS_ENABLE);
-
-    if (tlsEnabled) {
+    if (_tlsEnable == "true") {
+        _debug ("Account: TLS is ennabled for accounr %s", getAccountID().c_str());
         _transportType = PJSIP_TRANSPORT_TLS;
         initTlsConfiguration();
     }
 
     // Init STUN settings for this account if the user selected it
-    bool stunEnabled = Manager::instance().getConfigBool (_accountID, STUN_ENABLE);
 
-    if (stunEnabled) {
+    if (_stunEnabled) {
         _transportType = PJSIP_TRANSPORT_START_OTHER;
         initStunConfiguration ();
+    } else {
+        _stunServerName = pj_str ( (char*) _stunServer.data());
     }
 
     // In our definition of the
@@ -266,6 +1102,8 @@ pjsip_ssl_method SIPAccount::sslMethodStringToPjEnum (const std::string& method)
 
 void SIPAccount::initTlsConfiguration (void)
 {
+    _debug ("SipAccount: Init TLS configuration");
+
     /*
      * Initialize structure to zero
      */
@@ -275,42 +1113,30 @@ void SIPAccount::initTlsConfiguration (void)
     }
 
     // TLS listener is unique and should be only modified through IP2IP_PROFILE
-    std::string tlsPortStr = Manager::instance().getConfigString(_accountID, TLS_LISTENER_PORT);
-    setTlsListenerPort(atoi(tlsPortStr.c_str()));
-    
+
+    // setTlsListenerPort(atoi(tlsPortStr.c_str()));
+    setTlsListenerPort (atoi (_tlsPortStr.c_str()));
+
     _tlsSetting = (pjsip_tls_setting *) malloc (sizeof (pjsip_tls_setting));
 
     assert (_tlsSetting);
 
     pjsip_tls_setting_default (_tlsSetting);
 
-    std::string tlsCaListFile = Manager::instance().getConfigString (_accountID, TLS_CA_LIST_FILE);
-    std::string tlsCertificateFile = Manager::instance().getConfigString (_accountID, TLS_CERTIFICATE_FILE);
-    std::string tlsPrivateKeyFile = Manager::instance().getConfigString (_accountID, TLS_PRIVATE_KEY_FILE);
-    std::string tlsPassword = Manager::instance().getConfigString (_accountID, TLS_PASSWORD);
-    std::string tlsMethod = Manager::instance().getConfigString (_accountID, TLS_METHOD);
-    std::string tlsCiphers = Manager::instance().getConfigString (_accountID, TLS_CIPHERS);
-    std::string tlsServerName = Manager::instance().getConfigString (_accountID, TLS_SERVER_NAME);
-    bool tlsVerifyServer = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_SERVER);
-    bool tlsVerifyClient = Manager::instance().getConfigBool (_accountID, TLS_VERIFY_CLIENT);
-    bool tlsRequireClientCertificate = Manager::instance().getConfigBool (_accountID, TLS_REQUIRE_CLIENT_CERTIFICATE);
-    std::string tlsNegotiationTimeoutSec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_SEC);
-    std::string tlsNegotiationTimeoutMsec = Manager::instance().getConfigString (_accountID, TLS_NEGOTIATION_TIMEOUT_MSEC);
-
-    pj_cstr (&_tlsSetting->ca_list_file, tlsCaListFile.c_str());
-    pj_cstr (&_tlsSetting->cert_file, tlsCertificateFile.c_str());
-    pj_cstr (&_tlsSetting->privkey_file, tlsPrivateKeyFile.c_str());
-    pj_cstr (&_tlsSetting->password, tlsPassword.c_str());
-    _tlsSetting->method = sslMethodStringToPjEnum (tlsMethod);
-    pj_cstr (&_tlsSetting->ciphers, tlsCiphers.c_str());
-    pj_cstr (&_tlsSetting->server_name, tlsServerName.c_str());
-
-    _tlsSetting->verify_server = (tlsVerifyServer == true) ? PJ_TRUE: PJ_FALSE;
-    _tlsSetting->verify_client = (tlsVerifyClient == true) ? PJ_TRUE: PJ_FALSE;
-    _tlsSetting->require_client_cert = (tlsRequireClientCertificate == true) ? PJ_TRUE: PJ_FALSE;
-
-    _tlsSetting->timeout.sec = atol (tlsNegotiationTimeoutSec.c_str());
-    _tlsSetting->timeout.msec = atol (tlsNegotiationTimeoutMsec.c_str());
+    pj_cstr (&_tlsSetting->ca_list_file, _tlsCaListFile.c_str());
+    pj_cstr (&_tlsSetting->cert_file, _tlsCertificateFile.c_str());
+    pj_cstr (&_tlsSetting->privkey_file, _tlsPrivateKeyFile.c_str());
+    pj_cstr (&_tlsSetting->password, _tlsPassword.c_str());
+    _tlsSetting->method = sslMethodStringToPjEnum (_tlsMethod);
+    pj_cstr (&_tlsSetting->ciphers, _tlsCiphers.c_str());
+    pj_cstr (&_tlsSetting->server_name, _tlsServerName.c_str());
+
+    _tlsSetting->verify_server = (_tlsVerifyServer == true) ? PJ_TRUE: PJ_FALSE;
+    _tlsSetting->verify_client = (_tlsVerifyClient == true) ? PJ_TRUE: PJ_FALSE;
+    _tlsSetting->require_client_cert = (_tlsRequireClientCertificate == true) ? PJ_TRUE: PJ_FALSE;
+
+    _tlsSetting->timeout.sec = atol (_tlsNegotiationTimeoutSec.c_str());
+    _tlsSetting->timeout.msec = atol (_tlsNegotiationTimeoutMsec.c_str());
 
 }
 
@@ -319,8 +1145,7 @@ void SIPAccount::initStunConfiguration (void)
     size_t pos;
     std::string stunServer, serverName, serverPort;
 
-    stunServer = Manager::instance().getConfigString (_accountID, STUN_SERVER);
-
+    stunServer = _stunServer;
     // Init STUN socket
     pos = stunServer.find (':');
 
@@ -339,51 +1164,10 @@ void SIPAccount::initStunConfiguration (void)
 
 void SIPAccount::loadConfig()
 {
-    // Load primary credential
-    setUsername (Manager::instance().getConfigString (_accountID, USERNAME));
-    setRouteSet(Manager::instance().getConfigString(_accountID, ROUTESET));
-    setPassword (Manager::instance().getConfigString (_accountID, PASSWORD));
-    _authenticationUsername = Manager::instance().getConfigString (_accountID, AUTHENTICATION_USERNAME);
-    _realm = Manager::instance().getConfigString (_accountID, REALM);
-    _resolveOnce = Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_RESOLVE_ONCE) == "1" ? true : false;
-
-    // Load general account settings
-    setHostname (Manager::instance().getConfigString (_accountID, HOSTNAME));
-
-    if (Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE).empty()) {
+    if (_registrationExpire.empty())
         _registrationExpire = DFT_EXPIRE_VALUE;
-    } else {
-        _registrationExpire = Manager::instance().getConfigString (_accountID, CONFIG_ACCOUNT_REGISTRATION_EXPIRE);
-    }
-
-    // Load network settings
-    // Local parameters
-
-    // Load local interface
-    setLocalInterface(Manager::instance().getConfigString (_accountID, LOCAL_INTERFACE));
-
-    std::string localPort = Manager::instance().getConfigString (_accountID, LOCAL_PORT);
-    setLocalPort (atoi (localPort.c_str()));
-
-
-    // Published parameters
-    setPublishedSameasLocal (Manager::instance().getConfigString (_accountID, PUBLISHED_SAMEAS_LOCAL) == TRUE_STR ? true : false);
-
-    std::string publishedPort = Manager::instance().getConfigString (_accountID, PUBLISHED_PORT);
 
-    setPublishedPort (atoi (publishedPort.c_str()));
-
-    setPublishedAddress (Manager::instance().getConfigString (_accountID, PUBLISHED_ADDRESS));
-
-    if(Manager::instance().getConfigString (_accountID, ACCOUNT_DTMF_TYPE) == OVERRTPSTR)
-    	_dtmfType = OVERRTP;
-	else
-		_dtmfType = SIPINFO;
-
-    // Init TLS settings if the user wants to use TLS
-    bool tlsEnabled = Manager::instance().getConfigBool (_accountID, TLS_ENABLE);
-
-    if (tlsEnabled) {
+    if (_tlsEnable == "true") {
         initTlsConfiguration();
         _transportType = PJSIP_TRANSPORT_TLS;
     } else {
@@ -436,9 +1220,9 @@ std::string SIPAccount::getLoginName (void)
     return username;
 }
 
-std::string SIPAccount::getTransportMapKey(void)
+std::string SIPAccount::getTransportMapKey (void)
 {
-    
+
     std::stringstream out;
     out << getLocalPort();
     std::string localPort = out.str();
@@ -474,7 +1258,7 @@ std::string SIPAccount::getFromUri (void)
 
     // Get machine hostname if not provided
     if (_hostname.empty()) {
-      hostname = getMachineName();
+        hostname = getMachineName();
     }
 
 
@@ -515,7 +1299,7 @@ std::string SIPAccount::getToUri (const std::string& username)
     // Check if hostname is already specified
     if (username.find ("@") == std::string::npos) {
         // hostname not specified
-	hostname = _hostname;
+        hostname = _hostname;
     }
 
     int len = pj_ansi_snprintf (uri, PJSIP_MAX_URL_SIZE,
@@ -578,8 +1362,6 @@ std::string SIPAccount::getContactHeader (const std::string& address, const std:
         transport = "";
     }
 
-    _displayName = Manager::instance().getConfigString (_accountID, DISPLAY_NAME);
-
     _debug ("Display Name: %s", _displayName.c_str());
 
     int len = pj_ansi_snprintf (contact, PJSIP_MAX_URL_SIZE,
diff --git a/sflphone-common/src/sip/sipaccount.h b/sflphone-common/src/sip/sipaccount.h
index 45b34da7d3d37a3e48897c8c90e03a6f1fa04876..6453d8f9b6823f7437c8107a93ae5909700cf82a 100644
--- a/sflphone-common/src/sip/sipaccount.h
+++ b/sflphone-common/src/sip/sipaccount.h
@@ -10,12 +10,12 @@
  *  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.
@@ -41,12 +41,62 @@
 #include "sipvoiplink.h"
 #include "pjsip/sip_transport_tls.h"
 #include "pjsip/sip_types.h"
+#include "config/serializable.h"
+#include <exception>
+#include <map>
 
 enum DtmfType { OVERRTP, SIPINFO};
 
 #define OVERRTPSTR "overrtp"
 #define SIPINFOSTR "sipinfo"
 
+
+// SIP specific configuration keys
+const Conf::Key expireKey ("expire");
+const Conf::Key interfaceKey ("interface");
+const Conf::Key portKey ("port");
+const Conf::Key publishAddrKey ("publishAddr");
+const Conf::Key publishPortKey ("publishPort");
+const Conf::Key sameasLocalKey ("sameasLocal");
+const Conf::Key resolveOnceKey ("resolveOnce");
+const Conf::Key dtmfTypeKey ("dtmfType");
+const Conf::Key serviceRouteKey ("serviceRoute");
+
+// TODO: write an object to store credential which implement serializable
+const Conf::Key srtpKey ("srtp");
+const Conf::Key srtpEnableKey ("enable");
+const Conf::Key keyExchangeKey ("keyExchange");
+const Conf::Key rtpFallbackKey ("rtpFallback");
+
+// TODO: wirte an object to store zrtp params wich implement serializable
+const Conf::Key zrtpKey ("zrtp");
+const Conf::Key displaySasKey ("displaySas");
+const Conf::Key displaySasOnceKey ("displaySasOnce");
+const Conf::Key helloHashEnabledKey ("helloHashEnabled");
+const Conf::Key notSuppWarningKey ("notSuppWarning");
+
+// TODO: write an object to store tls params which implement serializable
+const Conf::Key tlsKey ("tls");
+const Conf::Key tlsPortKey ("tlsPort");
+const Conf::Key certificateKey ("certificate");
+const Conf::Key calistKey ("calist");
+const Conf::Key ciphersKey ("ciphers");
+const Conf::Key tlsEnableKey ("enable");
+const Conf::Key methodKey ("method");
+const Conf::Key timeoutKey ("timeout");
+const Conf::Key tlsPasswordKey ("password");
+const Conf::Key privateKeyKey ("privateKey");
+const Conf::Key requireCertifKey ("requireCertif");
+const Conf::Key serverKey ("server");
+const Conf::Key verifyClientKey ("verifyClient");
+const Conf::Key verifyServerKey ("verifyServer");
+
+const Conf::Key stunEnabledKey ("stunEnabled");
+const Conf::Key stunServerKey ("stunServer");
+
+const Conf::Key credKey ("credential");
+const Conf::Key credentialCountKey ("count");
+
 class SIPVoIPLink;
 
 /**
@@ -54,6 +104,65 @@ class SIPVoIPLink;
  * @brief A SIP Account specify SIP specific functions and object (SIPCall/SIPVoIPLink)
  */
 
+class SipAccountException : public std::exception
+{
+    public:
+        SipAccountException (const std::string& str="") throw() : errstr (str) {}
+
+        virtual ~SipAccountException() throw() {}
+
+        virtual const char *what() const throw() {
+            std::string expt ("SipAccountException occured: ");
+            expt.append (errstr);
+
+            return expt.c_str();
+        }
+    private:
+        std::string errstr;
+
+};
+
+class CredentialItem
+{
+    public:
+
+        std::string username;
+        std::string password;
+        std::string realm;
+};
+
+
+class Credentials : public Serializable
+{
+    public:
+
+        Credentials();
+
+        ~Credentials();
+
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        int getCredentialCount (void) {
+            return credentialCount;
+        }
+        void setCredentialCount (int count) {
+            credentialCount = count;
+        }
+
+        void setNewCredential (std::string username, std::string password, std::string realm);
+        CredentialItem *getCredential (int index);
+
+    private:
+
+        int credentialCount;
+
+        CredentialItem credentialArray[10];
+
+};
+
+
 class SIPAccount : public Account
 {
     public:
@@ -61,43 +170,55 @@ class SIPAccount : public Account
          * Constructor
          * @param accountID The account identifier
          */
-        SIPAccount(const AccountID& accountID);
+        SIPAccount (const AccountID& accountID);
 
         /* Copy Constructor */
-        SIPAccount(const SIPAccount& rh);
+        SIPAccount (const SIPAccount& rh);
 
         /* Assignment Operator */
-        SIPAccount& operator=( const SIPAccount& rh);
+        SIPAccount& operator= (const SIPAccount& rh);
 
         /**
          * Virtual destructor
          */
         virtual ~SIPAccount();
 
-	/**
-	 * Set route header to appears in sip messages for this account
-	 */ 
-	void setRouteSet(std::string route) { _routeSet = route; }
+        virtual void serialize (Conf::YamlEmitter *emitter);
+
+        virtual void unserialize (Conf::MappingNode *map);
+
+        virtual void setAccountDetails (const std::map<std::string, std::string>& details);
 
-	/**
-	 * Get route header to appear in sip messages for this account
-	 */ 
-	std::string getRouteSet(void) { return _routeSet; }
+        virtual std::map<std::string, std::string> getAccountDetails();
 
-	/**
-	 * Special setVoIPLink which increment SipVoIPLink's number of client. 
-	 */
-	// void setVoIPLink(VoIPLink *link);
-	void setVoIPLink();
+        /**
+         * Set route header to appears in sip messages for this account
+         */
+        void setRouteSet (std::string route) {
+            _routeSet = route;
+        }
 
-        /** 
-         * Actually unuseful, since config loading is done in init() 
+        /**
+         * Get route header to appear in sip messages for this account
+         */
+        std::string getRouteSet (void) {
+            return _routeSet;
+        }
+
+        /**
+         * Special setVoIPLink which increment SipVoIPLink's number of client.
+         */
+        // void setVoIPLink(VoIPLink *link);
+        void setVoIPLink();
+
+        /**
+         * Actually useless, since config loading is done in init()
          */
         void loadConfig();
 
         /**
          * Initialize the SIP voip link with the account parameters and send registration
-         */ 
+         */
         int registerVoIPLink();
 
         /**
@@ -105,100 +226,150 @@ class SIPAccount : public Account
          */
         int unregisterVoIPLink();
 
-        inline void setCredInfo(pjsip_cred_info *cred) {_cred = cred;}
-        inline pjsip_cred_info *getCredInfo() {return _cred;}
-              
-        inline std::string& getAuthenticationUsername(void) { return _authenticationUsername; }
-        inline void setAuthenticationUsername(const std::string& username) { _authenticationUsername = username; }
-        
-        inline bool isResolveOnce(void) { return _resolveOnce; }
-        
-
-	/**
-	 * A client sendings a REGISTER request MAY suggest an expiration
-	 * interval that indicates how long the client would like the
-	 * registration to be valid.
-	 *
-	 * @return A string describing the expiration value.
-	 */
-	inline std::string& getRegistrationExpire(void) { return _registrationExpire; }
-
-	/**
-	 * Setting the Expiration Interval of Contact Addresses.
-	 *
-	 * @param A string describing the expiration value.
-	 */ 
-	inline void setRegistrationExpire(std::string expr) { _registrationExpire = expr; }
-
-        bool fullMatch(const std::string& username, const std::string& hostname);
-        bool userMatch(const std::string& username);
-        bool hostnameMatch(const std::string& hostname);
-        
+        inline void setCredInfo (pjsip_cred_info *cred) {
+            _cred = cred;
+        }
+        inline pjsip_cred_info *getCredInfo() {
+            return _cred;
+        }
+
+        inline std::string& getAuthenticationUsername (void) {
+            return _authenticationUsername;
+        }
+        inline void setAuthenticationUsername (const std::string& username) {
+            _authenticationUsername = username;
+        }
+
+        inline bool isResolveOnce (void) {
+            return _resolveOnce;
+        }
+        void setResolveOnce (bool reslv) {
+            _resolveOnce = reslv;
+        }
+
+
+        /**
+         * A client sendings a REGISTER request MAY suggest an expiration
+         * interval that indicates how long the client would like the
+         * registration to be valid.
+         *
+         * @return A string describing the expiration value.
+         */
+        inline std::string& getRegistrationExpire (void) {
+            return _registrationExpire;
+        }
+
+        /**
+         * Setting the Expiration Interval of Contact Addresses.
+         *
+         * @param A string describing the expiration value.
+         */
+        inline void setRegistrationExpire (std::string expr) {
+            _registrationExpire = expr;
+        }
+
+        bool fullMatch (const std::string& username, const std::string& hostname);
+        bool userMatch (const std::string& username);
+        bool hostnameMatch (const std::string& hostname);
+
         /* Registration flag */
-        bool isRegister() {return _bRegister;}
-        void setRegister(bool result) {_bRegister = result;}        
-        
+        bool isRegister() {
+            return _bRegister;
+        }
+        void setRegister (bool result) {
+            _bRegister = result;
+        }
+
         /**
-         * Get the registration stucture that is used 
+         * Get the registration stucture that is used
          * for PJSIP in the registration process.
          * Settings are loaded from configuration file.
          * @param void
          * @return pjsip_regc* A pointer to the registration structure
          */
-        pjsip_regc* getRegistrationInfo( void ) { return _regc; }
-        
-        /** 
+        pjsip_regc* getRegistrationInfo (void) {
+            return _regc;
+        }
+
+        /**
          * Set the registration structure that is used
          * for PJSIP in the registration process;
          * @pram A pointer to the new registration structure
          * @return void
          */
-        void setRegistrationInfo( pjsip_regc *regc ) { _regc = regc; }
+        void setRegistrationInfo (pjsip_regc *regc) {
+            _regc = regc;
+        }
 
         /**
-         * Get the number of credentials defined for 
+         * Get the number of credentials defined for
          * this account.
          * @param none
          * @return int The number of credentials set for this account.
          */
-        inline int getCredentialCount(void) { return _credentialCount; }
-                
+        inline int getCredentialCount (void) {
+            return credentials.getCredentialCount() + 1;
+        }
+        inline void setCredentialCount (int count) {
+            return credentials.setCredentialCount (count);
+        }
+
         /**
          * @return pjsip_tls_setting structure, filled from the configuration
-         * file, that can be used directly by PJSIP to initialize 
+         * file, that can be used directly by PJSIP to initialize
          * TLS transport.
          */
-        inline pjsip_tls_setting * getTlsSetting(void) { return _tlsSetting; }
-		
-		/**
+        inline pjsip_tls_setting * getTlsSetting (void) {
+            return _tlsSetting;
+        }
+
+        /**
          * @return pj_str_t , filled from the configuration
-         * file, that can be used directly by PJSIP to initialize 
+         * file, that can be used directly by PJSIP to initialize
          * an alternate UDP transport.
          */
-        inline pj_str_t getStunServerName(void) { return _stunServerName; }
-	inline void setStunServerName (pj_str_t srv) { _stunServerName = srv; }
+        inline std::string getStunServer (void) {
+            return _stunServer;
+        }
+        inline void setStunServer (std::string srv) {
+            _stunServer = srv;
+        }
+
+        inline pj_str_t getStunServerName (void) {
+            return _stunServerName;
+        }
 
-		/**
+        /**
          * @return pj_uint8_t structure, filled from the configuration
-         * file, that can be used directly by PJSIP to initialize 
+         * file, that can be used directly by PJSIP to initialize
          * an alternate UDP transport.
          */
-        inline pj_uint16_t getStunPort (void) { return _stunPort; }
-	inline void setStunPort (pj_uint16_t port) { _stunPort = port; }
-        
+        inline pj_uint16_t getStunPort (void) {
+            return _stunPort;
+        }
+        inline void setStunPort (pj_uint16_t port) {
+            _stunPort = port;
+        }
+
         /**
-         * @return bool Tells if current transport for that 
+         * @return bool Tells if current transport for that
          * account is set to TLS.
          */
-        inline bool isTlsEnabled(void) { return (_transportType == PJSIP_TRANSPORT_TLS) ? true: false; }
-		
-	/**
-         * @return bool Tells if current transport for that 
-         * account is set to OTHER.
-         */
-        inline bool isStunEnabled(void) { return (_transportType == PJSIP_TRANSPORT_START_OTHER) ? true: false; }
-         
-                
+        inline bool isTlsEnabled (void) {
+            return (_transportType == PJSIP_TRANSPORT_TLS) ? true: false;
+        }
+
+        /**
+             * @return bool Tells if current transport for that
+             * account is set to OTHER.
+             */
+        inline bool isStunEnabled (void) {
+            return (_transportType == PJSIP_TRANSPORT_START_OTHER) ? true: false;
+        }
+        inline void setStunEnabled (bool enabl) {
+            _stunEnabled = enabl;
+        }
+
         /*
          * @return pj_str_t "From" uri based on account information.
          * From RFC3261: "The To header field first and foremost specifies the desired
@@ -208,8 +379,8 @@ class SIPAccount : public Account
          * of the host on which the UA is running, since these are not logical
          * names."
          */
-        std::string getFromUri(void);
-        
+        std::string getFromUri (void);
+
         /*
          * This method adds the correct scheme, hostname and append
          * the ;transport= parameter at the end of the uri, in accordance with RFC3261.
@@ -218,169 +389,358 @@ class SIPAccount : public Account
          * @return pj_str_t "To" uri based on @param username
          * @param username A string formatted as : "username"
          */
-        std::string getToUri(const std::string& username);
+        std::string getToUri (const std::string& username);
 
         /*
-         * In the current version of SFLPhone, "srv" uri is obtained in the preformated 
+         * In the current version of SFLPhone, "srv" uri is obtained in the preformated
          * way: hostname:port. This method adds the correct scheme and append
          * the ;transport= parameter at the end of the uri, in accordance with RFC3261.
          *
          * @return pj_str_t "server" uri based on @param hostPort
          * @param hostPort A string formatted as : "hostname:port"
          */
-        std::string getServerUri(void);
-               
+        std::string getServerUri (void);
+
         /**
          * @param port Optional port. Otherwise set to the port defined for that account.
          * @param hostname Optional local address. Otherwise set to the hostname defined for that account.
          * @return pj_str_t The contact header based on account information
          */
-        std::string getContactHeader(const std::string& address, const std::string& port);
+        std::string getContactHeader (const std::string& address, const std::string& port);
 
-	/**
-	 * Set the interface name on which this account is bound, "default" means 
-	 * that the account is bound to the ANY interafec (0.0.0.0). This method should be
-	 * when binding the account to a new sip transport only.
-	 */
-	inline void setLocalInterface(const std::string& interface) {_interface = interface;}
+        /**
+         * Set the interface name on which this account is bound, "default" means
+         * that the account is bound to the ANY interafec (0.0.0.0). This method should be
+         * when binding the account to a new sip transport only.
+         */
+        inline void setLocalInterface (const std::string& interface) {
+            _interface = interface;
+        }
 
-	/**
-	 * Get the local interface name on which this account is bound.
-	 */
-	inline std::string getLocalInterface(void) { return _interface; }
+        /**
+         * Get the local interface name on which this account is bound.
+         */
+        inline std::string getLocalInterface (void) {
+            return _interface;
+        }
 
-	/**
-	 * Get a flag which determine the usage in sip headers of either the local 
-	 * IP address and port (_localAddress and _localPort) or to an address set 
-	 * manually (_publishedAddress and _publishedPort). 
-	 */ 
-	bool getPublishedSameasLocal(){ return _publishedSameasLocal; }
+        /**
+         * Get a flag which determine the usage in sip headers of either the local
+         * IP address and port (_localAddress and _localPort) or to an address set
+         * manually (_publishedAddress and _publishedPort).
+         */
+        bool getPublishedSameasLocal() {
+            return _publishedSameasLocal;
+        }
 
-	/**
-	 * Set a flag which determine the usage in sip headers of either the local 
-	 * IP address and port (_localAddress and _localPort) or to an address set 
-	 * manually (_publishedAddress and _publishedPort). 
-	 */ 
-	void setPublishedSameasLocal(bool published){ _publishedSameasLocal = published; }
+        /**
+         * Set a flag which determine the usage in sip headers of either the local
+         * IP address and port (_localAddress and _localPort) or to an address set
+         * manually (_publishedAddress and _publishedPort).
+         */
+        void setPublishedSameasLocal (bool published) {
+            _publishedSameasLocal = published;
+        }
 
         /**
          * Get the port on which the transport/listener should use, or is
          * actually using.
          * @return pj_uint16 The port used for that account
-         */   
-        inline pj_uint16_t getLocalPort(void) { return (pj_uint16_t) _localPort; }
-        
-        /** 
+         */
+        inline pj_uint16_t getLocalPort (void) {
+            return (pj_uint16_t) _localPort;
+        }
+
+        /**
          * Set the new port on which this account is running over.
          * @pram port The port used by this account.
          */
-        inline void setLocalPort(pj_uint16_t port) { _localPort = port; }
-                
+        inline void setLocalPort (pj_uint16_t port) {
+            _localPort = port;
+        }
+
         /**
          * Get the published port, which is the port to be advertised as the port
          * for the chosen SIP transport.
          * @return pj_uint16 The port used for that account
-         */   
-        inline pj_uint16_t getPublishedPort(void) { return (pj_uint16_t) _publishedPort; }
-        
-        /** 
+         */
+        inline pj_uint16_t getPublishedPort (void) {
+            return (pj_uint16_t) _publishedPort;
+        }
+
+        /**
          * Set the published port, which is the port to be advertised as the port
          * for the chosen SIP transport.
          * @pram port The port used by this account.
          */
-        inline void setPublishedPort(pj_uint16_t port) { _publishedPort = port; }
+        inline void setPublishedPort (pj_uint16_t port) {
+            _publishedPort = port;
+        }
 
-	/**
-         * Get the local port for TLS listener.
-         * @return pj_uint16 The port used for that account
-         */   
-        inline pj_uint16_t getTlsListenerPort(void) { return (pj_uint16_t) _tlsListenerPort; }
-        
-        /** 
+        /**
+             * Get the local port for TLS listener.
+             * @return pj_uint16 The port used for that account
+             */
+        inline pj_uint16_t getTlsListenerPort (void) {
+            return (pj_uint16_t) _tlsListenerPort;
+        }
+
+        /**
          * Set the local port for TLS listener.
          * @pram port The port used for TLS listener.
          */
-        inline void setTlsListenerPort(pj_uint16_t port) { _tlsListenerPort = port; }
-                
+        inline void setTlsListenerPort (pj_uint16_t port) {
+            _tlsListenerPort = port;
+        }
+
         /**
          * Get the public IP address set by the user for this account.
          * If this setting is not provided, the local bound adddress
          * will be used.
          * @return std::string The public IPV4 address formatted in the standard dot notation.
          */
-        inline std::string getPublishedAddress(void) { return _publishedIpAddress; }
-        
+        inline std::string getPublishedAddress (void) {
+            return _publishedIpAddress;
+        }
+
         /**
          * Set the public IP address to be used in Contact header.
          * @param The public IPV4 address in the standard dot notation.
          * @return void
          */
-        inline void setPublishedAddress(const std::string& publishedIpAddress) { _publishedIpAddress = publishedIpAddress; }
-        
+        inline void setPublishedAddress (const std::string& publishedIpAddress) {
+            _publishedIpAddress = publishedIpAddress;
+        }
+
+        inline std::string getServiceRoute (void) {
+            return _serviceRoute;
+        }
+
+        inline void setServiceRoute (std::string route) {
+            _serviceRoute = route;
+        }
+
         /**
          * Get the chosen transport type.
          * @return pjsip_transport_type_e Transport type chosen by the user for this account.
          */
-        inline pjsip_transport_type_e getTransportType(void) { return _transportType; }
-        
-        inline pjsip_transport* getAccountTransport (void) { return _transport; }
-
-        inline void setAccountTransport (pjsip_transport *transport) { _transport = transport; }
-
-        std::string getTransportMapKey(void);
-
-        DtmfType getDtmfType(void) { return _dtmfType; }
-
-        void setDtmfType(DtmfType type) { _dtmfType = type; }
-
-  private: 
-
-        /* Maps a string description of the SSL method 
+        inline pjsip_transport_type_e getTransportType (void) {
+            return _transportType;
+        }
+
+        inline pjsip_transport* getAccountTransport (void) {
+            return _transport;
+        }
+
+        inline void setAccountTransport (pjsip_transport *transport) {
+            _transport = transport;
+        }
+
+        std::string getTransportMapKey (void);
+
+        DtmfType getDtmfType (void) {
+            return _dtmfType;
+        }
+        void setDtmfType (DtmfType type) {
+            _dtmfType = type;
+        }
+
+        bool getSrtpEnable (void) {
+            return _srtpEnabled;
+        }
+        void setSrtpEnable (bool enabl) {
+            _srtpEnabled = enabl;
+        }
+
+        std::string getSrtpKeyExchange (void) {
+            return _srtpKeyExchange;
+        }
+        void setSrtpKeyExchange (std::string key) {
+            _srtpKeyExchange = key;
+        }
+
+        bool getSrtpFallback (void) {
+            return _srtpFallback;
+        }
+        void setSrtpFallback (bool fallback) {
+            _srtpFallback = fallback;
+        }
+
+        bool getZrtpDisplaySas (void) {
+            return _zrtpDisplaySas;
+        }
+        void setZrtpDisplaySas (bool sas) {
+            _zrtpDisplaySas = sas;
+        }
+
+        bool getZrtpDiaplaySasOnce (void) {
+            return _zrtpDisplaySasOnce;
+        }
+        void setZrtpDiaplaySasOnce (bool sasonce) {
+            _zrtpDisplaySasOnce = sasonce;
+        }
+
+        bool getZrtpNotSuppWarning (void) {
+            return _zrtpNotSuppWarning;
+        }
+        void setZrtpNotSuppWarning (bool warning) {
+            _zrtpNotSuppWarning = warning;
+        }
+
+        bool getZrtpHelloHash (void) {
+            return _zrtpHelloHash;
+        }
+        void setZrtpHelloHash (bool hellohash) {
+            _zrtpHelloHash = hellohash;
+        }
+        // void setSrtpKeyExchange
+
+        std::string getRealm (void) {
+            return _realm;
+        }
+        void setRealm (std::string r) {
+            _realm = r;
+        }
+
+        std::string getTlsEnable (void) {
+            return _tlsEnable;
+        }
+        void setTlsEnable (std::string enabl) {
+            _tlsEnable = enabl;
+        }
+
+        std::string getTlsCaListFile (void) {
+            return _tlsCaListFile;
+        }
+        void setTlsCaListFile (std::string calist) {
+            _tlsCaListFile = calist;
+        }
+
+        std::string getTlsCertificateFile (void) {
+            return _tlsCertificateFile;
+        }
+        void setTlsCertificateFile (std::string cert) {
+            _tlsCertificateFile = cert;
+        }
+
+        std::string getTlsPrivateKeyFile (void) {
+            return _tlsPrivateKeyFile;
+        }
+        void setTlsPrivateKeyFile (std::string priv) {
+            _tlsPrivateKeyFile = priv;
+        }
+
+        std::string getTlsPassword (void) {
+            return _tlsPassword;
+        }
+        void setTlsPassword (std::string pass) {
+            _tlsPassword = pass;
+        }
+
+        std::string getTlsMethod (void) {
+            return _tlsMethod;
+        }
+        void setTlsMethod (std::string meth) {
+            _tlsMethod = meth;
+        }
+
+        std::string getTlsCiphers (void) {
+            return _tlsCiphers;
+        }
+        void setTlsCiphers (std::string cipher) {
+            _tlsCiphers = cipher;
+        }
+
+        std::string getTlsServerName (void) {
+            return _tlsServerName;
+        }
+        void setTlsServerName (std::string name) {
+            _tlsServerName = name;
+        }
+
+        bool getTlsVerifyServer (void) {
+            return _tlsVerifyServer;
+        }
+        void setTlsVerifyServer (bool verif) {
+            _tlsVerifyServer = verif;
+        }
+
+        bool getTlsVerifyClient (void) {
+            return _tlsVerifyClient;
+        }
+        void setTlsVerifyClient (bool verif) {
+            _tlsVerifyClient = verif;
+        }
+
+        bool getTlsRequireClientCertificate (void) {
+            return _tlsRequireClientCertificate;
+        }
+        void setTlsRequireClientCertificate (bool require) {
+            _tlsRequireClientCertificate = require;
+        }
+
+        std::string getTlsNegotiationTimeoutSec (void) {
+            return _tlsNegotiationTimeoutSec;
+        }
+        void setTlsNegotiationTimeoutSec (std::string timeout) {
+            _tlsNegotiationTimeoutSec = timeout;
+        }
+
+        std::string getTlsNegotiationTimeoutMsec (void) {
+            return _tlsNegotiationTimeoutMsec;
+        }
+        void setTlsNegotiationTimeoutMsec (std::string timeout) {
+            _tlsNegotiationTimeoutMsec = timeout;
+        }
+
+    private:
+
+        /* Maps a string description of the SSL method
          * to the corresponding enum value in pjsip_ssl_method.
-         * @param method The string representation 
+         * @param method The string representation
          * @return pjsip_ssl_method The corresponding value in the enum
          */
-        pjsip_ssl_method sslMethodStringToPjEnum(const std::string& method);
-    
+        pjsip_ssl_method sslMethodStringToPjEnum (const std::string& method);
+
         /*
          * Initializes tls settings from configuration file.
          *
-         */  
-        void initTlsConfiguration(void);  
-
-	/*
-	 * Initializes STUN config from the config file
-	 */
-	void initStunConfiguration (void);
- 
+         */
+        void initTlsConfiguration (void);
+
+        /*
+         * Initializes STUN config from the config file
+         */
+        void initStunConfiguration (void);
+
         /*
          * Initializes set of additional credentials, if supplied by the user.
          */
-        int initCredential(void);       
-        
+        int initCredential (void);
+
         /**
-         * If username is not provided, as it happens for Direct ip calls, 
+         * If username is not provided, as it happens for Direct ip calls,
          * fetch the hostname of the machine on which the program is running
          * onto.
          * @return std::string The machine hostname as returned by pj_gethostname()
          */
-        std::string getMachineName(void);
-        
+        std::string getMachineName (void);
+
         /**
-         * If username is not provided, as it happens for Direct ip calls, 
-         * fetch the Real Name field of the user that is currently 
-         * running this program. 
+         * If username is not provided, as it happens for Direct ip calls,
+         * fetch the Real Name field of the user that is currently
+         * running this program.
          * @return std::string The login name under which SFLPhone is running.
-         */ 
-        std::string getLoginName(void);
+         */
+        std::string getLoginName (void);
+
+        std::string _routeSet;
 
-	std::string _routeSet;
-              
 
         // The pjsip client registration information
         pjsip_regc *_regc;
         // To check if the account is registered
-        bool _bRegister; 
+        bool _bRegister;
 
         // Network settings
         std::string _registrationExpire;
@@ -391,45 +751,73 @@ class SIPAccount : public Account
         // Flag which determine if _localIpAddress or _publishedIpAddress is used in
         // sip headers
         bool _publishedSameasLocal;
-                
+
         std::string _publishedIpAddress;
-        
+
         pj_uint16_t _localPort;
         pj_uint16_t _publishedPort;
 
+        std::string _serviceRoute;
+
         /**
          * The global TLS listener port which can be configured through the IP2IP_PROFILE
          */
         pj_uint16_t _tlsListenerPort;
-        
+
         pjsip_transport_type_e _transportType;
 
-	pjsip_transport* _transport;
+        pjsip_transport* _transport;
 
         // Special hack that is not here to stay
         // See #1852
         bool _resolveOnce;
-                        
+
         //Credential information
-        int _credentialCount;        
-        pjsip_cred_info *_cred; 
-        std::string _realm;                       
+        pjsip_cred_info *_cred;
+        std::string _realm;
         std::string _authenticationUsername;
+        Credentials credentials;
 
-        // The TLS settings, if tls is chosen as 
-        // a sip transport. 
-        pjsip_tls_setting * _tlsSetting;	                                                  
+        // The TLS settings, if tls is chosen as
+        // a sip transport.
+        pjsip_tls_setting * _tlsSetting;
 
-        // The STUN server name, if applicable
-        pj_str_t _stunServerName;	                                                  
+        // The STUN server name, if applicable for internal use only
+        pj_str_t _stunServerName;
 
         // The STUN server port, if applicable
         pj_uint16_t _stunPort;
 
         DtmfType _dtmfType;
-        
-        // Display Name that can be used in  SIP URI.        
-        std::string _displayName;        
+
+        std::string _tlsEnable;
+        std::string _tlsPortStr;
+        std::string _tlsCaListFile;
+        std::string _tlsCertificateFile;
+        std::string _tlsPrivateKeyFile;
+        std::string _tlsPassword;
+        std::string _tlsMethod;
+        std::string _tlsCiphers;
+        std::string _tlsServerName;
+        bool _tlsVerifyServer;
+        bool _tlsVerifyClient;
+        bool _tlsRequireClientCertificate;
+        std::string _tlsNegotiationTimeoutSec;
+        std::string _tlsNegotiationTimeoutMsec;
+
+        std::string _stunServer;
+        bool _stunEnabled;
+
+        bool _srtpEnabled;
+        std::string _srtpKeyExchange;
+        bool _srtpFallback;
+
+        bool _zrtpDisplaySas;
+        bool _zrtpDisplaySasOnce;
+        bool _zrtpHelloHash;
+        bool _zrtpNotSuppWarning;
+
+
 };
 
 #endif
diff --git a/sflphone-common/src/sip/sipcall.cpp b/sflphone-common/src/sip/sipcall.cpp
index 78595928dfc0665feba6b6f4b06e8286e2b89910..1317d06071dd0f988d3b4781cead85cc5cc47b28 100644
--- a/sflphone-common/src/sip/sipcall.cpp
+++ b/sflphone-common/src/sip/sipcall.cpp
@@ -44,14 +44,14 @@ SIPCall::SIPCall (const CallID& id, Call::CallType type, pj_pool_t *pool) : Call
         , _invSession (NULL)
         , _local_sdp (0)
 {
-	_debug ("SIPCall: Create new call %s", id.c_str());
+    _debug ("SIPCall: Create new call %s", id.c_str());
 
     _local_sdp = new Sdp (pool);
 }
 
 SIPCall::~SIPCall()
 {
-	_debug ("SIPCall: Delete call");
+    _debug ("SIPCall: Delete call");
 
     delete _audiortp;
     _audiortp = 0;
diff --git a/sflphone-common/src/sip/sipcall.h b/sflphone-common/src/sip/sipcall.h
index 46af03ad2d046c2338d4f8fd404b90103b249c5a..5c4eb4cf5f153184f52934e3c830c6c80f290ade 100644
--- a/sflphone-common/src/sip/sipcall.h
+++ b/sflphone-common/src/sip/sipcall.h
@@ -43,105 +43,132 @@ class AudioCodec;
 class Sdp;
 class AudioRtp;
 
-namespace sfl {
-    class AudioRtpFactory;
+namespace sfl
+{
+class AudioRtpFactory;
 }
 
 /**
  * @file sipcall.h
- * @brief SIPCall are SIP implementation of a normal Call 
+ * @brief SIPCall are SIP implementation of a normal Call
  */
 class SIPCall : public Call
 {
-  public:
-
-    /**
-     * Constructor
-     * @param id	The call identifier
-     * @param type  The type of the call. Could be Incoming
-     *						 Outgoing
-     */
-    SIPCall(const CallID& id, Call::CallType type, pj_pool_t *pool );
-
-    /**
-     * Destructor
-     */
-    ~SIPCall();
-
-    /** 
-     * Call Identifier
-     * @return int  SIP call id
-     */
-    int  getCid() { return _cid; }
-    
-    /** 
-     * Call Identifier
-     * @param cid SIP call id
-     */
-    void setCid(int cid) { _cid = cid ; } 
-    
-    /** 
-     * Domain identifier
-     * @return int  SIP domain id
-     */
-    int  getDid() { return _did; }
-    
-    /** 
-     * Domain identifier
-     * @param did SIP domain id
-     */
-    void setDid(int did) { _did = did; } 
-    
-    /** 
-     * Transaction identifier
-     * @return int  SIP transaction id
-     */
-    int  getTid() { return _tid; }
-
-    
-    
-    
-    /** 
-     * Transaction identifier
-     * @param tid SIP transaction id
-     */
-    void setTid(int tid) { _tid = tid; } 
-
-    void setXferSub(pjsip_evsub* sub) {_xferSub = sub;}
-
-    pjsip_evsub *getXferSub() {return _xferSub;}
-    
-    void setInvSession(pjsip_inv_session* inv) {_invSession = inv;}
-
-    pjsip_inv_session *getInvSession() {return _invSession;}
-    
-    Sdp* getLocalSDP (void) { return _local_sdp; }
-
-    void setLocalSDP (Sdp *local_sdp) { _local_sdp = local_sdp; }
-
-    /** Returns a pointer to the AudioRtp object */
-    inline sfl::AudioRtpFactory * getAudioRtp(void) { return _audiortp; }
-
-  private:
-
-    int _cid;
-    int _did;
-    int _tid;
-
-    // Copy Constructor
-    SIPCall(const SIPCall& rh);
-
-    // Assignment Operator
-    SIPCall& operator=( const SIPCall& rh);
-
-    /** Starting sound */
-    sfl::AudioRtpFactory * _audiortp;
-
-    pjsip_evsub *_xferSub;
-    
-	pjsip_inv_session *_invSession;
-    
-	Sdp *_local_sdp;
+    public:
+
+        /**
+         * Constructor
+         * @param id	The call identifier
+         * @param type  The type of the call. Could be Incoming
+         *						 Outgoing
+         */
+        SIPCall (const CallID& id, Call::CallType type, pj_pool_t *pool);
+
+        /**
+         * Destructor
+         */
+        ~SIPCall();
+
+        /**
+         * Call Identifier
+         * @return int  SIP call id
+         */
+        int  getCid() {
+            return _cid;
+        }
+
+        /**
+         * Call Identifier
+         * @param cid SIP call id
+         */
+        void setCid (int cid) {
+            _cid = cid ;
+        }
+
+        /**
+         * Domain identifier
+         * @return int  SIP domain id
+         */
+        int  getDid() {
+            return _did;
+        }
+
+        /**
+         * Domain identifier
+         * @param did SIP domain id
+         */
+        void setDid (int did) {
+            _did = did;
+        }
+
+        /**
+         * Transaction identifier
+         * @return int  SIP transaction id
+         */
+        int  getTid() {
+            return _tid;
+        }
+
+
+
+
+        /**
+         * Transaction identifier
+         * @param tid SIP transaction id
+         */
+        void setTid (int tid) {
+            _tid = tid;
+        }
+
+        void setXferSub (pjsip_evsub* sub) {
+            _xferSub = sub;
+        }
+
+        pjsip_evsub *getXferSub() {
+            return _xferSub;
+        }
+
+        void setInvSession (pjsip_inv_session* inv) {
+            _invSession = inv;
+        }
+
+        pjsip_inv_session *getInvSession() {
+            return _invSession;
+        }
+
+        Sdp* getLocalSDP (void) {
+            return _local_sdp;
+        }
+
+        void setLocalSDP (Sdp *local_sdp) {
+            _local_sdp = local_sdp;
+        }
+
+        /** Returns a pointer to the AudioRtp object */
+        inline sfl::AudioRtpFactory * getAudioRtp (void) {
+            return _audiortp;
+        }
+
+    private:
+
+        int _cid;
+        int _did;
+        int _tid;
+
+        // Copy Constructor
+        SIPCall (const SIPCall& rh);
+
+        // Assignment Operator
+        SIPCall& operator= (const SIPCall& rh);
+
+        /** Starting sound */
+        sfl::AudioRtpFactory * _audiortp;
+
+        pjsip_evsub *_xferSub;
+
+        pjsip_inv_session *_invSession;
+
+        Sdp *_local_sdp;
 
 };
 
diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index af3abb288619c08c9cbf9c2c0c1af7382e875bbe..8f63cf5e1daeee2eb93f010f8f8743082bb13642 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -45,6 +45,8 @@
 #include "dbus/dbusmanager.h"
 #include "dbus/callmanager.h"
 
+#include "im/InstantMessaging.h"
+
 #include "pjsip/sip_endpoint.h"
 #include "pjsip/sip_transport_tls.h"
 #include "pjsip/sip_transport_tls.h"
@@ -65,6 +67,8 @@
 
 #define CAN_REINVITE        1
 
+using namespace sfl;
+
 static char * invitationStateMap[] = {
     (char*) "PJSIP_INV_STATE_NULL",
     (char*) "PJSIP_INV_STATE_CALLING",
@@ -215,7 +219,7 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
 
 void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer);
 
-void on_create_offer(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer);
+void on_create_offer (pjsip_inv_session *inv, pjmedia_sdp_session **p_offer);
 
 /*
  * Registration callback
@@ -245,7 +249,7 @@ pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata UNUSED) ;
     * Send an ACK message inside a transaction. PJSIP send automatically, non-2xx ACK response.
     * ACK for a 2xx response must be send using this method.
     */
-static void sendAck(pjsip_dialog *dlg, pjsip_rx_data *rdata);
+static void sendAck (pjsip_dialog *dlg, pjsip_rx_data *rdata);
 
 /*
  * Transfer callbacks
@@ -266,6 +270,8 @@ SIPVoIPLink::SIPVoIPLink (const AccountID& accountID)
         , _regPort (atoi (DEFAULT_SIP_PORT))
         , _clients (0)
 {
+
+    _debug ("SIPVOIPLINK");
     // to get random number for RANDOM_PORT
     srand (time (NULL));
 
@@ -277,9 +283,10 @@ SIPVoIPLink::SIPVoIPLink (const AccountID& accountID)
 
 SIPVoIPLink::~SIPVoIPLink()
 {
-    _debug("UserAgent: SIPVoIPLink destructor called");
+    _debug ("UserAgent: SIPVoIPLink destructor called");
 
     terminate();
+
 }
 
 SIPVoIPLink* SIPVoIPLink::instance (const AccountID& id)
@@ -299,7 +306,7 @@ void SIPVoIPLink::decrementClients (void)
 
     if (_clients == 0) {
 
-        _debug("UserAgent: No SIP account anymore, terminate SIPVoIPLink");
+        _debug ("UserAgent: No SIP account anymore, terminate SIPVoIPLink");
         // terminate();
         delete SIPVoIPLink::_instance;
     }
@@ -332,17 +339,19 @@ SIPVoIPLink::terminate()
 
     if (_evThread) {
         _debug ("UserAgent: Deleting sip eventThread");
-        delete _evThread; _evThread = NULL;
+        delete _evThread;
+        _evThread = NULL;
     }
 
 
     /* Clean shutdown of pjsip library */
     if (initDone()) {
-        _debug ("UserAgent: Shuting down PJSIP");
+        _debug ("UserAgent: Shutting down PJSIP");
         pjsip_shutdown();
     }
 
     initDone (false);
+
 }
 
 void
@@ -370,7 +379,7 @@ SIPVoIPLink::terminateSIPCall()
 void
 SIPVoIPLink::terminateOneCall (const CallID& id)
 {
-	_debug("UserAgent: Terminate call %s", id.c_str());
+    _debug ("UserAgent: Terminate call %s", id.c_str());
 
     SIPCall *call = getSIPCall (id);
 
@@ -405,7 +414,8 @@ void get_remote_sdp_from_offer (pjsip_rx_data *rdata, pjmedia_sdp_session** r_sd
 }
 
 
-std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
+std::string SIPVoIPLink::getInterfaceAddrFromName (std::string ifaceName)
+{
 
     struct ifreq ifr;
     int fd;
@@ -414,23 +424,23 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
     struct sockaddr_in *saddr_in;
     struct in_addr *addr_in;
 
-    if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
-        _error("UserAgent: Error: could not open socket");
+    if ( (fd = socket (AF_INET, SOCK_DGRAM,0)) < 0)
+        _error ("UserAgent: Error: could not open socket");
 
     memset (&ifr, 0, sizeof (struct ifreq));
 
     strcpy (ifr.ifr_name, ifaceName.c_str());
     ifr.ifr_addr.sa_family = AF_INET;
 
-    if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0)
-        _debug("UserAgent: Use default interface (0.0.0.0)");
-    
-    saddr_in = (struct sockaddr_in *)&ifr.ifr_addr;
-    addr_in = &(saddr_in->sin_addr);
+    if ( (err = ioctl (fd, SIOCGIFADDR, &ifr)) < 0)
+        _debug ("UserAgent: Use default interface (0.0.0.0)");
+
+    saddr_in = (struct sockaddr_in *) &ifr.ifr_addr;
+    addr_in = & (saddr_in->sin_addr);
 
-    std::string addr(pj_inet_ntoa(*((pj_in_addr*)addr_in)));
+    std::string addr (pj_inet_ntoa (* ( (pj_in_addr*) addr_in)));
 
-    close(fd);
+    close (fd);
 
     return addr;
 }
@@ -438,17 +448,21 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) {
 
 std::string SIPVoIPLink::get_useragent_name (const AccountID& id)
 {
-	/*
+    /*
     useragent << PROGNAME << "/" << SFLPHONED_VERSION;
     return useragent.str();
-	*/
+    */
+
+    SIPAccount *account = (SIPAccount *) Manager::instance().getAccount (id);
+
     std::ostringstream  useragent;
-	
-	useragent << Manager::instance ().getConfigString (id, USERAGENT);
-	if (useragent.str() == "sflphone" || useragent.str() == "")
-		useragent << "/" << SFLPHONED_VERSION;
 
-	return useragent.str ();
+    useragent << account->getUseragent();
+
+    if (useragent.str() == "sflphone" || useragent.str() == "")
+        useragent << "/" << SFLPHONED_VERSION;
+
+    return useragent.str ();
 }
 
 void
@@ -530,17 +544,17 @@ int SIPVoIPLink::sendRegister (AccountID id)
     }
 
 
-    // Create SIP transport or get existent SIP transport from internal map 
+    // Create SIP transport or get existent SIP transport from internal map
     // according to account settings, if the transport could not be created but
-    // one is already set in account, use this one (most likely this is the 
-    // transport we tried to create) 
-    acquireTransport(account->getAccountID());
+    // one is already set in account, use this one (most likely this is the
+    // transport we tried to create)
+    acquireTransport (account->getAccountID());
 
     if (account->getAccountTransport()) {
-       _debug("Acquire transport in account registration: %s %s (refcnt=%d)",
-	      account->getAccountTransport()->obj_name,
-	      account->getAccountTransport()->info,
-	      (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+        _debug ("Acquire transport in account registration: %s %s (refcnt=%d)",
+                account->getAccountTransport()->obj_name,
+                account->getAccountTransport()->info,
+                (int) pj_atomic_get (account->getAccountTransport()->ref_cnt));
     }
 
     _mutexSIP.enterMutex();
@@ -583,7 +597,7 @@ int SIPVoIPLink::sendRegister (AccountID id)
 
     std::string contactUri = account->getContactHeader (address, portStr);
 
-    _debug ("sendRegister: fromUri: %s serverUri: %s contactUri: %s",
+    _debug ("UserAgent: sendRegister: fromUri: %s serverUri: %s contactUri: %s",
             fromUri.c_str(),
             srvUri.c_str(),
             contactUri.c_str());
@@ -600,31 +614,24 @@ int SIPVoIPLink::sendRegister (AccountID id)
     // Initializes registration
 
     // Set Route for registration passing throught one or several proxies
-    status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value);
+    // status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value);
 
-    /*
-    if(!(account->getDomainName().empty())) {
+    status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value);
 
-        _error("Set route with %s", account->getHostname().c_str());
+    if (! (account->getServiceRoute().empty())) {
 
-        pjsip_route_hdr *route_set = pjsip_route_hdr_create(_pool);
-        pjsip_route_hdr *routing = pjsip_route_hdr_create(_pool);
-        pjsip_sip_uri *url = pjsip_sip_uri_create(_pool, 0);
-        routing->name_addr.uri = (pjsip_uri*)url;
-        pj_strdup2(_pool, &url->host, account->getHostname().c_str());
+        _error ("UserAgent: Set Service-Route with %s", account->getServiceRoute().c_str());
 
-        pj_list_push_back(&route_set, pjsip_hdr_clone(_pool, routing));
+        pjsip_route_hdr *route_set = pjsip_route_hdr_create (_pool);
+        pjsip_route_hdr *routing = pjsip_route_hdr_create (_pool);
+        pjsip_sip_uri *url = pjsip_sip_uri_create (_pool, 0);
+        routing->name_addr.uri = (pjsip_uri*) url;
+        pj_strdup2 (_pool, &url->host, account->getServiceRoute().c_str());
 
-	status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value);
+        pj_list_push_back (&route_set, pjsip_hdr_clone (_pool, routing));
 
-        pjsip_regc_set_route_set(regc, route_set);
+        pjsip_regc_set_route_set (regc, route_set);
     }
-    else {
-
-        status = pjsip_regc_init (regc, &pjSrv, &pjFrom, &pjFrom, 1, &pjContact, expire_value);
-    }
-    */
-
 
     if (status != PJ_SUCCESS) {
         _debug ("UserAgent: Unable to initialize account %d in sendRegister", status);
@@ -635,7 +642,7 @@ int SIPVoIPLink::sendRegister (AccountID id)
     pjsip_cred_info *cred = account->getCredInfo();
 
     int credential_count = account->getCredentialCount();
-    _debug ("setting %d credentials in sendRegister", credential_count);
+    _debug ("UserAgent: setting %d credentials in sendRegister", credential_count);
     pjsip_regc_set_credentials (regc, credential_count, cred);
 
     // Add User-Agent Header
@@ -649,7 +656,7 @@ int SIPVoIPLink::sendRegister (AccountID id)
     // pj_list_push_back (&hdr_list, (pjsip_hdr*) routing);
 
     pjsip_regc_add_headers (regc, &hdr_list);
-    
+
     status = pjsip_regc_register (regc, PJ_TRUE, &tdata);
 
     if (status != PJ_SUCCESS) {
@@ -660,20 +667,20 @@ int SIPVoIPLink::sendRegister (AccountID id)
 
     pjsip_tpselector *tp;
 
-    init_transport_selector (account->getAccountTransport (), &tp); 
-    
+    init_transport_selector (account->getAccountTransport (), &tp);
+
     // pjsip_regc_set_transport increments transport ref count by one
     status = pjsip_regc_set_transport (regc, tp);
 
-    if(account->getAccountTransport()) {
-        // decrease transport's ref count, counter icrementation is 
-        // managed when acquiring transport 
-        pjsip_transport_dec_ref(account->getAccountTransport ());
+    if (account->getAccountTransport()) {
+        // decrease transport's ref count, counter icrementation is
+        // managed when acquiring transport
+        pjsip_transport_dec_ref (account->getAccountTransport ());
 
-        _debug("After setting the transport in account registration using transport: %s %s (refcnt=%d)",
-	       account->getAccountTransport()->obj_name,
-	       account->getAccountTransport()->info,
-	       (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+        _debug ("UserAgent: After setting the transport in account registration using transport: %s %s (refcnt=%d)",
+                account->getAccountTransport()->obj_name,
+                account->getAccountTransport()->info,
+                (int) pj_atomic_get (account->getAccountTransport()->ref_cnt));
     }
 
     if (status != PJ_SUCCESS) {
@@ -683,14 +690,14 @@ int SIPVoIPLink::sendRegister (AccountID id)
     }
 
     // Send registration request
-    // pjsip_regc_send increment the transport ref count by one, 
+    // pjsip_regc_send increment the transport ref count by one,
     status = pjsip_regc_send (regc, tdata);
 
-    if(account->getAccountTransport()) {
-        // Decrease transport's ref count, since coresponding reference counter decrementation 
+    if (account->getAccountTransport()) {
+        // Decrease transport's ref count, since coresponding reference counter decrementation
         // is performed in pjsip_regc_destroy. This function is never called in SFLphone as the
         // regc data structure is permanently associated to the account at first registration.
-        pjsip_transport_dec_ref(account->getAccountTransport ());
+        pjsip_transport_dec_ref (account->getAccountTransport ());
     }
 
     if (status != PJ_SUCCESS) {
@@ -703,12 +710,12 @@ int SIPVoIPLink::sendRegister (AccountID id)
 
     account->setRegistrationInfo (regc);
 
-    if(account->getAccountTransport()) {
+    if (account->getAccountTransport()) {
 
-        _debug("Sent account registration using transport: %s %s (refcnt=%d)",
-	       account->getAccountTransport()->obj_name,
-	       account->getAccountTransport()->info,
-	       (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+        _debug ("Sent account registration using transport: %s %s (refcnt=%d)",
+                account->getAccountTransport()->obj_name,
+                account->getAccountTransport()->info,
+                (int) pj_atomic_get (account->getAccountTransport()->ref_cnt));
     }
 
     return true;
@@ -727,12 +734,12 @@ SIPVoIPLink::sendUnregister (AccountID id)
     regc = account->getRegistrationInfo();
 
     // If an transport is attached to this account, detach it and decrease reference counter
-    if(account->getAccountTransport()) {
+    if (account->getAccountTransport()) {
 
-        _debug("Sent account unregistration using transport: %s %s (refcnt=%d)",
-	       account->getAccountTransport()->obj_name,
-	       account->getAccountTransport()->info,
-	       (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+        _debug ("Sent account unregistration using transport: %s %s (refcnt=%d)",
+                account->getAccountTransport()->obj_name,
+                account->getAccountTransport()->info,
+                (int) pj_atomic_get (account->getAccountTransport()->ref_cnt));
 
     }
 
@@ -749,7 +756,7 @@ SIPVoIPLink::sendUnregister (AccountID id)
             _debug ("UserAgent: Unable to unregister regc.");
             return false;
         }
- 
+
         status = pjsip_regc_send (regc, tdata);
 
         if (status != PJ_SUCCESS) {
@@ -774,7 +781,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
     pj_status_t status;
     std::string localAddr, addrSdp;
 
-    _debug("UserAgent: New outgoing call %s to %s", id.c_str(), toUrl.c_str());
+    _debug ("UserAgent: New outgoing call %s to %s", id.c_str(), toUrl.c_str());
 
     SIPCall* call = new SIPCall (id, Call::Outgoing, _pool);
 
@@ -794,9 +801,9 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
 
         call->setPeerNumber (toUri);
 
-        localAddr = getInterfaceAddrFromName(account->getLocalInterface ());
+        localAddr = getInterfaceAddrFromName (account->getLocalInterface ());
 
-	_debug("UserAgent: Local address for call: %s", localAddr.c_str());
+        _debug ("UserAgent: Local address for call: %s", localAddr.c_str());
 
         if (localAddr == "0.0.0.0")
             loadSIPLocalIP (&localAddr);
@@ -804,7 +811,7 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
         setCallAudioLocal (call, localAddr);
 
         // May use the published address as well
-        account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName(account->getLocalInterface ());
+        account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = getInterfaceAddrFromName (account->getLocalInterface ());
 
         if (addrSdp == "0.0.0.0")
             loadSIPLocalIP (&addrSdp);
@@ -817,7 +824,8 @@ SIPVoIPLink::newOutgoingCall (const CallID& id, const std::string& toUrl)
             _error ("UserAgent: Error: Failed to create rtp thread from newOutGoingCall");
         }
 
-        call->initRecFileName();
+        // init file name according to peer phone number
+        call->initRecFileName (toUrl);
 
         _debug ("UserAgent: Try to make a call to: %s with call ID: %s", toUrl.data(), id.data());
 
@@ -957,7 +965,7 @@ SIPVoIPLink::peerHungup (const CallID& id)
     pjsip_tx_data *tdata = NULL;
     SIPCall* call;
 
-    _info("UserAgent: Peer hungup");
+    _info ("UserAgent: Peer hungup");
 
     call = getSIPCall (id);
 
@@ -1000,12 +1008,12 @@ SIPVoIPLink::peerHungup (const CallID& id)
 bool
 SIPVoIPLink::cancel (const CallID& id)
 {
-	_info ("UserAgent: Cancel call %s", id.c_str());
+    _info ("UserAgent: Cancel call %s", id.c_str());
 
     SIPCall* call = getSIPCall (id);
 
     if (!call) {
-        _warn("UserAgent: Error: Call doesn't exist");
+        _warn ("UserAgent: Error: Call doesn't exist");
         return false;
     }
 
@@ -1048,6 +1056,44 @@ SIPVoIPLink::onhold (const CallID& id)
     return true;
 }
 
+bool
+SIPVoIPLink::sendTextMessage (sfl::InstantMessaging *module, const std::string& callID, const std::string& message, const std::string& from)
+{
+    _debug ("SipVoipLink: Send text message to %s, from %s", callID.c_str(), from.c_str());
+
+    SIPCall *call = getSIPCall (callID);
+    pj_status_t status = !PJ_SUCCESS;
+
+
+    if (call) {
+        std::string formatedFrom = from;
+
+        // add double quotes for xml formating
+        formatedFrom.insert (0,"\"");
+        formatedFrom.append ("\"");
+
+        /* Send IM message */
+        sfl::InstantMessaging::UriList list;
+
+        sfl::InstantMessaging::UriEntry entry;
+        entry[sfl::IM_XML_URI] = std::string (formatedFrom);
+
+        list.push_front (entry);
+
+        std::string formatedMessage = module->appendUriList (message, list);
+
+        status = module->send_sip_message (call->getInvSession (), (CallID&) callID, formatedMessage);
+
+    } else {
+        /* Notify the client of an error */
+        /*Manager::instance ().incomingMessage (	"",
+        										"sflphoned",
+        										"Unable to send a message outside a call.");*/
+    }
+
+    return status;
+}
+
 int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction)
 {
 
@@ -1065,7 +1111,7 @@ int SIPVoIPLink::inv_session_reinvite (SIPCall *call, std::string direction)
 
     // Reinvite only if connected
     // Build the local SDP offer
-	// TODO Restore Re-Invite
+    // TODO Restore Re-Invite
     // status = call->getLocalSDP()->create_initial_offer();
 
     // if (status != PJ_SUCCESS)
@@ -1146,7 +1192,7 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id));
 
     if (!account) {
-        _error("UserAgent: Error: Transfer account is null. Returning.");
+        _error ("UserAgent: Error: Transfer account is null. Returning.");
         return false;
     }
 
@@ -1195,9 +1241,9 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
     }
 
     // Put SIP call id in map in order to retrieve call during transfer callback
-    std::string callidtransfer(call->getInvSession()->dlg->call_id->id.ptr, call->getInvSession()->dlg->call_id->id.slen);
-    _debug("%s", callidtransfer.c_str());
-    transferCallID.insert(std::pair<std::string, CallID>(callidtransfer, call->getCallId()));
+    std::string callidtransfer (call->getInvSession()->dlg->call_id->id.ptr, call->getInvSession()->dlg->call_id->id.slen);
+    _debug ("%s", callidtransfer.c_str());
+    transferCallID.insert (std::pair<std::string, CallID> (callidtransfer, call->getCallId()));
 
 
     /* Send. */
@@ -1214,8 +1260,8 @@ SIPVoIPLink::transfer (const CallID& id, const std::string& to)
 bool SIPVoIPLink::transferStep2 (SIPCall* call)
 {
 
-	// TODO is this the best way to proceed?
-	Manager::instance().peerHungupCall(call->getCallId());
+    // TODO is this the best way to proceed?
+    Manager::instance().peerHungupCall (call->getCallId());
 
 
 
@@ -1229,7 +1275,7 @@ SIPVoIPLink::refuse (const CallID& id)
     pj_status_t status;
     pjsip_tx_data *tdata;
 
-    _debug("UserAgent: Refuse call %s", id.c_str());
+    _debug ("UserAgent: Refuse call %s", id.c_str());
 
     call = getSIPCall (id);
 
@@ -1257,9 +1303,11 @@ SIPVoIPLink::refuse (const CallID& id)
 
     call->getInvSession()->mod_data[getModId() ] = NULL;
 
+    removeCall (id);
+
     terminateOneCall (id);
 
-    _debug("UserAgent: Refuse call completed");
+    _debug ("UserAgent: Refuse call completed");
 
     return true;
 }
@@ -1294,23 +1342,23 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code)
         return false;
     }
 
-    AccountID accountID = Manager::instance().getAccountFromCall(id);
-    SIPAccount *account = static_cast<SIPAccount *>(Manager::instance().getAccount(accountID));
+    AccountID accountID = Manager::instance().getAccountFromCall (id);
+    SIPAccount *account = static_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
-    if(!account) {
-    	_error ("UserAgent: Error: Account not found while sending DTMF");
-    	return false;
+    if (!account) {
+        _error ("UserAgent: Error: Account not found while sending DTMF");
+        return false;
     }
 
     DtmfType type = account->getDtmfType();
 
-    if(type == OVERRTP)
-    	dtmfOverRtp(call, code);
-    else if(type == SIPINFO)
-    	dtmfSipInfo(call, code);
+    if (type == OVERRTP)
+        dtmfOverRtp (call, code);
+    else if (type == SIPINFO)
+        dtmfSipInfo (call, code);
     else {
-    	_error("UserAgent: Error: Dtmf type does not exist");
-    	return false;
+        _error ("UserAgent: Error: Dtmf type does not exist");
+        return false;
     }
 
     return true;
@@ -1318,69 +1366,69 @@ SIPVoIPLink::carryingDTMFdigits (const CallID& id, char code)
 
 
 bool
-SIPVoIPLink::dtmfSipInfo(SIPCall *call, char code)
+SIPVoIPLink::dtmfSipInfo (SIPCall *call, char code)
 {
 
-	int duration;
-	const int body_len = 1000;
-	char *dtmf_body;
-	pj_status_t status;
-	pjsip_tx_data *tdata;
-	pj_str_t methodName, content;
-	pjsip_method method;
-	pjsip_media_type ctype;
+    int duration;
+    const int body_len = 1000;
+    char *dtmf_body;
+    pj_status_t status;
+    pjsip_tx_data *tdata;
+    pj_str_t methodName, content;
+    pjsip_method method;
+    pjsip_media_type ctype;
 
 
-	duration = Manager::instance().getConfigInt (SIGNALISATION, PULSE_LENGTH);
+    duration = Manager::instance().voipPreferences.getPulseLength();
 
-	dtmf_body = new char[body_len];
+    dtmf_body = new char[body_len];
 
-	snprintf (dtmf_body, body_len - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration);
+    snprintf (dtmf_body, body_len - 1, "Signal=%c\r\nDuration=%d\r\n", code, duration);
 
-	pj_strdup2 (_pool, &methodName, "INFO");
-	pjsip_method_init_np (&method, &methodName);
+    pj_strdup2 (_pool, &methodName, "INFO");
+    pjsip_method_init_np (&method, &methodName);
 
-	/* Create request message. */
-	status = pjsip_dlg_create_request (call->getInvSession()->dlg, &method, -1, &tdata);
+    /* Create request message. */
+    status = pjsip_dlg_create_request (call->getInvSession()->dlg, &method, -1, &tdata);
 
-	if (status != PJ_SUCCESS) {
-		_debug ("UserAgent: Unable to create INFO request -- %d", status);
-		return false;
-	}
+    if (status != PJ_SUCCESS) {
+        _debug ("UserAgent: Unable to create INFO request -- %d", status);
+        return false;
+    }
 
-	/* Get MIME type */
-	pj_strdup2 (_pool, &ctype.type, "application");
+    /* Get MIME type */
+    pj_strdup2 (_pool, &ctype.type, "application");
 
-	pj_strdup2 (_pool, &ctype.subtype, "dtmf-relay");
+    pj_strdup2 (_pool, &ctype.subtype, "dtmf-relay");
 
-	/* Create "application/dtmf-relay" message body. */
-	pj_strdup2 (_pool, &content, dtmf_body);
+    /* Create "application/dtmf-relay" message body. */
+    pj_strdup2 (_pool, &content, dtmf_body);
 
-	tdata->msg->body = pjsip_msg_body_create (tdata->pool, &ctype.type, &ctype.subtype, &content);
+    tdata->msg->body = pjsip_msg_body_create (tdata->pool, &ctype.type, &ctype.subtype, &content);
 
-	if (tdata->msg->body == NULL) {
-		_debug ("UserAgent: Unable to create msg body!");
-		pjsip_tx_data_dec_ref (tdata);
-		return false;
-	}
+    if (tdata->msg->body == NULL) {
+        _debug ("UserAgent: Unable to create msg body!");
+        pjsip_tx_data_dec_ref (tdata);
+        return false;
+    }
 
-	/* Send the request. */
-	status = pjsip_dlg_send_request (call->getInvSession()->dlg, tdata, getModId(), NULL);
+    /* Send the request. */
+    status = pjsip_dlg_send_request (call->getInvSession()->dlg, tdata, getModId(), NULL);
 
-	if (status != PJ_SUCCESS) {
-		_debug ("UserAgent: Unable to send MESSAGE request -- %d", status);
-		return false;
-	}
+    if (status != PJ_SUCCESS) {
+        _debug ("UserAgent: Unable to send MESSAGE request -- %d", status);
+        return false;
+    }
 
-	return true;
+    return true;
 }
 
 bool
-SIPVoIPLink::dtmfOverRtp(SIPCall* call, char code)
+SIPVoIPLink::dtmfOverRtp (SIPCall* call, char code)
 {
-	call->getAudioRtp()->sendDtmfDigit(atoi(&code));
+    call->getAudioRtp()->sendDtmfDigit (atoi (&code));
 
-	return true;
+    return true;
 }
 
 
@@ -1407,7 +1455,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
 
     AccountID id;
 
-    _debug("UserAgent: Start sip call");
+    _debug ("UserAgent: Start sip call");
 
     if (call == NULL)
         return false;
@@ -1471,6 +1519,22 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
     // Create the invite session for this call
     status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv);
 
+
+    if (! (account->getServiceRoute().empty())) {
+
+        _error ("UserAgent: Set Service-Route with %s", account->getServiceRoute().c_str());
+
+        pjsip_route_hdr *route_set = pjsip_route_hdr_create (_pool);
+        pjsip_route_hdr *routing = pjsip_route_hdr_create (_pool);
+        pjsip_sip_uri *url = pjsip_sip_uri_create (_pool, 0);
+        routing->name_addr.uri = (pjsip_uri*) url;
+        pj_strdup2 (_pool, &url->host, account->getServiceRoute().c_str());
+
+        pj_list_push_back (&route_set, pjsip_hdr_clone (_pool, routing));
+
+        pjsip_dlg_set_route_set (dialog, route_set);
+    }
+
     PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
 
     // Set auth information
@@ -1496,7 +1560,7 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
 
     // decrement transport's ref count
     // pjsip_transport_dec_ref(account->getAccountTransport());
-    
+
     status = pjsip_inv_send_msg (inv, tdata);
 
     if (status != PJ_SUCCESS) {
@@ -1504,12 +1568,12 @@ SIPVoIPLink::SIPStartCall (SIPCall* call, const std::string& subject UNUSED)
         return false;
     }
 
-    if(account->getAccountTransport()) {
+    if (account->getAccountTransport()) {
 
-    _debug("UserAgent: Sent invite request using transport: %s %s (refcnt=%d)",
-	               account->getAccountTransport()->obj_name,
-		       account->getAccountTransport()->info,
-	               (int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+        _debug ("UserAgent: Sent invite request using transport: %s %s (refcnt=%d)",
+                account->getAccountTransport()->obj_name,
+                account->getAccountTransport()->info,
+                (int) pj_atomic_get (account->getAccountTransport()->ref_cnt));
     }
 
     return true;
@@ -1533,10 +1597,10 @@ SIPVoIPLink::SIPCallServerFailure (SIPCall *call)
 void
 SIPVoIPLink::SIPCallClosed (SIPCall *call)
 {
-	_info("UserAgent: Closing call");
+    _info ("UserAgent: Closing call");
 
     if (!call) {
-		_warn("UserAgent: Error: CAll pointer is NULL\n");
+        _warn ("UserAgent: Error: CAll pointer is NULL\n");
         return;
     }
 
@@ -1575,7 +1639,7 @@ SIPVoIPLink::SIPCallReleased (SIPCall *call)
 
 
 void
-SIPVoIPLink::SIPCallAnswered (SIPCall *call, pjsip_rx_data *rdata)
+SIPVoIPLink::SIPCallAnswered (SIPCall *call, pjsip_rx_data *rdata UNUSED)
 {
 
     _info ("UserAgent: SIP call answered");
@@ -1617,7 +1681,7 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
     pjsip_tx_data *tdata;
     std::string localAddress, addrSdp;
 
-    _debug("UserAgent: New IP2IP call %s to %s", id.c_str(), to.c_str());
+    _debug ("UserAgent: New IP2IP call %s to %s", id.c_str(), to.c_str());
 
     /* Create the call */
     call = new SIPCall (id, Call::Outgoing, _pool);
@@ -1625,18 +1689,20 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
     if (call) {
 
         call->setCallConfiguration (Call::IPtoIP);
-        call->initRecFileName();
+
+        // Init recfile name using to uri
+        call->initRecFileName (to);
 
         SIPAccount * account = NULL;
         account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
 
         if (account == NULL) {
             _error ("UserAgent: Error: Account %s is null. Returning", IP2IP_PROFILE);
-	    return !PJ_SUCCESS;
+            return !PJ_SUCCESS;
         }
 
         // Set the local address
-        localAddress = getInterfaceAddrFromName(account->getLocalInterface ());
+        localAddress = getInterfaceAddrFromName (account->getLocalInterface ());
         // Set SDP parameters - Set to local
         addrSdp = localAddress;
 
@@ -1645,14 +1711,14 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
             loadSIPLocalIP (&localAddress);
         }
 
-	_debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str());
+        _debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str());
 
         // Local address to appear in SDP
         if (addrSdp == "0.0.0.0") {
-        	addrSdp = localAddress;
+            addrSdp = localAddress;
         }
 
-	_debug ("UserAgent: Media Address for IP2IP call: %s", localAddress.c_str());
+        _debug ("UserAgent: Media Address for IP2IP call: %s", localAddress.c_str());
 
         // Set local address for RTP media
         setCallAudioLocal (call, localAddress);
@@ -1666,37 +1732,36 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         call->getLocalSDP()->set_ip_address (addrSdp);
         call->getLocalSDP()->create_initial_offer (account->getActiveCodecs ());
 
-
         // Audio Rtp Session must be initialized before creating initial offer in SDP session
         // since SDES require crypto attribute.
         try {
-        	call->getAudioRtp()->initAudioRtpConfig (call);
-        	call->getAudioRtp()->initAudioRtpSession (call);
+            call->getAudioRtp()->initAudioRtpConfig (call);
+            call->getAudioRtp()->initAudioRtpSession (call);
         } catch (...) {
-        	_debug ("UserAgent: Unable to create RTP Session in new IP2IP call (%s:%d)", __FILE__, __LINE__);
+            _debug ("UserAgent: Unable to create RTP Session in new IP2IP call (%s:%d)", __FILE__, __LINE__);
         }
 
         // Init TLS transport if enabled
-        if(account->isTlsEnabled()) {
+        if (account->isTlsEnabled()) {
 
-        	_debug("UserAgent: TLS enabled for IP2IP calls");
-        	int at = toUri.find("@");
-        	int trns = toUri.find(";transport");
-        	std::string remoteAddr = toUri.substr(at+1, trns-at-1);
+            _debug ("UserAgent: TLS enabled for IP2IP calls");
+            int at = toUri.find ("@");
+            int trns = toUri.find (";transport");
+            std::string remoteAddr = toUri.substr (at+1, trns-at-1);
 
-        	if(toUri.find("sips:") != 1) {
-        		_debug("UserAgent: Error \"sips\" scheme required for TLS call");
-        		return false;
-        	}
+            if (toUri.find ("sips:") != 1) {
+                _debug ("UserAgent: Error \"sips\" scheme required for TLS call");
+                return false;
+            }
 
-        	if(createTlsTransport(account->getAccountID(), remoteAddr) != PJ_SUCCESS)
-        		return false;
+            if (createTlsTransport (account->getAccountID(), remoteAddr) != PJ_SUCCESS)
+                return false;
         }
 
         // If no transport already set, use the default one created at pjsip initialization
         if (account->getAccountTransport() == NULL) {
-        	_debug ("UserAgent: No transport for this account, using the default one");
-        	account->setAccountTransport (_localUDPTransport);
+            _debug ("UserAgent: No transport for this account, using the default one");
+            account->setAccountTransport (_localUDPTransport);
         }
 
         _debug ("UserAgent: Local port %i for IP2IP call", account->getLocalPort());
@@ -1710,79 +1775,96 @@ bool SIPVoIPLink::new_ip_to_ip_call (const CallID& id, const std::string& to)
         int port = findLocalPortFromUri (toUri, account->getAccountTransport());
 
         std::stringstream ss;
-	std::string portStr;
-	ss << port;
-	ss >> portStr;
-	
-	std::string contactUri = account->getContactHeader (address, portStr);
+        std::string portStr;
+        ss << port;
+        ss >> portStr;
+
+        std::string contactUri = account->getContactHeader (address, portStr);
 
-	_debug ("UserAgent:  FROM uri: %s, TO uri: %s, CONTACT uri: %s",
-		fromUri.c_str(), toUri.c_str(), contactUri.c_str());
+        _debug ("UserAgent:  FROM uri: %s, TO uri: %s, CONTACT uri: %s",
+                fromUri.c_str(), toUri.c_str(), contactUri.c_str());
 
-	pj_str_t pjFrom;
-	pj_cstr (&pjFrom, fromUri.c_str());
+        pj_str_t pjFrom;
+        pj_cstr (&pjFrom, fromUri.c_str());
 
-	pj_str_t pjTo;
-	pj_cstr (&pjTo, toUri.c_str());
+        pj_str_t pjTo;
+        pj_cstr (&pjTo, toUri.c_str());
 
-	pj_str_t pjContact;
-	pj_cstr (&pjContact, contactUri.c_str());
+        pj_str_t pjContact;
+        pj_cstr (&pjContact, contactUri.c_str());
 
-	// Create the dialog (UAC)
-	// (Parameters are "strduped" inside this function)
-	status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog);
-	PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
-	
-	// Create the invite session for this call
-	status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv);
-	PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
-	
-	// Set the appropriate transport
-	pjsip_tpselector *tp;
+        // Create the dialog (UAC)
+        // (Parameters are "strduped" inside this function)
+        _debug ("UserAgent: Creating dialog for this call");
+        status = pjsip_dlg_create_uac (pjsip_ua_instance(), &pjFrom, &pjContact, &pjTo, NULL, &dialog);
+        PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
 
-	init_transport_selector (account->getAccountTransport(), &tp);
+        // Create the invite session for this call
+        _debug ("UserAgent: Creating invite session for this call");
+        status = pjsip_inv_create_uac (dialog, call->getLocalSDP()->get_local_sdp_session(), 0, &inv);
+        PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
 
-	if(!account->getAccountTransport()) {
-	  _error("UserAgent: Error: Transport is NULL in IP2IP call");
-	}
+        if (! (account->getServiceRoute().empty())) {
 
-	// set_transport methods increment transport's ref_count
-	status = pjsip_dlg_set_transport (dialog, tp);
+            _error ("UserAgent: Set Service-Route with %s", account->getServiceRoute().c_str());
 
-	// decrement transport's ref count
-	// pjsip_transport_dec_ref(account->getAccountTransport());
+            pjsip_route_hdr *route_set = pjsip_route_hdr_create (_pool);
+            pjsip_route_hdr *routing = pjsip_route_hdr_create (_pool);
+            pjsip_sip_uri *url = pjsip_sip_uri_create (_pool, 0);
+            routing->name_addr.uri = (pjsip_uri*) url;
+            pj_strdup2 (_pool, &url->host, account->getServiceRoute().c_str());
 
-	if (status != PJ_SUCCESS) {
-	  _error ("UserAgent: Error: Failed to set the transport for an IP2IP call");
-	  return status;
-	}
+            pj_list_push_back (&route_set, pjsip_hdr_clone (_pool, routing));
 
-	// Associate current call in the invite session
-	inv->mod_data[getModId() ] = call;
+            pjsip_dlg_set_route_set (dialog, route_set);
+        }
 
-	status = pjsip_inv_invite (inv, &tdata);
-	
-	PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
-		
-	// Associate current invite session in the call
-	call->setInvSession (inv);
+        // Set the appropriate transport
+        pjsip_tpselector *tp;
 
-	status = pjsip_inv_send_msg (inv, tdata);
+        init_transport_selector (account->getAccountTransport(), &tp);
 
-	if (status != PJ_SUCCESS) {
-	    delete call;
-	    call = 0;
-	    return false;
-	}
+        if (!account->getAccountTransport()) {
+            _error ("UserAgent: Error: Transport is NULL in IP2IP call");
+        }
+
+        // set_transport methods increment transport's ref_count
+        status = pjsip_dlg_set_transport (dialog, tp);
+
+        // decrement transport's ref count
+        // pjsip_transport_dec_ref(account->getAccountTransport());
+
+        if (status != PJ_SUCCESS) {
+            _error ("UserAgent: Error: Failed to set the transport for an IP2IP call");
+            return status;
+        }
+
+        // Associate current call in the invite session
+        inv->mod_data[getModId() ] = call;
+
+        status = pjsip_inv_invite (inv, &tdata);
+
+        PJ_ASSERT_RETURN (status == PJ_SUCCESS, false);
+
+        // Associate current invite session in the call
+        call->setInvSession (inv);
+
+        status = pjsip_inv_send_msg (inv, tdata);
+
+        if (status != PJ_SUCCESS) {
+            delete call;
+            call = 0;
+            return false;
+        }
 
-	call->setConnectionState (Call::Progressing);
+        call->setConnectionState (Call::Progressing);
 
-	call->setState (Call::Active);
-	addCall (call);
+        call->setState (Call::Active);
+        addCall (call);
 
-	return true;
+        return true;
     } else
-      return false;
+        return false;
 }
 
 
@@ -1827,10 +1909,11 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_
     std::vector <std::string> dns_servers;
     int scount, i;
 
-    _debug("UserAgent: Enable DNS SRV resolver");
+    _debug ("UserAgent: Enable DNS SRV resolver");
 
     // Create the DNS resolver instance
     status = pjsip_endpt_create_resolver (endpt, &resv);
+
     if (status != PJ_SUCCESS) {
         _error ("UserAgent: Error: Creating the DNS resolver instance");
         return status;
@@ -1848,13 +1931,15 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_
     }
 
     pj_str_t nameservers[scount];
+
     for (i = 0; i<scount; i++) {
-		_debug("UserAgent: Server: %s", (char *)dns_servers[i].c_str());
+        _debug ("UserAgent: Server: %s", (char *) dns_servers[i].c_str());
         nameservers[i] = pj_str ( (char *) dns_servers[i].c_str());
     }
 
     // Update the name servers for the DNS resolver
     status = pj_dns_resolver_set_ns (resv, scount, nameservers, NULL);
+
     if (status != PJ_SUCCESS) {
         _debug ("UserAgent: Error updating the name servers for the DNS resolver");
         return status;
@@ -1862,6 +1947,7 @@ pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_
 
     // Set the DNS resolver instance of the SIP resolver engine
     status = pjsip_endpt_set_resolver (endpt, resv);
+
     if (status != PJ_SUCCESS) {
         _debug ("UserAgent: Error setting the DNS resolver instance of the SIP resolver engine");
         return status;
@@ -1923,11 +2009,11 @@ bool SIPVoIPLink::pjsip_init()
         return false;
     }
 
-    // Initialize default UDP transport according to 
+    // Initialize default UDP transport according to
     // IP to IP settings (most likely using port 5060)
     createDefaultSipUdpTransport();
 
-    // Call this method to create TLS listener 
+    // Call this method to create TLS listener
     createDefaultSipTlsListener();
 
     // Initialize transaction layer
@@ -1998,13 +2084,16 @@ bool SIPVoIPLink::pjsip_init()
     _debug ("UserAgent: VOIP callbacks initialized");
 
     // Add endpoint capabilities (INFO, OPTIONS, etc) for this UA
-    pj_str_t allowed[] = { { (char*) "INFO", 4}, { (char*) "REGISTER", 8}, { (char*) "OPTIONS", 7} };       //  //{"INVITE", 6}, {"ACK",3}, {"BYE",3}, {"CANCEL",6}
+    pj_str_t allowed[] = { { (char*) "INFO", 4}, { (char*) "REGISTER", 8}, { (char*) "OPTIONS", 7}, { (char*) "MESSAGE", 7 } };       //  //{"INVITE", 6}, {"ACK",3}, {"BYE",3}, {"CANCEL",6}
 
     accepted = pj_str ( (char*) "application/sdp");
 
     // Register supported methods
     pjsip_endpt_add_capability (_endpt, &_mod_ua, PJSIP_H_ALLOW, NULL, PJ_ARRAY_SIZE (allowed), allowed);
 
+    const pj_str_t STR_MIME_TEXT_PLAIN = { (char*) "text/plain", 10 };
+    pjsip_endpt_add_capability (_endpt, &_mod_ua, PJSIP_H_ACCEPT, NULL, 1, &STR_MIME_TEXT_PLAIN);
+
     // Register "application/sdp" in ACCEPT header
     pjsip_endpt_add_capability (_endpt, &_mod_ua, PJSIP_H_ACCEPT, NULL, 1, &accepted);
 
@@ -2076,73 +2165,73 @@ pj_status_t SIPVoIPLink::stunServerResolve (AccountID id)
 
 
 
-bool SIPVoIPLink::acquireTransport(const AccountID& accountID) {
+bool SIPVoIPLink::acquireTransport (const AccountID& accountID)
+{
 
     SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
-    if(!account)
+    if (!account)
         return false;
 
 
-    // If an account is already bound to this account, decrease its reference 
-    // as it is going to change. If the same transport is selected, reference 
+    // If an account is already bound to this account, decrease its reference
+    // as it is going to change. If the same transport is selected, reference
     // counter will be increased
-    if(account->getAccountTransport()) {
+    if (account->getAccountTransport()) {
 
-        _debug("pjsip_transport_dec_ref in acquireTransport");
-        pjsip_transport_dec_ref(account->getAccountTransport());
+        _debug ("pjsip_transport_dec_ref in acquireTransport");
+        pjsip_transport_dec_ref (account->getAccountTransport());
     }
 
     // Try to create a new transport in case the settings for this account
     // are different than one defined for already created ones
     // If TLS is enabled, TLS connection is automatically handled when sending account registration
-    // However, for any other sip transaction, we must create TLS connection 
-    if(createSipTransport(accountID)) {
+    // However, for any other sip transaction, we must create TLS connection
+    if (createSipTransport (accountID)) {
         return true;
     }
     // A transport is already created on this port, use it
     else {
 
-        _debug("Could not create a new transport (%s)", account->getTransportMapKey().c_str());
-        _debug("Searching transport (%s) in transport map", account->getTransportMapKey().c_str());
+        _debug ("Could not create a new transport (%s)", account->getTransportMapKey().c_str());
+        _debug ("Searching transport (%s) in transport map", account->getTransportMapKey().c_str());
 
         // Could not create new transport, this transport may already exists
         SipTransportMap::iterator transport;
-        transport = _transportMap.find(account->getTransportMapKey());
+        transport = _transportMap.find (account->getTransportMapKey());
 
-	if(transport != _transportMap.end()) {
+        if (transport != _transportMap.end()) {
 
-	    // Transport already exist, use it for this account
-	    _debug("Found transport (%s) in transport map", account->getTransportMapKey().c_str());
+            // Transport already exist, use it for this account
+            _debug ("Found transport (%s) in transport map", account->getTransportMapKey().c_str());
 
-	    pjsip_transport* tr = transport->second;
+            pjsip_transport* tr = transport->second;
 
-	    // Set transport to be used for transaction involving this account
-	    account->setAccountTransport(tr);
+            // Set transport to be used for transaction involving this account
+            account->setAccountTransport (tr);
 
-	    // Increment newly associated transport reference counter
-	    // If the account is shutdowning, time is automatically canceled
-	    pjsip_transport_add_ref(tr);
+            // Increment newly associated transport reference counter
+            // If the account is shutdowning, time is automatically canceled
+            pjsip_transport_add_ref (tr);
 
-	    return true;
-	}
-	else {
+            return true;
+        } else {
 
-	    // Transport could not either be created, socket not available
-	    _debug("Did not find transport (%s) in transport map", account->getTransportMapKey().c_str());
+            // Transport could not either be created, socket not available
+            _debug ("Did not find transport (%s) in transport map", account->getTransportMapKey().c_str());
 
-	    account->setAccountTransport(_localUDPTransport);
+            account->setAccountTransport (_localUDPTransport);
 
-	    std::string localHostName(_localUDPTransport->local_name.host.ptr, _localUDPTransport->local_name.host.slen);
+            std::string localHostName (_localUDPTransport->local_name.host.ptr, _localUDPTransport->local_name.host.slen);
 
-	    _debug("Use default one instead (%s:%i)", localHostName.c_str(), _localUDPTransport->local_name.port);
+            _debug ("Use default one instead (%s:%i)", localHostName.c_str(), _localUDPTransport->local_name.port);
 
-	    // account->setLocalAddress(localHostName);
-	    account->setLocalPort(_localUDPTransport->local_name.port);
+            // account->setLocalAddress(localHostName);
+            account->setLocalPort (_localUDPTransport->local_name.port);
 
-	    // Transport could not either be created or found in the map, socket not available
-	    return false;
-	}
+            // Transport could not either be created or found in the map, socket not available
+            return false;
+        }
     }
 }
 
@@ -2160,16 +2249,16 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
     // Create a UDP listener meant for all accounts for which TLS was not enabled
     // Cannot acquireTransport since default UDP transport must be created regardless of TLS
-    errPjsip = createUdpTransport(IP2IP_PROFILE);
+    errPjsip = createUdpTransport (IP2IP_PROFILE);
 
-    if(account && (errPjsip == PJ_SUCCESS)) {
+    if (account && (errPjsip == PJ_SUCCESS)) {
 
         // Store transport in transport map
-        addTransportToMap(account->getTransportMapKey(), account->getAccountTransport());
+        addTransportToMap (account->getTransportMapKey(), account->getAccountTransport());
+
+        // if account is not NULL, use IP2IP trasport as default one
+        _localUDPTransport = account->getAccountTransport();
 
-	// if account is not NULL, use IP2IP trasport as default one
-	_localUDPTransport = account->getAccountTransport();
- 
     }
     // If the above UDP server
     // could not be created, then give it another try
@@ -2179,12 +2268,12 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
         _regPort = RANDOM_SIP_PORT;
 
         _debug ("UserAgent: Trying to initialize SIP listener on port %d", _regPort);
-	// If no AccountID specified, pointer to transport is stored in _localUDPTransport 
+        // If no AccountID specified, pointer to transport is stored in _localUDPTransport
         errPjsip = createUdpTransport();
 
         if (errPjsip != PJ_SUCCESS) {
             _debug ("UserAgent: Fail to initialize SIP listener on port %d", _regPort);
-	    return false;
+            return false;
         }
     }
 
@@ -2199,13 +2288,13 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     SIPAccount * account = NULL;
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
 
-    if(account->isTlsEnabled()) {
-        createTlsListener(IP2IP_PROFILE);
+    if (account->isTlsEnabled()) {
+        createTlsListener (IP2IP_PROFILE);
     }
 }
 
 
-void SIPVoIPLink::createTlsListener(const AccountID& accountID)
+void SIPVoIPLink::createTlsListener (const AccountID& accountID)
 {
 
     pjsip_tpfactory *tls;
@@ -2214,7 +2303,7 @@ void SIPVoIPLink::createTlsListener(const AccountID& accountID)
     pj_status_t status;
     pj_status_t success;
 
-    _debug("Create TLS listener");
+    _debug ("Create TLS listener");
 
     /* Grab the tls settings, populated
      * from configuration file.
@@ -2232,7 +2321,7 @@ void SIPVoIPLink::createTlsListener(const AccountID& accountID)
     pj_sockaddr_in_init (&local_addr, 0, 0);
     pj_uint16_t localTlsPort = account->getTlsListenerPort();
     local_addr.sin_port = pj_htons (localTlsPort);
-     
+
     pj_str_t pjAddress;
     pj_cstr (&pjAddress, PJ_INADDR_ANY);
     success = pj_sockaddr_in_set_str_addr (&local_addr, &pjAddress);
@@ -2240,7 +2329,7 @@ void SIPVoIPLink::createTlsListener(const AccountID& accountID)
 
     // Init published address for this listener (Local IP address on port 5061)
     std::string publishedAddress;
-    loadSIPLocalIP(&publishedAddress);
+    loadSIPLocalIP (&publishedAddress);
 
     pj_bzero (&a_name, sizeof (pjsip_host_port));
     pj_cstr (&a_name.host, publishedAddress.c_str());
@@ -2249,28 +2338,27 @@ void SIPVoIPLink::createTlsListener(const AccountID& accountID)
     /* Get TLS settings. Expected to be filled */
     pjsip_tls_setting * tls_setting = account->getTlsSetting();
 
-    
+
     _debug ("UserAgent: TLS transport to be initialized with published address %.*s,"
             " published port %d,\n                  local address %.*s, local port %d",
             (int) a_name.host.slen, a_name.host.ptr,
             (int) a_name.port, pjAddress.slen, pjAddress.ptr, (int) localTlsPort);
-    
+
 
     status = pjsip_tls_transport_start (_endpt, tls_setting, &local_addr, &a_name, 1, &tls);
 
     if (status != PJ_SUCCESS) {
         _debug ("UserAgent: Error creating SIP TLS listener (%d)", status);
-    }
-    else {
+    } else {
         _localTlsListener = tls;
     }
-    
+
     // return PJ_SUCCESS;
-    
+
 }
 
 
-bool SIPVoIPLink::createSipTransport(AccountID id)
+bool SIPVoIPLink::createSipTransport (AccountID id)
 {
 
     SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (id));
@@ -2282,23 +2370,22 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
     if (account->isTlsEnabled()) {
 
-        if(_localTlsListener == NULL)
-	    createTlsListener(id);
+        if (_localTlsListener == NULL)
+            createTlsListener (id);
 
-        // Parse remote address to establish connection 
+        // Parse remote address to establish connection
         std::string remoteSipUri = account->getServerUri();
-        int sips = remoteSipUri.find("<sips:") + 6;
-	int trns = remoteSipUri.find(";transport");
-	std::string remoteAddr = remoteSipUri.substr(sips, trns-sips);
+        int sips = remoteSipUri.find ("<sips:") + 6;
+        int trns = remoteSipUri.find (";transport");
+        std::string remoteAddr = remoteSipUri.substr (sips, trns-sips);
 
         // Nothing to do, TLS listener already created at pjsip's startup and TLS connection
         // is automatically handled in pjsip when sending registration messages.
-        if(createTlsTransport(id, remoteAddr) != PJ_SUCCESS)
-	    return false;
+        if (createTlsTransport (id, remoteAddr) != PJ_SUCCESS)
+            return false;
 
         return true;
-    }
-    else {
+    } else {
 
         // Launch a new UDP listener/transport, using the published address
         if (account->isStunEnabled ()) {
@@ -2307,45 +2394,44 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
             if (status != PJ_SUCCESS) {
                 _debug ("Failed to init UDP transport with STUN published address for account %s", id.c_str());
-		return false;
+                return false;
             }
 
         } else {
 
             status = createUdpTransport (id);
 
-	    if (status != PJ_SUCCESS) {
+            if (status != PJ_SUCCESS) {
                 _debug ("Failed to initialize UDP transport for account %s", id.c_str());
-		return false;
-	    }
-	    else {
+                return false;
+            } else {
 
-	        // If transport succesfully created, store it in the internal map.
-	        // STUN aware transport are account specific and should not be stored in map.
-	        // TLS transport is ephemeral and is managed by PJSIP, should not be stored either.
-	        addTransportToMap(account->getTransportMapKey(), account->getAccountTransport());
-	    }
-	}
+                // If transport successfully created, store it in the internal map.
+                // STUN aware transport are account specific and should not be stored in map.
+                // TLS transport is ephemeral and is managed by PJSIP, should not be stored either.
+                addTransportToMap (account->getTransportMapKey(), account->getAccountTransport());
+            }
+        }
     }
 
-    return true;   
+    return true;
 }
-   
 
 
-bool SIPVoIPLink::addTransportToMap(std::string key, pjsip_transport* transport)
+
+bool SIPVoIPLink::addTransportToMap (std::string key, pjsip_transport* transport)
 {
 
     SipTransportMap::iterator iter_transport;
-    iter_transport = _transportMap.find(key);
-	
+    iter_transport = _transportMap.find (key);
+
     // old transport in transport map, erase it
-    if(iter_transport != _transportMap.end()){
-        _transportMap.erase(iter_transport);
+    if (iter_transport != _transportMap.end()) {
+        _transportMap.erase (iter_transport);
     }
 
-    _debug("UserAgent: Storing newly created transport in map using key %s", key.c_str());
-    _transportMap.insert(pair<std::string, pjsip_transport*>(key, transport));
+    _debug ("UserAgent: Storing newly created transport in map using key %s", key.c_str());
+    _transportMap.insert (pair<std::string, pjsip_transport*> (key, transport));
 
     return true;
 
@@ -2360,7 +2446,7 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
     pjsip_host_port a_name;
     // char tmpIP[32];
     pjsip_transport *transport;
-    std::string listeningAddress = "127.0.0.1";
+    std::string listeningAddress = "0.0.0.0";
     int listeningPort = _regPort;
 
     /* Use my local address as default value */
@@ -2388,10 +2474,10 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
     } else {
 
         // We are trying to initialize a UDP transport available for all local accounts and direct IP calls
-        _debug("UserAgent: found account %s in map", account->getAccountID().c_str());
+        _debug ("UserAgent: found account %s in map", account->getAccountID().c_str());
 
         if (account->getLocalInterface () != "default") {
-            listeningAddress = getInterfaceAddrFromName(account->getLocalInterface());
+            listeningAddress = getInterfaceAddrFromName (account->getLocalInterface());
         }
 
         listeningPort = account->getLocalPort ();
@@ -2405,12 +2491,12 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
 
         // Init bound address to ANY
         bound_addr.sin_addr.s_addr = pj_htonl (PJ_INADDR_ANY);
-    }
-    else {
+        loadSIPLocalIP (&listeningAddress);
+    } else {
 
-        // bind this account to a specific interface        
-        pj_strdup2(_pool, &temporary_address, listeningAddress.c_str());
-	bound_addr.sin_addr = pj_inet_addr(&temporary_address);
+        // bind this account to a specific interface
+        pj_strdup2 (_pool, &temporary_address, listeningAddress.c_str());
+        bound_addr.sin_addr = pj_inet_addr (&temporary_address);
     }
 
     bound_addr.sin_port = pj_htons ( (pj_uint16_t) listeningPort);
@@ -2419,20 +2505,27 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
 
     // Create UDP-Server (default port: 5060)
     // Use here either the local information or the published address
-    if (account != NULL && !account->getPublishedSameasLocal ()) {
+    if (account && !account->getPublishedSameasLocal ()) {
 
         // Set the listening address to the published address
         listeningAddress = account->getPublishedAddress ();
+
         // Set the listening port to the published port
         listeningPort = account->getPublishedPort ();
         _debug ("UserAgent: Creating UDP transport published %s:%i", listeningAddress.c_str (), listeningPort);
 
     }
 
-    if(listeningAddress == "" || listeningPort == 0) {
-    	_error("UserAgent: Error invalid address for new udp transport");
-    	return !PJ_SUCCESS;
+    // We must specify this here to avoid the IP2IP_PROFILE
+    // to create a transport with name 0.0.0.0 to appear in the via header
+    if (id == IP2IP_PROFILE)
+        loadSIPLocalIP (&listeningAddress);
+
+    if (listeningAddress == "" || listeningPort == 0) {
+        _error ("UserAgent: Error invalid address for new udp transport");
+        return !PJ_SUCCESS;
     }
+
     //strcpy (tmpIP, listeningAddress.data());
     /* Init published name */
     pj_bzero (&a_name, sizeof (pjsip_host_port));
@@ -2459,14 +2552,13 @@ int SIPVoIPLink::createUdpTransport (AccountID id)
 
         if (account == NULL) {
 
-	    _debug("UserAgent: Use transport as local UDP server");
+            _debug ("UserAgent: Use transport as local UDP server");
             _localUDPTransport = transport;
-	}
-        else {
+        } else {
 
-	    _debug("UserAgent: bind transport to account %s", account->getAccountID().c_str());
-	    account->setAccountTransport (transport);
-	}
+            _debug ("UserAgent: bind transport to account %s", account->getAccountID().c_str());
+            account->setAccountTransport (transport);
+        }
     }
 
     return PJ_SUCCESS;
@@ -2534,18 +2626,17 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
     pj_status_t status;
 
     /* Init the transport selector */
+
     //_debug ("Transport ID: %s", transport->obj_name);
     if (transportType == PJSIP_TRANSPORT_UDP) {
         status = init_transport_selector (transport, &tp_sel);
 
         if (status == PJ_SUCCESS) {
             status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, tp_sel, &localAddress, &port);
+        } else {
+            status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
         }
-        else {
-        	status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
-        }
-    }
-    else {
+    } else {
         status = pjsip_tpmgr_find_local_addr (tpmgr, _pool, transportType, NULL, &localAddress, &port);
     }
 
@@ -2554,10 +2645,14 @@ std::string SIPVoIPLink::findLocalAddressFromUri (const std::string& uri, pjsip_
         return machineName;
     }
 
-	std::string localaddr(localAddress.ptr, localAddress.slen);
+    std::string localaddr (localAddress.ptr, localAddress.slen);
+
+    if (localaddr == "0.0.0.0")
+        loadSIPLocalIP (&localaddr);
+
     _debug ("SIP: Local address discovered from attached transport: %s", localaddr.c_str());
 
-    return std::string (localAddress.ptr, localAddress.slen);
+    return localaddr;
 }
 
 
@@ -2659,26 +2754,26 @@ int SIPVoIPLink::findLocalPortFromUri (const std::string& uri, pjsip_transport *
 }
 
 
-pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::string remoteAddr)
+pj_status_t SIPVoIPLink::createTlsTransport (const AccountID& accountID, std::string remoteAddr)
 {
     pj_status_t success;
 
-    _debug("Create TLS transport for account %s\n", accountID.c_str());
+    _debug ("Create TLS transport for account %s\n", accountID.c_str());
 
     // Retrieve the account information
     SIPAccount * account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
-    if(!account) {
-        _debug("UserAgent: Account is NULL when creating TLS connection, returning");
-	return !PJ_SUCCESS;
+    if (!account) {
+        _debug ("UserAgent: Account is NULL when creating TLS connection, returning");
+        return !PJ_SUCCESS;
     }
 
     pj_sockaddr_in rem_addr;
     pj_str_t remote;
 
-    pj_cstr(&remote, remoteAddr.c_str());
+    pj_cstr (&remote, remoteAddr.c_str());
 
-    pj_sockaddr_in_init(&rem_addr, &remote, (pj_uint16_t)5061);
+    pj_sockaddr_in_init (&rem_addr, &remote, (pj_uint16_t) 5061);
 
     // Update TLS settings for account registration using the default listeners
     // Pjsip does not allow to create multiple listener
@@ -2687,12 +2782,12 @@ pj_status_t SIPVoIPLink::createTlsTransport(const AccountID& accountID, std::str
 
     // Create a new TLS connection from TLS listener
     pjsip_transport *tls;
-    success = pjsip_endpt_acquire_transport(_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof(rem_addr), NULL, &tls);
+    success = pjsip_endpt_acquire_transport (_endpt, PJSIP_TRANSPORT_TLS, &rem_addr, sizeof (rem_addr), NULL, &tls);
 
-    if(success != PJ_SUCCESS)
-        _debug("UserAgent: Error could not create TLS transport");
-    else 
-        account->setAccountTransport(tls);
+    if (success != PJ_SUCCESS)
+        _debug ("UserAgent: Error could not create TLS transport");
+    else
+        account->setAccountTransport (tls);
 
     return success;
 }
@@ -2787,18 +2882,18 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
 
     account->setAccountTransport (transport);
 
-    if(transport) {
+    if (transport) {
 
-    	_debug("UserAgent: Initial ref count: %s %s (refcnt=%i)", transport->obj_name, transport->info,
-    			                (int)pj_atomic_get(transport->ref_cnt));
+        _debug ("UserAgent: Initial ref count: %s %s (refcnt=%i)", transport->obj_name, transport->info,
+                (int) pj_atomic_get (transport->ref_cnt));
 
-    	pj_sockaddr *addr = (pj_sockaddr*)&(transport->key.rem_addr);
+        pj_sockaddr *addr = (pj_sockaddr*) & (transport->key.rem_addr);
 
-    	static char str[PJ_INET6_ADDRSTRLEN];
-    	pj_inet_ntop(((const pj_sockaddr*)addr)->addr.sa_family, pj_sockaddr_get_addr(addr), str, sizeof(str));
-    
-    
-    	_debug("UserAgent: KEY: %s:%d",str, pj_sockaddr_get_port((const pj_sockaddr*)&(transport->key.rem_addr)));
+        static char str[PJ_INET6_ADDRSTRLEN];
+        pj_inet_ntop ( ( (const pj_sockaddr*) addr)->addr.sa_family, pj_sockaddr_get_addr (addr), str, sizeof (str));
+
+
+        _debug ("UserAgent: KEY: %s:%d",str, pj_sockaddr_get_port ( (const pj_sockaddr*) & (transport->key.rem_addr)));
 
     }
 
@@ -2810,28 +2905,28 @@ pj_status_t SIPVoIPLink::createAlternateUdpTransport (AccountID id)
 }
 
 
-void SIPVoIPLink::shutdownSipTransport(const AccountID& accountID)
+void SIPVoIPLink::shutdownSipTransport (const AccountID& accountID)
 {
 
-    _debug("UserAgent: Shutdown Sip Transport");
+    _debug ("UserAgent: Shutdown Sip Transport");
 
     SIPAccount* account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
-    if(!account)
+    if (!account)
         return;
 
-    if(account->getAccountTransport()) {
+    if (account->getAccountTransport()) {
 
-        _debug("Transport bound to account, decrease ref count");
+        _debug ("Transport bound to account, decrease ref count");
 
-	// decrease reference count added by pjsip_regc_send
-	// PJSIP's IDLE timer is set if counter reach 0
+        // decrease reference count added by pjsip_regc_send
+        // PJSIP's IDLE timer is set if counter reach 0
 
         // there is still problems when account registration fails, so comment it for now
-	// status = pjsip_transport_dec_ref(account->getAccountTransport());
+        // status = pjsip_transport_dec_ref(account->getAccountTransport());
 
-	// detach transport from this account
-	account->setAccountTransport(NULL);
+        // detach transport from this account
+        account->setAccountTransport (NULL);
 
     }
 
@@ -2917,7 +3012,7 @@ bool SIPVoIPLink::pjsip_shutdown (void)
     /* Shutdown PJLIB */
     pj_shutdown();
 
-    _debug ("UserAgent: Shutted down succesfully");
+    _debug ("UserAgent: Shutted down successfully");
 
     /* Done. */
     return true;
@@ -2976,27 +3071,9 @@ void set_voicemail_info (AccountID account, pjsip_msg_body *body)
         Manager::instance().startVoiceMessageNotification (account, voicemail);
 }
 
-void SIPVoIPLink::handle_reinvite (SIPCall *call)
+void SIPVoIPLink::handle_reinvite (SIPCall *call UNUSED)
 {
-
     _debug ("UserAgent: Handle reinvite");
-    /*
-    // Close the previous RTP session
-    call->getAudioRtp()->stop ();
-    call->setAudioStart (false);
-    
-    _debug ("Create new rtp session from handle_reinvite : %s:%i", call->getLocalIp().c_str(), call->getLocalAudioPort());
-    _debug ("UserAgent: handle_reinvite");
- 
-    try {
-        call->getAudioRtp()->initAudioRtpSession (call);
-    } catch (...) {
-        _debug ("! SIP Failure: Unable to create RTP Session (%s:%d)", __FILE__, __LINE__);
-    }
-  
-    
-    _debug("Handle reINVITE");
-    */
 }
 
 // This callback is called when the invite session state has changed
@@ -3014,8 +3091,6 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         _error ("UserAgent: Error: Call is NULL in call state changed callback");
         return;
     } else {
-        // _debug("    call_on_state_changed: call id %s", call->getCallId().c_str());
-        // _debug("    call_on_state_changed: call state %s", invitationStateMap[call->getInvSession()->state]);
     }
 
     //Retrieve the body message
@@ -3038,6 +3113,25 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         return;
     }
 
+    /*
+    pjsip_hdr *allow_header = NULL;
+    std::string *allowed_options = NULL;
+
+    char header_buffer[500];
+
+    if (e->body.tsx_state.src.rdata->msg_info.msg)
+        allow_header = (pjsip_hdr *) pjsip_msg_find_hdr (e->body.tsx_state.src.rdata->msg_info.msg, PJSIP_H_ALLOW, NULL);
+
+    if (allow_header) {
+        allowed_options = new std::string (allow_header->name.ptr, allow_header->name.slen);
+        allow_header->vptr->print_on (allow_header, header_buffer, 5000);
+        std::string theHeader (header_buffer);
+    }
+
+    if (allowed_options)
+        delete allowed_options;
+    */
+
     // If this is an outgoing INVITE that was created because of
     // REFER/transfer, send NOTIFY to transferer.
     if (call->getXferSub() && e->type==PJSIP_EVENT_TSX_STATE) {
@@ -3114,7 +3208,9 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         const pj_str_t * description = pjsip_get_status_text (statusCode);
 
         if (statusCode) {
-            DBusManager::instance().getCallManager()->sipCallStateChanged (call->getCallId(), std::string (description->ptr, description->slen), statusCode);
+            // test wether or not dbus manager is instantiated, if not no need to notify the client
+            if (Manager::instance().getDbusManager())
+                DBusManager::instance().getCallManager()->sipCallStateChanged (call->getCallId(), std::string (description->ptr, description->slen), statusCode);
         }
     }
 
@@ -3137,22 +3233,24 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
         accId = Manager::instance().getAccountFromCall (call->getCallId());
         link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accId));
 
-		// Make sure link is valid
-        assert(link);
+        // Make sure link is valid
+        assert (link);
 
         switch (inv->cause) {
 
-            // The call terminates normally - BYE / CANCEL
+                // The call terminates normally - BYE / CANCEL
             case PJSIP_SC_OK:
             case PJSIP_SC_REQUEST_TERMINATED:
                 link->SIPCallClosed (call);
                 break;
 
             case PJSIP_SC_DECLINE:
-            	_debug("UserAgent: Call %s is declined", call->getCallId().c_str());
-				if (inv->role == PJSIP_ROLE_UAC)
-					link->SIPCallServerFailure (call);
-				break;
+                _debug ("UserAgent: Call %s is declined", call->getCallId().c_str());
+
+                if (inv->role == PJSIP_ROLE_UAC)
+                    link->SIPCallServerFailure (call);
+
+                break;
 
             case PJSIP_SC_NOT_FOUND:            /* peer not found */
             case PJSIP_SC_REQUEST_TIMEOUT:      /* request timeout */
@@ -3161,13 +3259,13 @@ void call_on_state_changed (pjsip_inv_session *inv, pjsip_event *e)
             case PJSIP_SC_UNSUPPORTED_MEDIA_TYPE:
             case PJSIP_SC_UNAUTHORIZED:
             case PJSIP_SC_FORBIDDEN:
-	    case PJSIP_SC_REQUEST_PENDING:
-	    case PJSIP_SC_ADDRESS_INCOMPLETE:
+            case PJSIP_SC_REQUEST_PENDING:
+            case PJSIP_SC_ADDRESS_INCOMPLETE:
                 link->SIPCallServerFailure (call);
                 break;
 
             default:
-	        link->SIPCallServerFailure (call);
+                link->SIPCallServerFailure (call);
                 _error ("UserAgent: Unhandled call state. This is probably a bug.");
                 break;
         }
@@ -3229,133 +3327,140 @@ void call_on_media_update (pjsip_inv_session *inv, pj_status_t status)
 
     try {
         call->getAudioRtp()->updateDestinationIpAddress();
-    }
-    catch(...) {
-        
+    } catch (...) {
+
     }
 
 
     // Get the crypto attribute containing srtp's cryptographic context (keys, cipher)
     CryptoOffer crypto_offer;
-    call->getLocalSDP()->get_remote_sdp_crypto_from_offer(remote_sdp, crypto_offer);
+    call->getLocalSDP()->get_remote_sdp_crypto_from_offer (remote_sdp, crypto_offer);
 
     bool nego_success = false;
-    if(!crypto_offer.empty()) {
 
-    	_debug("UserAgent: Crypto attribute in SDP, init SRTP session");
+    if (!crypto_offer.empty()) {
+
+        _debug ("UserAgent: Crypto attribute in SDP, init SRTP session");
+
+        // init local cryptografic capabilities for negotiation
+        std::vector<sfl::CryptoSuiteDefinition>localCapabilities;
+
+        for (int i = 0; i < 3; i++) {
+            localCapabilities.push_back (sfl::CryptoSuites[i]);
+        }
+
+        sfl::SdesNegotiator sdesnego (localCapabilities, crypto_offer);
 
-    	// init local cryptografic capabilities for negotiation
-    	std::vector<sfl::CryptoSuiteDefinition>localCapabilities;
-    	for(int i = 0; i < 3; i++) {
-    		localCapabilities.push_back(sfl::CryptoSuites[i]);
-		}
+        if (sdesnego.negotiate()) {
+            _debug ("UserAgent: SDES negociation successfull \n");
+            nego_success = true;
 
-		sfl::SdesNegotiator sdesnego(localCapabilities, crypto_offer);
-	
-		if(sdesnego.negotiate()) {
-			_debug("UserAgent: SDES negociation successfull \n");
-			nego_success = true;
+            _debug ("UserAgent: Set remote cryptographic context\n");
 
-            _debug("UserAgent: Set remote cryptographic context\n");
             try {
-            	  call->getAudioRtp()->setRemoteCryptoInfo(sdesnego);
-            }
-            catch(...) {}
+                call->getAudioRtp()->setRemoteCryptoInfo (sdesnego);
+            } catch (...) {}
 
             DBusManager::instance().getCallManager()->secureSdesOn (call->getCallId());
-		}
-		else {
-			DBusManager::instance().getCallManager()->secureSdesOff (call->getCallId());
-		}
+        } else {
+            DBusManager::instance().getCallManager()->secureSdesOff (call->getCallId());
+        }
     }
 
     // We did not found any crypto context for this media
-    if(!nego_success && call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) {
-       
+    if (!nego_success && call->getAudioRtp()->getAudioRtpType() == sfl::Sdes) {
+
         // We did not found any crypto context for this media
         // @TODO if SRTPONLY, CallFail
 
-        _debug("UserAgent: Did not found any crypto or negociation failed but Sdes enabled");
+        _debug ("UserAgent: Did not found any crypto or negociation failed but Sdes enabled");
         call->getAudioRtp()->stop();
-	call->getAudioRtp()->setSrtpEnabled(false);
+        call->getAudioRtp()->setSrtpEnabled (false);
 
-	// if RTPFALLBACK, change RTP session
-	AccountID accountID = Manager::instance().getAccountFromCall (call->getCallId());
-	if(Manager::instance().getConfigString (accountID, SRTP_RTP_FALLBACK) == "true")
-	    call->getAudioRtp()->initAudioRtpSession(call);
+        // if RTPFALLBACK, change RTP session
+        AccountID accountID = Manager::instance().getAccountFromCall (call->getCallId());
+        SIPAccount *account = (SIPAccount *) Manager::instance().getAccount (accountID);
+
+        if (account->getSrtpFallback())
+            call->getAudioRtp()->initAudioRtpSession (call);
     }
 
-    if(nego_success && call->getAudioRtp()->getAudioRtpType() != sfl::Sdes) {
-       
-        // We found a crypto context for this media but Sdes is not 
+    if (nego_success && call->getAudioRtp()->getAudioRtpType() != sfl::Sdes) {
+
+        // We found a crypto context for this media but Sdes is not
         // enabled for this call, make a try using RTP only...
-        _debug("UserAgent: SDES not initialized for this call\n");
+        _debug ("UserAgent: SDES not initialized for this call\n");
     }
 
 
     Sdp  *sdpSession = call->getLocalSDP();
-    if(!sdpSession)
-		return;
+
+    if (!sdpSession)
+        return;
 
     AudioCodec *sessionMedia = sdpSession->get_session_media();
-	if(!sessionMedia)
-		return;
 
-	AudioCodecType pl = (AudioCodecType)sessionMedia->getPayload();
-	AudioCodec* audiocodec = Manager::instance().getCodecDescriptorMap().instantiateCodec(pl);
+    if (!sessionMedia)
+        return;
+
+    AudioCodecType pl = (AudioCodecType) sessionMedia->getPayload();
+    AudioCodec* audiocodec = Manager::instance().getCodecDescriptorMap().instantiateCodec (pl);
 
-	if (audiocodec == NULL)
-		_error ("UserAgent: No audiocodec found");
+    if (audiocodec == NULL)
+        _error ("UserAgent: No audiocodec found");
 
 
     try {
         call->setAudioStart (true);
-        call->getAudioRtp()->start(audiocodec);
+        call->getAudioRtp()->start (audiocodec);
     } catch (exception& rtpException) {
         _error ("UserAgent: Error: %s", rtpException.what());
     }
 
 }
 
-void call_on_forked (pjsip_inv_session *inv, pjsip_event *e)
+void call_on_forked (pjsip_inv_session *inv UNUSED, pjsip_event *e UNUSED)
 {
 }
 
-void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_event *e)
+void call_on_tsx_changed (pjsip_inv_session *inv UNUSED, pjsip_transaction *tsx, pjsip_event *e)
 {
-	assert(tsx);
+    assert (tsx);
 
-    _debug("UserAgent: Transaction changed to state %s", transactionStateMap[tsx->state]);
+    _debug ("UserAgent: Transaction changed to state %s", transactionStateMap[tsx->state]);
+
+    pjsip_rx_data* r_data;
+    pjsip_tx_data* t_data;
 
     if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING &&
             pjsip_method_cmp (&tsx->method, &pjsip_refer_method) ==0) {
         /** Handle the refer method **/
         onCallTransfered (inv, e->body.tsx_state.src.rdata);
+
     } else if (tsx->role==PJSIP_ROLE_UAS && tsx->state==PJSIP_TSX_STATE_TRYING) {
 
         if (e && e->body.rx_msg.rdata) {
 
 
-        	_debug("Event");
-            pjsip_tx_data* t_data;
-            pjsip_rx_data* r_data = e->body.rx_msg.rdata;
+            _debug ("Event");
+            r_data = e->body.rx_msg.rdata;
 
             if (r_data && r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD) {
 
-            	_debug("R_data");
+                _debug ("R_data");
 
                 std::string method_info = "INFO";
                 std::string method_notify = "NOTIFY";
 
                 std::string request =  pjsip_rx_data_get_info (r_data);
 
-			    _debug("UserAgent: %s", request.c_str());
+                _debug ("UserAgent: %s", request.c_str());
 
-			    if(request.find (method_notify) != (size_t)-1) {
+                if (request.find (method_notify) != (size_t)-1) {
 
-			    }
-				// Must reply 200 OK on SIP INFO request
-			    else if (request.find (method_info) != (size_t)-1) {
+                }
+                // Must reply 200 OK on SIP INFO request
+                else if (request.find (method_info) != (size_t)-1) {
 
                     pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data);
 
@@ -3363,6 +3468,81 @@ void call_on_tsx_changed (pjsip_inv_session *inv, pjsip_transaction *tsx, pjsip_
                 }
             }
         }
+
+        // Incoming TEXT message
+        if (e && e->body.tsx_state.src.rdata) {
+
+            // sender of this message
+            std::string from;
+
+            // Get the message inside the transaction
+            r_data = e->body.tsx_state.src.rdata;
+            std::string formatedMessage = (char*) r_data->msg_info.msg->body->data;
+
+            // Try to determine who is the recipient of the message
+            SIPCall *call = reinterpret_cast<SIPCall *> (inv->mod_data[getModId() ]);
+
+            if (!call) {
+                _debug ("Incoming TEXT message: Can't find the recipient of the message");
+                return;
+            }
+
+            // Respond with a 200/OK
+            pjsip_dlg_create_response (inv->dlg, r_data, PJSIP_SC_OK, NULL, &t_data);
+            pjsip_dlg_send_response (inv->dlg, tsx, t_data);
+
+            std::string message;
+            std::string urilist;
+            sfl::InstantMessaging::UriList list;
+
+            sfl::InstantMessaging *module = Manager::instance().getInstantMessageModule();
+
+            try {
+                // retrive message from formated text
+                message = module->findTextMessage (formatedMessage);
+
+                // retreive the recipient-list of this message
+                urilist = module->findTextUriList (formatedMessage);
+
+                // parse the recipient list xml
+                list = module->parseXmlUriList (urilist);
+
+                // If no item present in the list, peer is considered as the sender
+                if (list.empty()) {
+                    from = call->getPeerNumber ();
+                } else {
+                    sfl::InstantMessaging::UriEntry entry = list.front();
+                    sfl::InstantMessaging::UriEntry::iterator iterAttr = entry.find (IM_XML_URI);
+
+                    if (iterAttr->second != "Me")
+                        from = iterAttr->second;
+                    else
+                        from = call->getPeerNumber ();
+                }
+
+            } catch (sfl::InstantMessageException &e) {
+                _error ("SipVoipLink: %s", e.what());
+                message = "";
+                from = call->getPeerNumber ();
+            }
+
+
+            // strip < and > characters in case of an IP address
+            std::string stripped;
+
+            if (from[0] == '<' && from[from.size()-1] == '>')
+                stripped = from.substr (1, from.size()-2);
+            else
+                stripped = from;
+
+            // Pass through the instant messaging module if needed
+            // Right now, it does do anything.
+            // And notify the clients
+
+            Manager::instance ().incomingMessage (call->getCallId (), stripped, module->receive (message, stripped, call->getCallId ()));
+        }
+
+
     }
 }
 
@@ -3386,7 +3566,11 @@ void regc_cb (struct pjsip_regc_cbparam *param)
         //_debug("Received client registration callback wiht code: %i, %s\n", param->code, descriptionprint.c_str());
         DBusManager::instance().getCallManager()->registrationStateChanged (account->getAccountID(), std::string (description->ptr, description->slen), param->code);
         std::pair<int, std::string> details (param->code, std::string (description->ptr, description->slen));
-        account->setRegistrationStateDetailed (details);
+
+
+        // there a race condition for this ressource when closing the application
+        if (account)
+            account->setRegistrationStateDetailed (details);
     }
 
     if (param->status == PJ_SUCCESS) {
@@ -3413,20 +3597,20 @@ void regc_cb (struct pjsip_regc_cbparam *param)
                     account->setRegistrationState (ErrorAuth);
                     break;
 
-	        case 423: { // Expiration Interval Too Brief
+                case 423: { // Expiration Interval Too Brief
 
-		    int expire_value;
-		    std::istringstream stream (account->getRegistrationExpire());
-		    stream >> expire_value;
+                    int expire_value;
+                    std::istringstream stream (account->getRegistrationExpire());
+                    stream >> expire_value;
 
-		    std::stringstream out;
-		    out << (expire_value * 2);
-		    std::string s = out.str(); 
+                    std::stringstream out;
+                    out << (expire_value * 2);
+                    std::string s = out.str();
 
-		    Manager::instance().setConfig(account->getAccountID(), CONFIG_ACCOUNT_REGISTRATION_EXPIRE, s);
-		    account->registerVoIPLink();
-		}
-		    break;
+                    account->setRegistrationExpire (s);
+                    account->registerVoIPLink();
+                }
+                break;
 
                 default:
                     account->setRegistrationState (Error);
@@ -3435,11 +3619,11 @@ void regc_cb (struct pjsip_regc_cbparam *param)
 
             account->setRegister (false);
 
-	    // shutdown this transport since useless
-	    // if(account->getAccountTransport() != _localUDPTransport) {
+            // shutdown this transport since useless
+            // if(account->getAccountTransport() != _localUDPTransport) {
 
-	    SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID());
-	    //}
+            SIPVoIPLink::instance ("")->shutdownSipTransport (account->getAccountID());
+            //}
 
         } else {
             // Registration/Unregistration is success
@@ -3449,17 +3633,17 @@ void regc_cb (struct pjsip_regc_cbparam *param)
                 account->setRegistrationState (Unregistered);
                 account->setRegister (false);
 
-		SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID());
+                SIPVoIPLink::instance ("")->shutdownSipTransport (account->getAccountID());
 
-		// pjsip_regc_destroy(param->regc);
-		// account->setRegistrationInfo(NULL);
+                // pjsip_regc_destroy(param->regc);
+                // account->setRegistrationInfo(NULL);
             }
         }
     } else {
         account->setRegistrationState (ErrorAuth);
         account->setRegister (false);
 
-	SIPVoIPLink::instance("")->shutdownSipTransport(account->getAccountID());
+        SIPVoIPLink::instance ("")->shutdownSipTransport (account->getAccountID());
     }
 
 }
@@ -3491,14 +3675,14 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     std::string request;
 
 
-    _info("UserAgent: Transaction REQUEST received using transport: %s %s (refcnt=%d)",
-    	   rdata->tp_info.transport->obj_name,
-    	   rdata->tp_info.transport->info,
-    	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
+    _info ("UserAgent: Transaction REQUEST received using transport: %s %s (refcnt=%d)",
+           rdata->tp_info.transport->obj_name,
+           rdata->tp_info.transport->info,
+           (int) pj_atomic_get (rdata->tp_info.transport->ref_cnt));
 
     // No need to go any further on incoming ACK
-    if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD && pjsip_rdata_get_dlg(rdata) != NULL) {
-        _info("UserAgent: received an ACK");
+    if (rdata->msg_info.msg->line.req.method.id == PJSIP_ACK_METHOD && pjsip_rdata_get_dlg (rdata) != NULL) {
+        _info ("UserAgent: received an ACK");
         return true;
     }
 
@@ -3525,24 +3709,26 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     /* If we can't find any voIP link to handle the incoming call */
     if (!link) {
-        _warn("UserAgent: Error: cannot retrieve the voiplink from the account ID...");
-	pj_strdup2 (_pool, &reason, "ERROR: cannot retrieve the voip link from account");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
-				       &reason, NULL, NULL);
+        _warn ("UserAgent: Error: cannot retrieve the voiplink from the account ID...");
+        pj_strdup2 (_pool, &reason, "ERROR: cannot retrieve the voip link from account");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
+                                       &reason, NULL, NULL);
         return true;
         return false;
     }
 
     // Parse the display name from "From" header
     char* from_header = strstr (rdata->msg_info.msg_buf, "From: ");
+
     if (from_header) {
         std::string temp (from_header);
         int begin_displayName = temp.find ("\"") + 1;
         int end_displayName = temp.rfind ("\"");
         displayName = temp.substr (begin_displayName, end_displayName - begin_displayName);
-	if(displayName.size() > 25) {
-	    displayName = std::string ("");
-	}
+
+        if (displayName.size() > 25) {
+            displayName = std::string ("");
+        }
     } else {
         displayName = std::string ("");
     }
@@ -3563,15 +3749,17 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     std::string peerNumber (tmp, length);
 
     //Remove sip: prefix
-    size_t found = peerNumber.find("sip:");
+    size_t found = peerNumber.find ("sip:");
+
     if (found!=std::string::npos)
-        peerNumber.erase(found, found+4);
+        peerNumber.erase (found, found+4);
+
+    found = peerNumber.find ("@");
 
-    found = peerNumber.find("@");
     if (found!=std::string::npos)
-        peerNumber.erase(found);
+        peerNumber.erase (found);
 
-    _debug("UserAgent: Peer number: %s", peerNumber.c_str());
+    _debug ("UserAgent: Peer number: %s", peerNumber.c_str());
 
     // Get the server voicemail notification
     // Catch the NOTIFY message
@@ -3603,8 +3791,8 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     if (rdata->msg_info.msg->line.req.method.id != PJSIP_INVITE_METHOD) {
         if (rdata->msg_info.msg->line.req.method.id != PJSIP_ACK_METHOD) {
             pj_strdup2 (_pool, &reason, "user agent unable to handle this request ");
-            pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED, 
-					   &reason, NULL, NULL);
+            pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED,
+                                           &reason, NULL, NULL);
             return true;
         }
     }
@@ -3612,37 +3800,40 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (account_id));
 
     get_remote_sdp_from_offer (rdata, &r_sdp);
-    if(account->getActiveCodecs().empty()) {
-    	_warn ("UserAgent: Error: No active codec");
-    	pj_strdup2 (_pool, &reason, "no active codec");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_NOT_ACCEPTABLE_HERE , 
-        		                                              &reason, NULL, NULL);
+
+    if (account->getActiveCodecs().empty()) {
+        _warn ("UserAgent: Error: No active codec");
+        pj_strdup2 (_pool, &reason, "no active codec");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_NOT_ACCEPTABLE_HERE ,
+                                       &reason, NULL, NULL);
         return true;
     }
 
     // Verify that we can handle the request
     status = pjsip_inv_verify_request (rdata, &options, NULL, NULL, _endpt, NULL);
+
     if (status != PJ_SUCCESS) {
         pj_strdup2 (_pool, &reason, "user agent unable to handle this INVITE");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED, 
-				       &reason, NULL, NULL);
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_METHOD_NOT_ALLOWED,
+                                       &reason, NULL, NULL);
         return true;
     }
 
     /******************************************* URL HOOK *********************************************/
 
-    if (Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_ENABLED) == "1") {
+    if (Manager::instance().hookPreference.getSipEnabled()) {
 
-        _debug("UserAgent: Set sip url hooks");
+        _debug ("UserAgent: Set sip url hooks");
 
         std::string header_value;
 
-        header_value = fetch_header_value (rdata->msg_info.msg, Manager::instance().getConfigString (HOOKS, URLHOOK_SIP_FIELD));
+        header_value = fetch_header_value (rdata->msg_info.msg,
+                                           Manager::instance().hookPreference.getUrlSipField());
 
         if (header_value.size () < header_value.max_size()) {
             if (header_value!="") {
                 urlhook->addAction (header_value,
-                                    Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND));
+                                    Manager::instance().hookPreference.getUrlCommand());
             }
         } else
             throw length_error ("UserAgent: Url exceeds std::string max_size");
@@ -3660,10 +3851,10 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
     // If an error occured at the call creation
     if (!call) {
-        _warn("UserAgent: Error: Unable to create an incoming call");
+        _warn ("UserAgent: Error: Unable to create an incoming call");
         pj_strdup2 (_pool, &reason, "unable to create an incoming call");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
-				       &reason, NULL, NULL);
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
+                                       &reason, NULL, NULL);
         return false;
     }
 
@@ -3675,17 +3866,17 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 
         // May use the published address as well
 
-        addrToUse = SIPVoIPLink::instance("")->getInterfaceAddrFromName(account->getLocalInterface ());
+        addrToUse = SIPVoIPLink::instance ("")->getInterfaceAddrFromName (account->getLocalInterface ());
         account->isStunEnabled () ? addrSdp = account->getPublishedAddress () : addrSdp = addrToUse;
         // Set the appropriate transport to have the right VIA header
         link->init_transport_selector (account->getAccountTransport (), &tp);
 
-        if(account->getAccountTransport()) {
+        if (account->getAccountTransport()) {
 
-        	_debug("UserAgent: SIP transport for this account: %s %s (refcnt=%i)",
-        	account->getAccountTransport()->obj_name,
-        	account->getAccountTransport()->info,
-        	(int)pj_atomic_get(account->getAccountTransport()->ref_cnt));
+            _debug ("UserAgent: SIP transport for this account: %s %s (refcnt=%i)",
+                    account->getAccountTransport()->obj_name,
+                    account->getAccountTransport()->info,
+                    (int) pj_atomic_get (account->getAccountTransport()->ref_cnt));
         }
 
     }
@@ -3701,9 +3892,9 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     call->setConnectionState (Call::Progressing);
     call->setPeerNumber (peerNumber);
     call->setDisplayName (displayName);
-    call->initRecFileName();
+    call->initRecFileName (peerNumber);
 
-    _debug("UserAgent: DisplayName: %s", displayName.c_str());
+    _debug ("UserAgent: DisplayName: %s", displayName.c_str());
 
 
     // Have to do some stuff with the SDP
@@ -3723,22 +3914,25 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     status = call->getLocalSDP()->receiving_initial_offer (r_sdp, account->getActiveCodecs ());
 
     if (status!=PJ_SUCCESS) {
-        delete call; call = NULL;
-        _warn("UserAgent: fail in receiving initial offer");
+        delete call;
+        call = NULL;
+        _warn ("UserAgent: fail in receiving initial offer");
         pj_strdup2 (_pool, &reason, "fail in receiving initial offer");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
-				       &reason, NULL, NULL);
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
+                                       &reason, NULL, NULL);
         return false;
     }
 
     /* Create the local dialog (UAS) */
     status = pjsip_dlg_create_uas (pjsip_ua_instance(), rdata, NULL, &dialog);
+
     if (status != PJ_SUCCESS) {
-        delete call; call = NULL;
-        _warn("UserAgent: Error: Failed to create uas dialog");
+        delete call;
+        call = NULL;
+        _warn ("UserAgent: Error: Failed to create uas dialog");
         pj_strdup2 (_pool, &reason, "fail to create uas dialog");
-        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR, 
-				       &reason, NULL, NULL);
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
+                                       &reason, NULL, NULL);
         return false;
     }
 
@@ -3767,18 +3961,20 @@ mod_on_rx_request (pjsip_rx_data *rdata)
     call->setConnectionState (Call::Ringing);
 
     _debug ("UserAgent: Add call to account link");
+
     if (Manager::instance().incomingCall (call, account_id)) {
-    	// Add this call to the callAccountMap in ManagerImpl
-    	Manager::instance().getAccountLink (account_id)->addCall (call);
-	} else {
-		// Fail to notify UI
-		delete call; call = NULL;
-		_warn ("UserAgent: Fail to notify UI!");
-		pj_strdup2 (_pool, &reason, "fail to notify ui");
-		pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
-				&reason, NULL, NULL);
-		return false;
-	}
+        // Add this call to the callAccountMap in ManagerImpl
+        Manager::instance().getAccountLink (account_id)->addCall (call);
+    } else {
+        // Fail to notify UI
+        delete call;
+        call = NULL;
+        _warn ("UserAgent: Fail to notify UI!");
+        pj_strdup2 (_pool, &reason, "fail to notify ui");
+        pjsip_endpt_respond_stateless (_endpt, rdata, PJSIP_SC_INTERNAL_SERVER_ERROR,
+                                       &reason, NULL, NULL);
+        return false;
+    }
 
     /* Done */
     return true;
@@ -3788,42 +3984,42 @@ mod_on_rx_request (pjsip_rx_data *rdata)
 pj_bool_t mod_on_rx_response (pjsip_rx_data *rdata)
 {
     _info ("UserAgent: Transaction response using transport: %s %s (refcnt=%d)",
-    	   rdata->tp_info.transport->obj_name,
-    	   rdata->tp_info.transport->info,
-    	   (int)pj_atomic_get(rdata->tp_info.transport->ref_cnt));
+           rdata->tp_info.transport->obj_name,
+           rdata->tp_info.transport->info,
+           (int) pj_atomic_get (rdata->tp_info.transport->ref_cnt));
 
     pjsip_dialog *dlg;
-    dlg = pjsip_rdata_get_dlg( rdata );
-
-	if(dlg != NULL) {
-		pjsip_transaction *tsx = pjsip_rdata_get_tsx( rdata );
-		if ( tsx != NULL && tsx->method.id == PJSIP_INVITE_METHOD) {
-			if (tsx->status_code < 200) {
-				_info("UserAgent: Received provisional response");
-			}
-			else if (tsx->status_code >= 300) {
-			    _warn("UserAgent: Dialog failed");
-				// pjsip_dlg_dec_session(dlg);
-				// ACK for non-2xx final response is sent by transaction.
-			}
-			else {
-				_info("UserAgent: Received 200 OK response");
-				sendAck(dlg, rdata);
-			}
-		}
-	}
+    dlg = pjsip_rdata_get_dlg (rdata);
+
+    if (dlg != NULL) {
+        pjsip_transaction *tsx = pjsip_rdata_get_tsx (rdata);
+
+        if (tsx != NULL && tsx->method.id == PJSIP_INVITE_METHOD) {
+            if (tsx->status_code < 200) {
+                _info ("UserAgent: Received provisional response");
+            } else if (tsx->status_code >= 300) {
+                _warn ("UserAgent: Dialog failed");
+                // pjsip_dlg_dec_session(dlg);
+                // ACK for non-2xx final response is sent by transaction.
+            } else {
+                _info ("UserAgent: Received 200 OK response");
+                sendAck (dlg, rdata);
+            }
+        }
+    }
 
     return PJ_SUCCESS;
 }
 
-static void sendAck(pjsip_dialog *dlg, pjsip_rx_data *rdata) {
+static void sendAck (pjsip_dialog *dlg, pjsip_rx_data *rdata)
+{
 
-	pjsip_tx_data *tdata;
+    pjsip_tx_data *tdata;
 
-	// Create ACK request
-	pjsip_dlg_create_request(dlg, &pjsip_ack_method, rdata->msg_info.cseq->cseq, &tdata);
+    // Create ACK request
+    pjsip_dlg_create_request (dlg, &pjsip_ack_method, rdata->msg_info.cseq->cseq, &tdata);
 
-	pjsip_dlg_send_request( dlg, tdata,-1, NULL);
+    pjsip_dlg_send_request (dlg, tdata,-1, NULL);
 }
 
 void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata)
@@ -3872,7 +4068,7 @@ void onCallTransfered (pjsip_inv_session *inv, pjsip_rx_data *rdata)
      * request.
      */
     ref_by_hdr = (pjsip_hdr*)
-    pjsip_msg_find_hdr_by_name (rdata->msg_info.msg, &str_ref_by, NULL);
+                 pjsip_msg_find_hdr_by_name (rdata->msg_info.msg, &str_ref_by, NULL);
 
     /* Notify callback */
     code = PJSIP_SC_ACCEPTED;
@@ -4104,7 +4300,7 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
 
         /* This better be a NOTIFY request */
         if (r_data->msg_info.msg->line.req.method.id == PJSIP_OTHER_METHOD &&
-        	 request.find(method_notify) != (size_t)-1) {
+                request.find (method_notify) != (size_t)-1) {
 
             /* Check if there's body */
             msg = r_data->msg_info.msg;
@@ -4137,8 +4333,8 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
         }
 
         // Get call coresponding to this transaction
-        std::string transferID(r_data->msg_info.cid->id.ptr, r_data->msg_info.cid->id.slen);
-        std::map<std::string, CallID>::iterator it = transferCallID.find(transferID);
+        std::string transferID (r_data->msg_info.cid->id.ptr, r_data->msg_info.cid->id.slen);
+        std::map<std::string, CallID>::iterator it = transferCallID.find (transferID);
         CallID cid = it->second;
         SIPCall *call = dynamic_cast<SIPCall *> (link->getCall (cid));
 
@@ -4153,10 +4349,11 @@ void xfer_func_cb (pjsip_evsub *sub, pjsip_event *event)
 
         cont = !is_last;
 
-		_debug("UserAgent: Notification status line: %d", status_line.code);
+        _debug ("UserAgent: Notification status line: %d", status_line.code);
+
         if (status_line.code/100 == 2) {
 
-        	_debug ("UserAgent: Received 200 OK on call transfered, stop call!");
+            _debug ("UserAgent: Received 200 OK on call transfered, stop call!");
             pjsip_tx_data *tdata;
 
             status = pjsip_inv_end_session (call->getInvSession(), PJSIP_SC_GONE, NULL, &tdata);
@@ -4211,9 +4408,9 @@ void xfer_svr_cb (pjsip_evsub *sub, pjsip_event *event)
     }
 }
 
-void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
+void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer UNUSED)
 {
-	_info("UserAgent: Received SDP offer");
+    _info ("UserAgent: Received SDP offer");
 
 
 #ifdef CAN_REINVITE
@@ -4244,44 +4441,44 @@ void on_rx_offer (pjsip_inv_session *inv, const pjmedia_sdp_session *offer)
 
 }
 
-void on_create_offer(pjsip_inv_session *inv, pjmedia_sdp_session **p_offer)
+void on_create_offer (pjsip_inv_session *inv, pjmedia_sdp_session **p_offer)
 {
-	_info("UserAgent: Create new SDP offer");
+    _info ("UserAgent: Create new SDP offer");
 
-	 /* Retrieve the call information */
-	SIPCall * call = NULL;
-	call = reinterpret_cast<SIPCall*> (inv->mod_data[_mod_ua.id]);
+    /* Retrieve the call information */
+    SIPCall * call = NULL;
+    call = reinterpret_cast<SIPCall*> (inv->mod_data[_mod_ua.id]);
 
-	CallID callid = call->getCallId();
-	AccountID accountid = Manager::instance().getAccountFromCall(callid);
+    CallID callid = call->getCallId();
+    AccountID accountid = Manager::instance().getAccountFromCall (callid);
 
-    SIPAccount *account = dynamic_cast<SIPAccount *>(Manager::instance().getAccount(accountid));
+    SIPAccount *account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountid));
 
     SIPVoIPLink *link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink (accountid));
 
-	// Set the local address
-	std::string localAddress = link->getInterfaceAddrFromName(account->getLocalInterface ());
-	// Set SDP parameters - Set to local
-	std::string addrSdp = localAddress;
+    // Set the local address
+    std::string localAddress = link->getInterfaceAddrFromName (account->getLocalInterface ());
+    // Set SDP parameters - Set to local
+    std::string addrSdp = localAddress;
 
-	_debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str());
+    _debug ("UserAgent: Local Address for IP2IP call: %s", localAddress.c_str());
 
-	// If local address bound to ANY, reslove it using PJSIP
-	if (localAddress == "0.0.0.0") {
-		link->loadSIPLocalIP (&localAddress);
-	}
+    // If local address bound to ANY, reslove it using PJSIP
+    if (localAddress == "0.0.0.0") {
+        link->loadSIPLocalIP (&localAddress);
+    }
 
-	// Local address to appear in SDP
-	if (addrSdp == "0.0.0.0") {
-		addrSdp = localAddress;
-	}
+    // Local address to appear in SDP
+    if (addrSdp == "0.0.0.0") {
+        addrSdp = localAddress;
+    }
 
     // Set local address for RTP media
     setCallAudioLocal (call, localAddress);
 
     // Building the local SDP offer
     call->getLocalSDP()->set_ip_address (addrSdp);
-    call->getLocalSDP()->create_initial_offer( account->getActiveCodecs() );
+    call->getLocalSDP()->create_initial_offer (account->getActiveCodecs());
 
     *p_offer = call->getLocalSDP()->get_local_sdp_session();
 
@@ -4337,7 +4534,7 @@ void handle_incoming_options (pjsip_rx_data *rdata)
 
     status = pjsip_endpt_send_response (_endpt, &res_addr, tdata, NULL, NULL);
 
-    
+
     if (status != PJ_SUCCESS)
         pjsip_tx_data_dec_ref (tdata);
 }
@@ -4440,24 +4637,24 @@ std::vector<std::string> SIPVoIPLink::getAllIpInterface (void)
 }
 
 
-int get_iface_list(struct ifconf *ifconf)
+int get_iface_list (struct ifconf *ifconf)
 {
-   int sock, rval;
+    int sock, rval;
 
-   if((sock = socket(AF_INET,SOCK_STREAM,0)) < 0)
-       _debug("get_iface_list error could not open socket\n");
+    if ( (sock = socket (AF_INET,SOCK_STREAM,0)) < 0)
+        _debug ("get_iface_list error could not open socket\n");
 
 
-   if((rval = ioctl(sock, SIOCGIFCONF , (char*) ifconf  )) < 0 )
-       _debug("get_iface_list error ioctl(SIOGIFCONF)\n");
+    if ( (rval = ioctl (sock, SIOCGIFCONF , (char*) ifconf)) < 0)
+        _debug ("get_iface_list error ioctl(SIOGIFCONF)\n");
 
-   close(sock);
+    close (sock);
 
-   return rval;
+    return rval;
 }
 
 
-std::vector<std::string> SIPVoIPLink::getAllIpInterfaceByName(void)
+std::vector<std::string> SIPVoIPLink::getAllIpInterfaceByName (void)
 {
     std::vector<std::string> ifaceList;
 
@@ -4465,30 +4662,31 @@ std::vector<std::string> SIPVoIPLink::getAllIpInterfaceByName(void)
     struct ifconf ifconf;
     int  nifaces;
 
-    // add the default 
-    ifaceList.push_back(std::string("default"));
+    // add the default
+    ifaceList.push_back (std::string ("default"));
 
-    memset(&ifconf,0,sizeof(ifconf));
+    memset (&ifconf,0,sizeof (ifconf));
     ifconf.ifc_buf = (char*) (ifreqs);
-    ifconf.ifc_len = sizeof(ifreqs);
+    ifconf.ifc_len = sizeof (ifreqs);
 
-    if(get_iface_list(&ifconf) < 0)
-        _debug("getAllIpInterfaceByName error could not get interface list\n");
+    if (get_iface_list (&ifconf) < 0)
+        _debug ("getAllIpInterfaceByName error could not get interface list\n");
 
-    nifaces =  ifconf.ifc_len/sizeof(struct ifreq);
+    nifaces =  ifconf.ifc_len/sizeof (struct ifreq);
 
-    _debug("Interfaces (count = %d):\n", nifaces);
-    for(int i = 0; i < nifaces; i++) {
-        _debug("  %s  ", ifreqs[i].ifr_name);
-	ifaceList.push_back(std::string (ifreqs[i].ifr_name));
-	printf("    %s\n", getInterfaceAddrFromName(std::string (ifreqs[i].ifr_name)).c_str());
+    _debug ("Interfaces (count = %d):\n", nifaces);
+
+    for (int i = 0; i < nifaces; i++) {
+        _debug ("  %s  ", ifreqs[i].ifr_name);
+        ifaceList.push_back (std::string (ifreqs[i].ifr_name));
+        printf ("    %s\n", getInterfaceAddrFromName (std::string (ifreqs[i].ifr_name)).c_str());
     }
 
-    return ifaceList;   
+    return ifaceList;
 }
 
 
-pj_bool_t stun_sock_on_status (pj_stun_sock *stun_sock, pj_stun_sock_op op, pj_status_t status)
+pj_bool_t stun_sock_on_status (pj_stun_sock *stun_sock UNUSED, pj_stun_sock_op op UNUSED, pj_status_t status)
 {
     if (status == PJ_SUCCESS)
         return PJ_TRUE;
@@ -4496,7 +4694,7 @@ pj_bool_t stun_sock_on_status (pj_stun_sock *stun_sock, pj_stun_sock_op op, pj_s
         return PJ_FALSE;
 }
 
-pj_bool_t stun_sock_on_rx_data (pj_stun_sock *stun_sock, void *pkt, unsigned pkt_len, const pj_sockaddr_t *src_addr, unsigned addr_len)
+pj_bool_t stun_sock_on_rx_data (pj_stun_sock *stun_sock UNUSED, void *pkt UNUSED, unsigned pkt_len UNUSED, const pj_sockaddr_t *src_addr UNUSED, unsigned addr_len UNUSED)
 {
     return PJ_TRUE;
 }
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index e99fca4d85a111f333105ce4e960bfc58231a5e4..ecb2e88790454e297e647a947320ef1ba50860da 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -37,7 +37,7 @@
 
 #include "voiplink.h"
 #include "hooks/urlhook.h"
-
+#include "../im/InstantMessaging.h"
 
 //////////////////////////////
 /* PJSIP imports */
@@ -77,7 +77,7 @@ class SIPVoIPLink : public VoIPLink
          * Singleton method. Enable to retrieve the unique static instance
          * @return SIPVoIPLink* A pointer on the object
          */
-        static SIPVoIPLink* instance( const AccountID& id );
+        static SIPVoIPLink* instance (const AccountID& id);
 
         /**
          * Destructor
@@ -85,40 +85,40 @@ class SIPVoIPLink : public VoIPLink
         ~SIPVoIPLink();
 
         /* Copy Constructor */
-        SIPVoIPLink(const SIPVoIPLink& rh);
+        SIPVoIPLink (const SIPVoIPLink& rh);
 
         /* Assignment Operator */
-        SIPVoIPLink& operator=( const SIPVoIPLink& rh);
+        SIPVoIPLink& operator= (const SIPVoIPLink& rh);
 
-        /** 
-         * Try to initiate the pjsip engine/thread and set config 
+        /**
+         * Try to initiate the pjsip engine/thread and set config
          * @return bool True if OK
          */
-        bool init(void);
+        bool init (void);
 
         /**
          * Shut the library and clean up
          */
-        void terminate( void );
+        void terminate (void);
 
         /**
          * Event listener. Each event send by the call manager is received and handled from here
          */
-        void getEvent(void);
+        void getEvent (void);
 
         /**
          * Build and send SIP registration request
          * @return bool True on success
          *		  false otherwise
          */
-        int sendRegister(AccountID id);
+        int sendRegister (AccountID id);
 
         /**
          * Build and send SIP unregistration request
          * @return bool True on success
          *		  false otherwise
          */
-        int sendUnregister(AccountID id);
+        int sendUnregister (AccountID id);
 
         /**
          * Place a new call
@@ -126,49 +126,49 @@ class SIPVoIPLink : public VoIPLink
          * @param toUrl  The Sip address of the recipient of the call
          * @return Call* The current call
          */
-        Call* newOutgoingCall(const CallID& id, const std::string& toUrl);
+        Call* newOutgoingCall (const CallID& id, const std::string& toUrl);
 
         /**
          * Answer the call
          * @param id The call identifier
          * @return int True on success
          */
-        bool answer(const CallID& id);
+        bool answer (const CallID& id);
 
         /**
          * Hang up the call
          * @param id The call identifier
          * @return bool True on success
          */
-        bool hangup(const CallID& id);
+        bool hangup (const CallID& id);
 
         /**
          * Hang up the call
          * @param id The call identifier
          * @return bool True on success
          */
-        bool peerHungup(const CallID& id);
+        bool peerHungup (const CallID& id);
 
         /**
          * Cancel the call
          * @param id The call identifier
          * @return bool True on success
          */
-        bool cancel(const CallID& id);
+        bool cancel (const CallID& id);
 
         /**
          * Put the call on hold
          * @param id The call identifier
          * @return bool True on success
          */
-        bool onhold(const CallID& id);
+        bool onhold (const CallID& id);
 
         /**
          * Put the call off hold
          * @param id The call identifier
          * @return bool True on success
          */
-        bool offhold(const CallID& id);
+        bool offhold (const CallID& id);
 
         /**
          * Transfer the call
@@ -176,10 +176,10 @@ class SIPVoIPLink : public VoIPLink
          * @param to The recipient of the transfer
          * @return bool True on success
          */
-        bool transfer(const CallID& id, const std::string& to);
+        bool transfer (const CallID& id, const std::string& to);
 
         /** Handle the incoming refer msg, not finished yet */
-        bool transferStep2(SIPCall* call);
+        bool transferStep2 (SIPCall* call);
 
         /**
          * Refuse the call
@@ -194,34 +194,34 @@ class SIPVoIPLink : public VoIPLink
          * @param code  The char code
          * @return bool True on success
          */
-        bool carryingDTMFdigits(const CallID& id, char code);
+        bool carryingDTMFdigits (const CallID& id, char code);
 
         /**
          * Send Dtmf using SIP INFO message
          */
-        bool dtmfSipInfo(SIPCall *call, char code);
+        bool dtmfSipInfo (SIPCall *call, char code);
 
         /**
          * Send Dtmf over RTP
          */
-        bool dtmfOverRtp(SIPCall* call, char code);
+        bool dtmfOverRtp (SIPCall* call, char code);
 
-        /** 
-         * Terminate every call not hangup | brutal | Protected by mutex 
+        /**
+         * Terminate every call not hangup | brutal | Protected by mutex
          */
-        void terminateSIPCall(); 
- 
+        void terminateSIPCall();
+
         /**
          * Terminate only one call
          */
-       void terminateOneCall(const CallID& id);
+        void terminateOneCall (const CallID& id);
 
         /**
          * Send an outgoing call invite
          * @param call  The current call
          * @return bool True if all is correct
          */
-        bool SIPOutgoingInvite(SIPCall* call);
+        bool SIPOutgoingInvite (SIPCall* call);
 
         /**
          * Start a SIP Call
@@ -229,32 +229,32 @@ class SIPVoIPLink : public VoIPLink
          * @param subject Undocumented
          * @return true if all is correct
          */
-        bool SIPStartCall(SIPCall* call, const std::string& subject);
+        bool SIPStartCall (SIPCall* call, const std::string& subject);
 
         /**
          * Tell the user that the call was answered
          * @param
          */
-        void SIPCallAnswered(SIPCall *call, pjsip_rx_data *rdata);
+        void SIPCallAnswered (SIPCall *call, pjsip_rx_data *rdata);
 
         /**
          * Handling 5XX/6XX error
-         * @param 
+         * @param
          */
-        void SIPCallServerFailure(SIPCall *call);
+        void SIPCallServerFailure (SIPCall *call);
 
         /**
          * Peer close the connection
          * @param
          */
-        void SIPCallClosed(SIPCall *call);
+        void SIPCallClosed (SIPCall *call);
 
         /**
          * The call pointer was released
          * If the call was not cleared before, report an error
          * @param
          */
-        void SIPCallReleased(SIPCall *call);
+        void SIPCallReleased (SIPCall *call);
 
         /**
          * Handle a re-invite request by the remote peer.
@@ -268,106 +268,121 @@ class SIPVoIPLink : public VoIPLink
          * @param id  The call identifier
          * @return SIPCall*	  A pointer on SIPCall object
          */
-        SIPCall* getSIPCall(const CallID& id);
+        SIPCall* getSIPCall (const CallID& id);
 
         /** when we init the listener, how many times we try to bind a port? */
         int _nbTryListenAddr;
 
         /** Increment the number of SIP account connected to this link */
-        void incrementClients (void) { _clients++; }
+        void incrementClients (void) {
+            _clients++;
+        }
 
         /** Decrement the number of SIP account connected to this link */
         void decrementClients (void);
 
- 	/**
-     	* Set Recording
-     	* @param id The call identifier
-     	*/
-    	void setRecording(const CallID& id);
-      
         /**
-     	* Returning state (true recording)
-     	* @param id The call identifier
-     	*/
-    	bool isRecording(const CallID& id);
+        	* Set Recording
+        	* @param id The call identifier
+        	*/
+        void setRecording (const CallID& id);
 
         /**
-         * Return the codec protocol used for this call 
+         * Returning state (true recording)
          * @param id The call identifier
          */
-         std::string getCurrentCodecName();
-      
+        bool isRecording (const CallID& id);
+
+        /**
+         * Return the codec protocol used for this call
+         * @param id The call identifier
+         */
+        std::string getCurrentCodecName();
+
         int inv_session_reinvite (SIPCall *call, std::string direction="");
-        
+
         bool new_ip_to_ip_call (const CallID& id, const std::string& to);
 
         std::string get_useragent_name (const AccountID& id);
 
-        /** 
-         * List all the interfaces on the system and return 
+        /**
+         * List all the interfaces on the system and return
          * a vector list containing their IPV4 address.
          * @param void
          * @return std::vector<std::string> A std::string vector
          * of IPV4 address available on all of the interfaces on
          * the system.
          */
-        std::vector<std::string> getAllIpInterface(void);
+        std::vector<std::string> getAllIpInterface (void);
 
 
-       	/** 
-         * List all the interfaces on the system and return 
-         * a vector list containing their name (eth0, eth0:1 ...).
-         * @param void
-         * @return std::vector<std::string> A std::string vector
-         * of interface name available on all of the interfaces on
-         * the system.
-         */
-        std::vector<std::string> getAllIpInterfaceByName(void);
+        /**
+        * List all the interfaces on the system and return
+        * a vector list containing their name (eth0, eth0:1 ...).
+        * @param void
+        * @return std::vector<std::string> A std::string vector
+        * of interface name available on all of the interfaces on
+        * the system.
+        */
+        std::vector<std::string> getAllIpInterfaceByName (void);
 
 
-	/** 
-         * List all the interfaces on the system and return 
-         * a vector list containing their name (eth0, eth0:1 ...).
-         * @param void
-         * @return std::vector<std::string> A std::string vector
-         * of interface name available on all of the interfaces on
-         * the system.
-         */
-	std::string getInterfaceAddrFromName(std::string ifaceName);
+        /**
+             * List all the interfaces on the system and return
+             * a vector list containing their name (eth0, eth0:1 ...).
+             * @param void
+             * @return std::vector<std::string> A std::string vector
+             * of interface name available on all of the interfaces on
+             * the system.
+             */
+        std::string getInterfaceAddrFromName (std::string ifaceName);
 
 
-	/**
-	 * Initialize the transport selector
-	 * @param transport		A transport associated with an account
-	 * @param tp_sel		A pointer to receive the transport selector structure
-	 *
-	 * @return pj_status_t		PJ_SUCCESS if the structure was successfully initialized
-	 */
-	pj_status_t init_transport_selector (pjsip_transport *transport, pjsip_tpselector **tp_sel);
+        /**
+         * Initialize the transport selector
+         * @param transport		A transport associated with an account
+         * @param tp_sel		A pointer to receive the transport selector structure
+         *
+         * @return pj_status_t		PJ_SUCCESS if the structure was successfully initialized
+         */
+        pj_status_t init_transport_selector (pjsip_transport *transport, pjsip_tpselector **tp_sel);
 
-	/**
-	 * Requests PJSIP library for local IP address, using pj_gethostbyname()
-	 * @param addr*                 A string to be initialized
-	 *
-	 * @return bool                 True if addr successfully initialized
-	 */
+        /**
+         * Requests PJSIP library for local IP address, using pj_gethostbyname()
+         * @param addr*                 A string to be initialized
+         *
+         * @return bool                 True if addr successfully initialized
+         */
         bool loadSIPLocalIP (std::string *addr);
 
 
-	/**
-	 * This function unset the transport for a given account. It tests wether the 
-	 * associated transport is used by other accounts. If not, it shutdown the transport
-	 * putting its reference counter to zero. PJSIP assumes transport destruction since 
-	 * this action can be delayed by ongoing SIP transactions.
-	 */
-	void shutdownSipTransport(const AccountID& accountID);
+        /**
+         * This function unset the transport for a given account. It tests wether the
+         * associated transport is used by other accounts. If not, it shutdown the transport
+         * putting its reference counter to zero. PJSIP assumes transport destruction since
+         * this action can be delayed by ongoing SIP transactions.
+         */
+        void shutdownSipTransport (const AccountID& accountID);
+
+
+        /**
+         * Send a SIP message to a call identified by its callid
+         *
+        * @param The InstantMessaging module which contains formating, parsing and sending method
+         * @param The Id of the call to send the message to
+         * @param The actual message to be transmitted
+         * @param The sender of this message (could be another participant of a conference)
+         *
+         * @return True if the message is sent without error, false elsewhere
+         */
+        bool sendTextMessage (sfl::InstantMessaging *module, const std::string& callID, const std::string& message, const std::string& from);
 
     private:
         /**
          * Constructor
          * @param accountID The account identifier
          */
-        SIPVoIPLink(const AccountID& accountID);
+        SIPVoIPLink (const AccountID& accountID);
 
         /* The singleton instance */
         static SIPVoIPLink* _instance;
@@ -381,9 +396,9 @@ class SIPVoIPLink : public VoIPLink
          */
         pj_status_t enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_resolver ** p_resv);
 
-        void busy_sleep(unsigned msec);
+        void busy_sleep (unsigned msec);
 
-        /** 
+        /**
          * Initialize the PJSIP library
          * Must be called before any other calls to the SIP layer
          *
@@ -394,118 +409,121 @@ class SIPVoIPLink : public VoIPLink
         /**
          * Delete link-related stuff like calls
          */
-        bool pjsip_shutdown(void);
+        bool pjsip_shutdown (void);
 
         pj_status_t stunServerResolve (AccountID id);
 
 
-	/**
-	 * Function used to create a new sip transport or get an existing one from the map.
-	 * The SIP transport is "acquired" according to account's current settings.
-	 * This function should be called before registering an account
-	 * @param accountID An account id for which transport is to be set
-	 *
-	 * @return bool True if the account is succesfully created or successfully obtained 
-	 * from the transport map
-	 */
-	bool acquireTransport(const AccountID& accountID);
-
-
-	/**
-	 * Create the default UDP transport according ot Ip2Ip profile settings
-	 */
-	bool createDefaultSipUdpTransport();
-
-
-	/**
-	 * Create the default TLS litener using IP2IP_PROFILE settings
-	 */
-	void createDefaultSipTlsListener();
-
-
-	/**
-	 * Create the default TLS litener according to account settings.
-	 */
-	void createTlsListener(const AccountID& accountID);
-
-
-	/**
-	 * General Sip transport creation method according to the 
-	 * transport type specified in account settings
-	 * @param id The account id for which a transport must
-     * be created.
-	 */
-	bool createSipTransport(AccountID id);
-
-
-	/**
-	 * Method to store newly created UDP transport in internal transport map. 
-	 * Transports are stored in order to retreive them in case
-	 * several accounts would share the same port number for UDP transprt.
-	 * @param key The transport's port number
-	 * @param transport A pointer to the UDP transport
-	 */
-	bool addTransportToMap(std::string key, pjsip_transport* transport);
-
-     /**
-	 * Create SIP UDP transport from account's setting
-	 * @param id The account id for which a transport must
-     * be created.
-	 * @return pj_status_t PJ_SUCCESS on success 
-	 */
+        /**
+         * Function used to create a new sip transport or get an existing one from the map.
+         * The SIP transport is "acquired" according to account's current settings.
+         * This function should be called before registering an account
+         * @param accountID An account id for which transport is to be set
+         *
+         * @return bool True if the account is successfully created or successfully obtained
+         * from the transport map
+         */
+        bool acquireTransport (const AccountID& accountID);
+
+
+        /**
+         * Create the default UDP transport according ot Ip2Ip profile settings
+         */
+        bool createDefaultSipUdpTransport();
+
+
+        /**
+         * Create the default TLS litener using IP2IP_PROFILE settings
+         */
+        void createDefaultSipTlsListener();
+
+
+        /**
+         * Create the default TLS litener according to account settings.
+         */
+        void createTlsListener (const AccountID& accountID);
+
+
+        /**
+         * General Sip transport creation method according to the
+         * transport type specified in account settings
+         * @param id The account id for which a transport must
+         * be created.
+         */
+        bool createSipTransport (AccountID id);
+
+
+        /**
+         * Method to store newly created UDP transport in internal transport map.
+         * Transports are stored in order to retreive them in case
+         * several accounts would share the same port number for UDP transprt.
+         * @param key The transport's port number
+         * @param transport A pointer to the UDP transport
+         */
+        bool addTransportToMap (std::string key, pjsip_transport* transport);
+
+        /**
+        * Create SIP UDP transport from account's setting
+        * @param id The account id for which a transport must
+        * be created.
+        * @return pj_status_t PJ_SUCCESS on success
+        */
         int createUdpTransport (AccountID = "");
 
-     /**
-      * Create a TLS transport from the default TLS listener from
-      * @param id The account id for which a transport must
-      * be created.
-      * @return pj_status_t PJ_SUCCESS on success
-      */
-     pj_status_t createTlsTransport(const AccountID& id,  std::string remoteAddr);
-
-	/**
-     * Create a UDP transport using stun server to resove public address
-     * @param id The account id for which a transport must
-     * be created.
-     * @return pj_status_t PJ_SUCCESS on success
-     */
-	pj_status_t createAlternateUdpTransport (AccountID id);
-
-
-	/** 
-	 * UDP Transports are stored in this map in order to retreive them in case
-	 * several accounts would share the same port number.
-	 */
-	SipTransportMap _transportMap;
-
-	/** For registration use only */
-	int _regPort;
-
-	/** Threading object */
-	EventThread* _evThread;
-	ost::Mutex _mutexSIP;
-
-    /* Number of SIP accounts connected to the link */
-    int _clients;
-        
-    /*
-     * Get the correct address to use (ie advertised) from
-         * a uri. The corresponding transport that should be used
-         * with that uri will be discovered. 
-         *
-         * @param uri The uri from which we want to discover the address to use
-         * @param transport The transport to use to discover the address 
-         * @return pj_str_t The extern (public) address
+        /**
+         * Create a TLS transport from the default TLS listener from
+         * @param id The account id for which a transport must
+         * be created.
+         * @return pj_status_t PJ_SUCCESS on success
          */
-        std::string findLocalAddressFromUri(const std::string& uri, pjsip_transport *transport);
-        
-        /* 
+        pj_status_t createTlsTransport (const AccountID& id,  std::string remoteAddr);
+
+        /**
+         * Create a UDP transport using stun server to resove public address
+         * @param id The account id for which a transport must
+         * be created.
+         * @return pj_status_t PJ_SUCCESS on success
+         */
+        pj_status_t createAlternateUdpTransport (AccountID id);
+
+
+        /**
+         * UDP Transports are stored in this map in order to retreive them in case
+         * several accounts would share the same port number.
+         */
+        SipTransportMap _transportMap;
+
+        /** For registration use only */
+        int _regPort;
+
+        /** Threading object */
+        EventThread* _evThread;
+        ost::Mutex _mutexSIP;
+
+        /* Number of SIP accounts connected to the link */
+        int _clients;
+
+        /*
+         * Get the correct address to use (ie advertised) from
+             * a uri. The corresponding transport that should be used
+             * with that uri will be discovered.
+             *
+             * @param uri The uri from which we want to discover the address to use
+             * @param transport The transport to use to discover the address
+             * @return pj_str_t The extern (public) address
+             */
+        std::string findLocalAddressFromUri (const std::string& uri, pjsip_transport *transport);
+
+        /*
          * Does the same as findLocalAddressFromUri but returns a port.
          * @param uri The uri from which we want to discover the port to use
-         * @param transport The transport to use to discover the port 
+         * @param transport The transport to use to discover the port
          * @return int The extern (public) port
          */
-        int findLocalPortFromUri(const std::string& uri, pjsip_transport *transport);
+        int findLocalPortFromUri (const std::string& uri, pjsip_transport *transport);
+
+
+        friend class SIPTest;
 };
 
 
diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h
index 0aa294c5466ed3dcb1e5447e89c320336b142796..980881f889bbfa09f2ed8d2b4a7d77df59d4c486 100644
--- a/sflphone-common/src/user_cfg.h
+++ b/sflphone-common/src/user_cfg.h
@@ -46,9 +46,13 @@
 #define CODECS                              "ActiveCodecs"	        /** List of active codecs */
 #define ALSA_CARD_ID_IN	                    "Alsa.cardID_In"            /** Soundcard index to use for capture */
 #define ALSA_CARD_ID_OUT                    "Alsa.cardID_Out"           /** Soundcard index to use for playback */
+#define ALSA_CARD_ID_RING                   "Alsa.cardID_Ring"           /** Soundcard index to use for ringtone */
 #define ALSA_FRAME_SIZE	                    "Alsa.framesize"            /** Audio layer frame size */
 #define ALSA_PLUGIN	                    "Alsa.plugin"	        /** Alsa plugin */
 #define AUDIO_SAMPLE_RATE                   "Alsa.sampleRate"          /** Audio layer sample rate */
+#define PULSE_DEVICE_PLAYBACK               "Pulse.devicePlayback"
+#define PULSE_DEVICE_RECORD                 "Pulse.deviceRecord"
+#define PULSE_DEVICE_RINGTONE               "Pulse.deviceRingtone"
 #define RING_CHOICE	                    "Rings.ringChoice"          /** Ringtone */
 #define VOLUME_SPKR	                    "Volume.speakers"           /** Speaker volume */
 #define VOLUME_MICRO                        "Volume.micro"	            /** Mic volume */
@@ -77,10 +81,9 @@
 #define WINDOW_POSITION_Y					"Window.positionY"
 #define SHOW_STATUSICON						"Statusicon.show"
 
-
-#define IP2IP_PROFILE                       "IP2IP"    
+#define IP2IP_PROFILE                       "IP2IP"
 #define SIGNALISATION                       "VoIPLink"	                /** Section Signalisation */
-#define ZRTP_ZIDFILE                        "ZRTP.zidFile"              /** The filename used for storing ZIDs */
+#define ZRTP_ZIDFILE                        "zidFile"                   /** The filename used for storing ZIDs */
 #define PLAY_DTMF		            "DTMF.playDtmf"	            /** Whether or not should play dtmf */
 #define PLAY_TONES		            "DTMF.playTones"            /** Whether or not should play tones */
 #define PULSE_LENGTH                        "DTMF.pulseLength"          /** Length of the DTMF in millisecond */
@@ -101,11 +104,11 @@
 #define URLHOOK_COMMAND                     "Hooks.url_command"
 #define URLHOOK_SIP_ENABLED                 "Hooks.sip_enabled"
 #define URLHOOK_IAX2_ENABLED                "Hooks.iax2_enabled"
-#define PHONE_NUMBER_HOOK_ENABLED           "Hooks.phone_number_enabled"    
+#define PHONE_NUMBER_HOOK_ENABLED           "Hooks.phone_number_enabled"
 #define PHONE_NUMBER_HOOK_ADD_PREFIX        "Hooks.phone_number_add_prefix"
 
 #define EMPTY_FIELD		            ""		      /** Default value for empty field */
-#define DEFAULT_ACCOUNT_TYPE                "SIP"		
+#define DEFAULT_ACCOUNT_TYPE                "SIP"
 #define DFT_STUN_SERVER 	            "stun.sflphone.org"	 /** Default STUN server address */
 #define	TRUE_STR			    "true"		 /** Default YES value */
 #define	FALSE_STR			    "false"		 /** Default NO value */
diff --git a/sflphone-common/src/video/Makefile.am b/sflphone-common/src/video/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..b7a60a35b6d3e5f440656a835268f4e42a8f4e13
--- /dev/null
+++ b/sflphone-common/src/video/Makefile.am
@@ -0,0 +1,35 @@
+include $(top_srcdir)/globals.mak
+
+SUBDIRS = decoder rtp
+
+AM_CXXFLAGS = $(GSTREAMER_CFLAGS)
+
+noinst_LTLIBRARIES = libvideo.la
+
+libvideo_la_SOURCES = \
+	VideoInputSource.cpp \
+	VideoInputSourceGst.cpp  \
+	VideoEndpoint.cpp \
+	VideoFrame.cpp  \
+	FrameFormat.cpp \
+	VideoDevice.cpp \
+	GstVideoDevice.cpp
+
+libvideo_la_LIBADD = \
+	decoder/libvideodecoder.la \
+	rtp/libvideortp.la
+
+libvideo_la_LDFLAGS = $(GSTREAMER_LIBS) $(LIBS)
+
+noinst_HEADERS = \
+	VideoInputSource.h \
+	VideoInputSourceGst.h \
+	VideoEndpoint.h \
+	FrameFormat.h \
+	VideoDevice.h \
+	VideoFrame.h \
+	FrameFormat.h \
+	VideoDevice.h \
+	GstVideoDevice.h
+					
+
diff --git a/sflphone-common/src/video/decoder/Makefile.am b/sflphone-common/src/video/decoder/Makefile.am
new file mode 100644
index 0000000000000000000000000000000000000000..6dbf239905378d107cecb4bd6acef0e015955aad
--- /dev/null
+++ b/sflphone-common/src/video/decoder/Makefile.am
@@ -0,0 +1,17 @@
+include $(top_srcdir)/globals.mak
+
+AM_CXXFLAGS = $(LIBAVCODEC_CFLAGS) $(LIBSWSCALE_CFLAGS)
+
+noinst_LTLIBRARIES = libvideodecoder.la
+
+libvideodecoder_la_SOURCES = \
+		H264Decoder.cpp \
+		VideoDecoder.cpp
+		
+noinst_HEADERS = \
+		VideoDecoder.h \
+		H264Decoder.h
+			
+libvideodecoder_la_LDFLAGS = $(LIBAVCODEC_LIBS) $(LIBSWSCALE_LIBS) $(LIBS)
+
+libvideodecoder_la_LIBADD = $(LIBAVCODEC_LIBS) $(LIBSWSCALE_LIBS) $(LIBS)
\ No newline at end of file
diff --git a/sflphone-common/src/voiplink.h b/sflphone-common/src/voiplink.h
index e0d9bd6bdfc0de4f7ce4e780869479ba7736e8ff..f4bcecc2b7646da29cb8f8cc01d60a608c8d3efb 100644
--- a/sflphone-common/src/voiplink.h
+++ b/sflphone-common/src/voiplink.h
@@ -49,13 +49,14 @@ typedef std::map<CallID, Call*> CallMap;
  * @file voiplink.h
  * @brief Listener and manager interface for each VoIP protocol
  */
-class VoIPLink {
+class VoIPLink
+{
     public:
         /**
          * Constructor
          * @param accountID The account identifier
          */
-        VoIPLink(const AccountID& accountID);
+        VoIPLink (const AccountID& accountID);
 
         /**
          * Virtual destructor
@@ -69,9 +70,9 @@ class VoIPLink {
          */
         virtual void getEvent (void) = 0;
 
-        /** 
+        /**
          * Virtual method
-         * Try to initiate the communication layer and set config 
+         * Try to initiate the communication layer and set config
          * @return bool True if OK
          */
         virtual bool init (void) = 0;
@@ -88,7 +89,7 @@ class VoIPLink {
          * @return bool True on success
          *		  false otherwise
          */
-        virtual int sendRegister ( AccountID id ) = 0;
+        virtual int sendRegister (AccountID id) = 0;
 
         /**
          * Virtual method
@@ -96,7 +97,7 @@ class VoIPLink {
          * @return bool True on success
          *		  false otherwise
          */
-        virtual int sendUnregister ( AccountID id ) = 0;
+        virtual int sendUnregister (AccountID id) = 0;
 
         /**
          * Place a new call
@@ -104,49 +105,49 @@ class VoIPLink {
          * @param toUrl  The address of the recipient of the call
          * @return Call* The current call
          */
-        virtual Call* newOutgoingCall(const CallID& id, const std::string& toUrl) = 0;
+        virtual Call* newOutgoingCall (const CallID& id, const std::string& toUrl) = 0;
 
         /**
          * Answer the call
          * @param id The call identifier
          * @return bool True on success
          */
-        virtual bool answer(const CallID& id) = 0;
+        virtual bool answer (const CallID& id) = 0;
 
         /**
          * Hang up a call
          * @param id The call identifier
          * @return bool True on success
          */
-        virtual bool hangup(const CallID& id) = 0;
+        virtual bool hangup (const CallID& id) = 0;
 
-         /**
-         * Peer Hung up a call
-         * @param id The call identifier
-         * @return bool True on success
-         */
-        virtual bool peerHungup(const CallID& id) = 0;
+        /**
+        * Peer Hung up a call
+        * @param id The call identifier
+        * @return bool True on success
+        */
+        virtual bool peerHungup (const CallID& id) = 0;
 
         /**
          * Cancel the call dialing
          * @param id The call identifier
          * @return bool True on success
          */
-        virtual bool cancel(const CallID& id) = 0;
+        virtual bool cancel (const CallID& id) = 0;
 
         /**
          * Put a call on hold
          * @param id The call identifier
          * @return bool True on success
          */
-        virtual bool onhold(const CallID& id) = 0;
+        virtual bool onhold (const CallID& id) = 0;
 
         /**
          * Resume a call from hold state
          * @param id The call identifier
          * @return bool True on success
          */
-        virtual bool offhold(const CallID& id) = 0;
+        virtual bool offhold (const CallID& id) = 0;
 
         /**
          * Transfer a call to specified URI
@@ -154,14 +155,14 @@ class VoIPLink {
          * @param to The recipient of the call
          * @return bool True on success
          */
-        virtual bool transfer(const CallID& id, const std::string& to) = 0;
+        virtual bool transfer (const CallID& id, const std::string& to) = 0;
 
         /**
          * Refuse incoming call
          * @param id The call identifier
          * @return bool True on success
          */
-        virtual bool refuse(const CallID& id) = 0;
+        virtual bool refuse (const CallID& id) = 0;
 
         /**
          * Send DTMF
@@ -169,40 +170,44 @@ class VoIPLink {
          * @param code  The char code
          * @return bool True on success
          */
-        virtual bool carryingDTMFdigits(const CallID& id, char code) = 0;
+        virtual bool carryingDTMFdigits (const CallID& id, char code) = 0;
 
-    	/**
-     	* Set Recording
-     	* @param id The call identifier
-     	*/
-    	// virtual void setRecording(const CallID& id) = 0;
+        /**
+         * Set Recording
+         * @param id The call identifier
+         */
+        // virtual void setRecording(const CallID& id) = 0;
 
         /**
-     	* Return recording state
-     	* @param id The call identifier
-     	*/
-    	// virtual bool isRecording(const CallID& id) = 0;
+         * Return recording state
+         * @param id The call identifier
+         */
+        // virtual bool isRecording(const CallID& id) = 0;
 
         /**
-         * Return the codec protocol used for this call 
+         * Return the codec protocol used for this call
          * @param id The call identifier
          */
         virtual std::string getCurrentCodecName() = 0;
 
-        bool initDone (void) { return _initDone; }
-        void initDone (bool state) { _initDone = state; }
+        bool initDone (void) {
+            return _initDone;
+        }
+        void initDone (bool state) {
+            _initDone = state;
+        }
 
         /** Add a call to the call map (protected by mutex)
          * @param call A call pointer with a unique pointer
          * @return bool True if the call was unique and added
          */
-        bool addCall(Call* call);
+        bool addCall (Call* call);
 
         /** Remove a call from the call map (protected by mutex)
          * @param id A Call ID
          * @return bool True if the call was correctly removed
          */
-        bool removeCall(const CallID& id);
+        bool removeCall (const CallID& id);
 
         /**
          * Remove all the call from the map
@@ -213,21 +218,25 @@ class VoIPLink {
         /**
          * @return AccountID  parent Account's ID
          */
-        inline AccountID& getAccountID(void) { return _accountID; }
+        inline AccountID& getAccountID (void) {
+            return _accountID;
+        }
 
-        Account* getAccountPtr(void);
+        Account* getAccountPtr (void);
 
         /**
          * @param accountID The account identifier
          */
-        inline void setAccountID( const AccountID& accountID) { _accountID = accountID; }
+        inline void setAccountID (const AccountID& accountID) {
+            _accountID = accountID;
+        }
 
-        /** 
+        /**
          * Get the call pointer from the call map (protected by mutex)
          * @param id A Call ID
          * @return Call*  Call pointer or 0
          */
-        Call* getCall(const CallID& id);
+        Call* getCall (const CallID& id);
 
     private:
         /**
diff --git a/sflphone-common/test/Makefile.am b/sflphone-common/test/Makefile.am
index c2371cd96a0f32b938b6be9b31d5cfb48021443d..a4ef53667347f4b4b83ed8972228e4842783ea13 100644
--- a/sflphone-common/test/Makefile.am
+++ b/sflphone-common/test/Makefile.am
@@ -1,11 +1,12 @@
 include ../globals.mak
 
-TESTS = test
-check_PROGRAMS = $(TESTS)
+check_PROGRAMS = test
+
 test_CXXFLAGS = $(CPPUNIT_CFLAGS)
 test_LDADD = $(LLIBS)
-test_LDFLAGS = -ldl
-test_SOURCES = main.cpp \
+
+test_SOURCES = \
+	main.cpp \
 	validator.cpp \
 	validator.h \
 	accounttest.h \
@@ -18,34 +19,21 @@ test_SOURCES = main.cpp \
 	historytest.cpp \
 	hookmanagertest.h \
 	hookmanagertest.cpp \
-	mainbuffertest.h \
-	mainbuffertest.cpp \
 	numbercleanertest.h \
 	numbercleanertest.cpp \
 	pluginmanagertest.h \
 	pluginmanagertest.cpp \
+	siptest.h \
+	siptest.cpp \
 	rtptest.h \
 	rtptest.cpp \
 	sdesnegotiatortest.h \
-	sdesnegotiatortest.cpp
-
-
-
+	sdesnegotiatortest.cpp \
+	delaydetectiontest.h \
+	delaydetectiontest.cpp \
+	instantmessagingtest.cpp
 
 LLIBS=$(CPPUNIT_LIBS) \
-	../src/libsflphone.la  \
-	$(ZEROCONFLIB) \
-	$(LIB_DNSSD) \
-	@ALSA_LIBS@ \
-	@PULSEAUDIO_LIBS@ \
-	@CPPUNIT_LIBS@ \
-	@CCEXT2_LIBS@ \
-	@CCGNU2_LIBS@ \
-	@CCRTP_LIBS@ \
-	@ZRTPCPP_LIBS@ \
-	@libssl_LIBS@ \
-	@SAMPLERATE_LIBS@ \
-	$(PJSIP_LIBS) \
 	../src/sflphoned-logger.o \
 	../src/sflphoned-managerimpl.o \
 	../src/sflphoned-account.o\
@@ -57,15 +45,5 @@ LLIBS=$(CPPUNIT_LIBS) \
 	../src/sflphoned-numbercleaner.o \
 	../src/sflphoned-observer.o \
 	../src/sflphoned-voiplink.o \
-	../src/sip/libsiplink_la-sipcall.o \
-	../src/iax/libiaxlink_la-iaxcall.o \
-	../src/sip/libsiplink_la-sipvoiplink.o \
-	../src/iax/libiaxlink_la-iaxvoiplink.o \
-	../src/sip/libsiplink_la-sipaccount.o \
-	../src/iax/libiaxlink_la-iaxaccount.o \
-	../src/sip/libsiplink_la-sdp.o \
-	../src/sip/libsiplink_la-sdpmedia.o \
-	../src/plug-in/pluginmanager.o \
-	../src/plug-in/audiorecorder/audiorecord.o \
-	../src/audio/samplerateconverter.o \
-    ../src/history/historymanager.o
\ No newline at end of file
+	../src/sflphoned-preferences.o \
+	../src/libsflphone.la
diff --git a/sflphone-common/test/accounttest.cpp b/sflphone-common/test/accounttest.cpp
index dc905e9a8c040aac9bee05f3edca3a723159fa72..b315c2a4197a3449895a583aa8e80ff69659e74e 100644
--- a/sflphone-common/test/accounttest.cpp
+++ b/sflphone-common/test/accounttest.cpp
@@ -35,18 +35,19 @@
 #include "logger.h"
 #include "validator.h"
 
-void AccountTest::TestAddRemove(void) {
-	_debug ("-------------------- AccountTest::TestAddRemove --------------------\n");
+void AccountTest::TestAddRemove (void)
+{
+    _debug ("-------------------- AccountTest::TestAddRemove --------------------\n");
 
-	std::map<std::string, std::string> details;
-	details[CONFIG_ACCOUNT_TYPE] = "SIP";
-	details[CONFIG_ACCOUNT_ENABLE] = "false";
+    std::map<std::string, std::string> details;
+    details[CONFIG_ACCOUNT_TYPE] = "SIP";
+    details[CONFIG_ACCOUNT_ENABLE] = "false";
 
-	std::string accountId = Manager::instance().addAccount(details);
-	CPPUNIT_ASSERT(Validator::isNotNull(accountId));
-	CPPUNIT_ASSERT(Manager::instance().accountExists(accountId));
+    std::string accountId = Manager::instance().addAccount (details);
+    CPPUNIT_ASSERT (Validator::isNotNull (accountId));
+    CPPUNIT_ASSERT (Manager::instance().accountExists (accountId));
 
-	Manager::instance().removeAccount(accountId);
+    Manager::instance().removeAccount (accountId);
 
-	CPPUNIT_ASSERT(!Manager::instance().accountExists(accountId));
+    CPPUNIT_ASSERT (!Manager::instance().accountExists (accountId));
 }
diff --git a/sflphone-common/test/audiolayertest.cpp b/sflphone-common/test/audiolayertest.cpp
index 45a226ff5d25bed27a96693e7fae34a4b4b548bc..22dc4907f63460e4bcd01a9b6f1c049a40198b05 100644
--- a/sflphone-common/test/audiolayertest.cpp
+++ b/sflphone-common/test/audiolayertest.cpp
@@ -38,107 +38,102 @@
 using std::cout;
 using std::endl;
 
-void AudioLayerTest::testAudioLayerConfig() {
-	_debug ("-------------------- AudioLayerTest::testAudioLayerConfig --------------------\n");
+void AudioLayerTest::testAudioLayerConfig()
+{
+    _debug ("-------------------- AudioLayerTest::testAudioLayerConfig --------------------\n");
 
-	int sampling_rate = Manager::instance().getConfigInt(AUDIO,
-			AUDIO_SAMPLE_RATE);
-	int frame_size = Manager::instance().getConfigInt(AUDIO, ALSA_FRAME_SIZE);
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getSmplrate() == 44100);
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getFramesize() == 20);
 
-	int layer = Manager::instance().getAudioDriver()->getLayerType();
+    CPPUNIT_ASSERT( Manager::instance().getAudioDriver()->getLayerType() == PULSEAUDIO);
 
-	// if (layer != ALSA)
-	// 	Manager::instance().switchAudioManager();
+    // alsa preferences
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getCardin() == 0);
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getCardout() == 0);
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getCardring() == 0);
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getPlugin() == "default");
 
-	// TODO: Fix tests
-	//CPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getSampleRate() == sampling_rate);
+    // pulseaudio preferences
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getDevicePlayback() == "alsa_output.pci-0000_00_1b.0.analog-stereo");
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getDeviceRecord() == "alsa_input.pci-0000_00_1b.0.analog-stereo");
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getDeviceRingtone() == "alsa_output.pci-0000_00_1b.0.analog-stereo");
 
-	//CPPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getFrameSize() == frame_size);
-}
-
-void AudioLayerTest::testAudioLayerSwitch() {
-	_debug ("-------------------- AudioLayerTest::testAudioLayerSwitch --------------------\n");
-
-	int previous_layer = Manager::instance().getAudioDriver()->getLayerType();
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getVolumemic() == 100);
+    CPPUNIT_ASSERT( Manager::instance().audioPreference.getVolumespkr() == 100);
 
-	for (int i = 0; i < 2; i++) {
-		_debug ("iter - %i",i);
-		Manager::instance().switchAudioManager();
+    // TODO: Fix tests
+    //CPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getSampleRate() == sampling_rate);
 
-		if (previous_layer == ALSA) {
-			CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == PULSEAUDIO);
-		} else {
-			CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == ALSA);
-		}
-
-		previous_layer = Manager::instance().getAudioDriver()->getLayerType();
-
-		usleep(100000);
-	}
+    //CPPPUNIT_ASSERT ( (int) Manager::instance().getAudioDriver()->getFrameSize() == frame_size);
 }
 
-void AudioLayerTest::testPulseConnect() {
-	_debug ("-------------------- AudioLayerTest::testPulseConnect --------------------\n");
+void AudioLayerTest::testAudioLayerSwitch()
+{
+    _debug ("-------------------- AudioLayerTest::testAudioLayerSwitch --------------------\n");
 
-	if (Manager::instance().getAudioDriver()->getLayerType() == ALSA)
-		return;
+    int previous_layer = Manager::instance().getAudioDriver()->getLayerType();
 
-	ManagerImpl* manager;
-	manager = &Manager::instance();
+    for (int i = 0; i < 2; i++) {
+        _debug ("iter - %i",i);
+        Manager::instance().switchAudioManager();
 
-	_pulselayer = (PulseLayer*) Manager::instance().getAudioDriver();
+        if (previous_layer == ALSA) {
+            CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == PULSEAUDIO);
+        } else {
+            CPPUNIT_ASSERT (Manager::instance().getAudioDriver()->getLayerType() == ALSA);
+        }
 
-	CPPUNIT_ASSERT (_pulselayer->getLayerType() == PULSEAUDIO);
+        previous_layer = Manager::instance().getAudioDriver()->getLayerType();
 
-	std::string alsaPlugin;
-	int numCardIn, numCardOut, sampleRate, frameSize;
+        usleep (100000);
+    }
+}
 
-	alsaPlugin = manager->getConfigString(AUDIO, ALSA_PLUGIN);
-	numCardIn = manager->getConfigInt(AUDIO, ALSA_CARD_ID_IN);
-	numCardOut = manager->getConfigInt(AUDIO, ALSA_CARD_ID_OUT);
-	sampleRate = manager->getConfigInt(AUDIO, AUDIO_SAMPLE_RATE);
-	frameSize = manager->getConfigInt(AUDIO, ALSA_FRAME_SIZE);
+void AudioLayerTest::testPulseConnect()
+{
+    _debug ("-------------------- AudioLayerTest::testPulseConnect --------------------\n");
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
+    if (Manager::instance().getAudioDriver()->getLayerType() == ALSA) {
+        Manager::instance().switchAudioManager();
+    	usleep (100000);
+    }
 
-	_pulselayer->setErrorMessage(-1);
+    ManagerImpl* manager;
+    manager = &Manager::instance();
 
-	try {
-		CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true);
-	} catch (...) {
-		_debug ("Exception occured wile opening device! ");
-	}
+    _pulselayer = (PulseLayer*) Manager::instance().getAudioDriver();
 
-	usleep(100000);
+    CPPUNIT_ASSERT (_pulselayer->getLayerType() == PULSEAUDIO);
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
+    std::string alsaPlugin;
+    int numCardIn, numCardOut, numCardRing, sampleRate, frameSize;
 
-	_debug ("-------------------------- \n");
-	_pulselayer->startStream();
+    alsaPlugin = manager->audioPreference.getPlugin();
+    numCardIn = manager->audioPreference.getCardin();
+    numCardOut = manager->audioPreference.getCardout();
+    numCardRing = manager->audioPreference.getCardring();
+    sampleRate = manager->audioPreference.getSmplrate();
+    frameSize = manager->audioPreference.getFramesize();
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
+    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
+    CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
 
-	// Must return No error "PA_OK" == 1
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
+    _pulselayer->setErrorMessage (-1);
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->disconnectStream() == true);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->disconnectStream() == true);
+    try {
+        CPPUNIT_ASSERT (_pulselayer->openDevice (numCardIn, numCardOut, numCardRing, sampleRate, frameSize, SFL_PCM_BOTH, alsaPlugin) == true);
+    } catch (...) {
+        _debug ("Exception occured wile opening device! ");
+    }
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true);
+    sleep (1);
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
+    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream() == NULL);
+    CPPUNIT_ASSERT (_pulselayer->getRecordStream() == NULL);
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->connectStream() == true);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->connectStream() == true);
+    _pulselayer->startStream();
 
-	CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->getStreamState() == 1);
-	CPPUNIT_ASSERT (_pulselayer->getRecordStream()->getStreamState() == 1);
+    CPPUNIT_ASSERT (_pulselayer->getPlaybackStream()->pulseStream() != NULL);
+    CPPUNIT_ASSERT (_pulselayer->getRecordStream()->pulseStream() != NULL);
 
-	CPPUNIT_ASSERT (_pulselayer->disconnectAudioStream() == true);
 }
diff --git a/sflphone-common/test/configurationtest.cpp b/sflphone-common/test/configurationtest.cpp
index 23294f67ccb7b2316212cf823f709768b5db0f8a..e3ff1339dd21484864d768e64ced98d6d483e123 100644
--- a/sflphone-common/test/configurationtest.cpp
+++ b/sflphone-common/test/configurationtest.cpp
@@ -37,116 +37,250 @@
 using std::cout;
 using std::endl;
 
-void ConfigurationTest::testDefaultValueAudio() {
-	_debug ("-------------------- ConfigurationTest::testDefaultValueAudio() --------------------\n");
-
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_CARD_ID_IN) == ALSA_DFT_CARD);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_CARD_ID_OUT) == ALSA_DFT_CARD);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, AUDIO_SAMPLE_RATE) == DFT_SAMPLE_RATE);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_FRAME_SIZE) == DFT_FRAME_SIZE);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, ALSA_PLUGIN) == PCM_DEFAULT);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, VOLUME_SPKR) == DFT_VOL_SPKR_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (AUDIO, VOLUME_MICRO) == DFT_VOL_MICRO_STR);
+void ConfigurationTest::testDefaultValueAudio()
+{
+    _debug ("-------------------- ConfigurationTest::testDefaultValueAudio() --------------------\n");
+
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getCardin() == 0); // ALSA_DFT_CARD);
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getCardout() == 0); // ALSA_DFT_CARD);
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getSmplrate() == 44100); // DFT_SAMPLE_RATE);
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getFramesize() == 20); // DFT_FRAME_SIZE);
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getPlugin() == PCM_DEFAULT);
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getVolumespkr() == 100);
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getVolumemic() == 100);
+}
+
+void ConfigurationTest::testDefaultValuePreferences()
+{
+    _debug ("-------------------- ConfigurationTest::testDefaultValuePreferences --------------------\n");
+
+    CPPUNIT_ASSERT (Manager::instance().preferences.getZoneToneChoice() == DFT_ZONE);
 }
 
-void ConfigurationTest::testDefaultValuePreferences() {
-	_debug ("-------------------- ConfigurationTest::testDefaultValuePreferences --------------------\n");
-
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, ZONE_TONE) == DFT_ZONE);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_DIALPAD) == NO_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_RINGTONE) == YES_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_SEARCHBAR) == YES_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_START) == NO_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_POPUP) == NO_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_NOTIFY) == YES_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_MAIL_NOTIFY) == NO_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_VOLUME) == NO_STR);
-	//CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, REGISTRATION_EXPIRE) == DFT_EXPIRE_VALUE);
-	//CPPUNIT_ASSERT (Manager::instance().getConfigString (PREFERENCES, CONFIG_AUDIO) == DFT_AUDIO_MANAGER);
+void ConfigurationTest::testDefaultValueSignalisation()
+{
+    _debug ("-------------------- ConfigurationTest::testDefaultValueSignalisation --------------------\n");
+
+    CPPUNIT_ASSERT (Manager::instance().voipPreferences.getSymmetricRtp() == true);
+    CPPUNIT_ASSERT (Manager::instance().voipPreferences.getPlayDtmf() == true);
+    CPPUNIT_ASSERT (Manager::instance().voipPreferences.getPlayTones() == true);
+    CPPUNIT_ASSERT (Manager::instance().voipPreferences.getPulseLength() == 250);
+}
+
+void ConfigurationTest::testLoadSIPAccount()
+{
+    _debug ("-------------------- ConfigurationTest::testLoadSIPAccount --------------------\n");
+
+    AccountMap accounts;
+    Account *current;
+    std::ostringstream ss;
+    int nb_account; // Must be 1
 
+    // Load the account from the user file
+    nb_account = Manager::instance().loadAccountMap();
+    CPPUNIT_ASSERT_EQUAL (1, nb_account);
+    // Save the account information
+    accounts = Manager::instance()._accountMap;
+
+    AccountMap::iterator iter = accounts.begin();
+    CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == true);
+
+    while (iter != accounts.end()) {
+        current = iter->second;
+        CPPUNIT_ASSERT (iter->first == current->getAccountID());
+        CPPUNIT_ASSERT (0 == current->getVoIPLink());
+        iter++;
+    }
 }
 
-void ConfigurationTest::testDefaultValueSignalisation() {
-	_debug ("-------------------- ConfigurationTest::testDefaultValueSignalisation --------------------\n");
+void ConfigurationTest::testUnloadSIPAccount()
+{
+    _debug ("-------------------- ConfigurationTest::testUnloadSIPAccount --------------------\n");
+
+    AccountMap accounts;
+
+    // Load the accounts from the user file
+    Manager::instance().loadAccountMap();
+    // Unload the accounts
+    Manager::instance().unloadAccountMap();
+    // Save the account information
+    accounts = Manager::instance()._accountMap;
 
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , SYMMETRIC) == YES_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PLAY_DTMF) == YES_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PLAY_TONES) == YES_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , PULSE_LENGTH) == DFT_PULSE_LENGTH_STR);
-	CPPUNIT_ASSERT (Manager::instance().getConfigString (SIGNALISATION , SEND_DTMF_AS) == SIP_INFO_STR);
+    AccountMap::iterator iter = accounts.begin();
+    CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == false);
+
+    if (iter != accounts.end()) {
+        CPPUNIT_FAIL ("Unload account map failed\n");
+    }
 }
 
-void ConfigurationTest::testLoadSIPAccount() {
-	_debug ("-------------------- ConfigurationTest::testLoadSIPAccount --------------------\n");
-
-	AccountMap accounts;
-	Account *current;
-	std::ostringstream ss;
-	int nb_account; // Must be 1
-
-	// Load the account from the user file
-	nb_account = Manager::instance().loadAccountMap();
-	CPPUNIT_ASSERT_EQUAL (1, nb_account);
-	// Save the account information
-	accounts = Manager::instance()._accountMap;
-
-	AccountMap::iterator iter = accounts.begin();
-	CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == true);
-
-	while (iter != accounts.end()) {
-		current = iter->second;
-		CPPUNIT_ASSERT (iter->first == current->getAccountID());
-		CPPUNIT_ASSERT (0 == current->getVoIPLink());
-		iter++;
-	}
+void ConfigurationTest::testInitVolume()
+{
+    _debug ("-------------------- ConfigurationTest::testInitVolume --------------------\n");
+
+    Manager::instance().initVolume();
+
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getVolumespkr() == Manager::instance().getSpkrVolume());
+    CPPUNIT_ASSERT (Manager::instance().audioPreference.getVolumemic() == Manager::instance().getMicVolume());
 }
 
-void ConfigurationTest::testUnloadSIPAccount() {
-	_debug ("-------------------- ConfigurationTest::testUnloadSIPAccount --------------------\n");
+void ConfigurationTest::testInitAudioDriver()
+{
+    _debug ("-------------------- ConfigurationTest::testInitAudioDriver --------------------\n");
 
-	AccountMap accounts;
+    // Load the audio driver
+    Manager::instance().initAudioDriver();
 
-	// Load the accounts from the user file
-	Manager::instance().loadAccountMap();
-	// Unload the accounts
-	Manager::instance().unloadAccountMap();
-	// Save the account information
-	accounts = Manager::instance()._accountMap;
+    // Check the creation
 
-	AccountMap::iterator iter = accounts.begin();
-	CPPUNIT_ASSERT (Manager::instance().accountExists (iter->first) == false);
+    if (Manager::instance().getAudioDriver() == NULL)
+        CPPUNIT_FAIL ("Error while loading audio layer");
 
-	if (iter != accounts.end()) {
-		CPPUNIT_FAIL ("Unload account map failed\n");
-	}
+    // Check if it has been created with the right type
+    if (Manager::instance().preferences.getAudioApi() == ALSA)
+        CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), ALSA);
+    else if (Manager::instance().preferences.getAudioApi() == PULSEAUDIO)
+        CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), PULSEAUDIO);
+    else
+        CPPUNIT_FAIL ("Wrong audio layer type");
 }
 
-void ConfigurationTest::testInitVolume() {
-	_debug ("-------------------- ConfigurationTest::testInitVolume --------------------\n");
 
-	Manager::instance().initVolume();
+void ConfigurationTest::testYamlParser()
+{
+
+    Conf::YamlParser *parser;
+
+    try {
+
+        parser = new Conf::YamlParser ("ymlParser.yml");
+        parser->serializeEvents();
+        parser->composeEvents();
+        parser->constructNativeData();
+
+        delete parser;
+        parser = NULL;
+
+    } catch (Conf::YamlParserException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
 
-	CPPUNIT_ASSERT (Manager::instance().getConfigInt (AUDIO, VOLUME_SPKR) == Manager::instance().getSpkrVolume());
-	CPPUNIT_ASSERT (Manager::instance().getConfigInt (AUDIO, VOLUME_MICRO) == Manager::instance().getMicVolume());
 }
 
-void ConfigurationTest::testInitAudioDriver() {
-	_debug ("-------------------- ConfigurationTest::testInitAudioDriver --------------------\n");
+void ConfigurationTest::testYamlEmitter()
+{
+    Conf::YamlEmitter *emitter;
+
+    Conf::MappingNode accountmap (NULL);
+    Conf::MappingNode credentialmap (NULL);
+    Conf::MappingNode srtpmap (NULL);
+    Conf::MappingNode zrtpmap (NULL);
+    Conf::MappingNode tlsmap (NULL);
+
+
+    Conf::ScalarNode id ("Account:1278432417");
+    Conf::ScalarNode username ("181");
+    Conf::ScalarNode password ("pass181");
+    Conf::ScalarNode alias ("sfl-181");
+    Conf::ScalarNode hostname ("192.168.50.3");
+    Conf::ScalarNode enable ("true");
+    Conf::ScalarNode type ("SIP");
+    Conf::ScalarNode expire ("3600");
+    Conf::ScalarNode interface ("default");
+    Conf::ScalarNode port ("5060");
+    Conf::ScalarNode mailbox ("97");
+    Conf::ScalarNode publishAddr ("192.168.50.182");
+    Conf::ScalarNode publishPort ("5060");
+    Conf::ScalarNode sameasLocal ("true");
+    Conf::ScalarNode resolveOnce ("false");
+    Conf::ScalarNode codecs ("0/9/110/111/112/");
+    Conf::ScalarNode stunServer ("stun.sflphone.org");
+    Conf::ScalarNode stunEnabled ("false");
+    Conf::ScalarNode displayName ("Alexandre Savard");
+    Conf::ScalarNode dtmfType ("sipinfo");
+
+    Conf::ScalarNode count ("0");
+
+    Conf::ScalarNode srtpenabled ("false");
+    Conf::ScalarNode keyExchange ("sdes");
+    Conf::ScalarNode rtpFallback ("false");
+
+    Conf::ScalarNode displaySas ("false");
+    Conf::ScalarNode displaySasOnce ("false");
+    Conf::ScalarNode helloHashEnabled ("false");
+    Conf::ScalarNode notSuppWarning ("false");
+
+    Conf::ScalarNode tlsport ("");
+    Conf::ScalarNode certificate ("");
+    Conf::ScalarNode calist ("");
+    Conf::ScalarNode ciphers ("");
+    Conf::ScalarNode tlsenabled ("false");
+    Conf::ScalarNode tlsmethod ("TLSV1");
+    Conf::ScalarNode timeout ("0");
+    Conf::ScalarNode tlspassword ("");
+    Conf::ScalarNode privatekey ("");
+    Conf::ScalarNode requirecertif ("true");
+    Conf::ScalarNode server ("");
+    Conf::ScalarNode verifyclient ("true");
+    Conf::ScalarNode verifyserver ("true");
+
+    accountmap.setKeyValue (aliasKey, &alias);
+    accountmap.setKeyValue (typeKey, &type);
+    accountmap.setKeyValue (idKey, &id);
+    accountmap.setKeyValue (usernameKey, &username);
+    accountmap.setKeyValue (passwordKey, &password);
+    accountmap.setKeyValue (hostnameKey, &hostname);
+    accountmap.setKeyValue (accountEnableKey, &enable);
+    accountmap.setKeyValue (mailboxKey, &mailbox);
+    accountmap.setKeyValue (expireKey, &expire);
+    accountmap.setKeyValue (interfaceKey, &interface);
+    accountmap.setKeyValue (portKey, &port);
+    accountmap.setKeyValue (publishAddrKey, &publishAddr);
+    accountmap.setKeyValue (publishPortKey, &publishPort);
+    accountmap.setKeyValue (sameasLocalKey, &sameasLocal);
+    accountmap.setKeyValue (resolveOnceKey, &resolveOnce);
+    accountmap.setKeyValue (dtmfTypeKey, &dtmfType);
+    accountmap.setKeyValue (displayNameKey, &displayName);
+
+    accountmap.setKeyValue (srtpKey, &srtpmap);
+    srtpmap.setKeyValue (srtpEnableKey, &srtpenabled);
+    srtpmap.setKeyValue (keyExchangeKey, &keyExchange);
+    srtpmap.setKeyValue (rtpFallbackKey, &rtpFallback);
+
+    accountmap.setKeyValue (zrtpKey, &zrtpmap);
+    zrtpmap.setKeyValue (displaySasKey, &displaySas);
+    zrtpmap.setKeyValue (displaySasOnceKey, &displaySasOnce);
+    zrtpmap.setKeyValue (helloHashEnabledKey, &helloHashEnabled);
+    zrtpmap.setKeyValue (notSuppWarningKey, &notSuppWarning);
+
+    accountmap.setKeyValue (credKey, &credentialmap);
+    credentialmap.setKeyValue (credentialCountKey, &count);
+
+    accountmap.setKeyValue (tlsKey, &tlsmap);
+    tlsmap.setKeyValue (tlsPortKey, &tlsport);
+    tlsmap.setKeyValue (certificateKey, &certificate);
+    tlsmap.setKeyValue (calistKey, &calist);
+    tlsmap.setKeyValue (ciphersKey, &ciphers);
+    tlsmap.setKeyValue (tlsEnableKey, &tlsenabled);
+    tlsmap.setKeyValue (methodKey, &tlsmethod);
+    tlsmap.setKeyValue (timeoutKey, &timeout);
+    tlsmap.setKeyValue (tlsPasswordKey, &tlspassword);
+    tlsmap.setKeyValue (privateKeyKey, &privatekey);
+    tlsmap.setKeyValue (requireCertifKey, &requirecertif);
+    tlsmap.setKeyValue (serverKey, &server);
+    tlsmap.setKeyValue (verifyClientKey, &verifyclient);
+    tlsmap.setKeyValue (verifyServerKey, &verifyserver);
 
-	// Load the audio driver
-	Manager::instance().initAudioDriver();
+    try {
+        emitter = new Conf::YamlEmitter ("/tmp/ymlEmiter.txt");
 
-	// Check the creation
+        emitter->serializeAccount (&accountmap);
+        emitter->serializeAccount (&accountmap);
+        emitter->serializeData();
 
-	if (Manager::instance().getAudioDriver() == NULL)
-		CPPUNIT_FAIL ("Error while loading audio layer");
+        delete emitter;
+    } catch (Conf::YamlEmitterException &e) {
+        _error ("ConfigTree: %s", e.what());
+    }
 
-	// Check if it has been created with the right type
-	if (Manager::instance().getConfigInt(PREFERENCES, CONFIG_AUDIO) == ALSA)
-		CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), ALSA);
-	else if (Manager::instance().getConfigInt(PREFERENCES, CONFIG_AUDIO)
-			== PULSEAUDIO)
-		CPPUNIT_ASSERT_EQUAL (Manager::instance().getAudioDriver()->getLayerType(), PULSEAUDIO);
-	else
-		CPPUNIT_FAIL ("Wrong audio layer type");
 }
diff --git a/sflphone-common/test/configurationtest.h b/sflphone-common/test/configurationtest.h
old mode 100644
new mode 100755
index 1e2f572aa55ecd36324eb1672f0954a6f7badb94..84d840674fad87fcaf467925c05a9537a7983464
--- a/sflphone-common/test/configurationtest.h
+++ b/sflphone-common/test/configurationtest.h
@@ -50,6 +50,11 @@
 #include "audio/audiolayer.h"
 #include "global.h"
 #include "user_cfg.h"
+#include "config/yamlparser.h"
+#include "config/yamlemitter.h"
+#include "config/yamlnode.h"
+#include "sip/sipaccount.h"
+#include "account.h"
 
 class ConfigurationTest: public CppUnit::TestFixture {
 
@@ -57,11 +62,13 @@ class ConfigurationTest: public CppUnit::TestFixture {
 	 * Use cppunit library macros to add unit test the factory
 	 */
 CPPUNIT_TEST_SUITE( ConfigurationTest );
-		CPPUNIT_TEST( testInitVolume );
-		CPPUNIT_TEST( testDefaultValueAudio );
-		CPPUNIT_TEST( testDefaultValuePreferences );
-		CPPUNIT_TEST( testDefaultValueSignalisation );
-		CPPUNIT_TEST( testInitAudioDriver );
+//      CPPUNIT_TEST( testInitVolume );
+//      CPPUNIT_TEST( testDefaultValueAudio );
+//	CPPUNIT_TEST( testDefaultValuePreferences );
+//	CPPUNIT_TEST( testDefaultValueSignalisation );
+//	CPPUNIT_TEST( testInitAudioDriver );
+//      CPPUNIT_TEST( testYamlParser );
+	    CPPUNIT_TEST( testYamlEmitter );
 	CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -91,6 +98,10 @@ public:
 	void testInitVolume();
 
 	void testInitAudioDriver();
+
+	void testYamlParser();
+
+	void testYamlEmitter();	
 };
 /* Register our test module */
 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ConfigurationTest, "ConfigurationTest");
diff --git a/sflphone-common/test/constants.h b/sflphone-common/test/constants.h
index 5b3d0884f4c042d3b91b90325bab1f6d5aefb6aa..9272bfd7a86ce880201978b55996e88edcecff86 100644
--- a/sflphone-common/test/constants.h
+++ b/sflphone-common/test/constants.h
@@ -33,9 +33,9 @@
 
 #define YES_STR "1"
 #define NO_STR "0"
-#define HISTORY_SAMPLE  "history-sample"
+#define HISTORY_SAMPLE  "history-sample.tpl"
 #define HISTORY_SAMPLE_SIZE     3
-#define CONFIG_SAMPLE   "sflphonedrc-sample"
-#define HUGE_HISTORY_LIMIT      20000
+#define CONFIG_SAMPLE   "sflphoned-sample.yml"
+#define HUGE_HISTORY_LIMIT      999999999
 
 #endif /* CONSTANTS_H_ */
diff --git a/sflphone-common/test/delaydetectiontest.cpp b/sflphone-common/test/delaydetectiontest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c4bc3e26f7a41a045a14481cd59367a875f22c14
--- /dev/null
+++ b/sflphone-common/test/delaydetectiontest.cpp
@@ -0,0 +1,222 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "delaydetectiontest.h"
+
+#include <iostream>
+#include <math.h>
+#include <string.h>
+
+void DelayDetectionTest::setUp() {}
+
+void DelayDetectionTest::tearDown() {}
+
+void DelayDetectionTest::testCrossCorrelation()
+{
+    float signal[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0,  7.0, 8.0, 9.0};
+    float ref[3] = {0.0, 1.0, 2.0};
+
+    float result[10];
+    float expected[10] = {0.0, 0.89442719, 1.0, 0.95618289, 0.91350028, 0.88543774, 0.86640023, 0.85280287, 0.8426548, 0.83480969};
+
+    CPPUNIT_ASSERT (_delaydetect.correlate (ref, ref, 3) == 5.0);
+    CPPUNIT_ASSERT (_delaydetect.correlate (signal, signal, 10) == 285.0);
+
+    _delaydetect.crossCorrelate (ref, signal, result, 3, 10);
+
+    float tmp;
+
+    for (int i = 0; i < 10; i++) {
+        tmp = result[i]-expected[i];
+
+        if (tmp < 0.0)
+            CPPUNIT_ASSERT (tmp > -0.001);
+        else
+            CPPUNIT_ASSERT (tmp < 0.001);
+    }
+}
+
+void DelayDetectionTest::testCrossCorrelationDelay()
+{
+    float signal[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0,  0.0, 0.0, 0.0};
+    float ref[3] = {0.0, 1.0, 0.0};
+
+    float result[10];
+
+    _delaydetect.crossCorrelate (ref, signal, result, 3, 10);
+
+    float expected[10] = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0};
+
+}
+
+void DelayDetectionTest::testFirFilter()
+{
+    float decimationCoefs[] = {-0.09870257, 0.07473655, 0.05616626, 0.04448337, 0.03630817, 0.02944626,
+                               0.02244098, 0.01463477, 0.00610982, -0.00266367, -0.01120109, -0.01873722,
+                               -0.02373243, -0.02602213, -0.02437806, -0.01869834, -0.00875287, 0.00500204,
+                               0.02183252, 0.04065763, 0.06015944, 0.0788299, 0.09518543, 0.10799179,
+                               0.1160644,  0.12889288, 0.1160644, 0.10799179, 0.09518543, 0.0788299,
+                               0.06015944, 0.04065763, 0.02183252, 0.00500204, -0.00875287, -0.01869834,
+                               -0.02437806, -0.02602213, -0.02373243, -0.01873722, -0.01120109, -0.00266367,
+                               0.00610982, 0.01463477, 0.02244098, 0.02944626, 0.03630817, 0.04448337,
+                               0.05616626,  0.07473655, -0.09870257
+                              };
+    std::vector<double> ird (decimationCoefs, decimationCoefs + sizeof (decimationCoefs) /sizeof (float));
+
+    float bandpassCoefs[] = {0.06278034, -0.0758545, -0.02274943, -0.0084497, 0.0702427, 0.05986113,
+                             0.06436469, -0.02412049, -0.03433526, -0.07568665, -0.03214543, -0.07236507,
+                             -0.06979052, -0.12446371, -0.05530828, 0.00947243, 0.15294699, 0.17735563,
+                             0.15294699, 0.00947243, -0.05530828, -0.12446371, -0.06979052, -0.07236507,
+                             -0.03214543, -0.07568665, -0.03433526, -0.02412049,  0.06436469, 0.05986113,
+                             0.0702427, -0.0084497, -0.02274943, -0.0758545, 0.06278034
+                            };
+    std::vector<double> irb (bandpassCoefs, bandpassCoefs + sizeof (bandpassCoefs) /sizeof (float));
+
+    float impulse[100];
+    memset (impulse, 0, sizeof (float) *100);
+    impulse[0] = 1.0;
+
+    FirFilter _decimationFilter (ird);
+    FirFilter _bandpassFilter (irb);
+
+    float impulseresponse[100];
+    memset (impulseresponse, 0, sizeof (float) *100);
+
+    // compute impulse response
+    for (int i = 0; i < 100; i++) {
+        impulseresponse[i] = _decimationFilter.getOutputSample (impulse[i]);
+    }
+
+    float tmp;
+    int size = sizeof (decimationCoefs) /sizeof (float);
+
+    for (int i = 0; i < size; i++) {
+        tmp = decimationCoefs[i] - impulseresponse[i];
+
+        if (tmp < 0.0)
+            CPPUNIT_ASSERT (tmp > -0.000001);
+        else
+            CPPUNIT_ASSERT (tmp < 0.000001);
+    }
+
+
+    for (int i = 0; i < 100; i++) {
+        impulseresponse[i] = _bandpassFilter.getOutputSample (impulse[i]);
+    }
+
+    size = sizeof (bandpassCoefs) /sizeof (float);
+
+    for (int i = 0; i < size; i++) {
+        tmp = bandpassCoefs[i] - impulseresponse[i];
+
+        if (tmp < 0.0)
+            CPPUNIT_ASSERT (tmp > -0.000001);
+        else
+            CPPUNIT_ASSERT (tmp < 0.000001);
+    }
+
+}
+
+void DelayDetectionTest::testIntToFloatConversion()
+{
+
+    SFLDataFormat data[32768*2];
+    float converted[32768*2];
+
+    for (int i = -32768; i < 32768; i++)
+        data[i+32768] = i;
+
+    _delaydetect.convertInt16ToFloat32 (data, converted, 32768*2);
+
+    for (int i = -32768; i < 0; i++) {
+        CPPUNIT_ASSERT (converted[i+32768] >= -1.0);
+        CPPUNIT_ASSERT (converted[i+32768] <= 0.0);
+    }
+
+    for (int i = 0; i < 32768; i++) {
+        CPPUNIT_ASSERT (converted[i+32768] >= 0.0);
+        CPPUNIT_ASSERT (converted[i+32768] <= 1.0);
+    }
+}
+
+void DelayDetectionTest::testDownSamplingData()
+{
+
+    SFLDataFormat data[32768*2];
+    float converted[32768*2];
+    float resampled[32768*2];
+
+    for (int i = -32768; i < 32768; i++)
+        data[i+32768] = i;
+
+    _delaydetect.convertInt16ToFloat32 (data, converted, 32768*2);
+
+    _delaydetect.downsampleData (converted, resampled, 32768*2, 8);
+
+    for (int i = 0; i < 32768/8; i++) {
+        CPPUNIT_ASSERT (resampled[i] >= -1.0);
+        CPPUNIT_ASSERT (resampled[i] <= 0.0);
+    }
+
+    for (int i = 32768/8+1; i < 32768/4; i++) {
+        CPPUNIT_ASSERT (resampled[i] >= 0.0);
+        CPPUNIT_ASSERT (resampled[i] <= 1.0);
+    }
+
+
+}
+
+
+void DelayDetectionTest::testDelayDetection()
+{
+
+    int delay = 100;
+
+    SFLDataFormat spkr[WINDOW_SIZE];
+    memset (spkr, 0, sizeof (SFLDataFormat) *WINDOW_SIZE);
+    spkr[0] = 32000;
+    spkr[1] = 32000;
+    spkr[2] = 32000;
+    spkr[3] = 32000;
+    spkr[4] = 32000;
+
+    SFLDataFormat mic[DELAY_BUFF_SIZE];
+    memset (mic, 0, sizeof (SFLDataFormat) *DELAY_BUFF_SIZE);
+    mic[delay] = 32000;
+    mic[delay+1] = 32000;
+    mic[delay+2] = 32000;
+    mic[delay+3] = 32000;
+    mic[delay+4] = 32000;
+
+    _delaydetect.putData (spkr, WINDOW_SIZE*sizeof (SFLDataFormat));
+    _delaydetect.process (mic, DELAY_BUFF_SIZE*sizeof (SFLDataFormat));
+
+}
diff --git a/sflphone-common/test/delaydetectiontest.h b/sflphone-common/test/delaydetectiontest.h
new file mode 100644
index 0000000000000000000000000000000000000000..e0046b42c6352ad47a9af93c1dacc05bfe2e023a
--- /dev/null
+++ b/sflphone-common/test/delaydetectiontest.h
@@ -0,0 +1,112 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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.
+ */
+
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+#include <stdio.h>
+#include <sstream>
+#include <ccrtp/rtp.h>
+
+
+// pjsip import
+#include <pjsip.h>
+#include <pjlib.h>
+#include <pjsip_ua.h>
+#include <pjlib-util.h>
+#include <pjnath/stun_config.h>
+
+// Application import
+#include "manager.h"
+#include "audio/mainbuffer.h"
+#include "audio/ringbuffer.h"
+#include "call.h"
+// #include "config/config.h"
+// #include "user_cfg.h"
+
+
+#include "audio/delaydetection.h"
+
+#ifndef _DELAYDETECTION_TEST_
+#define _DELAYDETECTION_TEST_
+
+/*
+ * @file delaydetection.cpp  
+ * @brief       Regroups unitary tests related to the delay detection algorithm.
+ */
+
+class DelayDetectionTest : public CppUnit::TestCase {
+  
+    CPPUNIT_TEST_SUITE( DelayDetectionTest );
+      CPPUNIT_TEST( testCrossCorrelation );
+      CPPUNIT_TEST( testCrossCorrelationDelay );
+      CPPUNIT_TEST( testFirFilter );
+      CPPUNIT_TEST( testIntToFloatConversion );
+      CPPUNIT_TEST( testDownSamplingData );
+      CPPUNIT_TEST( testDelayDetection );
+    CPPUNIT_TEST_SUITE_END();
+
+ public: 
+
+    DelayDetectionTest() : CppUnit::TestCase("Delay Detection Tests") {}
+
+    void setUp();
+
+    inline void tearDown();
+
+    void testCrossCorrelation();
+
+    void testCrossCorrelationDelay();
+
+    void testFirFilter();
+
+    void testIntToFloatConversion();
+
+    void testDownSamplingData();
+
+    void testDelayDetection();
+
+ private:
+
+    DelayDetection _delaydetect;
+    
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(DelayDetectionTest, "DelayDetectionTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( DelayDetectionTest );
+
+#endif
diff --git a/sflphone-common/test/history-sample b/sflphone-common/test/history-sample
deleted file mode 100644
index a6f39f4ed3316e02f1d5d3b750efc16ad43276d5..0000000000000000000000000000000000000000
--- a/sflphone-common/test/history-sample
+++ /dev/null
@@ -1,21 +0,0 @@
-[144562436]
-accountid=
-name=Savoir-faire Linux
-number=514-276-5468
-timestamp_stop=144562458
-type=0
-
-[747638685]
-accountid=Account:1239059899
-name=Emmanuel Milou
-number=136
-timestamp_stop=747638765
-type=2
-
-[775354456]
-accountid=Account:43789459478
-name=
-number=5143848557
-timestamp_stop=775354987
-type=1
-
diff --git a/sflphone-common/test/history-sample.tpl b/sflphone-common/test/history-sample.tpl
index 221e449538f4d36e20f35bcb1c6d0dc1721e515e..a6f39f4ed3316e02f1d5d3b750efc16ad43276d5 100644
--- a/sflphone-common/test/history-sample.tpl
+++ b/sflphone-common/test/history-sample.tpl
@@ -1,20 +1,21 @@
 [144562436]
-number=514-276-5468
+accountid=
 name=Savoir-faire Linux
-type=0
+number=514-276-5468
 timestamp_stop=144562458
-accountid=
+type=0
 
 [747638685]
+accountid=Account:1239059899
 name=Emmanuel Milou
-timestamp_stop=747638765
 number=136
+timestamp_stop=747638765
 type=2
-accountid=Account:1239059899
 
 [775354456]
-number=5143848557
+accountid=Account:43789459478
 name=
+number=5143848557
 timestamp_stop=775354987
 type=1
-accountid=Account:43789459478
+
diff --git a/sflphone-common/test/historytest.cpp b/sflphone-common/test/historytest.cpp
index 8f0853c6a142b7ece063c455b97fb0369473b74e..0aa8e630e91a6be0ae5316f2035b115187540f03 100644
--- a/sflphone-common/test/historytest.cpp
+++ b/sflphone-common/test/historytest.cpp
@@ -39,188 +39,193 @@
 using std::cout;
 using std::endl;
 
-void HistoryTest::setUp() {
-	// Instanciate the cleaner singleton
-	history = new HistoryManager();
+void HistoryTest::setUp()
+{
+    // Instanciate the cleaner singleton
+    history = new HistoryManager();
 }
 
-void HistoryTest::test_create_history_path() {
-	_debug ("-------------------- HistoryTest::test_create_history_path --------------------\n");
+void HistoryTest::test_create_history_path()
+{
+    _debug ("-------------------- HistoryTest::test_create_history_path --------------------\n");
 
-	int result;
-	char *cpath;
-	std::string path;
+    int result;
+    char *cpath;
+    std::string path;
 
-	cpath = getenv("XDG_DATA_HOME");
-	(cpath != NULL) ? path = std::string(cpath) : path = std::string(HOMEDIR)
-			+ "/.local/share/sflphone/history";
+    cpath = getenv ("XDG_DATA_HOME");
+    (cpath != NULL) ? path = std::string (cpath) : path = std::string (HOMEDIR)
+                             + "/.local/share/sflphone/history";
 
-	result = history->create_history_path();
-	CPPUNIT_ASSERT (result == 0);
-	CPPUNIT_ASSERT (!history->is_loaded ());
-	CPPUNIT_ASSERT (history->_history_path == path);
+    result = history->create_history_path();
+    CPPUNIT_ASSERT (result == 0);
+    CPPUNIT_ASSERT (!history->is_loaded ());
+    CPPUNIT_ASSERT (history->_history_path == path);
 }
 
-void HistoryTest::test_load_history_from_file() {
-	_debug ("-------------------- HistoryTest::test_load_history_from_file --------------------\n");
+void HistoryTest::test_load_history_from_file()
+{
+    _debug ("-------------------- HistoryTest::test_load_history_from_file --------------------\n");
 
-	bool res;
-	Conf::ConfigTree history_list;
+    bool res;
+    Conf::ConfigTree history_list;
 
-	history->create_history_path();
-	res = history->load_history_from_file(&history_list);
+    history->create_history_path();
+    res = history->load_history_from_file (&history_list);
 
-	CPPUNIT_ASSERT (history->is_loaded ());
-	CPPUNIT_ASSERT (res == true);
+    CPPUNIT_ASSERT (history->is_loaded ());
+    CPPUNIT_ASSERT (res == true);
 }
 
-void HistoryTest::test_load_history_items_map() {
-	_debug ("-------------------- HistoryTest::test_load_history_items_map --------------------\n");
+void HistoryTest::test_load_history_items_map()
+{
+    _debug ("-------------------- HistoryTest::test_load_history_items_map --------------------\n");
 
-	std::string path;
-	int nb_items;
-	Conf::ConfigTree history_list;
+    std::string path;
+    int nb_items;
+    Conf::ConfigTree history_list;
 
-	history->set_history_path(HISTORY_SAMPLE);
-	history->load_history_from_file(&history_list);
-	nb_items = history->load_history_items_map(&history_list,
-			HUGE_HISTORY_LIMIT);
-	CPPUNIT_ASSERT (nb_items == HISTORY_SAMPLE_SIZE);
-	CPPUNIT_ASSERT (history->get_history_size () == HISTORY_SAMPLE_SIZE);
+    history->set_history_path (HISTORY_SAMPLE);
+    history->load_history_from_file (&history_list);
+    nb_items = history->load_history_items_map (&history_list,
+               HUGE_HISTORY_LIMIT);
+    CPPUNIT_ASSERT (nb_items == HISTORY_SAMPLE_SIZE);
+    CPPUNIT_ASSERT (history->get_history_size () == HISTORY_SAMPLE_SIZE);
 }
 
-void HistoryTest::test_save_history_items_map() {
-	_debug ("-------------------- HistoryTest::test_save_history_items_map --------------------\n");
+void HistoryTest::test_save_history_items_map()
+{
+    _debug ("-------------------- HistoryTest::test_save_history_items_map --------------------\n");
 
-	std::string path;
-	int nb_items_loaded, nb_items_saved;
-	Conf::ConfigTree history_list, history_list2;
+    std::string path;
+    int nb_items_loaded, nb_items_saved;
+    Conf::ConfigTree history_list, history_list2;
 
-	history->set_history_path(HISTORY_SAMPLE);
-	history->load_history_from_file(&history_list);
-	nb_items_loaded = history->load_history_items_map(&history_list,
-			HUGE_HISTORY_LIMIT);
-	nb_items_saved = history->save_history_items_map(&history_list2);
-	CPPUNIT_ASSERT (nb_items_loaded == nb_items_saved);
+    history->set_history_path (HISTORY_SAMPLE);
+    history->load_history_from_file (&history_list);
+    nb_items_loaded = history->load_history_items_map (&history_list,
+                      HUGE_HISTORY_LIMIT);
+    nb_items_saved = history->save_history_items_map (&history_list2);
+    CPPUNIT_ASSERT (nb_items_loaded == nb_items_saved);
 }
 
-void HistoryTest::test_save_history_to_file() {
-	_debug ("-------------------- HistoryTest::test_save_history_to_file --------------------\n");
+void HistoryTest::test_save_history_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;
+    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->set_history_path(HISTORY_SAMPLE);
-	history->load_history_from_file(&history_list);
-	history->load_history_items_map(&history_list, HUGE_HISTORY_LIMIT);
-	history->save_history_items_map(&history_list2);
-	CPPUNIT_ASSERT (history->save_history_to_file (&history_list2));
+    history->set_history_path (HISTORY_SAMPLE);
+    history->load_history_from_file (&history_list);
+    history->load_history_items_map (&history_list, HUGE_HISTORY_LIMIT);
+    history->save_history_items_map (&history_list2);
+    CPPUNIT_ASSERT (history->save_history_to_file (&history_list2));
 }
 
-void HistoryTest::test_get_history_serialized() {
-	_debug ("-------------------- HistoryTest::test_get_history_serialized --------------------\n");
+void HistoryTest::test_get_history_serialized()
+{
+    _debug ("-------------------- HistoryTest::test_get_history_serialized --------------------\n");
 
-	std::map<std::string, std::string> res;
-	std::map<std::string, std::string>::iterator iter;
-	std::string tmp;
+    std::map<std::string, std::string> res;
+    std::map<std::string, std::string>::iterator iter;
+    std::string tmp;
 
-	CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
-	res = history->get_history_serialized();
-	CPPUNIT_ASSERT (res.size() ==HISTORY_SAMPLE_SIZE);
+    CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+    res = history->get_history_serialized();
+    CPPUNIT_ASSERT (res.size() ==HISTORY_SAMPLE_SIZE);
 
-	// Warning - If you change the history-sample file, you must change the following lines also so that the tests could work
-	// The reference here is the file history-sample in this test directory
-	// The serialized form is: calltype%to%from%callid
+    // Warning - If you change the history-sample file, you must change the following lines also so that the tests could work
+    // The reference here is the file history-sample in this test directory
+    // The serialized form is: calltype%to%from%callid
 
-	// Check the first
-	tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-	CPPUNIT_ASSERT (Validator::isEqual(tmp, res ["144562436"]));
+    // Check the first
+    tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+	std::cout << res ["144562436"] << std::endl;
+    CPPUNIT_ASSERT (Validator::isEqual (tmp, res ["144562436"]));
 
-	tmp = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-	CPPUNIT_ASSERT (Validator::isEqual(tmp, res ["747638685"]));
-
-	// the account ID does not correspond to a loaded account
-	tmp = "1|5143848557|empty|775354987|empty";
-	CPPUNIT_ASSERT (Validator::isEqual(tmp, res ["775354456"]));
+    // the account ID does not correspond to a loaded account
+    tmp = "1|5143848557|empty|775354987|empty";
+    CPPUNIT_ASSERT (Validator::isEqual (tmp, res ["775354456"]));
 }
 
-void HistoryTest::test_set_serialized_history() {
-	_debug ("-------------------- HistoryTest::test_set_serialized_history --------------------\n");
-
-	// We build a map to have an efficient test
-	std::map<std::string, std::string> map_test;
-	std::string tmp;
-	Conf::ConfigTree history_list;
+void HistoryTest::test_set_serialized_history()
+{
+    _debug ("-------------------- HistoryTest::test_set_serialized_history --------------------\n");
 
-	map_test["144562436"] = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-	map_test["747638685"] = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-	map_test["775354456"] = "1|5143848557|empty|775354987|Account:43789459478";
+    // We build a map to have an efficient test
+    std::map<std::string, std::string> map_test;
+    std::string tmp;
+    Conf::ConfigTree history_list;
 
-	CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
-	// We use a large history limit to be able to interpret results
-	CPPUNIT_ASSERT (history->set_serialized_history (map_test, HUGE_HISTORY_LIMIT) == 3);
-	CPPUNIT_ASSERT (history->get_history_size () == 3);
+    map_test["144562436"] = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+    map_test["747638685"] = "2|136|Emmanuel Milou|747638765|Account:1239059899";
+    map_test["775354456"] = "1|5143848557|empty|775354987|Account:43789459478";
 
-	map_test.clear();
-	map_test = history->get_history_serialized();
-	CPPUNIT_ASSERT (map_test.size() ==3);
+    CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+    // We use a large history limit to be able to interpret results
+    CPPUNIT_ASSERT (history->set_serialized_history (map_test, HUGE_HISTORY_LIMIT) == 3);
+    CPPUNIT_ASSERT (history->get_history_size () == 3);
 
-	// Check the first
-	tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-	CPPUNIT_ASSERT (Validator::isEqual(tmp, map_test ["144562436"]));
+    map_test.clear();
+    map_test = history->get_history_serialized();
+    CPPUNIT_ASSERT (map_test.size() ==3);
 
-	tmp = "2|136|Emmanuel Milou|747638765|Account:1239059899";
-	CPPUNIT_ASSERT (Validator::isEqual(tmp, map_test ["747638685"]));
+    // Check the first
+    tmp = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+    CPPUNIT_ASSERT (Validator::isEqual (tmp, map_test ["144562436"]));
 
-	// the account ID does not correspond to a loaded account
-	tmp = "1|5143848557|empty|775354987|empty";
-	CPPUNIT_ASSERT (Validator::isEqual(tmp, map_test ["775354456"]));
+    // the account ID does not correspond to a loaded account
+    tmp = "1|5143848557|empty|775354987|empty";
+    CPPUNIT_ASSERT (Validator::isEqual (tmp, map_test ["775354456"]));
 
-	history->save_history_items_map(&history_list);
-	CPPUNIT_ASSERT (history->save_history_to_file (&history_list));
+    history->save_history_items_map (&history_list);
+    CPPUNIT_ASSERT (history->save_history_to_file (&history_list));
 }
 
-void HistoryTest::test_set_serialized_history_with_limit() {
-	_debug ("-------------------- HistoryTest::test_set_serialized_history_with_limit --------------------\n");
-
-	// We build a map to have an efficient test
-	std::map<std::string, std::string> map_test;
-	std::string tmp;
-	Conf::ConfigTree history_list;
-	time_t current, day = 86400; // One day in unix timestamp
-	std::stringstream current_1, current_2, current_3;
-
-	(void) time(&current);
-	current_1 << (current - 2 * day) << std::endl;
-	current_2 << (current - 5 * day) << std::endl;
-	current_3 << (current - 11 * day) << std::endl;
-
-	map_test[current_1.str()]
-			= "0|514-276-5468|Savoir-faire Linux|144562458|empty";
-	map_test[current_2.str()]
-			= "2|136|Emmanuel Milou|747638765|Account:1239059899";
-	map_test[current_3.str()]
-			= "1|5143848557|empty|775354987|Account:43789459478";
-
-	CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
-	// We use different value of history limit
-	// 10 days - the last entry should not be saved
-	CPPUNIT_ASSERT (history->set_serialized_history (map_test, 10) == 2);
-	CPPUNIT_ASSERT (history->get_history_size () == 2);
-
-	//  4 days - the two last entries should not be saved
-	CPPUNIT_ASSERT (history->set_serialized_history (map_test, 4) == 1);
-	CPPUNIT_ASSERT (history->get_history_size () == 1);
-
-	//  1 day - no entry should not be saved
-	CPPUNIT_ASSERT (history->set_serialized_history (map_test, 1) == 0);
-	CPPUNIT_ASSERT (history->get_history_size () == 0);
+void HistoryTest::test_set_serialized_history_with_limit()
+{
+    _debug ("-------------------- HistoryTest::test_set_serialized_history_with_limit --------------------\n");
+
+    // We build a map to have an efficient test
+    std::map<std::string, std::string> map_test;
+    std::string tmp;
+    Conf::ConfigTree history_list;
+    time_t current, day = 86400; // One day in unix timestamp
+    std::stringstream current_1, current_2, current_3;
+
+    (void) time (&current);
+    current_1 << (current - 2 * day) << std::endl;
+    current_2 << (current - 5 * day) << std::endl;
+    current_3 << (current - 11 * day) << std::endl;
+
+    map_test[current_1.str() ]
+    = "0|514-276-5468|Savoir-faire Linux|144562458|empty";
+    map_test[current_2.str() ]
+    = "2|136|Emmanuel Milou|747638765|Account:1239059899";
+    map_test[current_3.str() ]
+    = "1|5143848557|empty|775354987|Account:43789459478";
+
+    CPPUNIT_ASSERT (history->load_history (HUGE_HISTORY_LIMIT, HISTORY_SAMPLE) == HISTORY_SAMPLE_SIZE);
+    // We use different value of history limit
+    // 10 days - the last entry should not be saved
+    CPPUNIT_ASSERT (history->set_serialized_history (map_test, 10) == 2);
+    CPPUNIT_ASSERT (history->get_history_size () == 2);
+
+    //  4 days - the two last entries should not be saved
+    CPPUNIT_ASSERT (history->set_serialized_history (map_test, 4) == 1);
+    CPPUNIT_ASSERT (history->get_history_size () == 1);
+
+    //  1 day - no entry should not be saved
+    CPPUNIT_ASSERT (history->set_serialized_history (map_test, 1) == 0);
+    CPPUNIT_ASSERT (history->get_history_size () == 0);
 }
 
-void HistoryTest::tearDown() {
-	// Delete the history object
-	delete history;
-	history = 0;
+void HistoryTest::tearDown()
+{
+    // Delete the history object
+    delete history;
+    history = 0;
 }
diff --git a/sflphone-common/test/historytest.h b/sflphone-common/test/historytest.h
index 84b1e7a5ec5a7720f7d3956180e36b034ef0ca8f..fac450afdfb0783b9bb770c48670501a2dc41f9b 100644
--- a/sflphone-common/test/historytest.h
+++ b/sflphone-common/test/historytest.h
@@ -54,13 +54,13 @@ class HistoryTest : public CppUnit::TestCase {
      */
     CPPUNIT_TEST_SUITE (HistoryTest);
         CPPUNIT_TEST (test_create_history_path);
-        CPPUNIT_TEST (test_save_history_to_file);
         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_set_serialized_history);
         CPPUNIT_TEST (test_set_serialized_history_with_limit);
+	CPPUNIT_TEST (test_save_history_to_file);
     CPPUNIT_TEST_SUITE_END ();
 
     public:
diff --git a/sflphone-common/test/hookmanagertest.cpp b/sflphone-common/test/hookmanagertest.cpp
index b0d68c936251e69f7200ce772f29af5f40e3d0a2..a0473b525c1c706cd317920d33d255bee687846f 100644
--- a/sflphone-common/test/hookmanagertest.cpp
+++ b/sflphone-common/test/hookmanagertest.cpp
@@ -47,7 +47,7 @@ void HookManagerTest::setUp()
 
 void HookManagerTest::testAddAction ()
 {
-	_debug ("-------------------- HookManagerTest::testAddAction --------------------\n");
+    _debug ("-------------------- HookManagerTest::testAddAction --------------------\n");
 
     int status;
 
@@ -57,7 +57,7 @@ void HookManagerTest::testAddAction ()
 
 void HookManagerTest::testLargeUrl ()
 {
-	_debug ("-------------------- HookManagerTest::testLargeUrl --------------------\n");
+    _debug ("-------------------- HookManagerTest::testLargeUrl --------------------\n");
 
     std::string url;
     std::cout << url.max_size() << std::endl;
diff --git a/sflphone-common/test/instantmessagingtest.cpp b/sflphone-common/test/instantmessagingtest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fb0f49308e57d00641e5906c2632c001d5ef4bac
--- /dev/null
+++ b/sflphone-common/test/instantmessagingtest.cpp
@@ -0,0 +1,369 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdio.h>
+#include <iostream>
+#include <fstream>
+
+#include "instantmessagingtest.h"
+
+#include "expat.h"
+#include <stdio.h>
+
+#define MAXIMUM_SIZE	10
+#define DELIMITER_CHAR	"\n\n"
+
+using std::cout;
+using std::endl;
+
+
+void InstantMessagingTest::setUp()
+{
+    _im = new sfl::InstantMessaging ();
+    _im->init ();
+}
+
+void InstantMessagingTest::testSaveSingleMessage ()
+{
+    _debug ("-------------------- InstantMessagingTest::testSaveSingleMessage --------------------\n");
+
+    std::string input, tmp;
+    std::string callID = "testfile1.txt";
+    std::string filename = "im:";
+
+    // Open a file stream and try to write in it
+    CPPUNIT_ASSERT (_im->saveMessage ("Bonjour, c'est un test d'archivage de message", "Manu", callID, std::ios::out)  == true);
+
+    filename.append(callID);
+    // Read it to check it has been successfully written
+    std::ifstream testfile (filename.c_str (), std::ios::in);
+    CPPUNIT_ASSERT (testfile.is_open () == true);
+
+    while (!testfile.eof ()) {
+        std::getline (testfile, tmp);
+        input.append (tmp);
+    }
+
+    testfile.close ();
+    CPPUNIT_ASSERT (input == "[Manu] Bonjour, c'est un test d'archivage de message");
+}
+
+void InstantMessagingTest::testSaveMultipleMessage ()
+{
+    _debug ("-------------------- InstantMessagingTest::testSaveMultipleMessage --------------------\n");
+
+    std::string input, tmp;
+    std::string callID = "testfile2.txt";
+    std::string filename = "im:";
+
+    // Open a file stream and try to write in it
+    CPPUNIT_ASSERT (_im->saveMessage ("Bonjour, c'est un test d'archivage de message", "Manu", callID, std::ios::out)  == true);
+    CPPUNIT_ASSERT (_im->saveMessage ("Cool", "Alex", callID, std::ios::out || std::ios::app)  == true);
+
+    filename.append(callID);
+    // Read it to check it has been successfully written
+    std::ifstream testfile (filename.c_str (), std::ios::in);
+    CPPUNIT_ASSERT (testfile.is_open () == true);
+
+    while (!testfile.eof ()) {
+        std::getline (testfile, tmp);
+        input.append (tmp);
+    }
+
+    testfile.close ();
+    printf ("%s\n", input.c_str());
+    CPPUNIT_ASSERT (input == "[Manu] Bonjour, c'est un test d'archivage de message[Alex] Cool");
+}
+
+void InstantMessagingTest::testSplitMessage ()
+{
+
+    _im->setMessageMaximumSize(10);
+    unsigned int maxSize = _im->getMessageMaximumSize();
+
+    /* A message that does not need to be split */
+    std::string short_message = "Salut";
+    std::vector<std::string> messages = _im->split_message (short_message);
+    CPPUNIT_ASSERT (messages.size() == short_message.length() / maxSize + 1);
+    CPPUNIT_ASSERT (messages[0] == short_message);
+
+    /* A message that needs to be split into two messages */
+    std::string long_message = "A message too long";
+    messages = _im->split_message (long_message);
+    int size = messages.size ();
+    int i = 0;
+    CPPUNIT_ASSERT (size == (int) (long_message.length() / maxSize + 1));
+
+    /* If only one element, do not enter the loop */
+    for (i = 0; i < size - 1; i++) {
+        CPPUNIT_ASSERT (messages[i] == long_message.substr ( (maxSize * i), maxSize) + DELIMITER_CHAR);
+    } 
+
+    /* Works for the last element, or for the only element */
+    CPPUNIT_ASSERT (messages[size- 1] == long_message.substr (maxSize * (size-1)));
+
+    /* A message that needs to be split into four messages */
+    std::string very_long_message = "A message that needs to be split into many messages";
+    messages = _im->split_message (very_long_message);
+    size = messages.size ();
+
+    /* If only one element, do not enter the loop */
+    for (i = 0; i < size - 1; i++) {
+        CPPUNIT_ASSERT (messages[i] ==very_long_message.substr ( (maxSize * i), maxSize) + DELIMITER_CHAR);
+    }
+
+    /* Works for the last element, or for the only element */
+    CPPUNIT_ASSERT (messages[size- 1] == very_long_message.substr (maxSize * (size-1)));
+}
+
+static inline char* duplicateString(char dst[], const char src[], size_t len)
+{
+    memcpy(dst, src, len);
+    dst[len] = 0;
+    return dst;
+}
+
+static void XMLCALL startElementCallback(void *userData, const char *name, const char **atts)
+{
+    
+    std::cout << "startElement " << name << std::endl;
+
+    int *nbEntry = (int *)userData;
+
+    char attribute[50];
+    char value[50];
+
+    const char **att;
+    const char **val; 
+    for (att = atts; *att; att += 2) {
+
+	const char **val = att+1;
+
+	duplicateString(attribute, *att, strlen(*att));
+	std::cout << "att: " << attribute << std::endl;
+	
+	duplicateString(value, *val, strlen(*val));
+	std::cout << "val: " << value << std::endl;
+
+	if (strcmp(attribute, "uri") == 0) {
+	    if((strcmp(value, "sip:alex@example.com") == 0) ||
+	       (strcmp(value, "sip:manu@example.com") == 0))
+		CPPUNIT_ASSERT(true);
+	    else
+		CPPUNIT_ASSERT(false);
+	}
+    }
+
+    *nbEntry += 1;
+
+}
+
+static void XMLCALL endElementCallback(void *userData, const char *name)
+{
+    // std::cout << "endElement " << name << std::endl;    
+}
+
+void InstantMessagingTest::testGenerateXmlUriList ()
+{
+    
+    std::cout << std::endl;
+
+    // Create a test list with two entries
+    sfl::InstantMessaging::UriList list;
+
+    sfl::InstantMessaging::UriEntry entry1;
+    entry1[sfl::IM_XML_URI] = "\"sip:alex@example.com\"";
+
+    sfl::InstantMessaging::UriEntry entry2;
+    entry2[sfl::IM_XML_URI] = "\"sip:manu@example.com\"";
+
+    list.push_front(entry1);
+    list.push_front(entry2);
+
+    std::string buffer = _im->generateXmlUriList(list);
+    CPPUNIT_ASSERT(buffer.size() != 0);
+
+    std::cout << buffer << std::endl;
+	
+    // parse the resuling xml (further tests are performed in callbacks)
+    XML_Parser parser = XML_ParserCreate(NULL);
+    int nbEntry = 0;
+    XML_SetUserData(parser, &nbEntry);
+    XML_SetElementHandler(parser, startElementCallback, endElementCallback);
+    if (XML_Parse(parser, buffer.c_str(), buffer.size(), 1) == XML_STATUS_ERROR) {
+	std::cout << "Error: " << XML_ErrorString(XML_GetErrorCode(parser)) 
+                  << " at line " << XML_GetCurrentLineNumber(parser) << std::endl;
+        CPPUNIT_ASSERT(false);
+    }
+    XML_ParserFree(parser);
+
+    CPPUNIT_ASSERT(nbEntry == 4);
+
+    CPPUNIT_ASSERT(true);
+}
+
+void InstantMessagingTest::testXmlUriListParsing ()
+{
+    std::string xmlbuffer = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
+    xmlbuffer.append ("<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\">");
+    xmlbuffer.append ("<list>");
+    xmlbuffer.append ("<entry uri=\"sip:alex@example.com\" cp:copyControl=\"to\" />");
+    xmlbuffer.append ("<entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" />");
+    xmlbuffer.append ("</list>");
+    xmlbuffer.append ("</resource-lists>");
+
+
+    sfl::InstantMessaging::UriList list = _im->parseXmlUriList(xmlbuffer);
+    CPPUNIT_ASSERT(list.size() == 2);
+
+    // An iterator over xml attribute
+    sfl::InstantMessaging::UriEntry::iterator iterAttr;
+
+    // An iterator over list entries
+    sfl::InstantMessaging::UriList::iterator iterEntry = list.begin();
+
+    
+    while (iterEntry != list.end()) {
+        sfl::InstantMessaging::UriEntry entry = static_cast<sfl::InstantMessaging::UriEntry> (*iterEntry);
+        iterAttr = entry.find (sfl::IM_XML_URI);
+		
+        if((iterAttr->second == std::string("sip:alex@example.com")) ||
+           (iterAttr->second == std::string("sip:manu@example.com")))
+	    CPPUNIT_ASSERT(true);
+	else
+	    CPPUNIT_ASSERT(false);
+        iterEntry++;
+    }
+}
+
+void InstantMessagingTest::testGetTextArea ()
+{
+
+    std::string formatedText = "--boundary Content-Type: text/plain";
+    formatedText.append ("Here is the text area");
+
+    formatedText.append ("--boundary Content-Type: application/resource-lists+xml");
+    formatedText.append ("Content-Disposition: recipient-list");
+    formatedText.append ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+    formatedText.append ("<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\">");
+    formatedText.append ("<list>");
+    formatedText.append ("<entry uri=\"sip:alex@example.com\" cp:copyControl=\"to\" />");
+    formatedText.append ("<entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" />");
+    formatedText.append ("</list>");
+    formatedText.append ("</resource-lists>");
+    formatedText.append ("--boundary--");
+
+    std::string message = _im->findTextMessage(formatedText);
+
+    std::cout << "message " << message << std::endl;
+
+    CPPUNIT_ASSERT(message == "Here is the text area");
+}
+
+
+void InstantMessagingTest::testGetUriListArea ()
+{
+    std::string formatedText = "--boundary Content-Type: text/plain";
+    formatedText.append ("Here is the text area");
+
+    formatedText.append ("--boundary Content-Type: application/resource-lists+xml");
+    formatedText.append ("Content-Disposition: recipient-list");
+    formatedText.append ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+    formatedText.append ("<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\">");
+    formatedText.append ("<list>");
+    formatedText.append ("<entry uri=\"sip:alex@example.com\" cp:copyControl=\"to\" />");
+    formatedText.append ("<entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" />");
+    formatedText.append ("</list>");
+    formatedText.append ("</resource-lists>");
+    formatedText.append ("--boundary--");
+
+    std::string urilist = _im->findTextUriList(formatedText);
+
+    CPPUNIT_ASSERT(urilist.compare("<?xml version=\"1.0\" encoding=\"UTF-8\"?><resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\"><list><entry uri=\"sip:alex@example.com\" cp:copyControl=\"to\" /><entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" /></list></resource-lists>") == 0);
+
+    std::cout << "urilist: " << urilist << std::endl;
+
+    sfl::InstantMessaging::UriList list = _im->parseXmlUriList(urilist);
+    CPPUNIT_ASSERT(list.size() == 2);
+
+    // order may be important, for example to identify message sender
+    sfl::InstantMessaging::UriEntry entry = list.front();
+    CPPUNIT_ASSERT(entry.size() == 2);
+
+    sfl::InstantMessaging::UriEntry::iterator iterAttr = entry.find (sfl::IM_XML_URI);
+
+    if(iterAttr == entry.end()) {
+	std::cout << "Error, did not found attribute" << std::endl;
+	CPPUNIT_ASSERT(false);
+    }
+
+    std::string from = iterAttr->second;
+    CPPUNIT_ASSERT(from == "sip:alex@example.com");
+}
+
+
+void InstantMessagingTest::testIllFormatedMessage ()
+{
+    bool exceptionCaught = false;
+
+    // SHOULD BE: Content-Type: text/plain
+    std::string formatedText = "--boundary Content-Ty";
+    formatedText.append ("Here is the text area");
+
+    formatedText.append ("--boundary Content-Type: application/resource-lists+xml");
+    formatedText.append ("Content-Disposition: recipient-list");
+    formatedText.append ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+    formatedText.append ("<resource-lists xmlns=\"urn:ietf:params:xml:ns:resource-lists\" xmlns:cp=\"urn:ietf:params:xml:ns:copycontrol\">");
+    formatedText.append ("<list>");
+    formatedText.append ("<entry uri=\"sip:alex@example.com\" cp:copyControl=\"to\" />");
+    formatedText.append ("<entry uri=\"sip:manu@example.com\" cp:copyControl=\"to\" />");
+    formatedText.append ("</list>");
+    formatedText.append ("</resource-lists>");
+    formatedText.append ("--boundary--");
+
+    try {
+	std::string message = _im->findTextMessage(formatedText);
+    } catch (sfl::InstantMessageException &e) {
+	exceptionCaught = true;	
+    }
+
+    if(exceptionCaught)
+	CPPUNIT_ASSERT(true);
+    else
+	CPPUNIT_ASSERT(false);
+
+}
+
+
+void InstantMessagingTest::tearDown()
+{
+    delete _im;
+    _im = 0;
+}
diff --git a/sflphone-common/test/instantmessagingtest.h b/sflphone-common/test/instantmessagingtest.h
new file mode 100644
index 0000000000000000000000000000000000000000..4375471d237cbea97b8f950ad3cb91d3a9f6eb69
--- /dev/null
+++ b/sflphone-common/test/instantmessagingtest.h
@@ -0,0 +1,105 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "im/InstantMessaging.h"
+
+/*
+ * @file instantmessagingtest.h 
+ * @brief       Regroups unitary tests related to the instant messagin module
+ */
+
+#ifndef _INSTANTMANAGER_TEST_
+#define _INSTANTMANAGER_TEST_
+
+class InstantMessagingTest : public CppUnit::TestCase {
+
+   /**
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE( InstantMessagingTest );
+        CPPUNIT_TEST (testSaveSingleMessage);
+        CPPUNIT_TEST (testSaveMultipleMessage);
+        CPPUNIT_TEST (testSplitMessage);
+	CPPUNIT_TEST (testGenerateXmlUriList);
+	CPPUNIT_TEST (testXmlUriListParsing);
+	CPPUNIT_TEST (testGetTextArea);
+	CPPUNIT_TEST (testGetUriListArea);
+	CPPUNIT_TEST (testIllFormatedMessage);
+    CPPUNIT_TEST_SUITE_END();
+
+    public:
+        InstantMessagingTest() : CppUnit::TestCase("Instant messaging module Tests") {}
+        
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        inline void tearDown ();
+
+        void testSaveSingleMessage ();
+		
+        void testSaveMultipleMessage ();
+
+        void testSplitMessage ();
+
+	void testGenerateXmlUriList ();
+
+	void testXmlUriListParsing ();
+
+	void testGetTextArea ();
+
+	void testGetUriListArea ();
+
+	void testIllFormatedMessage ();        
+
+    private:
+		sfl::InstantMessaging *_im;
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(InstantMessagingTest, "InstantMessagingTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( InstantMessagingTest );
+
+#endif
diff --git a/sflphone-common/test/main.cpp b/sflphone-common/test/main.cpp
index 98f792ad1eb8def07bf678ca9403de4de0e66bbe..493366d68a55b1814ade0b8c912f02c3d2ab3ca9 100644
--- a/sflphone-common/test/main.cpp
+++ b/sflphone-common/test/main.cpp
@@ -28,106 +28,98 @@
  *  as that of the covered work.
  */
 
-#include "logger.h"
-#include "global.h"
-#include "manager.h"
-#include "constants.h"
+#include <logger.h>
+#include <manager.h>
+#include <constants.h>
 
 #include <cppunit/CompilerOutputter.h>
+#include <cppunit/XmlOutputter.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TextTestRunner.h>
 
-// TODO: Why some header cannot be included ?
-#include "accounttest.h"
-#include "audiolayertest.h"
-#include "configurationtest.h"
-//#include "historytest.h"
-//#include "hookmanagertest.h"
-#include "mainbuffertest.h"
-#include "numbercleanertest.h"
-//#include "pluginmanagertest.h"
-//#include "rtptest.h"
-#include "sdesnegotiatortest.h"
-
-
-int main(int argc, char* argv[]) {
-
-	printf("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2010\n\n");
-
-	Logger::setConsoleLog(true);
-
-	Logger::setDebugMode(true);
-	/*
-	Logger::setDebugMode(false);
-
-	int argvIndex = 1;
-
-	if (argc > 1) {
-		if (strcmp("--help", argv[1]) == 0) {
-			argvIndex++;
-
-			CPPUNIT_NS::Test
-					*suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry(
-							"All Tests").makeTest();
-			int testSuiteCount = suite->getChildTestCount();
-
-			printf("Usage: test [OPTIONS] [TEST_SUITE]\n");
-			printf("\nOptions:\n");
-			printf(" --debug - Debug mode\n");
-			printf(" --help - Print help\n");
-			printf("\nAvailable test suites:\n");
-			for (int i = 0; i < testSuiteCount; i++) {
-				printf(" - %s\n", suite->getChildTestAt(i)->getName().c_str());
-			}
-			exit(0);
-		}
-		else if (strcmp("--debug", argv[1]) == 0) {
-			argvIndex++;
+int main (int argc, char* argv[])
+{
 
-			Logger::setDebugMode(true);
-			_info("Debug mode activated");
-		}
-	}
+    printf ("\nSFLphone Daemon Test Suite, by Savoir-Faire Linux 2004-2010\n\n");
+    Logger::setConsoleLog (true);
+    Logger::setDebugMode (true);
 
-	std::string testSuiteName = "All Tests";
-	if(argvIndex < argc)
-	{
-		testSuiteName = argv[argvIndex];
-		argvIndex++;
-	}
+    int argvIndex = 1;
+	bool xmlOutput = false;
 
-	printf("\n\n=== SFLphone initialization ===\n\n");
-	Manager::instance().initConfigFile(true, CONFIG_SAMPLE);
-	Manager::instance().init();
-
-	printf("\n\n=== Test Suite: %s ===\n\n", testSuiteName.c_str());
-	// Get the top level suite from the registry
-	CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry(testSuiteName).makeTest();
-	*/
-	CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();
-
-	/*
-	if(suite->getChildTestCount() == 0)
-	{
-		_error("Invalid test suite name: %s", testSuiteName.c_str());
-		exit(-1);
-	}
-	*/
-	Manager::instance().initConfigFile(true, CONFIG_SAMPLE);
-		Manager::instance().init();
+    if (argc > 1) {
+        if (strcmp ("--help", argv[1]) == 0) {
+            argvIndex++;
+
+            CPPUNIT_NS::Test* suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry ("All Tests").makeTest();
+
+            int testSuiteCount = suite->getChildTestCount();
+            printf ("Usage: test [OPTIONS] [TEST_SUITE]\n");
+            printf ("\nOptions:\n");
+            printf (" --xml - Output results in an XML file, instead of standard output.\n");
+            printf (" --debug - Debug mode\n");
+            printf (" --help - Print help\n");
+            printf ("\nAvailable test suites:\n");
 
-	// Adds the test to the list of test to run
-	CppUnit::TextTestRunner runner;
-	runner.addTest(suite);
+            for (int i = 0; i < testSuiteCount; i++) {
+                printf (" - %s\n", suite->getChildTestAt (i)->getName().c_str());
+            }
+
+            exit (0);
+        } else if (strcmp ("--debug", argv[1]) == 0) {
+            argvIndex++;
+
+            Logger::setDebugMode (true);
+            _info ("Debug mode activated");
+
+        } else if (strcmp("--xml", argv[1]) == 0) {
+            argvIndex++;
+
+			xmlOutput = true;
+            _info ("Using XML output");
+		}
+    }
+
+    // Default test suite : all tests
+    std::string testSuiteName = "All Tests";
+
+    if (argvIndex < argc) {
+        testSuiteName = argv[argvIndex];
+        argvIndex++;
+    }
+
+    printf ("\n\n=== SFLphone initialization ===\n\n");
+    Manager::instance().initConfigFile (true, CONFIG_SAMPLE);
+    Manager::instance().init();
+
+    // Get the top level suite from the registry
+    printf ("\n\n=== Test Suite: %s ===\n\n", testSuiteName.c_str());
+    CPPUNIT_NS::Test *suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry (testSuiteName).makeTest();
+
+    if (suite->getChildTestCount() == 0) {
+        _error ("Invalid test suite name: %s", testSuiteName.c_str());
+        exit (-1);
+    }
+
+    // Adds the test to the list of test to run
+    CppUnit::TextTestRunner runner;
+    runner.addTest (suite);
+	/* Specify XML output */
+	std::ofstream outfile("cppunitresults.xml");
+
+	if (xmlOutput) {
+		CppUnit::XmlOutputter* outputter = new CppUnit::XmlOutputter(&runner.result(), outfile);
+		runner.setOutputter(outputter);
+	} else {
+		// Change the default outputter to a compiler error format outputter
+		runner.setOutputter (new CppUnit::CompilerOutputter (&runner.result(), std::cerr));
+	}
 
-	// Change the default outputter to a compiler error format outputter
-	runner.setOutputter(new CppUnit::CompilerOutputter(&runner.result(),
-			std::cerr));
-	// Run the tests.
-	bool wasSucessful = runner.run();
+    // Run the tests.
+    bool wasSucessful = runner.run();
 
-	// Return error code 1 if the one of test failed.
-	return wasSucessful ? 0 : 1;
+    Manager::instance().terminate();
 
-	Manager::instance().terminate();
+    // Return error code 1 if the one of test failed.
+    return wasSucessful ? 0 : 1;
 }
diff --git a/sflphone-common/test/mainbuffertest.cpp b/sflphone-common/test/mainbuffertest.cpp
index 8b36a4b776dddfaddbb669ba15ce20815cacc973..6c85862227a45d8e38f00f2e4b1aadbf5a91087b 100644
--- a/sflphone-common/test/mainbuffertest.cpp
+++ b/sflphone-common/test/mainbuffertest.cpp
@@ -64,7 +64,7 @@ void MainBufferTest::tearDown()
 
 void MainBufferTest::testRingBufferCreation()
 {
-	_debug ("-------------------- MainBufferTest::testRingBufferCreation --------------------\n");
+    _debug ("-------------------- MainBufferTest::testRingBufferCreation --------------------\n");
 
     CallID test_id = "1234";
     CallID null_id = "null id";
@@ -111,7 +111,7 @@ void MainBufferTest::testRingBufferCreation()
 
 void MainBufferTest::testRingBufferReadPointer()
 {
-	_debug ("-------------------- MainBufferTest::testRingBufferReadPointer --------------------\n");
+    _debug ("-------------------- MainBufferTest::testRingBufferReadPointer --------------------\n");
 
     CallID call_id = "call id";
     CallID read_id = "read id";
@@ -158,7 +158,7 @@ void MainBufferTest::testRingBufferReadPointer()
 
 void MainBufferTest::testCallIDSet()
 {
-	_debug ("-------------------- MainBufferTest::testCallIDSet --------------------\n");
+    _debug ("-------------------- MainBufferTest::testCallIDSet --------------------\n");
 
     CallID test_id = "set id";
     CallID false_id = "false set id";
@@ -241,7 +241,7 @@ void MainBufferTest::testCallIDSet()
 
 void MainBufferTest::testRingBufferInt()
 {
-	_debug ("-------------------- MainBufferTest::testRingBufferInt --------------------\n");
+    _debug ("-------------------- MainBufferTest::testRingBufferInt --------------------\n");
 
     // CallID test_id = "test_int";
 
@@ -357,7 +357,7 @@ void MainBufferTest::testRingBufferInt()
 
 void MainBufferTest::testRingBufferNonDefaultID()
 {
-	_debug ("-------------------- MainBufferTest::testRingBufferNonDefaultID --------------------\n");
+    _debug ("-------------------- MainBufferTest::testRingBufferNonDefaultID --------------------\n");
 
     CallID test_id = "test_int";
 
@@ -444,7 +444,7 @@ void MainBufferTest::testRingBufferNonDefaultID()
 
 void MainBufferTest::testRingBufferFloat()
 {
-	_debug ("-------------------- MainBufferTest::testRingBufferFloat --------------------\n");
+    _debug ("-------------------- MainBufferTest::testRingBufferFloat --------------------\n");
 
     float testfloat1 = 12.5;
     float testfloat2 = 13.4;
@@ -478,7 +478,7 @@ void MainBufferTest::testRingBufferFloat()
 
 void MainBufferTest::testTwoPointer()
 {
-	_debug ("-------------------- MainBufferTest::testTwoPointer --------------------\n");
+    _debug ("-------------------- MainBufferTest::testTwoPointer --------------------\n");
 
     RingBuffer* input_buffer = _mainbuffer.createRingBuffer (default_id);
     input_buffer->createReadPointer (default_id);
@@ -495,7 +495,7 @@ void MainBufferTest::testTwoPointer()
 
 void MainBufferTest::testBindUnbindBuffer()
 {
-	_debug ("-------------------- MainBufferTest::testBindUnbindBuffer --------------------\n");
+    _debug ("-------------------- MainBufferTest::testBindUnbindBuffer --------------------\n");
 
     CallID test_id1 = "bind unbind 1";
     CallID test_id2 = "bind unbind 2";
@@ -894,7 +894,7 @@ void MainBufferTest::testBindUnbindBuffer()
 
 void MainBufferTest::testGetPutDataByID()
 {
-	_debug ("-------------------- MainBufferTest::testGetPutDataByID --------------------\n");
+    _debug ("-------------------- MainBufferTest::testGetPutDataByID --------------------\n");
 
     CallID test_id = "getData putData";
     CallID false_id = "false id";
@@ -949,7 +949,7 @@ void MainBufferTest::testGetPutDataByID()
 
 void MainBufferTest::testGetPutData()
 {
-	_debug ("-------------------- MainBufferTest::testGetPutData --------------------\n");
+    _debug ("-------------------- MainBufferTest::testGetPutData --------------------\n");
 
     CallID test_id = "incoming rtp session";
 
@@ -997,7 +997,7 @@ void MainBufferTest::testGetPutData()
 
 void MainBufferTest::testDiscardFlush()
 {
-	_debug ("-------------------- MainBufferTest::testDiscardFlush --------------------\n");
+    _debug ("-------------------- MainBufferTest::testDiscardFlush --------------------\n");
 
     CallID test_id = "flush discard";
     // _mainbuffer.createRingBuffer(test_id);
@@ -1039,7 +1039,7 @@ void MainBufferTest::testDiscardFlush()
 
 void MainBufferTest::testReadPointerInit()
 {
-	_debug ("-------------------- MainBufferTest::testReadPointerInit --------------------\n");
+    _debug ("-------------------- MainBufferTest::testReadPointerInit --------------------\n");
 
     CallID test_id = "test read pointer init";
     // RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer(test_id);
@@ -1067,7 +1067,7 @@ void MainBufferTest::testReadPointerInit()
 
 void MainBufferTest::testRingBufferSeveralPointers()
 {
-	_debug ("-------------------- MainBufferTest::testRingBufferSeveralPointers --------------------\n");
+    _debug ("-------------------- MainBufferTest::testRingBufferSeveralPointers --------------------\n");
 
     CallID test_id = "test multiple read pointer";
     RingBuffer* test_ring_buffer = _mainbuffer.createRingBuffer (test_id);
@@ -1180,7 +1180,7 @@ void MainBufferTest::testRingBufferSeveralPointers()
 
 void MainBufferTest::testConference()
 {
-	_debug ("-------------------- MainBufferTest::testConference --------------------\n");
+    _debug ("-------------------- MainBufferTest::testConference --------------------\n");
 
     CallID test_id1 = "participant A";
     CallID test_id2 = "participant B";
diff --git a/sflphone-common/test/numbercleanertest.cpp b/sflphone-common/test/numbercleanertest.cpp
index c13573e3f9bd9d78d07add7d28ad98f176433ebc..4c9cf71bfc70dccf54d7a0287c59e4099ca2b69f 100644
--- a/sflphone-common/test/numbercleanertest.cpp
+++ b/sflphone-common/test/numbercleanertest.cpp
@@ -63,70 +63,70 @@ void NumberCleanerTest::setUp()
 
 void NumberCleanerTest::test_format_1 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_1 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_1 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_1) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_2 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_2 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_2 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_2) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_3 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_3 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_3 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_3) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_4 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_4 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_4 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_4) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_5 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_5 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_5 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_5) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_6 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_6 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_6 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_6) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_7 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_7 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_7 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_7) == VALID_EXTENSION);
 }
 
 void NumberCleanerTest::test_format_8 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_8 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_8 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_8) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_9 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_9 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_9 --------------------\n");
 
     CPPUNIT_ASSERT (cleaner->clean (NUMBER_TEST_9) == VALID_NUMBER);
 }
 
 void NumberCleanerTest::test_format_10 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_10 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_10 --------------------\n");
 
     cleaner->set_phone_number_prefix ("9");
     CPPUNIT_ASSERT (cleaner->get_phone_number_prefix () == "9");
@@ -135,7 +135,7 @@ void NumberCleanerTest::test_format_10 (void)
 
 void NumberCleanerTest::test_format_11 (void)
 {
-	_debug ("-------------------- NumberCleanerTest::test_format_11 --------------------\n");
+    _debug ("-------------------- NumberCleanerTest::test_format_11 --------------------\n");
 
     cleaner->set_phone_number_prefix ("9");
     CPPUNIT_ASSERT (cleaner->get_phone_number_prefix () == "9");
diff --git a/sflphone-common/test/pluginmanagertest.cpp b/sflphone-common/test/pluginmanagertest.cpp
index faa28f2b035931a9da340b16b3406397892efa48..dfe6f268a92d5c64e8b893c57aa788c8e712ac37 100644
--- a/sflphone-common/test/pluginmanagertest.cpp
+++ b/sflphone-common/test/pluginmanagertest.cpp
@@ -52,14 +52,14 @@ void PluginManagerTest::setUp()
 
 void PluginManagerTest::testLoadDynamicLibrary()
 {
-	_debug ("-------------------- PluginManagerTest::testLoadDynamicLibrary --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testLoadDynamicLibrary --------------------\n");
 
     CPPUNIT_ASSERT (_pm->loadDynamicLibrary (PLUGIN_TEST_NAME) != NULL);
 }
 
 void PluginManagerTest::testUnloadDynamicLibrary()
 {
-	_debug ("-------------------- PluginManagerTest::testUnloadDynamicLibrary --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testUnloadDynamicLibrary --------------------\n");
 
     library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
     CPPUNIT_ASSERT (library != NULL);
@@ -68,7 +68,7 @@ void PluginManagerTest::testUnloadDynamicLibrary()
 
 void PluginManagerTest::testInstanciatePlugin()
 {
-	_debug ("-------------------- PluginManagerTest::testInstanciatePlugin --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testInstanciatePlugin --------------------\n");
 
     library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
     CPPUNIT_ASSERT (library != NULL);
@@ -78,7 +78,7 @@ void PluginManagerTest::testInstanciatePlugin()
 
 void PluginManagerTest::testInitPlugin()
 {
-	_debug ("-------------------- PluginManagerTest::testInitPlugin --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testInitPlugin --------------------\n");
 
     library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
     CPPUNIT_ASSERT (library != NULL);
@@ -89,7 +89,7 @@ void PluginManagerTest::testInitPlugin()
 
 void PluginManagerTest::testRegisterPlugin()
 {
-	_debug ("-------------------- PluginManagerTest::testRegisterPlugin --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testRegisterPlugin --------------------\n");
 
     library = _pm->loadDynamicLibrary (PLUGIN_TEST_NAME);
     CPPUNIT_ASSERT (library != NULL);
@@ -101,7 +101,7 @@ void PluginManagerTest::testRegisterPlugin()
 
 void PluginManagerTest::testLoadPlugins ()
 {
-	_debug ("-------------------- PluginManagerTest::testLoadPlugins --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testLoadPlugins --------------------\n");
 
     CPPUNIT_ASSERT (_pm->loadPlugins (PLUGIN_TEST_DIR) == 0);
     CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
@@ -109,7 +109,7 @@ void PluginManagerTest::testLoadPlugins ()
 
 void PluginManagerTest::testUnloadPlugins ()
 {
-	_debug ("-------------------- PluginManagerTest::testUnloadPlugins --------------------\n");
+    _debug ("-------------------- PluginManagerTest::testUnloadPlugins --------------------\n");
 
     CPPUNIT_ASSERT (_pm->loadPlugins (PLUGIN_TEST_DIR) == 0);
     CPPUNIT_ASSERT (_pm->isPluginLoaded (PLUGIN_TEST_DESC) == true);
diff --git a/sflphone-common/test/ringtonetest.cpp b/sflphone-common/test/ringtonetest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9ddeb96949fd96b5b9c6b5335118be53c0a0f2da
--- /dev/null
+++ b/sflphone-common/test/ringtonetest.cpp
@@ -0,0 +1,48 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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 "ringtonetest.h"
+
+void RingtoneTest::testLoadWavefile()
+{
+    WavFile *wav = new WavFile();
+
+    // Test initial values
+    CPPUNIT_ASSERT (wav->isStarted() == false);
+    CPPUNIT_ASSERT (wav->getSize() == 0);
+
+    // Test protection against wrong file name
+    CPPUNIT_ASSERT (wav->loadFile (std::string ("wrongfilename.wav"), NULL, 44100) == false);
+
+
+
+    delete wav;
+    wav = NULL;
+}
diff --git a/sflphone-common/test/ringtonetest.h b/sflphone-common/test/ringtonetest.h
new file mode 100644
index 0000000000000000000000000000000000000000..bef2e16662626648dde785a22e17e7652c73c6f4
--- /dev/null
+++ b/sflphone-common/test/ringtonetest.h
@@ -0,0 +1,74 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  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.
+ */
+
+/*
+ * @file ringtonetest.cpp
+ * @brief       Regroups unitary tests related to the ringtones.
+ *              Check if the wave file has been successfully loaded
+ */
+
+#ifndef _RINGTONE_TEST_
+#define _RINGTONE_TEST_
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "manager.h"
+#include "audio/sound/audiofile.h"
+#include "global.h"
+#include "user_cfg.h"
+
+class RingtoneTest: public CppUnit::TestFixture {
+
+	/*
+	 * Use cppunit library macros to add unit test the factory
+	 */
+        CPPUNIT_TEST_SUITE( RingtoneTest );
+	    CPPUNIT_TEST( testLoadWavefile );
+	CPPUNIT_TEST_SUITE_END();
+
+public:
+	/*
+	 * Unit tests related to the audio preferences
+	 */
+	void testLoadWavefile();
+
+};
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(RingtoneTest, "RingtoneTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( RingtoneTest );
+
+#endif
diff --git a/sflphone-common/test/rtptest.cpp b/sflphone-common/test/rtptest.cpp
index 366fc1fe23619b18f695228d74db761dfeea64e3..fe8a395ac3ee354896c1a523d916e67b2a432643 100644
--- a/sflphone-common/test/rtptest.cpp
+++ b/sflphone-common/test/rtptest.cpp
@@ -46,76 +46,80 @@
 
 #include <unistd.h>
 
-void RtpTest::setUp() {
+void RtpTest::setUp()
+{
 
-	pjsipInit();
+    pjsipInit();
 
-	CallID cid = "123456";
+    CallID cid = "123456";
 
-	sipcall = new SIPCall(cid, Call::Incoming, _pool);
+    sipcall = new SIPCall (cid, Call::Incoming, _pool);
 
-	sipcall->setLocalIp("127.0.0.1");
-	sipcall->setLocalAudioPort(RANDOM_LOCAL_PORT);
-	sipcall->setLocalExternAudioPort(RANDOM_LOCAL_PORT);
+    sipcall->setLocalIp ("127.0.0.1");
+    sipcall->setLocalAudioPort (RANDOM_LOCAL_PORT);
+    sipcall->setLocalExternAudioPort (RANDOM_LOCAL_PORT);
 }
 
-bool RtpTest::pjsipInit() {
-	// Create memory cache for pool
-	pj_caching_pool_init(&_cp, &pj_pool_factory_default_policy, 0);
+bool RtpTest::pjsipInit()
+{
+    // Create memory cache for pool
+    pj_caching_pool_init (&_cp, &pj_pool_factory_default_policy, 0);
 
-	// Create memory pool for application.
-	_pool = pj_pool_create(&_cp.factory, "rtpTest", 4000, 4000, NULL);
+    // Create memory pool for application.
+    _pool = pj_pool_create (&_cp.factory, "rtpTest", 4000, 4000, NULL);
 
-	if (!_pool) {
-		_debug ("----- RtpTest: Could not initialize pjsip memory pool ------");
-		return PJ_ENOMEM;
-	}
+    if (!_pool) {
+        _debug ("----- RtpTest: Could not initialize pjsip memory pool ------");
+        return PJ_ENOMEM;
+    }
 
-	return true;
+    return true;
 }
 
-void RtpTest::testRtpInitClose() {
-	_debug ("-------------------- RtpTest::testRtpInitClose --------------------\n");
+void RtpTest::testRtpInitClose()
+{
+    _debug ("-------------------- RtpTest::testRtpInitClose --------------------\n");
 
-	audiortp = new AudioRtpFactory();
+    audiortp = new AudioRtpFactory();
 
-	try {
-		_debug ("-------- Open Rtp Session ----------");
-		audiortp->initAudioRtpConfig(sipcall);
-		audiortp->initAudioRtpSession(sipcall);
-		//AudioCodecType codecType = PAYLOAD_CODEC_ULAW;
-		//AudioCodec* audioCodec = Manager::instance().getCodecDescriptorMap().instantiateCodec(codecType);
-		//audiortp->start(audioCodec);
+    try {
+        _debug ("-------- Open Rtp Session ----------");
+        audiortp->initAudioRtpConfig (sipcall);
+        audiortp->initAudioRtpSession (sipcall);
+        //AudioCodecType codecType = PAYLOAD_CODEC_ULAW;
+        //AudioCodec* audioCodec = Manager::instance().getCodecDescriptorMap().instantiateCodec(codecType);
+        //audiortp->start(audioCodec);
 
-	} catch (...) {
-		_debug ("!!! Exception occured while Oppenning Rtp !!!");
-		CPPUNIT_ASSERT(false);
+    } catch (...) {
+        _debug ("!!! Exception occured while Oppenning Rtp !!!");
+        CPPUNIT_ASSERT (false);
 
-	}
+    }
 
-	CPPUNIT_ASSERT (audiortp != NULL);
+    CPPUNIT_ASSERT (audiortp != NULL);
 
-	sleep(1);
+    sleep (1);
 
-	_debug ("------ RtpTest::testRtpClose() ------");
+    _debug ("------ RtpTest::testRtpClose() ------");
 
-	try {
-		_debug ("------ Close Rtp Session -------");
-		audiortp->stop();
+    try {
+        _debug ("------ Close Rtp Session -------");
+        audiortp->stop();
 
-	} catch (...) {
+    } catch (...) {
 
-		_debug ("!!! Exception occured while closing Rtp !!!");
-		CPPUNIT_ASSERT(false);
+        _debug ("!!! Exception occured while closing Rtp !!!");
+        CPPUNIT_ASSERT (false);
 
-	}
+    }
 
-	delete audiortp;
+    delete audiortp;
 
-	audiortp = NULL;
+    audiortp = NULL;
 }
 
-void RtpTest::tearDown() {
-	delete sipcall;
-	sipcall = NULL;
+void RtpTest::tearDown()
+{
+    delete sipcall;
+    sipcall = NULL;
 }
diff --git a/sflphone-common/test/sdesnegotiatortest.cpp b/sflphone-common/test/sdesnegotiatortest.cpp
index 6a873613f29b59d4fdebf32b15e4c30c9c4724fe..fd1f630fe70d3288f722b3e3fbb92a77f188d2d0 100644
--- a/sflphone-common/test/sdesnegotiatortest.cpp
+++ b/sflphone-common/test/sdesnegotiatortest.cpp
@@ -51,15 +51,15 @@ using std::endl;
 
 void SdesNegotiatorTest::testTagPattern()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testTagPattern --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testTagPattern --------------------\n");
 
-	std::string subject = "a=crypto:4";
+    std::string subject = "a=crypto:4";
 
-    pattern = new sfl::Pattern("^a=crypto:(?P<tag>[0-9]{1,9})");
+    pattern = new sfl::Pattern ("^a=crypto:(?P<tag>[0-9]{1,9})");
     *pattern << subject;
 
-    CPPUNIT_ASSERT(pattern->matches());
-    CPPUNIT_ASSERT(pattern->group("tag").compare("4") == 0);
+    CPPUNIT_ASSERT (pattern->matches());
+    CPPUNIT_ASSERT (pattern->group ("tag").compare ("4") == 0);
 
     delete pattern;
     pattern = NULL;
@@ -68,18 +68,18 @@ void SdesNegotiatorTest::testTagPattern()
 
 void SdesNegotiatorTest::testCryptoSuitePattern()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testCryptoSuitePattern --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testCryptoSuitePattern --------------------\n");
 
-    std::string subject = "AES_CM_128_HMAC_SHA1_80"; 
+    std::string subject = "AES_CM_128_HMAC_SHA1_80";
 
-    pattern = new sfl::Pattern("(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \
-			       "AES_CM_128_HMAC_SHA1_32|"		\
-			       "F8_128_HMAC_SHA1_80|"			\
-			       "[A-Za-z0-9_]+)");
+    pattern = new sfl::Pattern ("(?P<cryptoSuite>AES_CM_128_HMAC_SHA1_80|" \
+                                "AES_CM_128_HMAC_SHA1_32|"		\
+                                "F8_128_HMAC_SHA1_80|"			\
+                                "[A-Za-z0-9_]+)");
     *pattern << subject;
 
-    CPPUNIT_ASSERT(pattern->matches());
-    CPPUNIT_ASSERT(pattern->group("cryptoSuite").compare("AES_CM_128_HMAC_SHA1_80") == 0);
+    CPPUNIT_ASSERT (pattern->matches());
+    CPPUNIT_ASSERT (pattern->group ("cryptoSuite").compare ("AES_CM_128_HMAC_SHA1_80") == 0);
 
     delete pattern;
     pattern = NULL;
@@ -88,25 +88,25 @@ void SdesNegotiatorTest::testCryptoSuitePattern()
 
 void SdesNegotiatorTest::testKeyParamsPattern()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testKeyParamsPattern --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testKeyParamsPattern --------------------\n");
 
     std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32";
 
-    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-			       "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
-			       "(2\\^(?P<lifetime>[0-9]+)\\|"		\
-			       "(?P<mkiValue>[0-9]+)\\:"		\
-			       "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+    pattern = new sfl::Pattern ("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+                                "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)\\|" \
+                                "(2\\^(?P<lifetime>[0-9]+)\\|"		\
+                                "(?P<mkiValue>[0-9]+)\\:"		\
+                                "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
 
     *pattern << subject;
 
     pattern->matches();
-    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
-    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
-== 0);
-    CPPUNIT_ASSERT(pattern->group("lifetime").compare("20")== 0);
-    CPPUNIT_ASSERT(pattern->group("mkiValue").compare("1")== 0);
-    CPPUNIT_ASSERT(pattern->group("mkiLength").compare("32")== 0);
+    CPPUNIT_ASSERT (pattern->group ("srtpKeyMethod").compare ("inline:"));
+    CPPUNIT_ASSERT (pattern->group ("srtpKeyInfo").compare ("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
+                    == 0);
+    CPPUNIT_ASSERT (pattern->group ("lifetime").compare ("20") == 0);
+    CPPUNIT_ASSERT (pattern->group ("mkiValue").compare ("1") == 0);
+    CPPUNIT_ASSERT (pattern->group ("mkiLength").compare ("32") == 0);
 
     delete pattern;
     pattern = NULL;
@@ -115,21 +115,21 @@ void SdesNegotiatorTest::testKeyParamsPattern()
 
 void SdesNegotiatorTest::testKeyParamsPatternWithoutMKI()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testKeyParamsPatternWithoutMKI --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testKeyParamsPatternWithoutMKI --------------------\n");
 
     std::string subject = "inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj";
 
-    pattern = new sfl::Pattern("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
-                               "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)" \
-                               "(\\|2\\^(?P<lifetime>[0-9]+)\\|"                \
-                               "(?P<mkiValue>[0-9]+)\\:"                \
-                               "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
+    pattern = new sfl::Pattern ("(?P<srtpKeyMethod>inline|[A-Za-z0-9_]+)\\:" \
+                                "(?P<srtpKeyInfo>[A-Za-z0-9\x2B\x2F\x3D]+)" \
+                                "(\\|2\\^(?P<lifetime>[0-9]+)\\|"                \
+                                "(?P<mkiValue>[0-9]+)\\:"                \
+                                "(?P<mkiLength>[0-9]{1,3})\\;?)?", "g");
 
     *pattern << subject;
     pattern->matches();
-    CPPUNIT_ASSERT(pattern->group("srtpKeyMethod").compare("inline:"));
-    CPPUNIT_ASSERT(pattern->group("srtpKeyInfo").compare("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
-== 0);
+    CPPUNIT_ASSERT (pattern->group ("srtpKeyMethod").compare ("inline:"));
+    CPPUNIT_ASSERT (pattern->group ("srtpKeyInfo").compare ("d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj")
+                    == 0);
 
     delete pattern;
     pattern = NULL;
@@ -138,26 +138,27 @@ void SdesNegotiatorTest::testKeyParamsPatternWithoutMKI()
 
 /**
  * Make sure that all the fields can be extracted
- * properly from the syntax. 
+ * properly from the syntax.
  */
 void SdesNegotiatorTest::testNegotiation()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testNegotiation --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testNegotiation --------------------\n");
 
-     // Add a new SDES crypto line to be processed. 
+    // Add a new SDES crypto line to be processed.
     remoteOffer = new std::vector<std::string>();
-    remoteOffer->push_back(std::string("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"));
-    remoteOffer->push_back(std::string("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32"));
-	
+    remoteOffer->push_back (std::string ("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32"));
+    remoteOffer->push_back (std::string ("a=crypto:2 AES_CM_128_HMAC_SHA1_32 inline:NzB4d1BINUAvLEw6UzF3WSJ+PSdFcGdUJShpX1Zj|2^20|1:32"));
+
     // Register the local capabilities.
     localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>();
-    for(int i = 0; i < 3; i++) {
-        localCapabilities->push_back(sfl::CryptoSuites[i]);
+
+    for (int i = 0; i < 3; i++) {
+        localCapabilities->push_back (sfl::CryptoSuites[i]);
     }
 
-    sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer);
+    sdesnego = new sfl::SdesNegotiator (*localCapabilities, *remoteOffer);
 
-    CPPUNIT_ASSERT(sdesnego->negotiate());
+    CPPUNIT_ASSERT (sdesnego->negotiate());
     // CPPUNIT_ASSERT(sdesnego->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd|2^20|1:32")==0);
 
     delete remoteOffer;
@@ -175,24 +176,24 @@ void SdesNegotiatorTest::testNegotiation()
  */
 void SdesNegotiatorTest::testComponent()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testComponent --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testComponent --------------------\n");
 
     // Register the local capabilities.
     std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
-	
+
     //Support all the CryptoSuites
-    for(int i = 0; i < 3; i++) {
-        capabilities->push_back(sfl::CryptoSuites[i]);
+    for (int i = 0; i < 3; i++) {
+        capabilities->push_back (sfl::CryptoSuites[i]);
     }
-	
+
     // Make sure that if a component is missing, negotiate will fail
-    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32");
+    std::string cryptoLine ("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:|2^20|1:32");
     std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
-    cryptoOffer->push_back(cryptoLine);	
+    cryptoOffer->push_back (cryptoLine);
 
-    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
+    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator (*capabilities, *cryptoOffer);
 
-    CPPUNIT_ASSERT(negotiator->negotiate() == false);
+    CPPUNIT_ASSERT (negotiator->negotiate() == false);
 }
 
 
@@ -202,33 +203,36 @@ void SdesNegotiatorTest::testComponent()
  */
 void SdesNegotiatorTest::testMostSimpleCase()
 {
-	_debug ("-------------------- SdesNegotiatorTest::testMostSimpleCase --------------------\n");
+    _debug ("-------------------- SdesNegotiatorTest::testMostSimpleCase --------------------\n");
 
     // Register the local capabilities.
     std::vector<sfl::CryptoSuiteDefinition> * capabilities = new std::vector<sfl::CryptoSuiteDefinition>();
 
     //Support all the CryptoSuites
-    for(int i = 0; i < 3; i++) {
-        capabilities->push_back(sfl::CryptoSuites[i]);
+    for (int i = 0; i < 3; i++) {
+        capabilities->push_back (sfl::CryptoSuites[i]);
     }
 
     // Make sure taht this case works (since it's default for most application)
-    std::string cryptoLine("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd");
+    std::string cryptoLine ("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd");
     std::vector<std::string> * cryptoOffer = new std::vector<std::string>();
-    cryptoOffer->push_back(cryptoLine);	
+    cryptoOffer->push_back (cryptoLine);
 
-    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator(*capabilities, *cryptoOffer);
+    sfl::SdesNegotiator * negotiator = new sfl::SdesNegotiator (*capabilities, *cryptoOffer);
 
-    CPPUNIT_ASSERT(negotiator->negotiate() == true);
+    CPPUNIT_ASSERT (negotiator->negotiate() == true);
 
-    CPPUNIT_ASSERT(negotiator->getCryptoSuite().compare("AES_CM_128_HMAC_SHA1_80") == 0);
-    CPPUNIT_ASSERT(negotiator->getKeyMethod().compare("inline") == 0);
-    CPPUNIT_ASSERT(negotiator->getKeyInfo().compare("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0);
-    CPPUNIT_ASSERT(negotiator->getLifeTime().compare("")== 0);
-    CPPUNIT_ASSERT(negotiator->getMkiValue().compare("")== 0);
-    CPPUNIT_ASSERT(negotiator->getMkiLength().compare("")== 0);
+    CPPUNIT_ASSERT (negotiator->getCryptoSuite().compare ("AES_CM_128_HMAC_SHA1_80") == 0);
+    CPPUNIT_ASSERT (negotiator->getKeyMethod().compare ("inline") == 0);
+    CPPUNIT_ASSERT (negotiator->getKeyInfo().compare ("AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd") == 0);
+    CPPUNIT_ASSERT (negotiator->getLifeTime().compare ("") == 0);
+    CPPUNIT_ASSERT (negotiator->getMkiValue().compare ("") == 0);
+    CPPUNIT_ASSERT (negotiator->getMkiLength().compare ("") == 0);
 
-    delete capabilities; capabilities = NULL;
-    delete cryptoOffer; cryptoOffer = NULL;
-    delete negotiator; negotiator = NULL;
+    delete capabilities;
+    capabilities = NULL;
+    delete cryptoOffer;
+    cryptoOffer = NULL;
+    delete negotiator;
+    negotiator = NULL;
 }
diff --git a/sflphone-common/test/sflphoned-sample.yml b/sflphone-common/test/sflphoned-sample.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1ff29e0eab1037a4230955471570c8ed7fc29f45
--- /dev/null
+++ b/sflphone-common/test/sflphoned-sample.yml
@@ -0,0 +1,106 @@
+---
+accounts:
+- alias: 
+  codecs: 0/
+  credential:
+    count: 0
+  displayName: 
+  dtmfType: sipinfo
+  enable: true
+  expire: 
+  hostname: 
+  id: IP2IP
+  interface: default
+  mailbox: 97
+  password: 
+  port: 5060
+  publishAddr: 
+  publishPort: 5060
+  resolveOnce: false
+  ringtoneEnabled: true
+  ringtonePath: /usr/share/sflphone/ringtones/konga.ul
+  sameasLocal: true
+  serviceRoute: 
+  srtp:
+    enable: false
+    keyExchange: sdes
+    rtpFallback: false
+  stunEnabled: false
+  stunServer: stun.sflphone.org
+  tls:
+    calist: 
+    certificate: 
+    ciphers: 
+    enable: false
+    method: TLSv1
+    password: 
+    privateKey: 
+    requireCertif: true
+    server: 
+    timeout: 2
+    tlsPort: 5061
+    verifyClient: true
+    verifyServer: true
+  type: SIP
+  username: 
+  zrtp:
+    displaySas: true
+    displaySasOnce: false
+    helloHashEnabled: true
+    notSuppWarning: true
+preferences:
+  audioApi: pulseaudio
+  historyLimit: 30
+  historyMaxCalls: 20
+  md5Hash: false
+  notifyMails: false
+  order: Account:1285624877/Account:1285265589/Account:1285257971/Account:1285253592/Account:1285252571/Account:1285251984/Account:1285251811/Account:1285251597/Account:1285192081/Account:1285184087/Account:1285182355/
+  portNum: 5060
+  registrationExpire: 180
+  searchBarDisplay: true
+  zeroConfenable: false
+  zoneToneChoice: North America
+voipPreferences:
+  playDtmf: true
+  playTones: true
+  pulseLength: 250
+  symmetric: true
+  zidFile: zidFile
+addressbook:
+  business: true
+  enabled: true
+  home: true
+  list: 
+  maxResults: 25
+  mobile: true
+  photo: true
+hooks:
+  iax2Enabled: false
+  numberAddPrefix: 
+  numberEnabled: false
+  sipEnabled: false
+  urlCommand: x-www-browser
+  urlSipField: X-sflphone-url
+audio:
+  alsa:
+    cardIn: 0
+    cardOut: 0
+    cardRing: 0
+    frameSize: 20
+    plugin: default
+    smplRate: 44100
+  noiseReduce: true
+  pulse:
+    devicePlayback: alsa_output.pci-0000_00_1b.0.analog-stereo
+    deviceRecord: alsa_input.pci-0000_00_1b.0.analog-stereo
+    deviceRingtone: alsa_output.pci-0000_00_1b.0.analog-stereo
+  recordPath: 
+  volumeMic: 100
+  volumeSpkr: 100
+shortcuts:
+  hangUp: 
+  pickUp: 
+  popupWindow: 
+  toggleHold: 
+  togglePickupHangup: 
+...
diff --git a/sflphone-common/test/siptest.cpp b/sflphone-common/test/siptest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..be44f269f976fe8a133874fb7b12c9ce6ce702e6
--- /dev/null
+++ b/sflphone-common/test/siptest.cpp
@@ -0,0 +1,213 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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 <stdlib.h>
+#include <stdio.h>
+#include <iostream>
+#include <fstream>
+
+#include <pthread.h>
+#include <string>
+
+#include "siptest.h"
+#include "manager.h" 
+#include "sip/sipvoiplink.h"
+
+using std::cout;
+using std::endl;
+
+void *sippThread(void *str)
+{
+
+    std::string *command = (std::string *)(str); 
+
+    std::cout << "SIPTest: " << command << std::endl;
+
+    // Set up the sipp instance in this thread in order to catch return value 
+    // 0: All calls were successful
+    // 1: At least one call failed
+    // 97: exit on internal command. Calls may have been processed
+    // 99: Normal exit without calls processed
+    // -1: Fatal error
+    // -2: Fatal error binding a socket 
+    int i = system(command->c_str());
+	
+    CPPUNIT_ASSERT(i==0);
+
+    pthread_exit(NULL);
+
+}
+
+
+void SIPTest::setUp()
+{
+    
+}
+
+void SIPTest::tearDown()
+{
+
+    // in order to stop any currently running threads
+    std::cout << "SIPTest: Clean all remaining sipp instances" << std::endl;
+    int ret = system("killall sipp");
+    if(!ret)
+	std::cout << "SIPTest: Error from system call, killall sipp" << std::endl;
+}
+
+
+void SIPTest::testSimpleOutgoingIpCall ()
+{
+    pthread_t thethread;
+    void *status;
+
+    // command to be executed by the thread, user agent server waiting for a call
+    std::string command("sipp -sn uas -i 127.0.0.1 -p 5062 -m 1");
+
+    int rc = pthread_create(&thethread, NULL, sippThread, (void *)(&command));
+    if (rc) {
+        std::cout << "SIPTest: ERROR; return code from pthread_create()" << std::endl;
+    }
+    
+    std::string testaccount("IP2IP");
+    std::string testcallid("callid1234");
+    std::string testcallnumber("sip:test@127.0.0.1:5062");
+
+    CPPUNIT_ASSERT(!Manager::instance().hasCurrentCall());
+
+    // start a new call sending INVITE message to sipp instance
+    Manager::instance().outgoingCall(testaccount, testcallid, testcallnumber);
+
+    // must sleep here until receiving 180 and 200 message from peer
+    sleep(2);
+
+    // call list should be empty for outgoing calls, only used for incoming calls
+    CPPUNIT_ASSERT(Manager::instance().getCallList().size() == 0);
+
+    CPPUNIT_ASSERT(Manager::instance().hasCurrentCall());
+    CPPUNIT_ASSERT(Manager::instance().getCurrentCallId() == testcallid);
+
+    std::map<std::string, std::string>::iterator iterCallDetails;
+    std::map<std::string, std::string> callDetails = Manager::instance().getCallDetails (testcallid);
+   
+    iterCallDetails = callDetails.find("ACCOUNTID");
+    CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == ""));
+    iterCallDetails = callDetails.find("PEER_NUMBER");
+    CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == "<sip:test@127.0.0.1:5062>")); 
+    iterCallDetails = callDetails.find("PEER_NAME");
+    CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == ""));
+    iterCallDetails = callDetails.find("DISPLAY_NAME");
+    CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == ""));
+    iterCallDetails = callDetails.find("CALL_STATE");
+    CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == "CURRENT"));
+    iterCallDetails = callDetails.find("CALL_TYPE");
+    CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == "1"));
+
+    Manager::instance().hangupCall(testcallid);
+
+    rc = pthread_join(thethread, &status);
+    if (rc) {
+        std::cout << "SIPTest: ERROR; return code from pthread_join(): " << rc << std::endl;
+    }
+    else
+        std::cout << "SIPTest: completed join with thread" << std::endl;
+
+
+}
+
+
+void SIPTest::testSimpleIncomingIpCall ()
+{
+
+    pthread_t thethread;
+    void *status;
+
+    // command to be executed by the thread, user agent client which initiate a call and hangup
+    std::string command("sipp -sn uac 127.0.0.1 -i 127.0.0.1 -p 5062 -m 1");
+
+    int rc = pthread_create(&thethread, NULL, sippThread, (void *)(&command));
+    if (rc) {
+        std::cout << "SIPTest: ERROR; return code from pthread_create()" << std::endl;
+    }
+    
+
+    // sleep a while to make sure that sipp insdtance is initialized and sflphoned received
+    // the incoming invite.
+    sleep(2);
+
+    // gtrab call id from sipvoiplink 
+    SIPVoIPLink *siplink = SIPVoIPLink::instance (""); 
+
+    CPPUNIT_ASSERT(siplink->_callMap.size() == 1);
+    CallMap::iterator iterCallId = siplink->_callMap.begin();
+    std::string testcallid = iterCallId->first;
+  
+    // TODO: hmmm, should IP2IP call be stored in call list....
+    CPPUNIT_ASSERT(Manager::instance().getCallList().size() == 0);
+ 
+    // Answer this call
+    CPPUNIT_ASSERT(Manager::instance().answerCall(testcallid));
+    
+    // This is useless since manager is not aware of incoming IP2IP sip calls
+    /*
+    sleep(1);
+
+    std::map<std::string, std::string>::iterator iterCallDetails;
+    std::map<std::string, std::string> callDetails = Manager::instance().getCallDetails (testcallid);
+
+    iterCallDetails = callDetails.find("ACCOUNTID");
+    std::cout << "---------------------- " << iterCallDetails->second << std::endl;
+    // CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == ""));
+    iterCallDetails = callDetails.find("PEER_NUMBER");
+    std::cout << "--------------------- " << iterCallDetails->second << std::endl;
+    // CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == "<sip:test@127.0.0.1:5062>"));
+    iterCallDetails = callDetails.find("PEER_NAME");
+    std::cout << "--------------------- " << iterCallDetails->second << std::endl;
+    // CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == ""));
+    iterCallDetails = callDetails.find("DISPLAY_NAME");
+    std::cout << "-------------------- " << iterCallDetails->second << std::endl;
+    // CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == ""));
+    iterCallDetails = callDetails.find("CALL_STATE");
+    std::cout << "-------------------- " << iterCallDetails->second << std::endl;
+    // CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == "CURRENT"));
+    iterCallDetails = callDetails.find("CALL_TYPE");
+    std::cout << "-------------------- " << iterCallDetails->second << std::endl;
+    // CPPUNIT_ASSERT((iterCallDetails != callDetails.end()) && (iterCallDetails->second == "1"));
+    */
+
+
+    sleep(1);
+
+    rc = pthread_join(thethread, &status);
+    if (rc) {
+        std::cout << "SIPTest: ERROR; return code from pthread_join(): " << rc << std::endl;
+    }
+    else
+        std::cout << "SIPTest: completed join with thread" << std::endl;
+}
diff --git a/sflphone-common/test/siptest.h b/sflphone-common/test/siptest.h
new file mode 100644
index 0000000000000000000000000000000000000000..24478184a97ff0ab65c7b0c743ca132d1666c523
--- /dev/null
+++ b/sflphone-common/test/siptest.h
@@ -0,0 +1,87 @@
+/*
+ *  Copyright (C) 2004, 2005, 2006, 2009, 2008, 2009, 2010 Savoir-Faire Linux Inc.
+ *  Author: Emmanuel Milou <emmanuel.milou@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.
+ */
+
+// Cppunit import
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/TestCaller.h>
+#include <cppunit/TestCase.h>
+#include <cppunit/TestSuite.h>
+
+#include <assert.h>
+
+// Application import
+#include "manager.h"
+
+/*
+ * @file siptest.h 
+ * @brief       Regroups unitary tests related to the SIP module
+ */
+
+#ifndef _SIP_TEST_
+#define _SIP_TEST_
+
+class SIPTest : public CppUnit::TestCase {
+
+   /**
+     * Use cppunit library macros to add unit test the factory
+     */
+    CPPUNIT_TEST_SUITE( SIPTest );
+    CPPUNIT_TEST ( testSimpleOutgoingIpCall );
+    CPPUNIT_TEST ( testSimpleIncomingIpCall );
+    CPPUNIT_TEST_SUITE_END();
+
+    public:
+        SIPTest() : CppUnit::TestCase("SIP module Tests") {}
+        
+        /*
+         * Code factoring - Common resources can be initialized here.
+         * This method is called by unitcpp before each test
+         */
+        void setUp();
+
+        /*
+         * Code factoring - Common resources can be released here.
+         * This method is called by unitcpp after each test
+         */
+        inline void tearDown ();
+
+
+	void testSimpleOutgoingIpCall(void);
+
+	void testSimpleIncomingIpCall(void);
+
+    private:
+};
+
+/* Register our test module */
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(SIPTest, "SIPTest");
+CPPUNIT_TEST_SUITE_REGISTRATION( SIPTest );
+
+#endif
diff --git a/sflphone-common/test/validator.cpp b/sflphone-common/test/validator.cpp
index a12bad1714cebcbda861aa6261f13af8e1851e2f..de6d228e0e867437b4cf701ca4f8460817687484 100644
--- a/sflphone-common/test/validator.cpp
+++ b/sflphone-common/test/validator.cpp
@@ -30,20 +30,25 @@
 
 #include "validator.h"
 
-bool Validator::isNumber(std::string str) {
-	unsigned int i = 0;
-	if (!str.empty() && (str[i] == '-' || str[i] == '+'))
-		i++;
-	return string::npos == str.find_first_not_of(".eE0123456789", i);
+bool Validator::isNumber (std::string str)
+{
+    unsigned int i = 0;
+
+    if (!str.empty() && (str[i] == '-' || str[i] == '+'))
+        i++;
+
+    return string::npos == str.find_first_not_of (".eE0123456789", i);
 }
 
-bool Validator::isNotNull(std::string str) {
-	if(!str.empty())
-		return true;
-	else
-		return false;
+bool Validator::isNotNull (std::string str)
+{
+    if (!str.empty())
+        return true;
+    else
+        return false;
 }
 
-bool Validator::isEqual(std::string str1, std::string str2) {
-	return str1.compare(str2) == 0;
+bool Validator::isEqual (std::string str1, std::string str2)
+{
+    return str1.compare (str2) == 0;
 }
diff --git a/sflphone-common/test/waveSample/M1F1-int16WE-AFsp.wav b/sflphone-common/test/waveSample/M1F1-int16WE-AFsp.wav
new file mode 100644
index 0000000000000000000000000000000000000000..6df1c305809b5cee7a8fa4b07e28ee4dcbe524cb
Binary files /dev/null and b/sflphone-common/test/waveSample/M1F1-int16WE-AFsp.wav differ
diff --git a/sflphone-common/test/ymlParser.yml b/sflphone-common/test/ymlParser.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c63756336f815a62a8745e960d6263be9c047807
--- /dev/null
+++ b/sflphone-common/test/ymlParser.yml
@@ -0,0 +1,117 @@
+accounts:
+ - id:			1234
+   alias:   		sfl-181
+   username:		181   
+   password:  		sfl-181pw
+   hostname:  		sflphone.org
+   enable:		true
+   type:		sip
+
+ - id:			2345
+   alias:		sfl-431
+   username:		431     
+   password:  		alexandre
+   hostname:		192.168.50.3
+   enable:		true
+   type:		sip
+   expire:		3600
+   interface:		lo
+   port:		5065
+   mailbox:		97
+   publishaddr:		127.0.0.1
+   publishport:		5065
+   sameaslocal:		true
+   resolveonce:		false      
+   codecs:		0/9/110/111/112/
+   credential:
+     count:		0
+   srtp:
+     enable:		true
+     keyexchange:	sdes
+     rtpfallback:	true
+   zrtp:
+     displaySas:	true
+     displaySasOnce:	false
+     helloHashEnabled:	true
+     notSuppWarning:	true
+   tls:
+     certificate:       /home/msavard/Development/sflphone/sflphone-client-gnome/config.guess
+     calist:            /home/msavard/Development/sflphone/sflphone-client-gnome/aclocal.m4
+     ciphers:
+     enable:            true
+     method:           	TLSv1
+     timeout:          	0
+     password:
+     privatekey:        /home/msavard/Development/sflphone/sflphone-client-gnome/config.log
+     requirecertif:    	true
+     server:
+     verifyclient:      true
+     verifyserver:      true
+
+addressbook:
+   photo:		false
+   enabled:		true
+   list:		1243608768.30329.0@emilou-desktop/1243456917.15690.23@emilou-desktop/
+   max_results:		25
+   business:		true
+   home:		false
+   mobile:		false
+
+audio:
+   alsa:
+     cardin:            0
+     cardout:		0
+     cardout:		0
+     framesize:		20
+     plugin:		default
+     smplrate:		44100
+   pulse:
+     devicePlayback:
+     deviceRecord:
+     deviceRingtone:	
+   recordpath:		/home/msavard/Bureau
+   ringchoice:		/usr/share/sflphone/ringtones/konga.ul
+   volumemic:		100
+   volumespkr:		100
+
+hooks:
+   iax2Enabled:		false
+   numberAddPrefix:	false
+   numberEnabled:	false
+   sipEnabled:		false
+   urlCommand:		x-www-browser
+   urlSipField:		X-sflphone-url
+
+preferences:
+   order:		1234/2345
+   audioapi:		0
+   dialpaddisplay:	0
+   historyenabled:	1
+   historylimit:	30
+   historymaxCalls:	20
+   notifyall:		true
+   notifymails:		false
+   zoneToneChoice:	North America
+   registrationexpire:	180
+   ringtonesenable:	true
+   portnum:		5060
+   searchbardisplay:	true
+   starthidden:		0
+   volumedisplay:	0
+   windowheight:	332
+   windowpopup:		0
+   windowposition:	0
+   windowposition:	24
+   windowwidth:		240
+   zeroconfenable:	false
+   md5Hash:		false
+
+voiplink:
+   playDtmf:		true
+   playTones:		true
+   pulseLength:		250
+   sendDTMFas:		0
+   stunenable:		0
+   stunserver:		stun.sflphone.org
+   symmetric:		true
+   zidFile:		sfl.zid
\ No newline at end of file
diff --git a/sippxml/g711a.pcap b/sippxml/g711a.pcap
new file mode 100644
index 0000000000000000000000000000000000000000..bafea386f396eacbd14871f0156aed76df0166ee
Binary files /dev/null and b/sippxml/g711a.pcap differ
diff --git a/sippxml/simpleServiceRoute.xml b/sippxml/simpleServiceRoute.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f09cd05012249742044ad1ba0f43cce09a499de3
--- /dev/null
+++ b/sippxml/simpleServiceRoute.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+
+ <send retrans="500">
+   <![CDATA[
+
+     INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+     Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+     From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
+     To: sut <sip:[service]@[remote_ip]:[remote_port]>
+     Call-ID: [call_id]
+     CSeq: 1 INVITE
+     Contact: sip:sipp@[local_ip]:[local_port]
+     Max-Forwards: 70
+     Subject: Performance Test
+     Content-Type: application/sdp
+     Content-Length: [len]
+     Route: <sip:sipp@[local_ip]:[local_port]>
+
+     v=0
+     o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+     s=-
+     c=IN IP[media_ip_type] [media_ip]
+     t=0 0
+     m=audio [media_port] RTP/AVP 0
+     a=rtpmap:0 PCMU/8000
+
+   ]]>
+ </send>
+
+ <recv response="100"
+       optional="true">
+ </recv>
+
+ <recv response="183" optional="true">
+ </recv>
+
+ <recv response="200" rtd="true">
+ </recv>
+
+ <send>
+   <![CDATA[
+
+     ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+     Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+     From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
+     To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
+     Call-ID: [call_id]
+     CSeq: 1 ACK
+     Contact: sip:sipp@[local_ip]:[local_port]
+     Max-Forwards: 70
+     Subject: Performance Test
+     Content-Length: 0
+
+   ]]>
+ </send>
+
+ <pause/>
+
+ <send retrans="500">
+   <![CDATA[
+
+     BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
+     Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+     From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
+     To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
+     Call-ID: [call_id]
+     CSeq: 2 BYE
+     Contact: sip:sipp@[local_ip]:[local_port]
+     Max-Forwards: 70
+     Subject: Performance Test
+     Content-Length: 0
+
+   ]]>
+ </send>
+
+ <recv response="200" crlf="true">
+ </recv>
+
+ <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+ <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario> 
diff --git a/sippxml/testEarlyMedia.xml b/sippxml/testEarlyMedia.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28f34ff4f084dc598c77b2bba5b8ecead188ff89
--- /dev/null
+++ b/sippxml/testEarlyMedia.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<!-- sudo sipp -sf testEarlyMedia.xml 127.0.0.1 -i 127.0.0.1 -p 5062 -l 1 -m 1 -mp 6000 -->
+
+<scenario name="Basic UAS responder">
+
+ <recv request="INVITE" crlf="true">
+ </recv>
+
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 100 Ringing
+     [last_Via:]
+     [last_From:]
+     [last_To:];tag=[call_number]
+     [last_Call-ID:]
+     [last_CSeq:]
+     Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+     Content-Length: 0
+
+   ]]>
+ </send>
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 183 Trying
+     [last_Via:]
+     [last_From:]
+     [last_To:];tag=[call_number]
+     [last_Call-ID:]
+     [last_CSeq:]
+     Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+     Content-Type: application/sdp
+     Content-Length: [len]
+
+     v=0
+     o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+     s=-
+     c=IN IP[media_ip_type] [media_ip]
+     t=0 0
+     m=audio [media_port] RTP/AVP 0
+     a=rtpmap:0 PCMU/8000
+
+   ]]>
+ </send>
+
+ <!-- Play a pre-recorded PCAP file (RTP stream) -->
+  <nop>
+    <action>
+      <exec play_pcap_audio="g711a.pcap"/>
+    </action>
+  </nop>
+
+  <!-- Pause 8 seconds, which is approximately the duration of the -->
+  <!-- PCAP file -->
+  <pause milliseconds="8000"/>
+
+ <send retrans="500">
+   <![CDATA[
+
+     SIP/2.0 200 OK
+     [last_Via:]
+     [last_From:]
+     [last_To:];tag=[call_number]
+     [last_Call-ID:]
+     [last_CSeq:]
+     Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+     Content-Length: [len]
+
+   ]]>
+ </send>
+
+ <recv request="ACK"
+       optional="true"
+       rtd="true"
+       crlf="true">
+ </recv>
+
+ <recv request="BYE">
+ </recv>
+
+ <send>
+   <![CDATA[
+
+     SIP/2.0 200 OK
+     [last_Via:]
+     [last_From:]
+     [last_To:]
+     [last_Call-ID:]
+     [last_CSeq:]
+     Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+     Content-Length: 0
+
+   ]]>
+ </send>
+
+ <pause milliseconds="4000"/>
+
+
+ <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+ <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario> 
diff --git a/sippxml/voice b/sippxml/voice
new file mode 100644
index 0000000000000000000000000000000000000000..c881cf2d1b97c326d0f5d78ad4beebde51bd4b15
Binary files /dev/null and b/sippxml/voice differ
diff --git a/tools/build-system/launch-build-machine-2.sh b/tools/build-system/launch-build-machine-2.sh
index 12f8760e79c1de83f177606a64127b320fba516a..6ced3b75ee085b476231768865bf83d2c9b44293 100755
--- a/tools/build-system/launch-build-machine-2.sh
+++ b/tools/build-system/launch-build-machine-2.sh
@@ -7,7 +7,7 @@
 # Author: Julien Bonjean (julien@bonjean.info) 
 #
 # Creation Date: 2009-10-20
-# Last Modified: 2009-12-15 18:16:50 -0500
+# Last Modified: 2010-04-22 16:42:57 -0400
 #####################################################
 
 #set -x
@@ -16,10 +16,12 @@
 
 IS_RELEASE=
 VERSION_INDEX="1"
+IS_KDE_CLIENT=
 DO_PUSH=1
 DO_LOGGING=1
 DO_UPLOAD=1
 SNAPSHOT_TAG=`date +%Y%m%d`
+TAG_NAME_PREFIX=
 
 LAUNCHPAD_PACKAGES=( "sflphone-client-gnome" "sflphone-common" )
 
@@ -37,6 +39,7 @@ do
                 echo "Options :"
                 echo " --skip-push"
                 echo " --skip-upload"
+		echo " --kde-client"
                 echo " --no-logging"
                 echo " --release"
                 echo " --version-index=[1,2,...]"
@@ -46,6 +49,8 @@ do
                 unset DO_PUSH;;
         --skip-upload)
                 unset DO_UPLOAD;;
+        --kde-client)
+                IS_KDE_CLIENT=1;;
         --no-logging)
                 unset DO_LOGGING;;
         --release)
@@ -89,6 +94,10 @@ else
 	echo "Snapshot mode"
 fi
 
+if [ ${IS_KDE_CLIENT} ]; then
+	TAG_NAME_PREFIX="kde."
+fi
+
 #########################
 # COMMON PART
 #########################
@@ -104,15 +113,26 @@ fi
 
 echo "Retrieve build info"
 # retrieve info we may need
-CURRENT_RELEASE_TAG_NAME=`git tag -l "[0-9]\.[0-9]\.[0-9]\.*" | tail -n 1`
-PREVIOUS_RELEASE_TAG_NAME=`git tag -l "[0-9]\.[0-9]\.[0-9]\.*" | tail -n 2 | sed -n '1p;1q'`
+if [ ${IS_KDE_CLIENT} ]; then
+	TAG_NAME_PREFIX="kde."
+	LAUNCHPAD_PACKAGES=( "sflphone-client-kde" )
+fi
+CURRENT_RELEASE_TAG_NAME=`git tag -l "${TAG_NAME_PREFIX}[0-9]\.[0-9]\.[0-9]\.*" | tail -n 1`
+PREVIOUS_RELEASE_TAG_NAME=`git tag -l "${TAG_NAME_PREFIX}[0-9]\.[0-9]\.[0-9]\.*" | tail -n 2 | sed -n '1p;1q'`
 CURRENT_RELEASE_COMMIT_HASH=`git show --pretty=format:"%H" -s ${CURRENT_RELEASE_TAG_NAME} | tail -n 1`
 PREVIOUS_RELEASE_COMMIT_HASH=`git show --pretty=format:"%H" -s ${PREVIOUS_RELEASE_TAG_NAME} | tail -n 1`
 CURRENT_COMMIT=`git show --pretty=format:"%H"  -s | tail -n 1`
 CURRENT_RELEASE_TYPE=${CURRENT_RELEASE_TAG_NAME##*.}
 PREVIOUS_RELEASE_TYPE=${PREVIOUS_RELEASE_TAG_NAME##*.}
-CURRENT_RELEASE_VERSION=${CURRENT_RELEASE_TAG_NAME%*.*}
-PREVIOUS_VERSION=${PREVIOUS_RELEASE_TAG_NAME%*.*}
+if [ ${IS_KDE_CLIENT} ]; then
+	CURRENT_RELEASE_VERSION=${CURRENT_RELEASE_TAG_NAME%.*}
+	CURRENT_RELEASE_VERSION=${CURRENT_RELEASE_VERSION#*.}
+	PREVIOUS_VERSION=${PREVIOUS_RELEASE_TAG_NAME%.*}
+	PREVIOUS_VERSION=${PREVIOUS_VERSION#*.}
+else
+	CURRENT_RELEASE_VERSION=${CURRENT_RELEASE_TAG_NAME%.*}
+	PREVIOUS_VERSION=${PREVIOUS_RELEASE_TAG_NAME%.*}
+fi
 
 cd ${LAUNCHPAD_DIR}
 
diff --git a/tools/build-system/launchpad/dput.conf b/tools/build-system/launchpad/dput.conf
index ea85aa390ad912a626508ec49c3f2e0ec6e5d98d..8566a50799474d4c2c1b3251c63d00a75efca81c 100644
--- a/tools/build-system/launchpad/dput.conf
+++ b/tools/build-system/launchpad/dput.conf
@@ -12,6 +12,13 @@ incoming = ~savoirfairelinux/sflphone-testing/ubuntu/karmic
 login = anonymous
 allow_unsigned_uploads = 0
 
+[sflphone-lucid]
+fqdn = ppa.launchpad.net
+method = ftp
+incoming = ~savoirfairelinux/sflphone-testing/ubuntu/lucid
+login = anonymous
+allow_unsigned_uploads = 0
+
 [sflphone-nightly-jaunty]
 fqdn = ppa.launchpad.net
 method = ftp
diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/changelog b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/changelog
index e368436b93aa5b42f1181e9c9e4022ec9e0f929f..23510a03d7a2e4ceae2c28fb88258277cb08db73 100644
--- a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/changelog
+++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/changelog
@@ -1,3 +1,10 @@
+mozilla-telify-sflphone (1.0) unstable; urgency=low
+
+  [ Julien Bonjean ]
+  * Package update
+
+ -- Julien Bonjean <julien.bonjean@savoirfairelinux.com>  Fri, 21 Avr 2010 19:51:54 +0100
+
 mozilla-telify-sflphone (0.4.7.3) unstable; urgency=low
 
   [ Julien Bonjean ]
diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/files b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/files
index 8ebe49a9909755509943dd3161a8cb96e3acf7ec..320b727519610179c97214659e4e3be20f8cebc3 100644
--- a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/files
+++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/files
@@ -1 +1 @@
-mozilla-telify-sflphone_0.4.7.3_all.deb web optional
+mozilla-telify-sflphone_1.0_all.deb web optional
diff --git a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/rules b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/rules
index 0e8b875eb41ef0f3b085984d5b6f7cdde67c6181..8522b9ee026d450490d0168c1db7a97a389fa2e2 100755
--- a/tools/build-system/launchpad/mozilla-telify-sflphone/debian/rules
+++ b/tools/build-system/launchpad/mozilla-telify-sflphone/debian/rules
@@ -3,7 +3,7 @@
 # Uncomment this to turn on verbose mode.
 export DH_VERBOSE=1
 
-VERSION="0.4.7.3"
+VERSION="1.0"
 
 configure: configure-stamp
 configure-stamp:
diff --git a/tools/build-system/launchpad/sflphone-client-gnome/debian/control.karmic b/tools/build-system/launchpad/sflphone-client-gnome/debian/control.karmic
index c72878afda415cff757f8bb6da1167c5d431544f..53b4e025bbfa95a8a182b9feb2a54e2ba055cab6 100644
--- a/tools/build-system/launchpad/sflphone-client-gnome/debian/control.karmic
+++ b/tools/build-system/launchpad/sflphone-client-gnome/debian/control.karmic
@@ -2,13 +2,13 @@ Source: sflphone-client-gnome
 Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
 Section: gnome
 Priority: optional
-Build-Depends: debhelper, libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev, libgnomeui-dev, gnome-doc-utils, rarian-compat
+Build-Depends: debhelper, libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev, libgnomeui-dev, gnome-doc-utils, rarian-compat, libwebkit-dev
 Standards-Version: 3.7.3
 
 Package: sflphone-client-gnome
 Priority: optional
 Architecture: any
-Depends: sflphone-common (=${source:Version}), libdbus-glib-1-2, libgtk2.0-0, libc6, libglib2.0-0, libdbus-glib-1-2, libnotify1, librsvg2-common, liblog4c3, libebook1.2-9, libgnomeui-0
+Depends: sflphone-common (=${source:Version}), libdbus-glib-1-2, libgtk2.0-0, libc6, libglib2.0-0, libdbus-glib-1-2, libnotify1, librsvg2-common, liblog4c3, libebook1.2-9, libgnomeui-0, libwebkit-1.0-2
 Replaces: sflphone
 Conflicts: sflphone
 Homepage: http://www.sflphone.org
diff --git a/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid b/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid
index c72878afda415cff757f8bb6da1167c5d431544f..53b4e025bbfa95a8a182b9feb2a54e2ba055cab6 100644
--- a/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid
+++ b/tools/build-system/launchpad/sflphone-client-gnome/debian/control.lucid
@@ -2,13 +2,13 @@ Source: sflphone-client-gnome
 Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
 Section: gnome
 Priority: optional
-Build-Depends: debhelper, libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev, libgnomeui-dev, gnome-doc-utils, rarian-compat
+Build-Depends: debhelper, libgcc1, autoconf, automake, libtool, libgtk2.0-dev, libdbus-glib-1-dev, libnotify-dev, libebook1.2-dev, check, liblog4c-dev, libgnomeui-dev, gnome-doc-utils, rarian-compat, libwebkit-dev
 Standards-Version: 3.7.3
 
 Package: sflphone-client-gnome
 Priority: optional
 Architecture: any
-Depends: sflphone-common (=${source:Version}), libdbus-glib-1-2, libgtk2.0-0, libc6, libglib2.0-0, libdbus-glib-1-2, libnotify1, librsvg2-common, liblog4c3, libebook1.2-9, libgnomeui-0
+Depends: sflphone-common (=${source:Version}), libdbus-glib-1-2, libgtk2.0-0, libc6, libglib2.0-0, libdbus-glib-1-2, libnotify1, librsvg2-common, liblog4c3, libebook1.2-9, libgnomeui-0, libwebkit-1.0-2
 Replaces: sflphone
 Conflicts: sflphone
 Homepage: http://www.sflphone.org
diff --git a/tools/build-system/launchpad/sflphone-client-kde/debian/control.jaunty b/tools/build-system/launchpad/sflphone-client-kde/debian/control.jaunty
new file mode 100644
index 0000000000000000000000000000000000000000..a4e6a266195dad90c9132c41a8373ea5bf84ae16
--- /dev/null
+++ b/tools/build-system/launchpad/sflphone-client-kde/debian/control.jaunty
@@ -0,0 +1,20 @@
+Source: sflphone-client-kde
+Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
+Section: kde
+Priority: optional
+Build-Depends: debhelper, cmake, kdepimlibs5-dev, libcommoncpp2-dev, libqt4-dev
+Standards-Version: 3.7.3
+
+Package: sflphone-client-kde
+Priority: optional
+Architecture: i386
+Depends: sflphone-common (>=${source:Version}), libcommoncpp2-1.6-0, kdepimlibs5, libqt4-dbus, libqt4-svg, libqtgui4
+Replaces: sflphone
+Conflicts: sflphone
+Homepage: http://www.sflphone.org
+Description: KDE client for SFLphone
+ Provide a KDE client for SFLphone.
+ SFLphone is meant to be a robust enterprise-class desktop phone.
+ SFLphone is released under the GNU General Public License.
+ SFLphone is being developed by the global community, and maintained by
+ Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company.
diff --git a/tools/build-system/launchpad/sflphone-client-kde/debian/control.karmic b/tools/build-system/launchpad/sflphone-client-kde/debian/control.karmic
new file mode 100644
index 0000000000000000000000000000000000000000..a4e6a266195dad90c9132c41a8373ea5bf84ae16
--- /dev/null
+++ b/tools/build-system/launchpad/sflphone-client-kde/debian/control.karmic
@@ -0,0 +1,20 @@
+Source: sflphone-client-kde
+Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
+Section: kde
+Priority: optional
+Build-Depends: debhelper, cmake, kdepimlibs5-dev, libcommoncpp2-dev, libqt4-dev
+Standards-Version: 3.7.3
+
+Package: sflphone-client-kde
+Priority: optional
+Architecture: i386
+Depends: sflphone-common (>=${source:Version}), libcommoncpp2-1.6-0, kdepimlibs5, libqt4-dbus, libqt4-svg, libqtgui4
+Replaces: sflphone
+Conflicts: sflphone
+Homepage: http://www.sflphone.org
+Description: KDE client for SFLphone
+ Provide a KDE client for SFLphone.
+ SFLphone is meant to be a robust enterprise-class desktop phone.
+ SFLphone is released under the GNU General Public License.
+ SFLphone is being developed by the global community, and maintained by
+ Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company.
diff --git a/tools/build-system/launchpad/sflphone-client-kde/debian/control.lucid b/tools/build-system/launchpad/sflphone-client-kde/debian/control.lucid
new file mode 100644
index 0000000000000000000000000000000000000000..a4e6a266195dad90c9132c41a8373ea5bf84ae16
--- /dev/null
+++ b/tools/build-system/launchpad/sflphone-client-kde/debian/control.lucid
@@ -0,0 +1,20 @@
+Source: sflphone-client-kde
+Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
+Section: kde
+Priority: optional
+Build-Depends: debhelper, cmake, kdepimlibs5-dev, libcommoncpp2-dev, libqt4-dev
+Standards-Version: 3.7.3
+
+Package: sflphone-client-kde
+Priority: optional
+Architecture: i386
+Depends: sflphone-common (>=${source:Version}), libcommoncpp2-1.6-0, kdepimlibs5, libqt4-dbus, libqt4-svg, libqtgui4
+Replaces: sflphone
+Conflicts: sflphone
+Homepage: http://www.sflphone.org
+Description: KDE client for SFLphone
+ Provide a KDE client for SFLphone.
+ SFLphone is meant to be a robust enterprise-class desktop phone.
+ SFLphone is released under the GNU General Public License.
+ SFLphone is being developed by the global community, and maintained by
+ Savoir-faire Linux, a Montreal, Quebec, Canada-based Linux consulting company.
diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.jaunty b/tools/build-system/launchpad/sflphone-common/debian/control.jaunty
index 8700719c003eb8c46780ca12aa608dd1639490b2..246bf4f56ce832d182e0efab19ca6be01bcc3ecc 100644
--- a/tools/build-system/launchpad/sflphone-common/debian/control.jaunty
+++ b/tools/build-system/launchpad/sflphone-common/debian/control.jaunty
@@ -2,13 +2,13 @@ Source: sflphone-common
 Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
 Section: gnome
 Priority: optional
-Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev
+Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev, libyaml-dev
 Standards-Version: 3.7.3
 
 Package: sflphone-common
 Priority: optional
 Architecture: any
-Depends: libsamplerate0, libexpat1 , libc6, libcommoncpp2-1.6-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.6-1, libspeexdsp1, libzrtpcpp-1.3-0, libssl0.9.8, libpcre3
+Depends: libsamplerate0, libexpat1 , libc6, libcommoncpp2-1.6-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.6-1, libspeexdsp1, libzrtpcpp-1.3-0, libssl0.9.8, libpcre3, libyaml-0-2
 Replaces: sflphone
 Conflicts: sflphone
 Homepage: http://www.sflphone.org
diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.karmic b/tools/build-system/launchpad/sflphone-common/debian/control.karmic
index 177306ed35bf7cae2a8d1f2e7bc03a3772cc24c9..9b1561ed747d9add075108e2345cfbc87df06df3 100644
--- a/tools/build-system/launchpad/sflphone-common/debian/control.karmic
+++ b/tools/build-system/launchpad/sflphone-common/debian/control.karmic
@@ -2,13 +2,13 @@ Source: sflphone-common
 Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
 Section: gnome
 Priority: optional
-Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev
+Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev, libyaml-dev
 Standards-Version: 3.7.3
 
 Package: sflphone-common
 Priority: optional
 Architecture: any
-Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3
+Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3, libyaml-0-2
 Replaces: sflphone
 Conflicts: sflphone
 Homepage: http://www.sflphone.org
diff --git a/tools/build-system/launchpad/sflphone-common/debian/control.lucid b/tools/build-system/launchpad/sflphone-common/debian/control.lucid
index 177306ed35bf7cae2a8d1f2e7bc03a3772cc24c9..9b1561ed747d9add075108e2345cfbc87df06df3 100644
--- a/tools/build-system/launchpad/sflphone-common/debian/control.lucid
+++ b/tools/build-system/launchpad/sflphone-common/debian/control.lucid
@@ -2,13 +2,13 @@ Source: sflphone-common
 Maintainer: SavoirFaireLinux Inc <julien.bonjean@savoirfairelinux.com>
 Section: gnome
 Priority: optional
-Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev
+Build-Depends: debhelper, libgcc1 , autoconf, automake, libpulse-dev, libsamplerate0-dev, libcommoncpp2-dev, libccrtp-dev, libgsm1-dev, libspeex-dev, libtool, libdbus-1-dev, libasound2-dev, libspeexdsp-dev, uuid-dev, libexpat1-dev, libzrtpcpp-dev, libssl-dev, libpcre3-dev, libyaml-dev
 Standards-Version: 3.7.3
 
 Package: sflphone-common
 Priority: optional
 Architecture: any
-Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3
+Depends: libsamplerate0, libexpat1 , libc6, libccgnu2-1.7-0, libgsm1, libspeex1, libdbus-1-3, libasound2, libpulse0, libccrtp1-1.7-0, libspeexdsp1, libzrtpcpp-1.4-0, libssl0.9.8, libpcre3, libyaml-0-2
 Replaces: sflphone
 Conflicts: sflphone
 Homepage: http://www.sflphone.org
diff --git a/tools/ini2yaml.py b/tools/ini2yaml.py
new file mode 100644
index 0000000000000000000000000000000000000000..532f5fff3136a6f8bbc04b585a926a2308fd1dbb
--- /dev/null
+++ b/tools/ini2yaml.py
@@ -0,0 +1,176 @@
+import os
+import yaml
+from ConfigParser import ConfigParser as cp
+
+# path = os.environ['HOME'] + "/.config/sflphone/sflphonedrc"
+path = "sflphonedrc"
+c = cp()
+c.read(path)
+accnodes = ['srtp', 'tls', 'zrtp']
+auxnodes = ['alsa', 'pulse', 'dtmf']
+dico = {}
+dico['Accounts'] = []
+
+
+conversion = {
+
+	# addressbook
+	'addressbook': 'addressbook',
+	'contact_photo': 'photo',
+	'enable': 'enabled',
+	'max_results': 'maxResults',
+	'phone_business': 'business',
+	'phone_home': 'photo',
+	'phone_mobile': 'mobile',
+
+	# audio
+	'audio': 'audio',
+	'cardid_in': 'cardIn',
+	'cardid_out': 'cardOut',
+	'cardid_ring': 'cardRing',
+	'framesize': 'frameSize',
+	'plugin': 'plugin',
+	'samplerate': 'smplRate',
+	'deviceplayback': 'devicePlayback',
+	'devicerecord': 'deviceRecord',
+	'deviceringtone': 'deviceRingtone',
+	'path': 'recordPath',
+	'ringchoice': 'ringtonePath',
+	'micro': 'volumeMic',
+	'speakers': 'volumeSpkr',
+
+	# hooks
+	'hooks': 'hooks',
+	'iax2_enabled': 'iax2Enabled',
+	'phone_number_add_prefix': 'numberAddPrefix',
+	'phone_number_enabled': 'numberEnabled',
+	'sip_enabled': 'sipEnabled',
+	'url_command': 'urlCommand',
+	'url_sip_field': 'urlSipField',
+
+	# general preference
+	'preferences': 'preferences',
+	'order': 'order',
+	'api': 'audioApi',
+	'display': 'searchBarDisplay',
+	'limit': 'historyLimit',
+	'mails': 'notifyMails',
+	'zonetonechoice': 'zoneToneChoice',
+	'portnum': 'portNum',
+	'md5hash': 'md5Hash',
+
+	# voip link
+	'voiplink': 'voipPreferences',
+	'playdtmf': 'playDtmf',
+	'playtones': 'playTones',
+	'pulselength': 'pulseLength',
+	'senddtmfas': 'dtmfType',
+	'symmetric': 'symmetric',
+	'zidfile': 'zidFile',
+
+	# account
+	'ip2ip': 'IP2IP',
+	'alias': 'alias',
+	'displayname': 'displayName',
+	'localinterface': 'interface',
+	'localport': 'port',
+	'publishedaddress': 'publishAddr',
+	'publishedport': 'publishPort',
+	'publishedsameaslocal': 'sameasLocal',
+	'activecodecs': 'codecs',
+	# srtp
+	'enable': 'enable',
+	'keyexchange': 'keyExchange',
+	'rtpfallback': 'rtpFallback',
+	# stun
+	'enable': 'stunEnabled',
+	'server': 'stunServer',
+	# tls
+	'certificatefile': 'certificate',
+	'certificatelistfile': 'calist',
+	'ciphers': 'ciphers',
+	'enable': 'enable',
+	'listenerport': 'tlsPort',
+	'method': 'password',
+	'negotiationtimemoutmsec': '',
+	'negotiationtimeoutsec': 'timeout',
+	'password': 'password',
+	'privatekeyfile': 'privateKey',
+	'requireclientcertificate': 'requireCertif',
+	'servername': 'server',
+	'verifyclient': 'verifyClien',
+	'verifyserver': 'verifyServer',
+	# zrtp
+	'displaysas': 'displaySAS',
+	'displaysasonce': 'displaySasOnce',
+	'hellohashenable': 'helloHashEnable',
+	'notsuppwarning': 'notSuppWarning',
+
+	# to be removed
+	'listenerport': 'port',
+}
+# parcourt des sections du fichier d'origine
+for sec in c.sections():
+    # les comptes sont maintenant dans une liste de comptes
+    if 'Account' in sec or sec == 'IP2IP':
+        dsec = 'Accounts'
+        # dict temporaire pour insertion ulterieure des comptes dans le dictionnaire
+        daccount = {}
+        daccount['id'] = sec
+        # dict temporaire pour insertion ulterieure des nodes dans le compte
+        subdic = {}
+        # preparation du dictionnaire pour les nodes du compte
+        for x in accnodes:
+            subdic[x] = {}
+        # parcourt des options
+        for opt in c.options(sec):
+            spl = opt.split('.')
+            # si nous avons affaire a un node
+            if spl[0] in accnodes:
+                # on ajoute dans le sous dict du compte
+                print spl[1]
+		subdic[spl[0]][conversion[spl[1]]] = c.get(sec, opt)
+            # sinon l'option est attachee au compte
+            else:
+                daccount[spl[len(spl) -1]] = c.get(sec, opt)
+        # insertion des nodes dans le compte
+        for x in accnodes:
+            daccount[x] = subdic[x]
+        #insertion du compte dans le dictionnaire principal
+        dico[dsec].append(daccount)
+    else:
+        dsec = sec
+        dico[dsec] = {}
+        #print dsec
+        #for opt in c.options(sec):
+        #    dico[dsec][opt] = c.get(sec, opt)
+        #    print opt 
+        subdic = {}
+        # preparation du dictionnaire pour les nodes de la section
+        for x in auxnodes:
+            subdic[x] = {}
+        # parcourt des options
+        for opt in c.options(sec):
+            spl = opt.split('.')
+            # si nous avons affaire a un node
+            if spl[0] in auxnodes:
+                # on ajoute dans le sous dict du compte
+		print spl[1]
+                subdic[spl[0]][conversion[spl[1]]] = c.get(sec, opt)
+            # sinon l'option est attachee au compte
+            else:
+                dico[sec][spl[len(spl) -1 ]] = c.get(sec, opt)
+        # insertion des nodes dans le compte
+            for x in auxnodes:
+                if subdic[x]:
+                    dico[sec][x] = subdic[x]
+
+
+f = open('blah.yml', 'wr')
+f.write(yaml.dump(dico, default_flow_style=False))
+f.close()
+
+#Addressbook: ajouter 'list': None
+#Rings.ringChoice ringsringChoice
+# dictionnaires:
+# alsa, accounts, 
diff --git a/tools/mozilla-telify-sflphone/telify-0.4.7.3-fx.xpi b/tools/mozilla-telify-sflphone/telify-1.0-fx.xpi
similarity index 83%
rename from tools/mozilla-telify-sflphone/telify-0.4.7.3-fx.xpi
rename to tools/mozilla-telify-sflphone/telify-1.0-fx.xpi
index ec1eff1fe541400731f1b2e5b6e33a30c8cd9a4a..8df2b63f5b8622d44eac232ed72b6d7699e54f23 100644
Binary files a/tools/mozilla-telify-sflphone/telify-0.4.7.3-fx.xpi and b/tools/mozilla-telify-sflphone/telify-1.0-fx.xpi differ
diff --git a/tools/vm/Ubuntu-10.04-i386-on-KVM.xml b/tools/vm/Ubuntu-10.04-i386-on-KVM.xml
new file mode 100644
index 0000000000000000000000000000000000000000..089dee1907b00f867387446f79ed969fb9a4d94c
--- /dev/null
+++ b/tools/vm/Ubuntu-10.04-i386-on-KVM.xml
@@ -0,0 +1,23 @@
+<domain type='kvm'>
+  <name>Ubuntu-10.04-i386-on-KVM</name>
+  <description>Virtual machine to test SFLphone compilation</description>
+  <memory>524288</memory>
+  <vcpu>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+  </os>
+  <devices>
+    <emulator>usr/bin/kvm</emulator>
+    <disk type='file' device='disk'>
+      <source file='/home/msavard/Development/vm/firstvm/vm0-ubuntu-10.04.1-desktop-i386.qcow2'/>
+      <target dev='hda'/>
+    </disk>
+    <interface type='network'>
+      <source network='default'/>
+    </interface>
+    <graphics type='vnc' port='-1'/>
+  </devices>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>restart</on_crash>
+</domain>
diff --git a/tools/vm/deploy_vm.sh b/tools/vm/deploy_vm.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4f566c33dc792c5835a3422e216c7d7800cb8355
--- /dev/null
+++ b/tools/vm/deploy_vm.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+
+# Requirements:
+
+# 1) apt-get install kvm virsh
+
+# 2) Make sure kvm and kvm_intel are installed
+# lsmod | grep kvm
+
+# 3) Get a .iso file for the coresponding distro
+
+# 4) Install a new VM on a disk image
+# kvm-img create vm0-ubuntu-10.04.1-desktop-i386.qcow2 -f qcow2 6G
+# kvm -k en-us -usbdevice tablet -hda vm0-ubuntu-10.04.1-desktop-i386.qcow2 -cdrom ubuntu-10.04.1-desktop-i386.iso -boot d -m 512
+# kvm -k en-us -usbdevice tablet -hda vm0-ubuntu-10.04.1-desktop-i386.qcow2 -cdrom ubuntu-10.04.1-desktop-i386.iso -boot c -m 512
+
+# 5) Create the VM
+# virsh -c qemu:///system define Ubuntu-10.04-i386-on-KVM.xml
+
+# 6) Copy Host's public ssh key in order to avoid password request
+# ssh-copy-id sflphone@machine
+
+# 7) Take a snapshot of this disk image
+# kvm-img snapshot -c tag_name disk_image_filename
+
+# 8) Add NOPASSWORD in sudoers
+
+VM=Ubuntu-10.04-i386-on-KVM
+
+VIRSH="virsh -c qemu:///system"
+
+# Get the full path to vm's 
+DISK_IMG=$($VIRSH dumpxml "${VM}"|grep source.file|cut -d"'" -f2)
+echo "Disk Image: $DISK_IMG"
+# Get MAC address for this vm
+MAC_ADDR=$($VIRSH dumpxml "${VM}"|grep mac.address|cut -d"'" -f2)
+echo "Mac Address: $MAC_ADDR"
+
+# Reset disk to last snapshot
+LAST_SNAPSHOT_ID=$(kvm-img snapshot -l $DISK_IMG|tail -n 1|cut -d' ' -f1)
+kvm-img snapshot -a $LAST_SNAPSHOT_ID $DISK_IMG
+
+# Create VM
+$VIRSH start $VM
+
+# Get its IP address
+echo -n "Waiting for IP address..."
+LAST_STAMP=$(grep $MAC_ADDR /var/lib/misc/dnsmasq.leases | cut -d' ' -f1)
+while [ 1 ]
+do
+  NEXT_STAMP=$(grep $MAC_ADDR /var/lib/misc/dnsmasq.leases | cut -d' ' -f1)
+  if [ $LAST_STAMP != $NEXT_STAMP ]; then
+    IPADDR=$(grep $MAC_ADDR /var/lib/misc/dnsmasq.leases | cut -d' ' -f3)
+    break
+  fi
+  echo -n "."
+  sleep 0.5
+done
+echo " got $IPADDR"
+
+HOST=sflphone@$IPADDR
+
+# Connect ssh
+echo -n "Waiting for ssh to start..."
+while [ 1 ]; do
+  ssh $HOST echo Connected && break
+  sleep 2
+done
+
+# create an archive of the repository
+# git archive --format=tar -o sflphone.tar HEAD
+# gzip sflphone.tar
+# scp -C sflphone.tar.gz $HOST
+
+# sudo add-apt-repository ppa:savoirfairelinux
+
+# sudo apt-get build-dep sflphone-common
+# sudo apt-get build-dep sflphone-client-gnome
+
+
+
+